ChangeLog for EDGE 1.25-WIP

Type: WIP "Work in Progress" release

Date: FEBRUARY 19th 2001

Bugs fixed:

-  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 / Changed:

-  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).

-  removed the "SAVE" command in RTS, not useful, even dangerous.

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

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

-  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).

New Features:

-  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.