
      Contents of the d3caster package:
      =================================

com         -  Ogg Vorbis sound loader classes
pic256      -  Art Attack game images
snd         -  Art Attack game sound,
               both as .au for JDK1 and .ogg for JDK2.
               Search the web for "OggEnc",
               or Ogg Vorbis in general,
               about getting a free .wav to .ogg encoder.
stahlforce  -  game and engine source and classes
tools       -  image conversion tools, source and classes
aa.jar      -  game and engine classes again,
               packed together in one file
masks.jar   -  mask images, strictly required
               to be in a file "masks.jar".
               see tools/d3conv for more.

Batch files:
   do-convert-images.bat
   do-compile-all.bat
   do-run-local.bat

In short, the production process is like this:

   1. create some PNG images in rawpic/
      with a resolution of 256x256, truecolor,
      and alpha transparency. furthermore,
      the color white (0xFFFFFF) is also
      treated as being transparent.

   2. adapt and run "do-convert-images.bat",
      which creates processed images in pic256/,
      producing both .jpg and .zip files.
      this batch uses d3conv, and requires
      several Sun Java packages (J2SE, Advanced
      Imaging API, Advanced Imaging I/O Tools).
      -  the most important .jpg's are also placed
         within images.jar. these pictures are loaded
         first on startup, as fast as possible.
         for each image to load, d3caster will first look
         herein; if an image is not found, it's loaded 
         normally from pic256/. be aware:
         if you make images.jar too large, you end up
         with a long boring startup phase, if you make
         it too small or empty, image loading takes endless.
      -  all .zip's are placed within masks.jar,
         they are loaded just and only from there.

   3. rework the game sources, etc.

   3. run "do-compile-all.bat"
      which compiles all java classes,
      and packs them together in aa.jar.

gamelocal.html    -  a html for running the game
                     instantly by AppletViewer,
                     use do-run-local.bat to do so.
javapol.txt       -  needed by AppletViewr
gameonweb.html    -  a html for running the game
                     by browser, from a webserver


   =======================================================
   Art Attack - the demo game - supplied graphics overview
   =======================================================

All graphics were produced by StahlWorks Technologies
and are FREE for modification and redistribution.
Originally, all graphics are based on .PNG files,
which are converted by d3conv.java,
also supplied in this package. The results are always
groups of JPEG plus a .zip mask file, or just a JPEG file.
The .zip's must be packed again within masks.jar,
by a command like "jar cf masks.jar pic256\*.zip"

worldmap.gif      - the playfield map
// this is where the locations of every wall, robot,
// image etc. is encoded. every color code has a
// special meaning, see d3caster.java, genMap().
// this is a GIF because we need lossless compression.
// the map can be created/edited with every paint program,
// but you have to carefully check which palette entry
// you're using. many colors cannot be distinguished
// just by looking at them!

lightmap.jpg      - light map
// the light map's only purpose is to create permanent
// transitions between bright and dark, to make the ceiling
// look more interesting. It's purely random.

basetext00.jpg    - default texture for everything, before loaded

ceiltext00.jpg    - first   ceiling texture
ceiltext01.jpg    - seconds ceiling texture
floortext00.jpg   - first   floor texture
floortext01.jpg   - second  floor texture
floortext02.jpg   - third   floor texture

obj00.jpg      - a rocket. actually just a point,
obj00.zip        but we don't notice as it's moving fast.

// the following is an animated explosion, in 16 frames.
obj0100.jpg    - real graphical content for phase 0
obj0100.zip    - alpha transparency for phase 0
obj0101.jpg    - real graphical content for phase 1
obj0101.zip    - alpha transparency for phase 1
obj0102.jpg    - ... and so on ...
obj0102.zip

// a battle robot, a 22-frames animation.
obj0200.jpg    - this image is special, as all shades
obj0200.zip      of green will be treated like an
obj0201.jpg      active light source. read on in
obj0201.zip      d3caster.java, search for "ambient".
...
// see tryStepBot() in which order these frames
// are actually used.

obj0300.jpg    - grass in a concrete basement.
obj0300.zip      the only undestroyable obstacle.

// now follow all kinds of destroyable obstacles
obj0400.jpg    - flowers
obj0400.zip
obj0401.jpg    - table
obj0401.zip
obj0402.jpg    - vending machine
obj0402.zip
obj0403.jpg    - group of chairs
obj0403.zip
obj0404.jpg    - bonsai trees
obj0404.zip
obj0405.jpg    - a lamp
obj0405.zip
obj0406.jpg    - not used
obj0406.zip
obj0407.jpg    - not used
obj0407.zip

// if an object is displayed before it's
// texture (shape) is loaded, the following
// is displayed:
objbase00.jpg  - default shape for objects
objbase00.zip

// now follow "abstract art" wall segments
wallabs00.jpg  - walls are not transparent,
wallabs01.jpg    so no .zip is used, although
wallabs02.jpg    it may be generated by d3conv
...
wallabs29.jpg  // 27 to 29 not used

// now follow surreal art wall segments.
// note that the images are stretched
// horizontally according to the applet's
// resolution.
wallsur00.jpg
wallsur01.jpg
wallsur02.jpg
...
wallsur26.jpg

// now follow regular wall textures
walltext00.jpg - plain wall, no hit
walltext01.jpg - plain wall, with rocket hit
walltext02.jpg - second wall, no hit
walltext03.jpg - second wall, with rocket hit
walltext04.jpg - ditto
walltext05.jpg
walltext06.jpg - ditto
walltext07.jpg
walltext08.jpg - ditto
walltext09.jpg
walltext10.jpg - unused


============= a deeper discussion of worldmap.gif ================

The following lists all kinds of colors in the format rrggbb,
meaning red, green, and blue part, sometimes listed
as 2-digit hex, or 3-digit decimal value.

FF FF 00 (yellow)
   empty space in the playfield can either be inside a house,
   and thus have a ceiling, or outside, having blue sky.
   this state is changed by this color, applied from
   left to right. for example, the first pixels of a line
   are outside, with sky, then comes yellow, so suddenly,
   all further pixels to the right are inside, with a ceiling.

FF 00 FF (purple)
   a "congratulations, game finished!" area, the goal
   outside the gallery maze.

100 100 000 (darker yellow)
   empty space inside the house

00 00 00 (black)
   empty space outside the house

red <= 200, and green = 0, and blue <= 200, and red = blue
   as you see, this is a whole range of purple colors,
   each code identifying a decoration object,
   e.g. table, flowers, cola vending machine...

00 00 E0 (shade of blue)
   a bush in a pot, an undestroyable obstacle

00 00 FF (brightest blue)
   wall

00 00 100 (half-bright blue)
   a switchable wall image, or a wall with an image

00 00 101
   a reserved wall image, for mr. bigbot's portrait

00 00 A0 to 00 00 F0
   further wall image codes, possibly not used

FF 00 00 (brightest red)
   player's initial starting point

00 A0 00 to 00 FE 00 (shades of green)
   pixel of a battle area. for each area,
   a different color code must be used.
   for example,
   all pixels with color 00 FE 00 belong to area 0, 
   all pixels with color 00 FD 00 belong to area 1,
   and so on (green counting backwards).

A0 00 00 to FE 00 00 (shades of red)
   area announcement points. this is empty space,
   but when the player walks through, the name
   of the next area is shown. just like above,
   code FE 00 00 belongs to area 0,
   code FD 00 00 belongs to area 1, etc.

00 FF FF or 000 200 200
   a battle bot creation point.
   the surrounding area is scanned automatically,
   to determine where the bot belongs to.
   two kinds of bots exists: far- and near-distance bots.
   the far ones always shoot when player enters the area.
   the near ones simply wait until player comes close enough.
   if all far ones are killed, the near ones turn into far ones.

50 50 50
   the next pixel to the right of this pixel identifes
   an area, in which the light will be shut off.

150 150 150
   if placed within an area, this half-darkens the room.

100 100 100
   a respawn point. after being hit by a bot rocket,
   the player automatically respawns in the last area
   that he cleared successfully (if any). however,
   the restart point within this area must be marked.
   furthermore, we can select in which direction the player
   is looking on respawn. one pixel of 100 100 100 means up,
   two such pixels nearby means down.

200 0 200   flower pot
100 0 100   table
150 0 150   vending machine
151 0 151   chairs
152 0 152   bonsai trees

153 0 153   
   lamp. this is the only active light source object.
   if it's hit by a rocket, the light fades at that point.
   don't place more than 6 light sources per area,
   as this uses quite some performance.

Further detail infos are best looked up in:
d3caster.java, method genMap()

================== about Ogg Sound conversion ===============

The recommended process is as follows:

1. create some fx and music .wav files. usually, you will
   create them in highest quality, 44 kHz 16 bit.

2. to prepare them for d3caster,

   2.1. you have to convert them into a
        16-bit, signed, MONO .wav file

   2.2. you have to get OggEnc from the web, and type:
        oggenc --resample 32000 -q0 %1.wav

   2.3. place the resulting .ogg file into snd/
        and integrate it within d3sound2.java

   NOTE: if you try to Ogg-Encode a non-matching format,
         e.g. a STEREO wav, the Ogg Loader in d3sound2.java
         will fail, and produce a totally wrong sound.

================== about .au Sound conversion ===============

Any program capable of writing the correct sound format 
could do the job. The recommended process is as follows:

1. it is expected that you have your sounds
   in form of a 16-bit, signed, MONO .wav file

2. resample them to 8000 Hz.

3. with Goldwave, save them as ".au y-law" format.
   Do NOT save them as ".au Sun/Java" format,
   as this creates very low-quality sound.

