ChangeLog for EDGE 1.31Type: Full Release
Date: AUGUST 2008
Bugs fixed: + glitches/small gaps between polygons are fixed. + crash with Scuba Steve's flamethrow DEH patch. + Boom generalised linetypes were not saved in savegames. - fixed firing rate of Super Shotgun (was too slow). - fixed attack range of hit-scan weapons. - ID(K)FA cheats now give clip weapons full ammo. - fixed problem saving the 'mipmapping' setting. - custom sky-boxes should always be used when present. - fix for filenames (like "foo.bar.wad") containing two dots. - proper test for existing titlepics in GAMES.DDF. - fixed console PLAYSOUND command when sound is not found. - no sprite check for spawned map-things (easier debugging). - fixed badly synchronised flash state of Super Shotgun. - prevent blood splats when Demon attacks a GOD-mode player. - allow binding of DELETE key (distinct from BACKSPACE). - close-wait-open linetypes were not waiting, fixed.
General improvements: + music now supported on Linux via the Timidity MIDI player library. This can also be used on WIN32 instead of the native MIDI system -- see the Sound Options menu. + good emulation of DOOM's Partial-Invisibility effect. + new method to emulate DOOM's lighting model. + new dynamic lighting code. The old way would split polygons into small pieces which caused a lot of glitches. The new way uses the method of rendering a light texture into the level. The 'DLIGHT.INTENSITY' has been replaced with 'DLIGHT.RADIUS' which is the furthest distance that a light can reach (every wall and thing beyond that distance is unaffected by it). The "QUADRATIC" and "LINEAR" types have been replaced with 'MODULATE' (similar to the old way, the light is multiplied with the wall texture) and 'ADD' which simply adds the light to the texture. There is a new command: DLIGHT.LEAKY=TRUE which causes the light to affect all surfaces. Normally a light will not affect a surface that the light is behind. Lastly there is support for a secondary dynamic light using the 'DLIGHT2' prefix (e.g. DLIGHT2.RADIUS, DLIGHT2.COLOUR etc...) This of course will be twice as slow, so use sparingly! Example of the new syntax: DLIGHT.TYPE=ADD; DLIGHT.RADIUS=400; DLIGHT.COLOUR=#FF5500; DLIGHT.LEAKY=TRUE; + improved sky emulation, replacing all the 'SKY STRETCH' options with a single mode based on the old MIRROR mode, but tweaked for better compatibility with existing DOOM skies. The old ORIGINAL mode now kicks in automatically when MLOOK is disabled. - new "H.Q.2x Scaling" option in the Video Options menu. - new "Invulnerability" option in the Video Options menu. - a working HOST-GAME menu which allows you to start deathmatch games with Bots. There's also a new Team-Damage setting and basic skill levels for the Bots. - better gamma handling (now done by the video driver). - more robust emulation of the flat-flooding trick. - improved, more consistent handling of alpha channels. - thin sliding doors can be activated remotely. - better way to gauge the player's actual speed. - sped up turning for path-following monsters. - players will jump out of water at the edge. - new -fullbright option for debugging. - merged JUMP and MOVE-UP into a single key. - nicer looking console (better font, colors). - better keyboard controls menu. - console key is configurable.
Features removed: - demo support (playback and recording) was removed. - CD Music playback (via PLAYLIST.DDF) was removed, since that code caused a total lack of sound under Windows Vista. - the old shadows feature (which never looked particularly good) did not survive an overhaul of the rendering code. - removed the LZO library. This means very old savegames won't work. Savegames made with EDGE 1.29 should be fine.
New Features: + MD2 models (from Quake 2) are now supported for map things and player weapons. Any state frame can specify a model by using the special '@123' or '@framename' syntax for the frame (instead of a letter). The number is the absolute frame number in the MD2 model, beginning at 1, or you can use the frame name. Examples: STATES(IDLE)=TROO:@5:7:NORMAL:NOTHING; // the 5th frame STATES(IDLE)=TROO:@run3:7:NORMAL:NOTHING; // frame called "run3" The model itself must be stored in a wad, and the lump name is the sprite base ("TROO") plus "MD2" on the end --> "TROOMD2". The skin of the model is the sprite base ("TROO") plus "SKN1" on the end --> "TROOSKN1". There should be a definition for it in IMAGES.DDF using the sprite namespace --> [spr:TROOSKN1]. Other skins can be used. The command "MODEL_SKIN=3" in a thing or weapon definition will use the third skin --> "TROOSKN3". Upto nine skins can currently be used (1 to 9). The skin can also be changed dynamically by using the SET_SKIN(##) action in the state frames. These extra commands can be used in THINGS.DDF: MODEL_SCALE=1.5; // draw the model bigger MODEL_ASPECT=0.7; // make the model fatter/skinnier MODEL_BIAS=24.0; // add this to every z coordinate These commands can be used in WEAPONS.DDF: MODEL_ASPECT=1.0; // make the weapon fatter/skinnier MODEL_BIAS=0.0; // add this to every z coordinate MODEL_FORWARD=2.2; // move the weapon forward/backward MODEL_SIDE=-3.5; // move the weapon right/left Note: there is no MODEL_SCALE command for WEAPONS.DDF (scaling has no effect because the model is drawn at the camera point). Changing MODEL_FORWARD, MODEL_SIDE and/or MODEL_BIAS can have a huge impact on the apparent size of the weapon. + Lua-scripted HUDS allow new status bars, automaps and other Head Up Display elements to be created by writing a script in the Lua programming language. See the Lua-HUD manual for full details. + Detail Slopes are a limited rendering-only form of slopes supported by EDGE 1.31, mainly useful for adding some detail your map. They work by putting a special linetype on the front linedef of a stair step, and that step will be sloped down to the lower floor (for ceilings, they slope up to the higher ceiling). The following Slope types are defined in EDGE.WAD:  : EDGE Detail Slope, FLOOR  : EDGE Detail Slope, CEILING  : EDGE Detail Slope, FLOOR+CEILING + mirrors are one-sided linedefs with a special linetype. They have a glassy look, and can be tinted with a color, plus they can reflect other mirrors (within reason). The sky is never flipped in mirrors, this is a limitation of the way EDGE handles skies and cannot be fixed. List of mirror linetypes now in EDGE.WAD:  : EDGE Mirror, Plain  : EDGE Mirror, White  : EDGE Mirror, Blue  : EDGE Mirror, Red  : EDGE Mirror, Green + portals are similar to mirrors: a one-sided line which pairs up with another one-sided line with the same tag, and each line renders the view through the partnering line. Both linedefs must be the same length and have sectors that are the same height (a little bit of leeway is permitted). To allow the player to cross portals, use a boom line-to-line teleporter (such as type 244) slightly in front of each portal line. Otherwise use a blockline linedef there since the portal lines themselves do not block players. Note that missiles and hitscan shots do not cross portals. Monsters and bots don't know about them and will not cross them deliberately and cannot see across them. Portal linetypes in EDGE.WAD:  : EDGE Portal, Dark 50%  : EDGE Portal, Light 30%  : EDGE Portal, Light 70%  : EDGE Portal, Blue 70%  : EDGE Portal, Green 70% + security cameras are portals which are one-way, and which allow shrinking the viewed area. The shrinking is done by using a short line for the "screen" side, and a long line for the "camera" side, as well as a height difference. For example, the light blue screens in the PortalDemo are 32x32, and their partner lines are 128x128. Security camera linetypes in EDGE.WAD:  : EDGE Camera Portal, Plain  : EDGE Camera Portal, White  : EDGE Camera Portal, Cyan  : EDGE Camera Portal, Rusty  : EDGE Camera Portal, Green + sector glow effects. Using one of these commands: GLOW_TYPE=FLOOR; GLOW_TYPE=CEILING; in conjunction with the DLIGHT commands means that the dynamic light is transformed into a floor or ceiling glow. The brightness and range of the lighting can be adjusted as per normal dynamic lights. The glow is limited to a single sector. The following new things are provided by EDGE.WAD:  : EDGE Nukage Glow  : EDGE Lava Glow  : EDGE Water Glow + support for OGG/Vorbis and WAV formats for SFX. Sounds can now be external files using the new FILE_NAME command in SOUNDS.DDF. + map support for placing things on Extrafloors. Bits 10-13 of the options field is used as a 4 bit number for the extrafloor to place the thing on. Zero means the lowest ground (same as before), 1 means the next extrafloor up, and so on... Note: the BOOM MTF_RESERVED flag (bit 8) must also be clear for this field to be considered valid and usable. + TGA images are now supported by IMAGES.DDF. + flat alignment/scaling linetypes have been added to EDGE.WAD. There are 3 basic types: Align + Rotate, Align + Rotate + Scale, and just Scaling. They can be applied to three areas: FLOOR, CEILING and FLOOR + CEILING. Finally you can use them either with a tag (all tagged sectors are changed) or without a tag (then the front or back sector of the linedef is changed). List of new types:  : Align and rotate front sector's FLOOR  : Align and rotate back sector's FLOOR  : Align and rotate front sector's CEILING  : Align and rotate back sector's CEILING  : Align and rotate front sector's FLOOR+CEILING  : Align and rotate back sector's FLOOR+CEILING  : Align, scale and rotate front sector's FLOOR  : Align, scale and rotate back sector's FLOOR  : Align, scale and rotate front sector's CEILING  : Align, scale and rotate back sector's CEILING  : Align, scale and rotate front sector's FLOOR+CEILING  : Align, scale and rotate back sector's FLOOR+CEILING  : Scale front sector's FLOOR  : Scale back sector's FLOOR  : Scale front sector's CEILING  : Scale back sector's CEILING  : Scale front sector's FLOOR+CEILING  : Scale back sector's FLOOR+CEILING - three new armour things were added to EDGE.WAD for people to use in their maps:  : PURPLE_ARMOUR  : YELLOW_ARMOUR  : RED_ARMOUR - two new key things were added to EDGE.WAD:  : GREEN_KEY  : GREEN_SKULLKEY - these locked door linetypes were also added to EDGE.WAD:  : EDGE Green Key DOOR - DR  : EDGE Green Key DOOR - D1  : EDGE Green Key DOOR - SR  : EDGE Green Key DOOR - S1  : EDGE Green Key BLAZING DOOR - D1  : EDGE Gold Key DOOR - DR  : EDGE Gold Key DOOR - D1  : EDGE Gold Key DOOR - SR  : EDGE Gold Key DOOR - S1  : EDGE Silver Key DOOR - DR  : EDGE Silver Key DOOR - D1  : EDGE Silver Key DOOR - SR  : EDGE Silver Key DOOR - S1  : EDGE Brass Key DOOR - DR  : EDGE Brass Key DOOR - D1  : EDGE Copper Key DOOR - DR  : EDGE Copper Key DOOR - D1  : EDGE Steel Key DOOR - DR  : EDGE Steel Key DOOR - D1  : EDGE Wooden Key DOOR - DR  : EDGE Wooden Key DOOR - D1  : EDGE Fire Key DOOR - DR  : EDGE Fire Key DOOR - D1  : EDGE Water Key DOOR - DR  : EDGE Water Key DOOR - D1 - some LADDER linetypes were added to EDGE.WAD:  : EDGE Ladder, 48 units high  : EDGE Ladder, 80 units high  : EDGE Ladder, 120 units high  : EDGE Ladder, 160 units high  : EDGE Ladder, 192 units high  : EDGE Ladder, 256 units high  : EDGE Ladder, 384 units high  : EDGE Ladder, 512 units high  : EDGE Ladder, 768 units high  : EDGE Ladder, no limit
DDF / RTS Goodies: + new WEAKNESS feature allows a monster to receive more damage from certain attacks than others. You can also specify a zone where the monster must be hit (when hit in other places, the weakness does not apply). The weakness zone can be a height range (in percentages) and/or an angle range (in degrees). The weakness feature requires 'WEAKNESS.CLASS' to be present, specifying what attack classes the monster is weak against. Note that it will also _override_ any IMMUNITY or RESISTANCE that the monster has (except for the INVULNERABLE special). The following example shows all the commands. Everything except 'WEAKNESS.CLASS' is optional. WEAKNESS.CLASS=ABC; WEAKNESS.HEIGHTS=75%:100%; WEAKNESS.ANGLES=150:210; WEAKNESS.MULTIPLY=3.0; WEAKNESS.PAINCHANCE=100%; When a thing is hurt via the weakness feature, it will try to enter 'WEAKPAIN' states, but if it doesn't have them then the normal PAIN states are used. When a thing is killed, it will try to enter 'WEAKDEATH' states, but if they don't exist then it will try OVERKILL states, and finally it falls back to the normal DEATH states. + BECOME action for THINGS.DDF allows a thing to turn into another type of thing. Can be used on players too. HEALTH and SIDE values remain the same. The new state frame can also be given (the default is IDLE:1). For example: BECOME(CACODEMON) BECOME(CACODEMON,CHASE:2) Note that becoming something larger (i.e. bigger RADIUS) can cause the thing to get stuck in walls or other objects. + armour association feature. When you pick up some armour, and the thing DDF uses the ARMOUR_PROTECTION command, then various properties are remembered for that color of armour. The new ARMOUR_PROTECTION command is the percentage of damage which is saved by the armour (100% for all) which overrides the default protection rates (e.g. BLUE_ARMOUR is normally 50%). Summary of armour-assocation commands: ARMOUR_PROTECTION=99%; // high protection ARMOUR_DEPLETION=10%; // low depletion rate ARMOUR_CLASS=B; // only protects against Bullets IMMUNITY_CLASS=C; // total protection from Close-Combat RESISTANCE_CLASS=M; // resistance against Missiles Note: ARMOUR_CLASS overrides the immunity/resistance classes, so the above example would fail to provide any immunity or resistance because 'C' and 'M' are not in ARMOUR_CLASS. - PURPLE armour was added, bringing the number of armours to 5. The default protection is 66%, and the layering order (from innermost to outermost) is: GREEN, BLUE, PURPLE, YELLOW, RED. - SIMPLE_ARMOUR special for armour pickups. It prevents the wacky Doom-emulation from kicking in. - SPAWN action is similar to DROPITEM action, but it doesn't force the object to be non-SOLID like DROPITEM does, plus the spawned object will have the same Angle and Side as the parent object. The name must be given in brackets, e.g. SPAWN(IMP). - INVULNERABLE special makes the thing completely immune to all attacks. There are also two new actions to dynamically change it: SET_INVULNERABLE and CLEAR_INVULNERABLE, which can be used to make monsters with blocking states (like the Centaurs in Hexen). - DLIGHT_COLOUR(#FF00FF) action will change the color of the dynamic light. Note: the secondary dlight, if used, is not affected. - for object brightness, LIT00 - LIT99 can be used in state frames where the keywords 'NORMAL' and 'BRIGHT' are used. This allows fine-grained control of dynamic lights. - new way to get FLAT lighting, which doesn't diminish by distance. The following command in GAMES.DDF enables flat lighting: LIGHTING=FLAT; The default is "DOOM". There is also a "DOOMISH" setting which is the same as DOOM but without the adjustment of walls that are purple horizontal or vertical. The previous method (LIGHTING command in LEVELS.DDF) has been removed. - SPLASH_SOUND command for SECTORS.DDF, which is played whenever a player enters the water. Requires the SWIM special. - FIX_TRANS=BLACKEN command for IMAGES.DDF which ensures that every completely transparent pixel (alpha=0) in the image is black. Useful for fixing the "white borders" problem. - the existing RESISTANCE_CLASS feature has been supplemented by a new RESISTANCE_MULTIPLY command which lets you control how much to multiply the damage caused. The default is 0.4 which matches the previously hard-coded value. Values over 1.0 can be used (makes it a weakness instead of resistance). Also RESISTANCE_PAINCHANCE can give a different (typically lower) chance of entering the pain states from a resisted attack. - VAMPIRE attack special and thing special (for monsters and players) which causes the inflictor of damage to gain the health from the damage done to the victim. The health/damage ratio is hard-coded as 25% for monsters and 50% for players. - CHECK_ACTIVITY action for players will cause the player to enter SWIM, FLY, or CLIMB states if the player is currently swimming, flying (jetpack) or climbing a ladder. Also JUMP states are entered when the player jumps. These new states are all optional. - SHARED_CLIP=TRUE for WEAPONS.DDF means that the primary and secondary attacks are using a single (shared) clip. Hence you cannot use SEC_AMMOTYPE, SEC_AMMOPERSHOT or SEC_CLIPSIZE commands when using SHARED_CLIP. There can only be a single reload animation (SECRELOAD states will be ignored). You should use SEC_SHOOT, SEC_REFIRE and SEC_NOFIRE actions in your SECATTACK states, and you may have SECFLASH states. - FLOOR.CRUSH_DAMAGE and CEILING.CRUSH_DAMAGE is the new and preferred way for making crushers in LINES.DDF. It gives the amount of damage when crushing (the rate of damage is still hard-coded to be every 4 tics). - Weapons.ddf: allow 'SEC_ATTACK' to mean 'SECOND_ATTACK' for consistency with all the other SEC_XXX commands. - Anims.ddf: new type "GRAPHIC" is now supported, which can animate graphics used for the UI (backgrounds, menus, hud). You need to use the SEQUENCE command (because FIRST/LAST doesn't make any sense for graphics), and the graphics must have the same size and X/Y offsets. - RTS: 'WHEN=xxx' tag for SPAWNTHING commands. - RTS: SECRET_EXIT command which is like EXIT_LEVEL but takes you to the secret level instead.