qzdoom/docs/thingdef_doc.txt

598 lines
30 KiB
Text
Raw Normal View History

Examples for actor definitions
------------------------------
1) a complete definition from scratch:
ACTOR ZombieMan 3004
{
Health 20
Radius 20
Height 56
Speed 8
PainChance 200
MONSTER
+FLOORCLIP
SeeSound grunt/sight
AttackSound grunt/attack
PainSound grunt/pain
DeathSound grunt/death
ActiveSound grunt/active
Obituary "%o was killed by a zombieman."
DropItem Clip
Damage 4
States
{
Spawn:
POSS AB 10 A_Look
Loop
See:
POSS AABBCCDD 4 A_Chase
Loop
Missile:
POSS E 10 A_FaceTarget
POSS F 8 A_BulletAttack
POSS E 8
Goto See
Pain:
POSS G 3
POSS G 3 A_Pain
Goto See
Death:
POSS H 5
POSS I 5 A_Scream
POSS J 5 A_Fall
POSS K 5
POSS L -1
Stop
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_Fall
POSS PQRST 5
POSS U -1
Stop
Raise:
POSS KJIH 5
Goto See
}
}
2) an actor which inherits from an existing one:
ACTOR PlasmaZombie : ZombieMan 9600
{
Health 40
DropItem Cell
MissileType PlasmaBall
States
{
Missile:
POSS E 10 A_FaceTarget
POSS F 5 A_MissileAttack
POSS E 5 A_FaceTarget
POSS F 5 A_MissileAttack
POSS E 5 A_FaceTarget
POSS F 5 A_MissileAttack
Goto See
}
}
(this is a zombie which fires 3 plasma bullets when attacking)
3) an actor which uses SKIP_SUPER
ACTOR DeadZombieMan : ZombieMan 18
{
SKIP_SUPER
Spawn Parent Death+4
}
(this actor doesn't inherit anything from its parent - it just uses
some of its states.)
Syntax:
-------
ACTOR classname [ : parentclassname] [doomednum]
{
properties
flags
...
}
classname: The name this new actor is referenced by in the game
parentclassname: (optional) The name of a parent class this new actor
inherits its attributes from.
doomednum: Editor number for this actor (optional)
List of properties:
===================
SKIP_SUPER reinitializes the actor as if it has no parent
This can be used to have access to the parent's
states without inheriting its attributes. See
3) above for an example.
SPAWNID value defines the spawn ID to be used with Thing_Spawn
and its derivates.
HEALTH value defines the health a monster starts with
Default is 1000
REACTIONTIME value Time in tics (1/35 seconds) a monster needs
to attack back. There is normally no need to
change this value.
Default is 8
PAINCHANCE value Probability of entering the pain state.
255=always, 0=never
Default is 0
DAMAGE value For a projectile defines the damage it inflicts
upon impact. The formula is random(1,8)*damage
or (random(1,4)*damage if STRIFEDAMAGE is set.
This also defines the damage for actors which
attack like the Lost Soul. The formula for this
is random(1,8)*damage.
DAMAGE is also used to define how many bullets
are fired by the generic hitscan attack function
A_Bulletattack.
Default is 0
SPEED value Defines how fast an actor moves. For projectiles
this is the distance it moves. For monsters it
defines the size of one step done in A_Chase.
Default is 0.
RADIUS value Defines the radius of this actor.
Default is 20.
HEIGHT value Defines the height of this actor
Default is 16.
MASS value Defines the mass of this actor.
The larger the mass the less an actor moves when
being thrust by damage.
Default is 100.
XSCALE value Defines the X-scaling for this actor.
Range is [0.0, 4.0].
Default is 1.0
YSCALE value Defines the Y-scaling for this actor.
Range is [0.0, 4.0].
Default is 1.0
SCALE value Combines XScale and YScale
Range is [0.0, 4.0].
Default is 1.0
SEESOUND name Defines the sound the actor makes when it sees
the player (for monsters) or when a projectile
is spawned.
ATTACKSOUND name Defines the sound the actor makes when attacking.
PAINSOUND name Defines the sound the actor makes when in pain.
To hear this sound A_Pain has to be called.
DEATHSOUND name Defines the sound the actor makes when dying
or when a projectile explodes.
ACTIVESOUND name Defines the sound the actor makes when active.
MELEESOUND name Defines the sound the actor makes when doing
a melee attack in A_MeleeAttack. Note that
several original attack functions which have
such a sound use a hard coded reference (e.g.
A_TroopAttack uses imp/melee)
RENDERSTYLE type Defines how this actor is rendered. Useful values are:
NONE - actor is invisible
NORMAL - actor is visible and not translucent
FUZZY - like the Spectre in Doom
TRANSLUCENT - actor is translucent.
ADD - actor uses additive translucency.
Default is NORMAL
ALPHA value defines the opacity/intensity for render styles
TRANSLUCENT and ADD.
Range is [0.0, 1.0]
Default is 1.0
DEATHHEIGHT value Defines the height this actor has after dying.
Default is 1/4 of the original height
BURNHEIGHT value Defines the height this actor has after dying by fire.
Default is 1/4 of the original height
*OBITUARY string Defines the obituary string for this actor. This string
uses a few placeholders:
%o: victim's name
%k: killer's name
%g: he/she/it
%h: him/her/it
%p: his/her/its
*HITOBITUARY string Defines the obituary string for a melee attack by this
actor. If not present OBITUARY is used. The same format
as for OBITUARY appplies.
*DONTHURTSHOOTER If this actor deals explosive damage and is a projectile
it does not hurt the shooter.
*EXPLOSIONRADIUS value Defines the radius of explosive damage
Default is 128
*EXPLOSIONDAMAGE value Defines the amount of explosive damage
Default is 128
MELEEDAMAGE value Defines the amount of damage this monste will inflict
when using A_MeleeAttack. The formula is random(1,8)*damage.
MISSILETYPE name Defines the projectile type this monster is firing when
using A_MissileAttack. Any valid projectile present in the
game can be specified.
MISSILEHEIGHT value Defines the height at which the projectile is spawned.
Default is 32.
MONSTER Sets all appropriate flags to make this actor act as a regular
monster. The following flags are being set:
SHOOTABLE, COUNTKILL, SOLID, CANPUSHWALLS, ACTIVATEMCROSS, CANPASS, ISMONSTER.
PROJECTILE Sets all appropriate flags to make this actor act as a regular
projectile. The following flags are being set:
NOBLOCKMAP, NOGRAVITY, DROPOFF, MISSILE, ACTIVATEIMPACT, ACTIVATEPCROSS, NOTELEPORT.
CLEARFLAGS clears all flags
*DROPITEM name [probability [amount]]
Drops an item of type 'name' when dying. Optionally the probability
can be specified. A probability of 255 means the item is always dropped,
a probability of 0 means it is never dropped.
amount is only applicable for Heretic ammuniton. It specifies how much
ammo the dropped item contains.
There can be more than one DROPITEM definitions for an actor. The
amount is unlimited.
DROPITEM works differently with inherited actors. An actor can inherit
a list of DROPITEM definitions from its parent but if it defines one
of its own the entire parent's list is discarded.
SPAWN
SEE
MELEE
MISSILE
PAIN
DEATH
XDEATH
BURN
ICE
RAISE
CRASH With these keywords a specific state in the actor can be either cleared
or set to one of the parent's states. The syntax is:
SPAWN 0 to clear a state or
SPAWN PARENT DEATH[+offset] to set a parent's state. See 3) above for an
example
STATES Defines an actor's states. See the separate block STATES for more information
Properties prefixed with a '*' cannot be inherited from predefined actors due to the
implementation.
List of flags
=============
Flags are special properties that can be either set or cleared
+flagname sets a flag
-flagname clears a flag
The following flags exist. If applicable the name is identical with the one used
in regular DECORATE items.
SOLID set when the object should be solid (blocking)
SHOOTABLE object can be damaged. If health goes below 0 it dies
NOSECTOR Object is not linked into the sector. This makes it invisible
and excludes it from certain physics checks.
NOBLOCKMAP This object is excluded from passive collision detection. Nothing else
can run into a NOBLOCKMAP object but the object itself can run
into others. All projectiles have this set.
AMBUSH Monster is 'deaf'. Normally this is set in an editor on a per-
object basis.
JUSTHIT try to attack right back (used in monster AI, probably not
particularly useful in actor definitions)
JUSTATTACKED take at least one step before attacking
SPAWNCEILING spawned hanging from the ceiling as opposed to standing on the
floor.
NOGRAVITY Actor is not subject to gravity
DROPOFF Monster can walk over ledges/taller steps.
NOCLIP Actor is totally excluded from collision detection and
can walk through walls etc.
FLOAT Floating monster - can change height at will.
TELEPORT Although implemented there isn't a single actor which
uses this flag. I can't say what it does precisely but
it excludes an actor that has it set from certain parts
of the collision detection logic.
MISSILE Actor is a projectile.
SHADOW Actor is nearly invisible. Unlike regular Doom this does
not automatically imply fuzziness. For that you have to
specify RenderStyle Fuzzy.
NOBLOOD Actor does not bleed when hurt.
CORPSE Actor is a corpse. For normal actors there is no need to
set this but in combination with the crashstate it might
be useful.
COUNTKILL Counts toward kill percentage
COUNTITEM Counts toward item percentage
NOTDMATCH Is not being spawned in Deathmatch games.
NOLIFTDROP Does not drop when a lift under it lowers
STEALTH Stealth monster
ICECORPSE Actor is a frozen corpse
LOWGRAVITY Actor is subject to low gravity
WINDTHRUST Actor is thrust by the Heretic wind specials. I hope its
functionality is some day expanded to the Boom wind specials
HERETICBOUNCE Heretic style bouncing (objects only bounce off the floor)
HEXENBOUNCE Hexen style bouncing (objects bounce off floors and walls)
DOOMBOUNCE ZDoom style bouncing (like hexen but stops when losing a certain
amount of momentum)
The 3 bounce types are mutually exclusive
FLOORCLIP Actor's lower part is clipped when standing in a sector
with a liquid texture (defined in the TERRAIN lump)
SPAWNFLOAT Actor is spawned hat a random height in the sector.
NOTELEPORT Actor cannot teleport
RIPPER For projectiles that can rip through monsters and players.
PUSHABLE Actor can be pushed.
SLIDESONWALLS Actor can slide along walls
CANPASS Actor uses height sensitive collision detection. Use with care!
This only makes sense on actors that can move by themselves.
CANNOTPUSH This actor cannot push pushable objects.
THRUGHOST This actor passes through ghosts (set with the GHOST flag.)
BOSS Actor is a boss. Bosses have a few special properties
(like playing some sounds at full volume.)
FIREDAMAGE Actor inflicts fire damage.
ICEDAMAGE Actor inflicts ice damage.
NODAMAGETHRUST Upon hitting another actor the victim is not thrust when damaged.
TELESTOMP This actor can telefrag others.
FLOATBOB use float bobbing z movement like Heretic/Hexen's powerups
ACTIVATEIMPACT Upon hitting a wall this actor can activate G1/GR lines
CANPUSHWALLS Upon hitting a wall this actor can activate P1/PR lines
ACTIVATEMCROSS This actor can activate 'Monster crosses' lines.
ACTIVATEPCROSS This actor can activate 'Projectile crosses' lines.
CANTLEAVEFLOORPIC This actor cannot cross into a sector with a different floor
texture.
NONSHOOTABLE Actor cannot be hit (projectiles pass through.)
INVULNERABLE Actor cannot be hurt.
DORMANT Actor is dormant and has to be activated with Thing_Activate.
SEEKERMISSILE Actor is a homing missile. This is only used as a hint to the
game. For a homing missile to be effective it has to use
one of the seeker missile code pointers in its moving states.
REFLECTIVE Actor reflects missiles shot at it.
FLOORHUGGER defines a projectile that is moving along the floor.
CEILINGHUGGER defines a projectile that is moving along the ceiling.
NORADIUSDMG Actor cannot be hurt by radius (explosive) damage.
GHOST Actor is a ghost. This does not imply translucency etc.
DONTSPLASH Actor does not create any terrain splashes
DONTOVERLAP Two actors with this flag cannot overlap at the same x/y-position
but different heights
DONTMORPH Cannot be morphed into a chicken or pig.
DONTSQUASH This actor cannot be instantly killed by Heretic's powered up Mace.
FULLVOLACTIVE Plays its active sound at full volume
ISMONSTER Actor is a monster
SKYEXPLODE Projectile explodes when hitting a sky instead of vanishing
STAYMORPHED If morphed this actor cannot revert to its original form.
DONTBLAST Cannot be blasted by Hexen's Disc of Repulsion.
CANBLAST Can be blasted by Hexen's Disc of Repulsion. For monsters this is
implicit.
NOTARGET cannot be targeted by other monsters.
DONTGIB cannot be crushed to a pile of blood.
NOBLOCKMONST can walk through monster blocking lines.
FULLVOLDEATH Plays its death sound at full volume
CANBOUNCEWATER Can bounce on water. Normally an object is destroyed in this case.
NOWALLBOUNCESND Does not play a sound when bouncing off a wall. Normally the
Seesound is played in this case.
FOILINVUL Can hurt invulnerable monsters (but not players.)
NOTELEOTHER Cannot be teleported by Hexen's banishment device.
QUICKTORETALIATE Immediately switches targets when being attacked.
NOICEDEATH Monster cannot be frozen, used to prevent the generic ice death.
RANDOMIZE Randomizes the duration for its first frame. Most of Doom's projectiles
use this.
FIXMAPTHINGPOS Move thing out of walls. For torches and similar things that tend to be
placed directly on a wall.
ACTLIKEBRIDGE Uses the special collision logic for bridge things.
STRIFEDAMAGE Strife uses a different damage calculation for its projectiles.
States (a.k.a. Frames)
======================
States define the behavior of an actor. For any regular actor there are the following
labels:
SPAWN defines the state that is displayed when an actor is spawned
For monsters this is normally also the idle loop.
SEE defines the walking animation for a monster.
MELEE defines the melee (near) attack.
MISSILE defines the missile (far) attack.
PAIN defines the pain action
DEATH defines the normal death sequence
XDEATH defines the extreme (splatter) death sequence
BURN defines the burn (fire) death sequence
ICE defines the freeze (ice) death sequence
RAISE defines the resurrection sequence (for the Arch Vile)
CRASH defines the crash sequence. This is entered when the actor
is a corpse and hits the floor.
A state definition is started with the 'STATES' keyword and enclosed
by braces '{', '}'.
A state definition consists of the following:
1) State labels. This is one of the keywords listed above followed by a ':'.
Example
Spawn:
defines the entry point for the spawn state.
2) State definitions. These consist of a sprite name, a frame sequence,
the duration in tics (1/35 seconds) and optionally the 'BRIGHT'
keyword to indicate a fullbright display and an action function name
(code pointer)
Example
POSS AABBCCDD 4 A_Chase
This defines 8 states. Each one of them uses the sprite POSS, has a duration
of 4 and uses the code pointer A_Chase which is the standard walk function
for monsters. Of these 8 states the first 2 will use the sprite frame 'A',
the next 2 the frame 'B' and so on. The length of theframe sequence can be
up to 256 characters. Valid frames are 'A'-'Z', '[', '\' and ']'.
Different sprites can be freely mixed in an actor definition each separate
state definition is limited to one sprite only.
3) Jump instructions
There are 4 different jump instructions:
-Loop jumps to the most recently defined state label. This is
used for a looping animation
-Stop Stops animating this actor. Normally this is used at the
end of the death sequences.
-Wait Loops the last defined state. This is only useful if a
code pointer is used that waits a given time or for a
certain event. Currently the only usable code pointer
for this is A_FreezeDeathChunks which is normally used
at the end of a freeze death sequence.
-Goto label+offset
Jumps to an arbitrary state in the current actor.
With this you can also jump to a state that was
inherited by a parent. See Example 2) above for this
The 'Goto see' jumps to the walking animation that
has been inherited.
Important note:
---------------
This format has been designed for maximum flexibility. As a result no assumptions
are made what the designer wants. No states are ever implicitly created.
Action functions:
=================
This information is kept rather brief. For normal purposes in-depth information
is not necessary. All action functions names are preceded by 'A_'.
A_BFGSpray Starts the effect when a BFG projectile hits something
A_Pain Plays the pain sound (that's all it does, it can also be used outside the pain sequence!)
A_NoBlocking Sets the actor to non-blocking and drops items.
A_XScream Plays the sound 'misc/gibbed'
A_Look Look for players - used in the idle sequence of monsters
A_Chase Standard walking function - used in the walk sequence of monsters
A_FaceTarget Change angle to face target
A_PosAttack Zombie attack (one bullet)
A_Scream Plays the death sound (that's all it does, it can also be used outside the death sequence!)
A_SPosAttack Shotgunner attack (3 bullets)
A_VileChase Arch Vile: look for corpses and walk.
A_VileStart Plays sound 'vile/start'
A_VileTarget Spawns the Arch Vile fire.
A_VileAttack Arch Vile attack function. Inflicts some damage and thrusts victim in the air.
A_Fire Keeps Arch Vile's fire in front of target
A_StartFire Plays sound 'vile/firestrt' and calls A_Fire
A_FireCrackle Plays sound 'vile/firecrkl' and calls A_Fire
A_Tracer Homing routine for Revenant's missile
A_SkelWhoosh Calls A_FaceTarget and plays sound 'skeleton/swing'.
A_SkelFist Revenant's melee attack.
A_SkelMissile Revenant's missile attack
A_FatRaise Calls A_FaceTarget and plays sound 'fatso/raiseguns'.
A_FatAttack1 Mancubus attack 1
A_FatAttack2 Mancubus attack 2
A_FatAttack3 Mancubus attack 3
A_BossDeath Boss death specials. Has no effect for custom monsters
A_CPosAttack Chaingunner attack
A_CPosRefire Chaingunner refiring
A_TroopAttack Imp attack
A_SargAttack Demon attack
A_HeadAttack Cacodemon attack
A_BruisAttack Baron attack
A_SkullAttack Lost Soul attack
A_Metal Plays 'spider/metal' and calls A_Chase
A_SpidRefire Spider refiring
A_BabyMetal Plays 'baby/walk' and calls A_Chase
A_BspiAttack Arachnotron attack
A_Hoof Plays 'cyber/hoof' and calls A_Chase
A_CyberAttack Cyberdemon attack
A_PainAttack Pain Elemental attack
A_PainDie Pain Elemental death
A_KeenDie Keen death - opens door with tag 666 if all monsters of the calling kind are dead.
A_BrainPain Plays 'brain/pain' at full volume.
A_BrainScream Starts brain explosion
A_BrainDie Ends level if not in deathmatch
A_BrainAwake Plays 'brain/sight' at full volume.
A_BrainSpit Spits one brain cube
A_SpawnFly Brain cube handling incl. monster creation
A_SpawnSound plays 'brain/cube' and calls A_SpawnFly
A_BrainExplode Brain explosion
A_Die Kills actor
A_Detonate Inflicts explosive damage - amount specified by DAMAGE in the actor
A_Mushroom Shoots a lot of mancubus fireballs high in the air
A_SetFloorClip Sets the FLOORCLIP flag
A_UnSetFloorClip Clears the FLOORCLIP flag
A_HideThing Makes actor invisible
A_UnHideThing Makes actor visible
A_SetInvulnerable Makes actor invulnerable
A_UnSetInvulnerable Makes actor vulnerable
A_SetReflective Sets the REFLECTIVE flag
A_UnSetReflective Clears the REFLECTIVE flag
A_SetReflectiveInvulnerable A_SetInvulnerable + A_SetReflective
A_UnSetReflectiveInvulnerable A_UnSetInvulnerable + A_UnSetReflective
A_SetShootable Makes actor shootable
A_UnSetShootable Makes actor non shootable
A_NoGravity makes Actor not subject to gravity
A_Gravity makes Actor subject to gravity
A_LowGravity makes Actor subject to low gravity
A_ScreamAndUnblock combines A_Scream and A_NoBlocking
A_ActiveSound plays actor's active sound
A_ActiveAndUnblock combines A_ActiveSound and A_NoBlocking
A_FastChase A_Chase variation used by Hexen's class bosses
A_FreezeDeath Starts the freeze death sequence.
A_GenericFreezeDeath Starts the generic freeze death sequence. Calls A_FreezeDeath and sets the ice palette translation.
A_FreezeDeathChunks Burst the actor into chunks. The state with this function has to be looped because it waits until all movement has stopped.
A_IceGuyDie Stops all movement and bursts the actor into ice chunks immediately.
The following functions use some actor properties to determine their behavior
-----------------------------------------------------------------------------
A_Explode Inflicts explosive damage.
Uses:
ExplosionDamage Amount of damage being inflicted
ExplosionRadius Radius of damage
DontHurtShooter If a projectile, don't hurt the guy who shot it.
A_MeleeAttack performs a melee attack
Uses:
MeleeDamage Amount of damage, The formula is random(1,8)*MeleeDamage
MeleeSound Sound being played if the actual attack happens.
A_MissileAttack launches a missile
Uses:
MissileName Actor name of the missile being launched
MissileHeight Height above floor for the spawned missile
A_MissileAttack can handle homing missiles as long as the missile
has the SEEKERMISSILE flag set and contains some kind of tracer
code pointer (A_Tracer, A_MummyFX1Seek, etc.) In its moving animation.
A_ComboAttack combines A_MeleeAttack and A_MissileAttack depending on the current
distance to the target.
A_BulletAttack Hitscan attack
Uses:
damage amount of bullets being fired
The following functions use direct parameters:
----------------------------------------------
A_PlaySound ("soundname") Plays the sound soundname
A_PlayWeaponSound ("soundname") Plays the sound soundname on the weapon channel
Sounds played with A_PlaySound and A_PlayWeaponSound
can occur simultaneously.
A_SeekerMissile (threshold, maxturnangle)
Seeker missile handling. threshold and maxturnangle determine
how 'aggressive' the missile will home in on its target. The larger
the values the more precise it is. threshold specifies the angle
inside which the missile will home in directly on its target.
If the angle toward the target is larger than threshold it will
change its movement angle only partially towards the target.
maxturnangle is the maximum change of movement direction that
will be performed in one move. Maxturnangle should be larger
than threshold. Both angles are specified in degrees and must be
in the range [0, 90].
Example: The flaming skull of Heretic's mummy uses an equivalent
of A_SeekerMisile 20 30
A_Jump (chance, distance) Randomly advances to different state. Like painchance, the chance
value can range between 0 and 255. A chance of 0 will never advance,
while a chance of 255 will almost always advance. If the state is
not advanced, then the one immediately following the A_Jump will
be used as if A_Jump had not been present.
A_CustomMissile ("missiletype", spawnheight, spawnofs_xy, angle)
Spawns a missile attack where "missiletype" is the type of missile
to shoot, spawnheight is how high from the monster's feet to shoot
the missile, spawnofs_xy is how far the monster's center to shoot
the missile, and angle is the direction relative to the monster's
facing angle in which to shoot the missile.