
CHANGELOG FOR 1.26 (since 1.24)
===============================

(updated AUGUST 17 2001)

(EDGE 1.25 was the WIP "Work in Progress" release, and those changes
 are included herein)

Bug fixes:
----------

-  improved keyboard/mouse handling under Win32.
-  a few issues with the Win32 console not updating correctly.
-  re-implemented MUS music under DOS and Win32.
-  fixed a problem with '-infight' and changing levels.
-  improved volume and panning for sounds under Win32.
-  an ugly effect of invisible extrafloors in 8 bit mode fixed.
-  weirdness using both mouse & keyboard in Linux/X is gone.
-  improved sprite drawing in TrueBSP renderer.
-  onesided lines with the TWOSIDED flag reduced to a warning.
-  linux sound code now plays non-11KHz sounds properly.
-  sound panning now works in the linux sound code.
-  fixed translucent + remapped sprites in TrueBSP code.
-  the "slide really fast along walls" bug fixed.
-  monsters can no longer see you behind a large (but 2S) wall.
-  "voodoo dolls" now work as they should.
-  the ugly cracks/lines on translucent water are now gone.
-  nailed down one slime-trail producing bug.
-  fixed GL weapon sprite when the light goggles are in effect.
-  monsters no longer get stuck on the edge of a rising lift.
-  fixed the medusa effect.
-  a bug making certain switches/doors really loud fixed.
-  fixed a bug allowing jumping really high out of water regions.
-  the player's initial health comes from DDF.
-  better detection of wads with missing nodes.
-  bouncing missiles now bounce off most 2S walls properly.
-  archviles can no longer raise monsters on unreachable extrafloors.
-  fixed a bug with TRACKER attacks that could crash EDGE.
-  fixed the bug not executing the first action in a DDF thing.
-  blockmap generation code no longer crashes on certain levels.
-  the infrared goggles powerup no longer overrides watery colmaps.
-  fixed some problems with looping sounds.
-  a problem when quickly mlooking up/down fixed.
-  the sound/music sliders in the main option menu now work properly.
-  single frames of a sprite can now exist in a PWAD.

Bugs since 1.25-WIP-1:
----------------------

-  fixed the extreme bobbing that was in the WIP-1.
-  bouncing objects in WIP-1 didn't enter bounce states -- fixed.
-  SINGLESIDED tag is now respected for bullet/missile activation.
-  fixed some possible crashes when using certain DDF actions.
-  some subtle DDF searching issues (e.g. CASTORDER) fixed.
-  removed a thin slither at the top of some weapons in GLEDGE.
-  fixed numerous problems with sprite scaling (both renderers).
-  flat-lighting weapon-too-dark problem in sofware mode fixed.
-  problems with continuous floors (e.g. end of MAP12) fixed.
-  DDF/RTS errors in win32 pop-up box now show full context.
-  infinite loop when no episodes are defined fixed.
-  fixed problem causing error with read-only IWADs.
-  bug with "ACTIVATE_LINETYPE 138" fixed.
-  thin horizontally sliding doors now work in GL.
-  fixed a bug not auto-aiming at monsters lower than you.
-  fixed monsters seeing you through thick extrafloors.
-  bug causing the wrong switches to light up sometimes fixed.
-  problems with some intermission screens (e.g. bunny) fixed.


Features removed:
-----------------

-  the NOAMMO attack special from DDF is gone.  It's only useful
   purpose was for ejecting shells, but the EJECT() code pointer
   is good for that (and doesn't use ammo).

-  the "SAVE" command in RTS, quite non-useful, even dangerous.

-  the "BITS" and "STEREO" commands from sounds.ddf.  They never did
   anything.

-  the colmap.ddf "NOSKY" special and "PRIORITY" command.

-  the "MISSILE" tag for the ACTIVATORS line in lines.ddf.  The rule
   now is that missiles can activate _any_ TYPE=SHOOT linedef (but
   only missiles from players can trigger player-only lines, etc).


Changes to existing features
----------------------------

-  RANDOMJUMP action has been removed.  The new JUMP() code pointer
   should be used instead, like this:

      TROO:A:5:NORMAL:JUMP(Label)      // jumps always to label
      TROO:A:5:NORMAL:JUMP(Label,50%)  // jumps randomly to label
 
   where Label is the name of a state, either a plain name like
   "CHASE", or a name followed by a ":" and a number like "IDLE:3".

-  the ALTERTRANSLUC, ALTERVISIBILITY, LESSVISIBLE and MOREVISIBLE
   actions have been replaced with new ones:

      TRANS_SET(30%)       : set it immediately to new value
      TRANS_FADE(95%)      : fades to new value over a second or two
      TRANS_MORE(10%)      : increase translucency
      TRANS_LESS(10%)      : decrease translucency
      TRANS_ALTERNATE(10%) : alternate between visible and invisible

   values range from 0% (invisible) to 100% (opaque).  The parameters
   are optional: for TRANS_SET, the default is 100%.  For TRANS_FADE,
   the default is 0%.  For the last three, the default is 5%.

   Note: TRANS_SET() and TRANS_FADE() can also be used in weapon
   frames.

-  the way damage (for attacks, etc) is expressed has changed.  The
   old ddf commands DAMAGE, DAMAGE_RANGE, DAMAGE_MULTI, plus the
   things.ddf counterparts (which begin with EXPLOD_ (and still do))
   have been replaced with the following:

     // simple damage, amount is constant (20)
     DAMAGE.VAL=20;

     // linear damage, amount is a random value in the range 10-40
     DAMAGE.VAL=10;
     DAMAGE.MAX=40;

     // weighted error damage, amount is a random value near the base
     // value (64), which can get as far away as the error value.  In
     // this example, the full range is 32-96, but values near 64 are
     // much more likely than values near 32 or 96.
     DAMAGE.VAL=64;
     DAMAGE.ERROR=32;

   and the other fields:

      DAMAGE.DELAY=10T;
         // delay time between applying damaging.  Only used for sector
         // damage (slime), where it replaces the old DAMAGETIME command.

      DAMAGE.PAIN_STATE=BURN_PAIN;
      DAMAGE.DEATH_STATE=DROWNED;
      DAMAGE.OVERKILL_STATE=ALL_CRISPY;
         // if the applied damage causes pain/death/overkill, and the
         // damaged thing has the state/label specified by these
         // commands, then those states are used instead of the default
         // ones.  This allows attacks, explosions and sector damage to
         // make their victims enter special states -- this could be
         // used, for example, to make monsters that go all crispy when
         // shot with a flamethrower, or players make a gurgling noise
         // when dying at the bottom of a slime-filled pit.

-  EXPLOD_DAMAGE is now spelled EXPLODE_DAMAGE.

-  SWITCH.DDF has been updated, firstly the SOUND command has been
   renamed to "ON_SOUND".  Secondly, there is a new "OFF_SOUND" that
   the switch makes when the button texture changed back (previously
   the off sound was hardcoded).  Thirdly, there is a new "TIME"
   command that specifies how long the button waits before changing
   back (defaults to 1 second).

-  the SOUND command in LINES.DDF and SECTORS.DDF has been renamed to
   "AMBIENT_SOUND", better describing what it does (starts an ambient
   sound).

-  the EXIT command in LINES.DDF and SECTORS.DDF has changed,
   acceptable values are now "NORMAL" and "SECRET".

-  LIGHT_PROBABILITY in LINES.DDF and SECTORS.DDF has been renamed to
   LIGHT_CHANCE and now takes a percentage value.

-  TRANSLUCENCY now takes a percentage value, from 0% to 100%.

-  EXTRAFLOOR_TRANSLUCENCY in lines.ddf should be replaced with the
   simpler TRANSLUCENCY.

-  the (rarely used) #XDEATH redirector is now #OVERKILL.

-  the [FUZZSHADOW] colourmap was renamed to just [FUZZY], and EDGE
   now requires a colourmap called [SHADOW].

-  weapons that contain PRIORITY=-1 (e.g. rocket launcher) should now
   have a normal priority value, and should be given the new command
   "DANGEROUS=TRUE".

-  the GIB command in DDF has been removed, in favour of using
   STATES(GIB).

-  the TAGGED_REPEATABLE command for RTS now accepts no parameters,
   which means infinite repeats and zero delay.


New features:
-------------

-  complete support for GL rendering.

-  support for playing MP3 music, both as external files and as lumps
   within a PWAD.  It is used via PLAYLIST.DDF with the new "MP3"
   music type, for example:

      [01] MUSICINFO=MP3:FILE:"DUHAST.MP3";

-  EDGE can now run in a window under Win32.

-  BeOS mouse support was improved.

-  supports "V2 GL Nodes" that glBSP 1.91 generates.  This should
   completely eliminate slimetrails for good.

-  new options for linux sound code:

      -freq <value>   Sets the desired sample rate of the sound card.
      -mono           Disables stereo sound.

-  new -version option, shows the version of EDGE and quits.

-  new -strict option.  Most problems in DDF/RTS no longer crash out
   with an error message, but display a warning instead.  This
   provides better backwards compatibility, since unknown commands
   will be ignored (with a warning).
   
   The -strict option makes EDGE do what it did before: crash out on
   the first DDF/RTS error.  Good for TC authors who want to catch
   every single mistake/problem that occurs.

-  new -nowarn option turns off warning messages.  When using a TC
   designed for an older version of EDGE, there may be a huge number
   of warnings.  This option can be used to prevent seeing them all.

-  new -noobsolete option turns off the messages when obsolete DDF or
   RTS commands are used.

-  new -blockmap option will generate the blockmap in EDGE instead of
   using the one in the PWAD.

-  automap colours can be controlled via COLMAP.DDF, the
   AUTOMAP_NORMAL entry is for the normal automap, and AUTOMAP_OVERLAY
   entry is for the overlaid version.

-  there are four new ammo types: PELLETS, NAILS, GRENADES, GAS.
   These names are fairly arbitrary -- use them for whatever you want.

-  Pseudo-Shadows, drawn under things.  Use the -shadows option to
   enable them.  They can be controlled in DDF either with the
   NOSHADOW special, or the SHADOW_TRANSLUCENCY command (which takes a
   percentage).  Shadows can be enabled/disabled on a level-by-level
   basis using the level specials "SHADOWS" and "NOSHADOWS".

-  Crouching (aka Ducking).  Uses the `Move Down' key.  The
   CROUCH_HEIGHT command in THINGS.DDF controls how low a player
   crouches.  The level special "NOCROUCHING" disables crouching for
   the level.

-  mipmapping in the software and GL renderers.  Use the -nomipmap
   option to turn it off, or change it in the Video option menu.  The
   software version is not optimal yet.  Note too that setting it to
   "TriLinear" in the GL version can produce strange results (seems to
   be a driver problem).

-  EDGE now contains a special cut-down version of GLBSP, and will
   build the GWA files automatically when they GL-Friendly nodes are
   absent.

-  support for an extra 8 sprite rotations.  A sprite with all 16
   rotations goes like this: 1,9,2,A,3,B,4,C,5,D,6,E,7,F,8,G.  Good
   for sprites where 8 rots aren't enough.  The old flipping thing
   will work with these too, e.g. TROOA9AG, TROOAAAF, TROOABAE,
   TROOACAD.


New DDF features:
-----------------

-  new STATS command for LEVELS.DDF, determines the type of stats
   shown in the intermission.  Possible values are "DOOM" (normal) and
   "NONE" (skips the stats altogether).  Other types may be added in
   the future.

-  new LIGHTING command for LEVELS.DDF determines the type of lighting
   used (TrueBSP only).  Possible values are "DOOM" (normal),
   "DOOMISH" (same as DOOM, but without the special effect on N/S/E/W
   walls), and "FLAT" for flat lighting (i.e. no distance-based
   shading).  Other types may be added in the future.

-  the RIDE_FRICTION command for THINGS.DDF determines how ridable an
   object is, 0.0 would make things (e.g. you) slip off right away, up
   to 1.0 which is perfect ridability.

-  new commands VIEW_HEIGHT and SHOT_HEIGHT for players in THINGS.DDF.
   They take percentages (of the full height), and control where the
   view is drawn from, and where bullet shots come from.

-  for WEAPONS.DDF, the "SHOW_CLIP=TRUE" command causes the ammo field
   in the status bar to show the current clip size, instead of the
   total ammo.

-  new DROPITEM() action for DDF for dropping stuff.  The name of the
   item to drop should be placed in the brackets.

-  scenery items can be made to block bullets, give them the
   BLOCK_SHOTS special.

-  new TUNNEL thing special, causes missiles to pass through enemies
   rather than blowing up on impact.  Still damaging them though, but
   only once.

-  monsters can be made immune to certain attacks.  

   Firstly, each attack can be given a "class", which is a letter from
   `A' to `Z', using the ATTACK_CLASS command.  Three classes are
   already used by EDGE: `M' is the default class for missiles, `B' is
   the default class for bullet attacks, and `C' is for close-combat
   attacks.

   Secondly, each monster can use the IMMUNITY_CLASS command to
   specify which attack classes it is immune to.  For example,
   IMMUNITY_CLASS=B would make the monster immune to all bullet
   weapons.  IMMUNITY_CLASS=M makes the monster immune to all the
   missiles.  The letters can be combined, e.g. IMMUNITY_CLASS=BM
   makes the monster (or player) immune to _both_ bullets and
   missiles -- you'd need the fist/chainsaw to kill it.

   Example: say you created a flame-thrower weapon.  You could put
   this in attacks.ddf:

      [FLAME_ATTACK]
      ...
      ATTACK_CLASS=F;  // `F' for Flames

   and then add this to the archvile in things.ddf:

      [ARCHVILE]
      ...
      IMMUNITY_CLASS=F;

   and voila, the archvile will be immune to the flamethrower.
   
-  arbitrary sounds can now be used in THINGS.DDF and WEAPONS.DDF.
   The PLAYSOUND() action takes the name of the sound in the brackets.
   The KILLSOUND() action will stop any currently played sound.

-  implemented thin horizontal sliding doors.  Thin means they are
   just a mid-masked texture on a two-sided linedef, but one that
   opens and closes.  The following commands are used in LINES.DDF:

      SLIDER.TYPE = LEFT;      // also RIGHT and CENTER
      SLIDER.SPEED = 2;        // open/close speed (distance per tic)
      SLIDER.PAUSE_TIME = 150T;   // time to pause after opening
      SLIDER.SEE_THROUGH = FALSE; // texture is see-through or not
      SLIDER.SFX_START = XXX;  // sound made when door starts moving
      SLIDER.SFX_OPEN = XXX;   // sound made while door opens
      SLIDER.SFX_CLOSE = XXX;  // sound made while door closes
      SLIDER.SFX_STOP = XXX;   // sound made when door stops moving

-  new ACTIVATE_SOUND command for LINES.DDF, when the line is
   activated then this sound is played.  If the line is a switch, then
   this command overrides the normal switch sound.

-  removed many hard-coded sounds.  The following new commands in
   GAMES.DDF are available:

      ACCEL_SOUND="SLOP";
      FRAG_SOUND="PLDETH";

   Plus the following new commands for players in THINGS.DDF:

      NOWAY_SOUND="NOWAY";
      OOF_SOUND="OOF";

-  user-defined states can now be used in DDF with the STATES()
   command, e.g.:

      STATES(FOO)=FOOJ:A:5:NORMAL:NOTHING,#FOO;

   This is mostly useful when combined with the JUMP() action, or when
   using damage overrides or THING_EVENT above.
   
-  new lines.ddf commands SECTOR_EFFECT and LINE_EFFECT, which take a
   comma-separated list of keywords that enable certain property
   transfers.  LINE_EFFECT is for line -> line effects, and
   SECTOR_EFFECT is for line -> sector effects.  The affected
   lines/sectors are those with the same tag as the special line.
   (See below about LINE_PARTS too).

   These commands are used for BOOM compatibility, the LINE_EFFECT
   keywords TRANSLUCENT, VECTOR_SCROLL and OFFSET_SCROLL handle
   linetypes #260, #254 and #255.  The SECTOR_EFFECT keywords
   LIGHT_FLOOR, LIGHT_CEILING, SCROLL_FLOOR, SCROLL_CEILING and
   PUSH_THINGS handle linetypes #213, #261, and #250 to #253.
 
-  New DDF thing actions for rotating and self-propulsion:

      FACE(angle)             // turn to face the absolute <angle>
      TURN(angle)             // turn by <angle> degrees
      TURN_RANDOM(angle)      // turn between 0 and <angle> degrees

      MLOOK_FACE(angle)       // mlook to the absolute <angle>
      MLOOK_TURN(angle)       // mlook turn by <angle> degrees

      MOVE_FWD(amount)        // move forwards/backwards by <amount>
      MOVE_RIGHT(amount)      // move right/left by <amount>
      MOVE_UP(amount)         // move up/down by <amount>
      STOP                    // stop moving

   The FACE and TURN action ideas were copied from MBF.  For all these
   actions, if the <angle> or <amount> is omitted, then 0 is used (not
   usually useful).  For the move actions, use a negative value to go
   the opposite way.
   
   NOTE: the amount in the move actions is a _momentum_ value, not a
   distance.  Objects that are not affected by friction or gravity
   will keep moving in the direction until they hit something solid or
   perform another movement action (e.g. STOP).


New RTS features:
-----------------

-  improved RTS tip system, with the following new commands:

      TIP_SLOT  <num>
      // Sets the current "slot" that future tip functions will use.
      // Each slot can display a single tip, but multiple slots can be
      // active at any one time.  Slots are numbered from 1 to 40,
      // where 1 is the default slot.  Slots 1 to 9 have fixed
      // properties and don't respond to the TIP_SET_XXX commands, use
      // slot 10 or greater if you want to set your own properties.

      TIP_SET_POS  <x>  <y>
      // Change the positioning for the current slot.  X and Y are
      // _percentages_ for the on-screen position.  Default position
      // is "50% 50%" which is the center of the screen.  For
      // graphical tips, X and Y specify the top/left corner position
      // of the image.

      TIP_SET_ALIGN  <alignment>
      // Change the alignmet, which must be either "CENTER" or "LEFT".
      // CENTER causes multi-line tips to be centered horizontally
      // (the default mode), and LEFT causes left alignment.  Text
      // tips are always centered vertically.

      TIP_SET_COLOUR  <colourmap>
      // Changes the colouring for the current slot.  The name must
      // refer to an entry in COLMAP.DDF, for example "TEXT_YELLOW".

      TIP_SET_TRANS  <translucency>  [ <time> ]
      // Changes the translucency for the current slot (which is
      // normally 100%, fully opaque).  It is a percentage from 0% to
      // 100%.  The second value is optional, and gives a time value,
      // causing the tip to fade towards the new translucency (e.g.
      // "5" for five second fade).

-  new RTS command for changing textures on lines or sectors.  It
   looks like this:

      CHANGE_TEX  <where>  <texname>  <tag>  [ <subtag> ]

   the `where' part is one of: RIGHT_UPPER, RIGHT_MIDDLE, RIGHT_LOWER,
   LEFT_UPPER, LEFT_MIDDLE, LEFT_LOWER (these change line textures),
   FLOOR or CEILING (for sector flats) or lastly SKY (for changing the
   sky texture).  The `texname' is the name of the texture or flat.
   The `tag' specified what tag the lines or sectors have, all
   lines/sectors with the same tag are affected.
   
   The optional `subtag' part allows more control over what is
   affected: for line changers, only the sidedefs whose sector has tag
   = subtag is changed.  For sector changers, only the sectors that
   border a line with tag = subtag are changed.
 
-  new RTS command THING_EVENT which makes all things that are within
   the radius go into a specified state.  It is used like this:

      THING_EVENT  <thing type>  <state>
   
   where the thing type can be a name (e.g. OUR_HERO) or a number
   (e.g. 3001).  The idea behind it is to allow "events" where
   certain scripted actions take place (e.g. to play out the story).

-  Rectangle Triggers are a new variation on Radius Triggers, where
   the trigger area can be a rectangle (e.g. wide horizontally and
   narrow vertically).  They are defined like this:
   
      RECT_TRIGGER  <x1>  <y1>  <x2>  <y2>  [ <z1>  <z2> ]
        ... normal scripting stuff ...
      END_RADIUSTRIGGER
   
   x1,y1 is the lower left corner (on the map) and x2,y2 is the upper
   right corner.  The height range z1,z2 is optional.

-  new PLAYSOUND_BOSSMAN command for RTS.  The sound is heard at full
   volume from any point on the map.  Takes the same parameters as
   the regular PLAYSOUND command.

-  new CHANGE_MUSIC command for RTS.  It takes a single parameter: a
   number which references an entry in PLAYLIST.DDF.


Features since 1.25-WIP-1:
--------------------------

-  Ladders.  They are linedef based, if you are sitting on a ladder
   linedef (two-sided line) and the heights match, then pressing
   MoveUp/Down lets you climb the ladder.  The following LINES.DDF
   command defines a ladder:

      LADDER.HEIGHT = 128;

   which gives the height of the ladder, which should match the
   texture used.  The ladder linetype should be a two sided line that
   has the same sector on both sides, and about 24 units away from the
   actual ladder texture.  Ladders normally start on the ground, but
   can be raised by setting the Y_OFFSET in the first sidedef.

-  MOVE_SECTOR and LIGHT_SECTOR RTS commands replace SECTORV/L.
   They take the same arguments, except that the sector number is a
   _tag_ number instead of an absolute sector reference.  This allows
   you to affect many sectors at once, and is more robust (sector
   numbers can change just by editing the level).

-  Support for both fullscreen mode and in-a-window mode.  The default is
   fullscreen.  The -windowed option and the -fullscreen option can be
   used to change it, as well as the "windowed" line in the EDGE.CFG
   file.  Changing it with the "Set Resolution" menu is not possible
   yet, but is planned.

-  Dithering for GLEDGE, with -dither option (or line in config file).
   Can give slight improvement in image quality (depending on driver).

-  New SEC_NOFIRE_RETURN action for weapons.ddf, works just like
   NOFIRE_RETURN but for the second attack.

-  The DEST_REF command for lines.ddf and sectors.ddf accepts an
   optional tag after the normal reference tag.  The optional tag is
   either "INCLUDE" or "EXCLUDE".  Examples:

      FLOOR.DEST_REF = LOSURROUNDINGFLOOR, EXCLUDE;
      CEIL.DEST_REF  = HISURROUNDINGFLOOR, INCLUDE;
   
   The INCLUDE tag means include the moving sector in the calculation,
   whereas the EXCLUDE tag means don't include it.  All the normal
   refs (HISURROUNDINGCEILING etc) have EXCLUDE by default, *except*
   LOSURROUNDINGFLOOR which (for compatibility) has INCLUDE by
   default.
 
-  New commands OTHER_REF and OTHER_OFFSET for lines.ddf and
   sectors.ddf.  These are just like the DEST_REF and DEST_OFFSET
   commands, but are used for CONTINUOUS floor/ceiling types and
   specify the other height that is moved to while bouncing up and
   down.  The default value keeps the normal DOOM behaviour.

-  New -hom command line option and `IDHOM' cheat code.  Shows HOM as
   areas of bright green (both renderers).

-  New DRAG command for LINES.DDF and SECTORS.DDF.  It is a companion
   for the GRAVITY, FRICTION and VISCOSITY commands.  DRAG means "air
   friction" -- it is how much objects get slowed down by the air when
   they are airborne (i.e. not touching the ground).  The default
   value (0.99) provides backwards compat.  Lower values (e.g.  0.91)
   makes liquids more "sticky".

-  New sector SPECIAL "SWIM".  When you're in such a sector or liquid,
   then it activates "swimming mode".  In swimming mode you can swim
   up/down, plus moving forwards swims in the MLOOK direction.  Also
   the jump key works differently.  For swimming mode to work well,
   the sectortype should a low GRAVITY value (e.g. 0), and have
   FRICTION and DRAG values the same and around 0.9 or so.  Viscosity
   is an optional extra :->.

-  Support for breathing under water.  The sector SPECIAL "AIRLESS"
   denotes the sector as not containing air, and while player is in
   it, they use up air in their lungs.  The things.ddf command
   LUNG_CAPACITY determines how long (seconds) the player can stay
   underwater before choking.  Choking is controlled by the
   CHOKE_DAMAGE command in things.ddf -- it sets the damage amount,
   delay and override pain/death states (See Damage system above).
   Default LUNG_CAPACITY is 20 seconds.

   When the player leaves the airless sector, they will usually gasp
   for air.  The new GASP_SOUND command specifies the sound, and
   GASP_START specifies a minimum time the player must be in the water
   before making the sound.  Default GASP_START is 2 seconds.

   There is a new powerup "SCUBA" that gives the player another source
   of air (e.g. oxygen tank).  While the powerup remains in effect,
   the player won't start choking.
 
   Finally, an air indicator is shown while the player is underwater.
   Twenty one patches are used: AIRBAR01, AIRBAR02, ..., AIRBAR21,
   They are placed on the screen just like weapon sprites.

-  The #CLEARALL directive can be used in DDF files.  It must occur
   after the <XXXX> file tag and before the first entry.  It will
   clear out all previous entries for that file type (e.g. THINGS).

   Mainly useful for TCs, and then mainly with the GAMES.DDF and
   WEAPONS.DDF files.

-  Ten new keys were added: GREENCARD, GREENSKULL, GOLDKEY, SILVERKEY,
   BRASSKEY, COPPERKEY, STEELKEY, WOODENKEY, FIREKEY and WATERKEY.
   That brings the total to 16.

-  Better compatibility with BOOM maps.  Use the -boom option or the
   "Boom Line/Sec Types" entry in the gameplay menu, which enables
   support for the BOOM generalised linetypes and sectortypes.  Not
   all of the features are supported, e.g. reversable stairs, and
   there are many bugs in the code.

   Disable this option when playing EDGE-designed maps and TCs,
   otherwise the BOOM sectortypes (and maybe linetypes) will interfere
   with any new ones defined in DDF.

-  New RTS command ONCONDITION, which is like ONDEATH and ONHEIGHT:
   the trigger will not run unless the condition is satisfied.  Used
   like this:

      ONCONDITION  <condition>

   Where condition is something that the player is holding or is
   doing.  It is one of these:
  
      HEALTH(num)
      BULLETS(num)        // and the other ammo names
      GREEN_ARMOUR(num)   // and the other armours
      KEY_BLUECARD        // and the other keys
      CHAINGUN            // and the other weapons
      POWERUP_PARTINVIS   // and the other powerups

      JUMPING     ATTACKING
      CROUCHING   RAMPAGING
      SWIMMING    USING

   The brackets on health, ammo and armour conditions are optional,
   when present they are a minimum needed, e.g. HEALTH(50) requires
   health 50 or higher to run.  Without the brackets, they mean "any
   above zero".

   Those words can be prefixed with "NOT_", which negates the
   condition, e.g. NOT_KEY_REDSKULL means that the trigger will only
   run when the player *doesn't* have the red skull key.

   Multiple ONCONDITION lines can be used in each trigger script, and
   they _all_ have to be satisfied before the trigger will run.

-  New RTS command RETRIGGER.  Can only be used in TAGGED_INDEPENDENT
   scripts, and causes the conditions that activated the trigger to
   be re-checked (possibly pausing the trigger again).  Most useful
   used at the bottom of a TAGGED_REPEATABLE sleep-less script.

-  New LOSE_BENEFIT command for things.ddf (pickups).  Like
   PICKUP_BENEFIT but the player _loses_ the items instead.

   Also, PICKUP_BENEFIT and LOSE_BENEFIT are available as RTS
   commands.  They take one parameter: the benefit to give the player
   or take away.

-  JUMP_DELAY command for things.ddf.  Determines how long soon after
   jumping the player can jump again.  Default: one second (previously
   hard-coded).

-  New LINE_EFFECT "LIGHT_WALL", works like the floor/ceiling lighting
   transfers, except that all lines with the same tag are affected:
   they will be lit using the tagging line's front sector properties.
   SCROLL_PARTS can be used to affect specific parts of tagged lines.

-  New LINE_PARTS command for lines.ddf.  Should be used with the
   LINE_EFFECT command, and gives fine-grain control on what parts
   of the wall(s) are affected.  Takes the same keywords as the
   SCROLL_PARTS command (e.g. "RIGHT_MIDDLE").
 
-  Dynamic lighting.  Currently this is GLEDGE only.  The following
   commands can be used in things.ddf and attacks.ddf to make an
   object throw light on neighbouring walls/floors/objects:

      DLIGHT.TYPE = QUADRATIC;   // "LINEAR" is the other type
      DLIGHT.INTENSITY = 300;    // higher is brighter
      DLIGHT.COLOUR = #FFFF00;   // colour of lighting, HTML format
    
   Note: objects must be in a BRIGHT state frame to light up stuff
   around them.  When in a NORMAL state frame, nothing happens.
   
   There are two DDF actions:

      DLIGHT_SET(amount)    // set the intensity to new value
      DLIGHT_FADE(amount)   // fade intensity over time to new value
    
   Dynamic lighting can be enabled or disabled through the Video
   Options menu, or by running EDGE with the -dlights option.


Work-in-Progress features:
--------------------------

(These are currently DISABLED)

-  TILESKY: new multi-layered scrolling 3D skies.

-  HALO stuff (aka coronas).

-  Elevators.  These move the floor and ceiling in perfect unison.
   The DDF for Elevators is very much in the same way as floors, with
   the following new commands:

      ELEVATOR.TYPE 
      ELEVATOR.SPEED_UP    ELEVATOR.SPEED_DOWN
      ELEVATOR.PAUSE_TIME  ELEVATOR.WAIT_TIME
      ELEVATOR.SFX_START   ELEVATOR.SFX_STOP
      ELEVATOR.SFX_UP      ELEVATOR.SFX_DOWN

