ChangeLog for EDGE 1.31
Type: Full ReleaseDate: 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:
[567] : EDGE Detail Slope, FLOOR
[568] : EDGE Detail Slope, CEILING
[569] : 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:
[462] : EDGE Mirror, Plain
[463] : EDGE Mirror, White
[464] : EDGE Mirror, Blue
[465] : EDGE Mirror, Red
[466] : 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:
[480] : EDGE Portal, Dark 50%
[481] : EDGE Portal, Light 30%
[482] : EDGE Portal, Light 70%
[483] : EDGE Portal, Blue 70%
[484] : 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:
[485] : EDGE Camera Portal, Plain
[486] : EDGE Camera Portal, White
[487] : EDGE Camera Portal, Cyan
[488] : EDGE Camera Portal, Rusty
[489] : 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:
[7041] : EDGE Nukage Glow
[7042] : EDGE Lava Glow
[7043] : 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:
[800] : Align and rotate front sector's FLOOR
[801] : Align and rotate back sector's FLOOR
[802] : Align and rotate front sector's CEILING
[803] : Align and rotate back sector's CEILING
[804] : Align and rotate front sector's FLOOR+CEILING
[805] : Align and rotate back sector's FLOOR+CEILING
[810] : Align, scale and rotate front sector's FLOOR
[811] : Align, scale and rotate back sector's FLOOR
[812] : Align, scale and rotate front sector's CEILING
[813] : Align, scale and rotate back sector's CEILING
[814] : Align, scale and rotate front sector's FLOOR+CEILING
[815] : Align, scale and rotate back sector's FLOOR+CEILING
[820] : Scale front sector's FLOOR
[821] : Scale back sector's FLOOR
[822] : Scale front sector's CEILING
[823] : Scale back sector's CEILING
[824] : Scale front sector's FLOOR+CEILING
[825] : Scale back sector's FLOOR+CEILING
- three new armour things were added to EDGE.WAD for people to
use in their maps:
[7031] : PURPLE_ARMOUR
[7032] : YELLOW_ARMOUR
[7033] : RED_ARMOUR
- two new key things were added to EDGE.WAD:
[7015] : GREEN_KEY
[7017] : GREEN_SKULLKEY
- these locked door linetypes were also added to EDGE.WAD:
[490] : EDGE Green Key DOOR - DR
[491] : EDGE Green Key DOOR - D1
[492] : EDGE Green Key DOOR - SR
[493] : EDGE Green Key DOOR - S1
[494] : EDGE Green Key BLAZING DOOR - D1
[580] : EDGE Gold Key DOOR - DR
[581] : EDGE Gold Key DOOR - D1
[582] : EDGE Gold Key DOOR - SR
[583] : EDGE Gold Key DOOR - S1
[584] : EDGE Silver Key DOOR - DR
[585] : EDGE Silver Key DOOR - D1
[586] : EDGE Silver Key DOOR - SR
[587] : EDGE Silver Key DOOR - S1
[588] : EDGE Brass Key DOOR - DR
[589] : EDGE Brass Key DOOR - D1
[590] : EDGE Copper Key DOOR - DR
[591] : EDGE Copper Key DOOR - D1
[592] : EDGE Steel Key DOOR - DR
[593] : EDGE Steel Key DOOR - D1
[594] : EDGE Wooden Key DOOR - DR
[595] : EDGE Wooden Key DOOR - D1
[596] : EDGE Fire Key DOOR - DR
[597] : EDGE Fire Key DOOR - D1
[598] : EDGE Water Key DOOR - DR
[599] : EDGE Water Key DOOR - D1
- some LADDER linetypes were added to EDGE.WAD:
[470] : EDGE Ladder, 48 units high
[471] : EDGE Ladder, 80 units high
[472] : EDGE Ladder, 120 units high
[473] : EDGE Ladder, 160 units high
[474] : EDGE Ladder, 192 units high
[475] : EDGE Ladder, 256 units high
[476] : EDGE Ladder, 384 units high
[477] : EDGE Ladder, 512 units high
[478] : EDGE Ladder, 768 units high
[479] : 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.