Skip to content

DDF Things

Lobo edited this page Jul 5, 2024 · 6 revisions

Stored in the DDFTHING data lump, or the things.ddf file.

DDFTHING allows you to define and modify all the creatures and objects in EDGE. Each entry consists of a unique name and mapnumber, enclosed in square brackets, followed by a series of commands that specify the characteristics of the object or monster. Both the name portion and the mapnumber should be unique and are included together in the square brackets at the beginning of the commands for that thing.

The map number is referred to from the map in the wadfile, or from an RTS script, whilst the name will be referred to in other DDF files where necessary e.g. spawner attacks.

Commands

The commands that can be used to specify properties of a thing are as follows:

COMMAND TYPE DESCRIPTION
ACTIVE_SOUND [sound] Sound made randomly while a thing is active.
AMBIENT_SOUND [sound] Sound made by action pointers MAKESOUND and MAKESOUNDRANDOM.
ARMOUR_CLASS [bitset] Gives protection against a corresponding attack class in ATTACKS.DDF There are 26 possible classes, A thru Z. Three are reserved: `M' is the default for missile attacks, `B' is the default ATTACK_CLASS for bullet/shot attacks, and `C' is the default for close-combat attacks. Examples: ARMOUR_CLASS=B; //only protects against bullets or ARMOUR_CLASS=CV; //protects against close attacks and attacks of a custom Attack_class V Note that ARMOUR_CLASS overrides the immunity/resistance classes.
ARMOUR_DEPLETION [percentage] How much armour will be lost in each hit. Armour depletion rate: how much of the absorbed damage eats up the armour (10% is low, 90% is high).
ARMOUR_PROTECTION [percentage] How much it protects. The percentage of damage which is saved by the armour: 100% full protection, 10% very little protection.
BLOOD [special] The name of a special sprite animation (defined in things.ddf) to play when a creature is hurt. Hence, different animations can be set to make different sized or coloured blood. By default it calls an object called BLOOD. All blood animations need at least 3 frames.
BOBBING [percentage] How much the player's head should bob up and down while walking
BOUNCE_SPEED [float] Speed object will retain after it has bounced. Where 1 is original speed and 0 is stopped dead.
BOUNCE_UP [float] Specifies how far an object bounces from the surface it strikes e.g. floor, ceiling etc. Default value is 0.5
CASTORDER [integer] The order this object appears in the cast list. (The cast list is the sequence that follows Doom2 MAP30).
CHOKE_DAMAGE.DELAY [tics] How often this creature takes damage due to choking.
CHOKE_DAMAGE.VAL [float] Simple damage value for when this creature is choking. It can also be combined with either the CHOKE_DAMAGE.MAX or CHOKE_DAMAGE.ERROR commands to allow a range of possible damage values.
CHOKE_DAMAGE.FLASH_COLOUR [colourmap] Allows a custom color to be used as the pain effect when a player is hit by choking damage.
CHOKE_DAMAGE.DEATH_STATE [state] What STATES this object should use if it dies from choking underwater. e.g. DEATHDROWN
CHOKE_DAMAGE.PAIN_STATE [state] What STATES this object should use if it is in pain because of choking underwater. E.g. PAINDROWN
CHOKE_DAMAGE.ERROR [float] When combined with the CHOKE_DAMAGE.VAL command this forces the choking damage to be calculated on a weighted average basis in the range from (CHOKE_DAMAGE.VAL - CHOKE_DAMAGE.ERROR) to (CHOKE_DAMAGE.VAL + CHOKE_DAMAGE.ERROR). The value for CHOKE_DAMAGE.ERROR should be less than the value for CHOKE_DAMAGE.VAL otherwise this won't work properly.
CHOKE_DAMAGE.MAX [float] When combined with the CHOKE_DAMAGE.VAL command this forces the choking damage to be calculated in the range from CHOKE_DAMAGE.VAL to CHOKE_DAMAGE.MAX. The value for CHOKE_DAMAGE.MAX should be more than the value for CHOKE_DAMAGE.VAL otherwise this won't work.
CHOKE_DAMAGE.OBITUARY [lang] Message shown when the player dies from choking underwater.
CHOKE_DAMAGE.DAMAGE_IF_BENEFIT [benefit] A list of benefits (separated by commas): Player will take choking damage if they have at least one of these benefits. See below for benefit format.
CHOKE_DAMAGE.DAMAGE_UNLESS_BENEFIT [benefit] A list of benefits (separated by commas): Player will take choking damage unless they have at least one of these benefits. See below for benefit format.
CLOSE_ATTACK [attack] Attack to use when attacking from close range.
CROUCH_HEIGHT [float] Height of the creature (player) when crouching.
DEATH_SOUND [sound] Sound made by action pointer MAKEDEATHSOUND.
DLIGHT.COLOUR [special] This value is the colour to use for any dynamic lighting associated with the object. It's value takes the form of three pairs of digits in hexadecimal e.g. #RRGGBB to specify the proportion of each of the three colours in the mix. So for example #FF0000 would be pure red, #990000 would be a darker red and #FFFFFF would be a bright white. Experimentation is probably the best way to find the colour you want.
DLIGHT.HEIGHT [percentage] Allows you to specify at which height within the object the light comes from. e.g. 0% at the foot, 50% midway (the default), 100% at the top of the head
DLIGHT.RADIUS [float] This value is the starting furthest distance that a light can reach (every wall and thing beyond that distance is unaffected by it) of the object. This can be modified as the object changes, using the [DLIGHT](#dlight) SET and FADE actions.
DLIGHT.INTENSITY [float] This value is the starting dynamic light intensity of the object. This can be modified as the object changes, using the [DLIGHT](#dlight) SET and FADE actions. **Depricated**: use DLIGHT.RADIUS instead.
DLIGHT.LEAKY [boolean] Normally a light will not affect a surface that is facing away from the light. Setting this to TRUE causes the light to affect all surfaces.
DLIGHT.TYPE [special] This value is the type of dynamic lighting to use for the object. Possible values are: MODULATE (light is multiplied with the wall texture), ADD (adds the light to the texture). Note: old QUADRATIC and LINEAR types have been depricated.
DLIGHT2.COLOUR [special] This value is the colour to use for any dynamic lighting associated with the object. It's value takes the form of three pairs of digits in hexadecimal e.g. #RRGGBB to specify the proportion of each of the three colours in the mix. So for example #FF0000 would be pure red, #990000 would be a darker red and #FFFFFF would be a bright white. Experimentation is probably the best way to find the colour you want.
DLIGHT2.HEIGHT [percentage] Allows you to specify at which height within the object the light comes from. e.g. 0% at the foot, 50% midway (the default), 100% at the top of the head
DLIGHT2.RADIUS [float] This value is the starting furthest distance that a light can reach (every wall and thing beyond that distance is unaffected by it) of the object. This can be modified as the object changes, using the [DLIGHT](#dlight) SET and FADE actions.
DLIGHT2.INTENSITY [float] This value is the starting dynamic light intensity of the object. This can be modified as the object changes, using the [DLIGHT](#dlight) SET and FADE actions. **Depricated**: use DLIGHT.RADIUS instead.
DLIGHT2.LEAKY [boolean] Normally a light will not affect a surface that is facing away from the light. Setting this to TRUE causes the light to affect all surfaces.
DLIGHT2.TYPE [special] This value is the type of dynamic lighting to use for the object. Possible values are: MODULATE (light is multiplied with the wall texture), ADD (adds the light to the texture). Note: old QUADRATIC and LINEAR types have been depricated.
DROPITEM [special] The thing dropped when the object dies. (usually ammo or a weapon).
EXPLODE_DAMAGE.DEATH_STATE [state] What STATES this object should use if it dies from explosion. E.g. DEATHDROWN
EXPLODE_DAMAGE.PAIN_STATE [state] What STATES this object should use if it is in pain because of explosions. e.g. PAINEXPLO
EXPLODE_DAMAGE.OVERKILL_STATE [state] What STATES this object should use if it is gibbed because of explosions.
EXPLODE_DAMAGE.VAL [float] Damage experienced if this object explodes. (e.g used for barrels).
EXPLODE_RADIUS [float] Normally the explosion radius is the same as the damage caused, but this command forces the explosion radius to a particular value (e.g. 200). The amount of damage is not affected.
EXTRA [special] Extra options to identify the object. Options used in QDoom include are LOOPING_SOUND and RAIN.
FALLING_SOUND [sound] Players only. Sound made when falling from a really great height.
FALLPAIN_SOUND [sound] Players only. Sound made when the player is hurt from a big fall.
FAST [float] Multiplier for nightmare mode and -fastparm.
FLOAT_SPEED [float] How fast a creature will float up or down. Can also be used with bullet puffs. 1 is normal for puffs, 4 is normal for creatures (e.g cacodemon).
FUSE [tics] Force object into it's DEATH states after a period of time. Useful for spawned objects such as grenades.
GASP_SOUND [sound] Sound made when this creature emerges from a choking environment.
GASP_START [time] How long underwater before we gasp when leaving it. Default is 2 seconds
GHOST_CLASS [bitset] Makes this creature a ghost (bullets/missiles pass through him) against a corresponding attack class in ATTACKS.DDF There are 26 possible classes, A thru Z. Three are reserved: `M' is the default for missile attacks, `B' is the default ATTACK_CLASS for bullet/shot attacks, and `C' is the default for close-combat attacks. Examples: GHOST_CLASS=B; //this would mean that bullets pass through this thing. or GHOST_CLASS=MV; //missile attacks and attacks of a custom Attack_class V would pass through this thing.
GIB [special] The object to create when a creature is gibbed (e.g. gets whacked by a crusher). This must be an object defined in things.ddf
GLOW_TYPE [special] When this thing is in a sector, it adds light to the nearest floor, ceiling or wall in that sector. When the thing is a dynamic light, it creates a "glow" effect on that surface from the dynamic light (differently to normal). For non-dlight things, it just makes the surface brighter (as if sector's level was higher). Allowed options are FLOOR, CEILING and WALL. In the case of WALL, the thing should be touching the wall to be lit.
HEAR_DISTANCE [float] Sets the maximum number of map units a monster can hear.
HEIGHT [float] How tall this thing is. (You may have to fiddle around with new items so that item heights and item graphics match up properly)
IMMUNITY_CLASS [bitset] Gives immunity against a corresponding attack class in ATTACKS.DDF There are 26 possible classes, A thru Z. Three are reserved: `M' is the default for missile attacks, `B' is the default ATTACK_CLASS for bullet/shot attacks, and `C' is the default for close-combat attacks. Examples: IMMUNITY_CLASS=B; //this would mean that bullets won't hurt this thing or IMMUNITY_CLASS=CV; //immune against close attacks and attacks of a custom Attack_class V
INITIAL_BENEFIT [benefit] A list of benefits (separated by commas) which a player will normally begin with. See below for benefit format.
JUMP DELAY [tics] Delay before being allowed to jump again
JUMP_HEIGHT [float] How high this thing can jump. (Default 10) (only really useful for setting how high a player or bot can leap).
JUMP_SOUND [sound] Sound played when player uses jump key.
KILL_BENEFIT [benefit] A list of benefits (separated by commas) which a player recieves when they kill this object. See below for benefit format.
LAUNCH_SOUND [sound] Sound made when the creature/object launches a ranged attack.
LUNG_CAPACITY [time] How long player can hold out before choking.(Default is 20 seconds)
MASS [float] How heavy this thing is. (E.g heavy creatures like the Mancubus won't be shoved around or tossed into the air by explosions. Imps however can fly for miles when hit with a rocket).
MAX_FALL [float] Max force this object can take after a high fall before taking damage. This value is multiplied by gravity. Deprecated???
MINATTACK_CHANCE [percentage] Used in deciding whether a monster should attack now, or move closer to get a better shot. Valid values are between 1% and 100%. 1% = move, 100% = shoot. 0% = ignore
MODEL_ASPECT [float] Change the models width and length, therefore making it fatter/skinnier. 0.5 would be half width(skinny), 2.0 would be double width(fatter)
MODEL_BIAS [float] Move model up or down. Negative numbers move the model lower on-screen, postive numbers move it up.
MODEL_ROTATE [integer] Will rotate left or right by the given (positive or negative) number of degrees. Used to correct imported models whose rotations are wrong. Default is 0.
MODEL_SCALE [float] Draw the model bigger (e.g. 0.5 is half size, 2.0 is double)
MODEL_SKIN [integer] Up to nine skins can currently be used (1 to 9). Skins must be defined in DDFImages
MORPH_TIMEOUT [tics] Force object into it's MORPH states after a period of time. If it has no "MORPH" state then the thing is simply removed.
NOWAY_SOUND [sound] Sound the creature (player) makes when they try to use an object they can't.
OOF_SOUND [sound] Sound the creature (player) makes when they walk into a wall.
OVERKILL_SOUND [sound] Sound the creature (player) makes when they are seriously killed. Used by the action pointer MAKEOVERKILLSOUND
PAIN_SOUND [sound] Sound played when the creature is in pain. Used by the action pointer MAKEPAINSOUND.
PAINCHANCE [percentage] The probability that the thing will go into pain state. 100% is certain, 0% is never.
PALETTE_REMAP [colourmap] Used to remap sprite colours. The value is a reference to an entry in colmap.ddf. Examples: 'PLAYER_BROWN', 'SKIN_BLUE', 'ALLWHITE', 'ALLGREEN'.
PICKUP_BENEFIT [benefit] A list of benefits (separated by commas) which a player receives when they pickup this item. See below for benefit format.
PICKUP_EFFECT   [weapon name]  Required for #VERSION 1.29 and higher to make the Berserk powerup switch to the fist (in earlier versions it will be added for you to maintain compatibility) Example: PICKUP_EFFECT=SWITCH_WEAPON(FIST);
PICKUP_MESSAGE [lang] The message the player sees when they pick up this item.
PICKUP_SOUND [sound] Sound made when the object is picked up
PLAYER [float] The player number. This can be either 1 to 8 for a player or -1 for a deathmatch start.
RADIUS [float] How wide this thing is. Note: in EDGE things are actaully square, not circles. You should keep this in mind when calculating if a monster can enter a door for example. Here's a reference table: Door 16 wide = monster width 11 max Door 32 wide = monster width 22 max Door 64 wide = monster width 45 max
RANGE_ATTACK [attack] Attack to use when attacking from a distance.
REACTION_TIME [time] How long after sighting, teleporting etc that this object must wait before reacting.
RELOAD_SHOTS [integer] How many shots the monster can fire before entering the RELOAD states.
RESISTANCE_CLASS [bitset] Gives resistance(only suffers 40% of the original damage) against a corresponding attack class in ATTACKS.DDF There are 26 possible classes, A thru Z. Three are reserved: `M' is the default for missile attacks, `B' is the default ATTACK_CLASS for bullet/shot attacks, and `C' is the default for close-combat attacks. Examples: RESISTANCE_CLASS=B; //this would mean that bullets hurt this thing 60% less than normal or RESISTANCE_CLASS=CV; //resistant against close attacks and attacks of a custom Attack_class V
RESISTANCE_MULTIPLY [float] Lets you control how much to multiply the damage caused by RESISTANCE_CLASS. 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)
RESISTANCE_PAINCHANCE [percentage] The probability that the thing will go into pain state when injured. 100% is certain, 0% is never
RESPAWN_EFFECT [special] The name of an animation to play when an object respawns. Hence, it is possible to create custom respawn effects for different objects
RESPAWN_TIME [time] Time it takes before this item respawns.
RIDE_FRICTION [float] How easy this object is to ride on. Values should be in the range from 0 to 1\.
SECRET_SOUND [sound] Only players. Sound to play when entering secret areas.
SHOT_HEIGHT [percentage] At what height the creatures attack comes from.
SHADOW_TRANSLUCENCY [percentage] The translucency of this things shadow (0% = no shadow)
SIDE [float] Valid values are 0,1,2,4,8,16,32,64 and 128 (or the sum of any of these values) Objects on the same side don't attack each other. 0 (or omitted) is neutral. Side is a binary value, so side 6 is an alliance between sides 4 + 2\. Players on the same side don't get frags for killing their own side. The side value is required for creating friendly monsters. If the friendly monster is not given a side tag, it will not know which player/s to support. Note that you can set friendly monsters to support individual players, or teams of players.
SIGHT_ANGLE [float] Sets the left and right field of view for a monster. A value of 180 means the monster will see in all directions (180 degrees left, 180 degrees right for a total of 360 degrees)
SIGHT_DISTANCE [float] Sets the maximum number of map units a monster can see.
Note that this will override SIGHT_SLOPE, and range attacks will not take place if the monster cannot see the target.
SIGHT_SLOPE [float] Sets the up/down field of view for a monster. It is an angle between 0 and 89.5 degrees.
SIGHTING_SOUND [sound] Sound made when a thing sees a target or by action pointers MAKESOUND and MAKESOUNDRANDOM.
SPARE_ATTACK [attack] Miscellaneous attack. Used by the SPARE_ATTACK action pointer.
SPAWNHEALTH [float] The amount of health this object begins with.
SPECIAL [flags] Flags for this thing. See [flags](#flags) section below.
SPEED [float] How fast this thing moves. Values of up to 100 are supported. Numbers around 10 are normal for most doom monsters
SPRITE_ASPECT [float] Adjusts the width of sprite graphics. 1 is normal, 0.5 makes for tall and skinny sprites, 2.0 makes for obese sprites.
SPRITE_SCALE [float] Stretches or shrinks the total size (width and height) of sprite graphics. 1 is normal perspective, 0.5 will make graphics half normal size. Used when you wish to use larger and more detailed sprites than normal DOOM.
SPRITE_YALIGN [special] Controls how sprites are rendered vertically inside their bounding box. BOTTOM (default setting, sprite's foot will touch the ground), TOP, and MIDDLE. By using "TOP" and a large value for the HEIGHT, you can e.g. make a pickup float in the air. Also the "TOP" value should be used for all ONCEILING sprites.
STARTCOMBAT_SOUND [sound] Sound made when starting a melee attack.
STEP_SIZE [float] Maximum height of wall/step that this thing can climb over.
TEMPLATE [existing DDF entry] This allows a new DDF entry to be based off an existing one. Inheritance for DDF basically.
TRANSLUCENCY [percentage] The percentage of translucency this object is. 0% is invisible, while 100% is visible.
VIEW_HEIGHT [float] Used to set what height the creature (player) sees things from.
WALK_SOUND [sound] Sound made by the action pointer WALKSOUND_CHASE.
WEAKNESS.CLASS [bitset] Gives weakness(will recieve more damage) against a corresponding attack class in ATTACKS.DDF There are 26 possible classes, A thru Z. Three are reserved: `M' is the default for missile attacks, `B' is the default ATTACK_CLASS for bullet/shot attacks, and `C' is the default for close-combat attacks. Examples: WEAKNESS.CLASS=B; //this would mean that bullets hurt this thing more than normal or WEAKNESS.CLASS=CV; //weak against close attacks and attacks of a custom Attack_class V
WEAKNESS.ANGLES [angle] Allows you to specify the damage angle range e.g. weaker to attacks from behind. Usage: WEAKNESS.ANGLES=150:210;
WEAKNESS.HEIGHTS [percentage] Allows you to specify the damage height range, e.g for headshots. Usage. WEAKNESS.HEIGHTS=75%:100%;
WEAKNESS.MULTIPLY [float] Lets you control how much to multiply the damage caused by WEAKNESS.CLASS.
WEAKNESS.PAINCHANCE [percentage] The probability that the thing will go into WEAKPAIN state when injured. 100% is certain, 0% is never

Flags:

(most can also apply to projectiles in attacks ddf.)

FLAG DESCRIPTION
AMBUSH Not to be activated by sound, deaf monster.
ALWAYS_LOUD No sound volume change due to distance.
ATTACK_HURTS Monster can be harmed by it's own species.
BARE_MISSILE Object explodes and dies when it hits something.
BLOCK_SHOTS This object stops bullets.
BOSSMAN ALWAYS_LOUD + EXPLODE_IMMUNE.
BOUNCE Object will bounce when it hits floor or wall. Very trippy if you add it to a creature - bouncing gibs!!
CLIMBABLE Player can climb on top of this object or monster.
CORPSE Object is dead.
COUNT_AS_ITEM Counts towards the item percent at end of level.
COUNT_AS_KILL Counts towards the kill percent at end of level. This flag automatically implies the MONSTER flag.
CROSSLINES Object can cross lines that are marked as blocking.
DAMAGESMOKE Object doesn't bleed, uses bullet puffs instead. (Such as barrels).
DISLOYAL Monster will attack its own species.
DROPOFF Object can travel over cliffs greater than 24 high.
DROPPED Object has been dropped. Only give half benefit.
EDGEWALKER Monster will walk over deep gaps and along cliff edges.
EXPLODE_IMMUNE No damage from explosions.
FLOAT Monster can fly. (E.g pain elemental, lost soul). Should be used with the NOGRAVITY flag.
FLOATER Combination of FLOAT + NOGRAVITY.
FORCE_PICKUP Item will be picked up, even if no benefit is specified.
FLOOR_CLIP This things sprites will always stick to the floor in the case that it's too tall for the sector it's in.
FUZZY Partial invisibility, like spectres.
GRAVFALL Monster will fall with gravity. Without this flag, non-flying monsters will always stick to the floor.
HOVER Item will bob up and down.
IMMORTAL Never takes damage from attacks, but will go into pain states as usual.
IMMOVABLE Makes this thing be unaffected by thrust from attack impacts irrespective of whether it has a small MASS or a very large one
INERT Another name for NOBLOCKMAP. The brain stem, and pools of blood are declared as INERT, as they are completely unaffected by surroundings.
INVISIBLE Completely translucent, can't be seen.
INVULNERABLE Makes the thing completely immune to all attacks.
MISSILE Object is a missile. Just a combination of the BARE_MISSILE + CROSSLINES + NOFRICTION flags.
MONSTER Object is a monster (i.e. not a player or scenery).
NEVERTARGETED Monsters never target this object.
NO_AUTOAIM This object will not be affected by AUTOAIM. Useful for scenery items.
NO_GRUDGE If this object is attacked it will switch targets to it's attacker rather than pursuing a grudge against a current target.
NO_RESPAWN Object cannot respawn.
NO_RESURRECT Object cannot be resurrected (by Archvile).
NO_TRIGGER_LINES Object cannot trigger any special linedefs i.e. monsters with this flag won't be able to open doors.
NOBLOCKMAP Object is visible but cannot be interacted with.
NOCLIP Allows things to go through solid walls.
NODEATHMATCH Object will not be spawned in deathmatch.
NOFRICTION Friction does not apply to this object.
NOGRAV_KILL When the object dies it will not fall to the ground.
NOGRAVITY Gravity does not apply to this object.
NOSECTOR Object can be interacted with, but is completely invisible
NOSHADOW Object casts no shadow.
NO_SPLASH Object causes no effects (i.e water splashes) on a floor defined in DDFFLAT as having an IMPACT_OBJECT. Useful for stuff like a falling leaf.
NOZBUFFER Allows a bunch of small objects close to each other (and with this special) to get fully drawn. Mainly useful for stuff like smoke puffs or blood to prevent Z-fighting when there are many of them in a small area.
ON_CEILING Combination of SPAWNCEILING + NOGRAVITY
PASS_MISSILE Missiles can pass through this object. Shoot-thru Scenery.
PICKUP Object can pick up other items. Only for players or bots.
PUSHABLE Object will be affected by BOOMs force pushers. (Note: SHOOTABLE things are always PUSHABLE)
SHOOTABLE Object can be damaged.
SHOVEABLE Object can be moved around if we push up against it. (i.e. Heretics pods).
SIMPLE_ARMOUR For armour pickups. Prevents Doom-emulation, whereby any lower class armour will be upgraded with this one.
SIDE_GHOST Friendly monsters will be like ghosts for your weapon fire. i.e. your shots will pass through them.
SIDE_IMMUNE Friendly monsters are completely immune from your weapon fire.
SLIDER This flag stops players/creatures getting stuck on walls. (Can also be used to affect the behaviour of grenades when they hit a wall)
SOLID This object blocks movement.
SPAWNCEILING Object will be spawned on the ceiling.
SPECIAL Object can be picked up.
STEALTH Monster goes invisible on chase, visible on attack/pain (scary).
TILT Only for MD2 models: will be vertically tilted (using the mlook angle)
TELEPORT Monster teleports over cliffs, i.e. will instantly go up or down the edge of a tall cliff.
TELEPORT_TYPE Indicates this object is a type of teleport effect.
TOUCHY Object reacts when another object collides with it. If the object has TOUCH states, then those are used, otherwise the object goes into its death states. The action pointer TOUCHY_REARM is needed to re-enable the object.
TRIGGER_HAPPY Doubles the chance the monster will attack over moving.
ULTRA_LOYAL Friendly monsters don't turn into enemies when hurt by your weapon fire
USABLE Object reacts when you press the USE key against it. Must be used in conjunction with TOUCHY. The objects TOUCH states will be used. The action pointer TOUCHY_REARM is needed to re-enable the object.
VAMPIRE This object gains health from the damage done to a victim. The health/damage ratio is hard-coded as 25% for monsters and 50% for players.
WATERWALKER Object cannot penetrate an extrafloor which is tagged as WATER.

 

STATES

Each named STATES entry defines an animation sequence to play when an attack is in progress, as well as calling the actions required at the appropriate frames in the animation. These consist of a series of states, which are individual frames of the animation. A state is defined like this:
   Sprite:Frame:Tics:Bright:Action
as follows:

Sprite The four letter name of the sprite to use.
Frame The frame reference, A-Z, '[', '\', ']' If you need more than this, use another sprite.
Tics Number of tics to spend on this frame. -1 means the frame should last forever.
Bright Can be 'BRIGHT', 'NORMAL' or 'LIT00-99'. Bright frames are always drawn full brightness. LIT00-LIT99: This allows fine-grained control of dynamic lights. LIT00 is the same as 'NORMAL', LIT99 is the same as 'BRIGHT'.
Action Action to be carried out. [Actions](#actions) are listed below.

Each frame ends with either a semicolon ; if it is the last frame in the animation or a comma , if it is not.

In addition, any line may include a #Command at the end. This will either be #STATENAME which causes a jump to the first frame in the animation of the named state. #STATENAME:FRAME causing a jump to the specified frame number in the animation of the named state. OR #REMOVE to remove the animation shown from the HUD.

Special STATES

The following are predefined state names that have specifc purposes:

STATE NAME SPECIAL USE
BOUNCE States that the object enters when it's bouncing.
CHASE States that a creature enters when chasing a target.
CLIMB States that a thing (player) uses when it's climbing.
DEATH States used when an object explodes/dies.
FLY States that a thing (player) uses when it's flying.
GIB States for an object when it has been gibbed.
IDLE States for when the object isn't doing anything.
JUMP States that a thing (player) uses when it's jumping.
MEANDER States for when the creature is wandering around aimlessly.
MELEE States for when the creature is using a close combat attack.
MISSILE States for when the creature is using a ranged attack.
OVERKILL States for when a creature dies by a spectacular amount of damage.
PAIN States that a projectile enters when bouncing.
RELOAD States for when the creature is reloading.
RESPAWN States to use when a creature is resurrected by another creature.
RESURRECT States used for a creature while it resurrects a fallen comrade.
SPAWN States to play when an object is spawned.
SWIM States to play when an object(player) is swimming.
TOUCH States that an object enters when it has been touched.
WEAKDEATH Death state to enter if WEAKNESS.CLASS is used. If they don't exist then it will try OVERKILL states, and finally it falls back to the normal DEATH states.
WEAKPAIN Pain state to enter if WEAKNESS.CLASS is used. If it doesn't have them then the normal PAIN states are used

Note that states can have a single rotation (like the plasma shots that look identical from any angle) or multiple rotations (e.g rocket in flight).

Actions:

ACTION DESCRIPTION
ACTIVATE_LINETYPE Works exactly the same as the RTS primitive of the same name. Mainly useful for BOSSES, as a faster alternative to the RTS command ONDEATH. Usage is: ACTIVATE_LINETYPE(lineNum, tagNum)
BECOME Allows a thing to turn into another thing. Can be used on players too. HEALTH and SIDE will remain the same. The name must be given in brackets, e.g. BECOME(IMP). It's also possible to jump directly to a certain state e.g. BECOME(IMP,CHASE:2)
BOT_THINK An action associated with the DeathBot. This may be depricated. ?
BOUNCE_DISARM Prevents a bouncing object from entering its BOUNCE states.
BOUNCE_REARM Allows a bouncing object to enter its BOUNCE states. When an object bounces, it enters its BOUNCE states and automatically disables further entries into the bounce states, preventing an action sequence from being interrupted by future bounces. Use this action to re-enable the bounce states.
BRAINDIE Boss brain action. Causes the brain to enter it's dead state.
BRAINMISSILEEXPLODE Boss brain action, Causes the brain to explode when the final missile hits.
BRAINSCREAM Boss brain action, the boss brain screams when it dies.
BRAINSPIT Boss brain action, the brain launches a spawn cube.
CHASE Runs after a target, possibly attacks.
CHECK_ACTIVITY 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
CHECKBLOOD CheckBlood action stops blood from disappearing in blood mode (when applied to `blood' animations )
CHECKMOVING CheckMoving action returns an object to its spawn state when it ceases moving. (see player objects)
CLOSE_ATTACK Starts a melee attack.
CLOSEATTEMPTSND Makes the object's close attack ATTEMPT_SOUND
COMBOATTACK Will start a melee attack if the object is in range, or a ranged attack if it is not.
DIE Mainly for Bex compatibility
DLIGHT_COLOUR Change the color of the dynamic light. Used like DLIGHT_COLOUR(#FF00FF). Note: the secondary dlight, if used, is not affected.
DLIGHT_FADE Fades the objects dynamic lighting to the specified level. Used like DLIGHT_FADE(500).
DLIGHT_RANDOM Randomly set the objects dynamic lighting between the specified levels. Used like DLIGHT_RANDOM(200,800)
DLIGHT_SET Sets the objects dynamic lighting to the specified level. Used like DLIGHT_SET(1000).
DROPITEM Causes the monster to drop the a specified item. The dropped item is non-solid (but may be pick-up-able), and is dropped a random distance away from the monster (so multiple drops don't all land on the exact same spot).
EFFECTTRACKER Does the damage associated with the tracker.
EXPLOSIONDAMAGE Does a fixed amount of damage to all monsters within the explosion range.
FACE Turns the object to face the angle specified in brackets.
FACETARGET Turns the object to face it's target.
JUMP Used like so.. JUMP(state:frame,xx%) and gives a xx% chance that the object jumps to the specified frame of the specified state.
JUMP_LIQUID Similar to the previous JUMP action, except this only triggers if the thing is in contact with a floor flat indicated as LIQUID in DDFFLATS. Possible use is killing a monster if he touches water for example.
JUMP_SKY Similar to the previous JUMP_LIQUID action, except this only triggers if the thing is in an outdoor sector i.e. ceiling is sky. Possible use is to make a flying monster become non-flying for example.
KILLSOUND Stops any sound playing that is associated with this thing.
LOOKOUT Looks for players to kill. Enters the CHASE states if it finds one.
MAKEACTIVESOUND Makes the object's active sound
MAKEDEAD Makes the object dead: Visible if stealth, and not solid.
MAKEDEATHSOUND Makes the object's death sound
MAKEOVERKILLSOUND Makes a slopping noise...
MAKEPAINSOUND Makes the object's pain sound.
MAKESOUND Starts the object's AMBIENT_SOUND/SIGHTING_SOUND
MAKESOUNDRANDOM Gives a 20% chance of making the object's AMBIENT_SOUND/SIGHTING_SOUND.
MEANDER Walk around aimlessly. Find targets to attack.
MLOOK_FACE Causes this object to face the MLOOK angle specified in brackets.
MLOOK_TURN Causes this object to turn by the MLOOK angle specified in brackets.
MOVE_DOWN Causes this object to move down by the amount specified in brackets.
MOVE_FWD Causes this object to move forward by the amount specified in brackets. Use a negative value to move backwards.
MOVE_RIGHT Causes this object to move right by the amount specified in brackets. Use a negative value to move left.
MOVE_UP Causes this object to move up by the amount specified in brackets.
MORPH Allows a thing to turn into another thing. Identical behaviour to BECOME, except health is filled up.
NOISE_ALERT Will cause nearby monsters to be alerted. Add it to a monsters death states so his final groan will warn nearby monsters to expect trouble ;)
NOTHING Does nothing.
PATH_FOLLOW Follows the monster's path (if any). Note: doesn't do anything else, so use LOOKOUT to make the monster look for players.
PATH_CHECK Check whether this monster is a path follower (path followers are spawned by RTS path nodes). If it is, then it jumps to the MEANDER states. Typically used as the first action of the IDLE states. Useful for allowing a single monster entry to be both (normal and path follower).
PLAYER_SCREAM Makes the player's death scream.
PLAYSOUND Makes the sound specified in brackets.
PLAYSOUND_BOSS Similar to PLAYSOUND but will play the sound at full volume regardless of ALWAYS_LOUD flag.
RANGE_ATTACK Starts a range attack
RANGEATTEMPTSND Starts the object's range attack ATTEMPT_SOUND.
REFIRE_CHECK Checks to see whether the object can keep firing: can it see it's target? is it's target still alive? (Basically stops a monster shooting at a target that has moved or died).
RELOAD_CHECK Checks to see whether the object needs to reload, and if yes then enters the objects RELOAD states
RELOAD_RESET Resets the RELOAD_SHOTS counter for this monster.
RESCHASE CHASE + look for bodies to resurrect.
RESET_SPREADER Resets a spreader attack.
RTS_ENABLE_TAGGED All triggers with the same tag are enabled. Mainly useful for BOSSES, as a faster alternative to the RTS command ONDEATH. Usage is: RTS_ENABLE_TAGGED(tagNum)
RTS_DISABLE_TAGGED All triggers with the same tag are disabled. Mainly useful for BOSSES, as a faster alternative to the RTS command ONDEATH. Usage is: RTS_DISABLE_TAGGED(tagNum)
SET_SKIN(skin number) Dynamically change the current skin to a different one.
SET_INVULNERABLE Used to make monsters with shielded/blocking states (like the Centaurs in Hexen).
CLEAR_INVULNERABLE Used to make monsters with shielded/blocking states (like the Centaurs in Hexen).
SET_PAINCHANCE Used like SET_PAINCHANCE(0%) and will dynamically change a monsters painchance.
Possible usage: if we do SET_PAINCHANCE(0%) at the start of a lengthy PAIN state, this will make sure the whole animation is played out and won't be interrupted by another shot which would normally make us re-start the pain animation again.
SMOKING Creates a smoke trail behind the object.
SPARE_ATTACK Starts the spare attack.
SPAWN 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)
STOP Stops the object from moving.
SUPPORT_LOOKOUT Looks for a player to support.
SUPPORT_MEANDER Follow a supporting player. Find targets to attack.
THRUST Throws the object like EXPLOSIONDAMAGE, but does no damage. _(Controlled by EXPLODE_DAMAGE.VAL and EXPLODE_RADIUS: In theory if it's negative then we would "pull" instead of "push")_.
TOUCHY_DISARM Prevents a touchy object from entering its TOUCH states.
TOUCHY_REARM Rearms a touchy object, allowing it to react to future collisions. When a touchy object is touched, it enters its TOUCH states and is automatically disarmed, preventing an action sequence from being interrupted by further collisions.
TRANS_ALTERNATE Used like TRANS_ALTERNATE(10%) and causes the object to alternate between visible and invisible at the rate specified.
TRANS_FADE Used like TRANS_FADE(10%) to fade the transparency of the object to the specified amount.
TRANS_LESS Used like TRANS_LESS(10%) to make the object less transparent by the specified amount.
TRANS_MORE Used like TRANS_MORE(10%) to make the object more transparent by the specified amount.
TRANS_SET Used like TRANS_SET(10%) to set the object transparency to the specified amount.
TURN Turns the object to the angle specified in brackets.
TURN_RANDOM Turns the object randomly between the current angle and that specified in brackets.
UNBECOME Return a thing to it's original type if it has suffered a BECOME() previously.
If it has not been BECOMEd previously then nothing will happen.
UNMORPH Return a thing to it's original type if it has suffered a MORPH() previously.
If it has not been MORPHed previously then nothing will happen.
WALKSOUND_CHASE CHASE + play walksound.
  • Note: RANGE_ATTACK, CLOSE_ATTACK and SPARE_ATTACK can have an attack name in between brackets, e.g RANGE_ATTACK(CACO_FIREBALL), and it will use that attack instead of the normal one.

Benefits:

Benefits are used by the INITIAL_BENEFIT and PICKUP_BENEFIT commands in things.ddf. Each benefit is a name, possibly followed by one or two values in brackets. Examples: KEY_REDCARD, BULLETS(10), HEALTH(15:100). There are 7 different types of benefits:

BENEFIT TYPE DESCRIPTION
Ammo Specifies weapon ammunition. The player receives the ammunition (value in brackets is how much), upto the current limit for that type.
AmmoLimit Specifies the limit for ammo. The player's current limit for the ammo type is increased upto the value in brackets (or unchanged if it was already that high).
Health Specifies health that the player receives, the first value in brackets in how much health, the second value in the brackets is the limit, if the player already has that much, nothing happens, otherwise the player receives the health but no more than the limit.
Armour Specifies armour. It works like health, there are two values: the amount of armour to give, and the limit.
Key Specifies the name of a key.
Weapon Specifies the name of a weapon (must be an entry in weapons.ddf).
Powerup Specifies the name of a powerup (e.g. invulnerability). The first number in brackets is the number of seconds that the powerup will last. The second number is a limit value -- e.g. 30 will limit multiple pickups of the same powerup to last no longer than 30 seconds.
Inventory Specifies inventory. The player receives the inventory item (value in brackets is how much), up to the current limit for that type.
InventoryLimit Specifies the limit for inventory. The player's current limit for the inventory type is increased up to the value in brackets (or unchanged if it was already that high).
Counter Specifies a Counter. The player receives the Counter item (value in brackets is how much), up to the current limit for that type.
CounterLimit Specifies the limit for a Counter. The player's current limit for the Counter type is increased up to the value in brackets (or unchanged if it was already that high).

Ammo and AmmoLimit:

AMMO TYPE AMMO LIMIT TYPE
BULLETS BULLETS.LIMIT
SHELLS SHELLS.LIMIT
ROCKETS ROCKETS.LIMIT
CELLS CELLS.LIMIT
PELLETS PELLETS.LIMIT
NAILS NAILS.LIMIT
GRENADES GRENADES.LIMIT
GAS GAS.LIMIT
AMMO9 AMMO9.LIMIT
AMMO10 AMMO10.LIMIT
AMMO11 AMMO11.LIMIT
AMMO12 AMMO12.LIMIT
AMMO13 AMMO13.LIMIT
AMMO14 AMMO14.LIMIT
AMMO15 AMMO15.LIMIT
... ...
AMMO99 AMMO99.LIMIT

Health and Armour:

TYPE DESCRIPTION
HEALTH Health for the player.
GREEN_ARMOUR Green armour is the weakest (saves 33% of damage). 64% damage absorbed by player, 33% damage absorbed by Armor
BLUE_ARMOUR Blue armour is next (saves 50% of damage). 50% damage absorbed by player, 50% damage absorbed by Armor
PURPLE_ARMOUR Purple armour is next (saves 66% of damage). 34% damage absorbed by player, 66% damage absorbed by Armor
YELLOW_ARMOUR Yellow armour is next (saves 75% of damage). 25% damage absorbed by player, 75% damage absorbed by Armor
RED_ARMOUR Red armour is the strongest (Saves 90% of damage). 10% damage absorbed by player, 90% damage absorbed by Armor

Keys:

TYPE DESCRIPTION
REDCARD Red keycard.
BLUECARD Blue keycard.
YELLOWCARD Yellow keycard.
REDSKULL Red skull key.
BLUESKULL Blue skull key.
YELLOWSKULL Yellow skull key.
GREENCARD Green keycard.
GREENSKULL Green skull key.
GOLDKEY Gold key.
SILVERKEY Silver key.
BRASSKEY Brass key.
COPPERKEY Copper key.
STEELKEY Steel key.
WOODENKEY Wooden key.
FIREKEY Fire key.
WATERKEY Water key.

Powerups:

TYPE DESCRIPTION
POWERUP_ACIDSUIT Provides the player with protection against slime (and damaging sectors in general - but not crushers).
POWERUP_AUTOMAP Player gets to see everything on the automap.
POWERUP_BERSERK Gives the player extra strength for the time period. Only affects strength-related weapons (just the punch).
POWERUP_INVULNERABLE Makes the player completely invulernable for the time period. Also makes everything look white.
POWERUP_JETPACK The jetpack allows the player to fly! Be warned though, the fuel does not last forever (something to keep in mind whilst flying over that lava canyon).
POWERUP_LIGHTGOGGLES Allows the player to see with light goggles, making all dark areas look like they are fully lit up.
POWERUP_NIGHTVISION Gives the player night vision goggles, similiar to LIGHTGOGGLES but everything gets a more realistic green shade.
POWERUP_PARTINVIS Makes the player partially invisible for a while. Monsters will have a harder time trying to shoot you.
POWERUP_SCUBA The scuba allows the player to breathe underwater! Be warned though, the air does not last forever.
POWERUP_TIMESTOP Everything in the gameworld stops, except the player! This includes any rockets you might fire, so switch to your fists or bullets instead ;)

Inventory and InventoryLimit:

INVENTORY TYPE INVENTORY LIMIT TYPE
INVENTORY01 INVENTORY01.LIMIT
INVENTORY02 INVENTORY02.LIMIT
INVENTORY03 INVENTORY03.LIMIT
INVENTORY04 INVENTORY04.LIMIT
INVENTORY05 INVENTORY05.LIMIT
INVENTORY06 INVENTORY06.LIMIT
INVENTORY07 INVENTORY07.LIMIT
INVENTORY08 INVENTORY08.LIMIT
INVENTORY09 INVENTORY09.LIMIT
INVENTORY10 INVENTORY10.LIMIT
INVENTORY11 INVENTORY11.LIMIT
INVENTORY12 INVENTORY12.LIMIT
INVENTORY13 INVENTORY13.LIMIT
INVENTORY14 INVENTORY14.LIMIT
INVENTORY15 INVENTORY15.LIMIT
... ...
INVENTORY99 INVENTORY99.LIMIT

Counter and CounterLimit:

COUNTER TYPE COUNTER LIMIT TYPE
LIVES (aka COUNTER01) LIVES.LIMIT
SCORE (aka COUNTER02) SCORE.LIMIT
MONEY (aka COUNTER03) MONEY.LIMIT
EXPERIENCE (aka COUNTER04) EXPERIENCE.LIMIT
COUNTER05 COUNTER05.LIMIT
COUNTER06 COUNTER06.LIMIT
COUNTER07 COUNTER07.LIMIT
COUNTER08 COUNTER08.LIMIT
COUNTER09 COUNTER09.LIMIT
COUNTER10 COUNTER10.LIMIT
COUNTER11 COUNTER11.LIMIT
COUNTER12 COUNTER12.LIMIT
COUNTER13 COUNTER13.LIMIT
COUNTER14 COUNTER14.LIMIT
COUNTER15 COUNTER15.LIMIT
... ...
COUNTER99 COUNTER99.LIMIT




DDF docs written by Andy Baker and Ziggy Gnarly, with updates by Andrew Apted, Andy Brewood and Luke Brennan. © EDGE Team, et al. 1998 - 2024.

Home

EDGE-Classic Mod Downloads

COAL

DDF     Introduction
    Animations
    Attacks
    Colormaps
    Flats
    Fonts
    Games
    Images
    Languages
    Levels
    Lines and Sectors
    Playlist
    Sounds
    Styles
    Switches
    Things
    Weapons
RTS     Introduction
    Conditions
    Directives
    Flow Control
    Level Commands
    Maps and Triggers
    Properties
    Thing Commands
    Tips and Menus
Tutorials     Creating a Weapon
    Creating an Enemy
    Creating a Friendly Creature

Compiling EDGE-Classic

Clone this wiki locally