Actors particular to Hexen only
------------------------------------------------------------------------
//========== Spawns a flock of bats when activated.
IMPLEMENT_ACTOR (ABatSpawner, Hexen, 10225, 0)
PROP_Flags (MF_NOSECTOR|MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_None)
PROP_SpawnState (S_SPAWNBATS1)
END_DEFAULTS
FState ABatSpawner::States[] =
{
#define S_SPAWNBATS1 0
S_NORMAL1 (MAN1, 'A', 2, NULL , &States[S_SPAWNBATS1+1]),
S_NORMAL1 (MAN1, 'A', 2, A_BatSpawnInit , &States[S_SPAWNBATS1+2]),
S_NORMAL1 (MAN1, 'A', 2, A_BatSpawn , &States[S_SPAWNBATS1+2]),
#define S_SPAWNBATS_OFF (S_SPAWNBATS1+3)
S_NORMAL1 (MAN1, 'A', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== The Hexen bat is not a monster, but merely a decorative effect.
IMPLEMENT_ACTOR (ABat, Hexen, -1, 0)
PROP_SpeedFixed (5)
PROP_RadiusFixed (3)
PROP_HeightFixed (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_PASSMOBJ)
PROP_SpawnState (S_BAT1)
PROP_DeathState (S_BAT_DEATH)
END_DEFAULTS
FState ABat::States[] =
{
#define S_BAT1 0
S_NORMAL1 (ABAT, 'A', 2, A_BatMove , &States[S_BAT1+1]),
S_NORMAL1 (ABAT, 'B', 2, A_BatMove , &States[S_BAT1+2]),
S_NORMAL1 (ABAT, 'C', 2, A_BatMove , &States[S_BAT1]),
#define S_BAT_DEATH (S_BAT1+3)
S_NORMAL1 (ABAT, 'A', 2, NULL , NULL),
};
------------------------------------------------------------------------
//========== The dark bishops worshiping Korax
IMPLEMENT_ACTOR (ABishop, Hexen, 114, 19)
PROP_SpawnHealth (130)
PROP_RadiusFixed (22)
PROP_HeightFixed (65)
PROP_SpeedFixed (10)
PROP_PainChance (110)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_FLOAT|MF_NOGRAVITY|MF_NOBLOOD)
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL|MF2_TELESTOMP)
PROP_Flags3 (MF3_DONTOVERLAP)
PROP_SpawnState (S_BISHOP_LOOK)
PROP_SeeState (S_BISHOP_WALK)
PROP_PainState (S_BISHOP_PAIN)
PROP_MissileState (S_BISHOP_ATK)
PROP_DeathState (S_BISHOP_DEATH)
PROP_IDeathState (S_BISHOP_ICE)
PROP_SeeSound ("BishopSight")
PROP_AttackSound ("BishopAttack")
PROP_PainSound ("BishopPain")
PROP_DeathSound ("BishopDeath")
PROP_ActiveSound ("BishopActive")
END_DEFAULTS
FState ABishop::States[] =
{
#define S_BISHOP_LOOK 0
S_NORMAL1(BISH, 'A', 10, A_Look , &States[S_BISHOP_LOOK+0]),
#define S_BISHOP_BLUR (S_BISHOP_LOOK+1)
S_NORMAL1(BISH, 'A', 2, A_BishopDoBlur , &States[S_BISHOP_BLUR+1]),
S_NORMAL1(BISH, 'A', 4, A_BishopSpawnBlur , &States[S_BISHOP_BLUR+1]),
#define S_BISHOP_WALK (S_BISHOP_BLUR+2)
S_NORMAL1(BISH, 'A', 2, A_Chase , &States[S_BISHOP_WALK+1]),
S_NORMAL1(BISH, 'A', 2, A_BishopChase , &States[S_BISHOP_WALK+2]),
S_NORMAL1(BISH, 'A', 2, NULL , &States[S_BISHOP_WALK+3]),
S_NORMAL1(BISH, 'B', 2, A_BishopChase , &States[S_BISHOP_WALK+4]),
S_NORMAL1(BISH, 'B', 2, A_Chase , &States[S_BISHOP_WALK+5]),
S_NORMAL1(BISH, 'B', 2, A_BishopChase , &States[S_BISHOP_WALK+6]),
#define S_BISHOP_DECIDE (S_BISHOP_WALK+6)
S_NORMAL1(BISH, 'A', 1, A_BishopDecide , &States[S_BISHOP_WALK+0]),
#define S_BISHOP_ATK (S_BISHOP_DECIDE+1)
S_NORMAL1(BISH, 'A', 3, A_FaceTarget , &States[S_BISHOP_ATK+1]),
S_BRIGHT (BISH, 'D', 3, A_FaceTarget , &States[S_BISHOP_ATK+2]),
S_BRIGHT (BISH, 'E', 3, A_FaceTarget , &States[S_BISHOP_ATK+3]),
S_BRIGHT (BISH, 'F', 3, A_BishopAttack , &States[S_BISHOP_ATK+4]),
S_BRIGHT (BISH, 'F', 5, A_BishopAttack2 , &States[S_BISHOP_ATK+4]),
#define S_BISHOP_PAIN (S_BISHOP_ATK+5)
S_NORMAL1(BISH, 'C', 6, A_Pain , &States[S_BISHOP_PAIN+1]),
S_NORMAL1(BISH, 'C', 6, A_BishopPainBlur , &States[S_BISHOP_PAIN+2]),
S_NORMAL1(BISH, 'C', 6, A_BishopPainBlur , &States[S_BISHOP_PAIN+3]),
S_NORMAL1(BISH, 'C', 6, A_BishopPainBlur , &States[S_BISHOP_PAIN+4]),
S_NORMAL1(BISH, 'C', 0, NULL , &States[S_BISHOP_WALK+0]),
#define S_BISHOP_DEATH (S_BISHOP_PAIN+5)
S_NORMAL1 (BISH, 'G', 6, NULL , &States[S_BISHOP_DEATH+1]),
S_BRIGHT (BISH, 'H', 6, A_Scream , &States[S_BISHOP_DEATH+2]),
S_BRIGHT (BISH, 'I', 5, A_NoBlocking , &States[S_BISHOP_DEATH+3]),
S_BRIGHT (BISH, 'J', 5, A_Explode , &States[S_BISHOP_DEATH+4]),
S_BRIGHT (BISH, 'K', 5, NULL , &States[S_BISHOP_DEATH+5]),
S_BRIGHT (BISH, 'L', 4, NULL , &States[S_BISHOP_DEATH+6]),
S_BRIGHT (BISH, 'M', 4, NULL , &States[S_BISHOP_DEATH+7]),
S_NORMAL1(BISH, 'N', 4, A_BishopPuff , &States[S_BISHOP_DEATH+8]),
S_NORMAL1(BISH, 'O', 4, A_QueueCorpse , &States[S_BISHOP_DEATH+9]),
S_NORMAL1(BISH, 'P', -1, NULL , NULL),
#define S_BISHOP_ICE (S_BISHOP_DEATH+10)
S_NORMAL1(BISH, 'X', 5, A_FreezeDeath , &States[S_BISHOP_ICE+1]),
S_NORMAL1(BISH, 'X', 1, A_FreezeDeathChunks , &States[S_BISHOP_ICE+1])
};
------------------------------------------------------------------------
//========== The cloud of smoke left behind after the dark bishop's death
IMPLEMENT_ACTOR (ABishopPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState ABishopPuff::States[] =
{
S_NORMAL1 (BISH, 'Q', 5, NULL, &States[1]),
S_NORMAL1 (BISH, 'R', 5, NULL, &States[2]),
S_NORMAL1 (BISH, 'S', 5, NULL, &States[3]),
S_NORMAL1 (BISH, 'T', 5, NULL, &States[4]),
S_NORMAL1 (BISH, 'U', 6, NULL, &States[5]),
S_NORMAL1 (BISH, 'V', 6, NULL, &States[6]),
S_NORMAL1 (BISH, 'W', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== The afterimage spawned by the dark bishop after he does a "quick step"
IMPLEMENT_ACTOR (ABishopBlur, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState ABishopBlur::States[] =
{
S_NORMAL1 (BISH, 'A', 16, NULL , &States[1]),
S_NORMAL1 (BISH, 'A', 8, A_SetAltShadow , NULL)
};
------------------------------------------------------------------------
//========== Dark bishop afterimage
IMPLEMENT_ACTOR (ABishopPainBlur, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState ABishopPainBlur::States[] =
{
S_NORMAL1 (BISH, 'C', 8, NULL, NULL)
};
------------------------------------------------------------------------
//========== A weak projectile with minor seeking capabilities fired by the dark bishop that flies in a weaving pattern.
IMPLEMENT_ACTOR (ABishopFX, Hexen, -1, 0)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_SpeedFixed (10)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_SEEKERMISSILE)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_BISHFX1)
PROP_DeathState (S_BISHFXI1)
PROP_DeathSound ("BishopMissileExplode")
END_DEFAULTS
FState ABishopFX::States[] =
{
#define S_BISHFX1 0
S_BRIGHT (BPFX, 'A', 1, A_BishopMissileWeave , &States[S_BISHFX1+1]),
S_BRIGHT (BPFX, 'B', 1, A_BishopMissileWeave , &States[S_BISHFX1+2]),
S_BRIGHT (BPFX, 'A', 1, A_BishopMissileWeave , &States[S_BISHFX1+3]),
S_BRIGHT (BPFX, 'B', 1, A_BishopMissileWeave , &States[S_BISHFX1+4]),
S_BRIGHT (BPFX, 'B', 0, A_BishopMissileSeek , &States[S_BISHFX1+0]),
#define S_BISHFXI1 (S_BISHFX1+5)
S_BRIGHT (BPFX, 'C', 4, NULL , &States[S_BISHFXI1+1]),
S_BRIGHT (BPFX, 'D', 4, NULL , &States[S_BISHFXI1+2]),
S_BRIGHT (BPFX, 'E', 4, NULL , &States[S_BISHFXI1+3]),
S_BRIGHT (BPFX, 'F', 4, NULL , &States[S_BISHFXI1+4]),
S_BRIGHT (BPFX, 'G', 3, NULL , &States[S_BISHFXI1+5]),
S_BRIGHT (BPFX, 'H', 3, NULL , NULL)
};
------------------------------------------------------------------------
//========== Disc of Repulsion artifact
IMPLEMENT_ACTOR (AArtiBlastRadius, Hexen, 10110, 74)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiBlastRadius::States[] =
{
S_BRIGHT (BLST, 'A', 4, NULL, &States[1]),
S_BRIGHT (BLST, 'B', 4, NULL, &States[2]),
S_BRIGHT (BLST, 'C', 4, NULL, &States[3]),
S_BRIGHT (BLST, 'D', 4, NULL, &States[4]),
S_BRIGHT (BLST, 'E', 4, NULL, &States[5]),
S_BRIGHT (BLST, 'F', 4, NULL, &States[6]),
S_BRIGHT (BLST, 'G', 4, NULL, &States[7]),
S_BRIGHT (BLST, 'H', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== The repulsion rings that are spawned on actors affected by a disc of repulsion.
IMPLEMENT_ACTOR (ABlastEffect, Any, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (TRANSLUC66)
PROP_SpawnState (0)
END_DEFAULTS
FState ABlastEffect::States[] =
{
S_NORMAL1(RADE, 'A', 4, NULL, &States[1]),
S_NORMAL1(RADE, 'B', 4, NULL, &States[2]),
S_NORMAL1(RADE, 'C', 4, NULL, &States[3]),
S_NORMAL1(RADE, 'D', 4, NULL, &States[4]),
S_NORMAL1(RADE, 'E', 4, NULL, &States[5]),
S_NORMAL1(RADE, 'F', 4, NULL, &States[6]),
S_NORMAL1(RADE, 'G', 4, NULL, &States[7]),
S_NORMAL1(RADE, 'H', 4, NULL, &States[8]),
S_NORMAL1(RADE, 'I', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Boost Armor Artifact (Dragonskin Bracers)
IMPLEMENT_ACTOR (AArtiBoostArmor, Hexen, 8041, 22)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiBoostArmor::States[] =
{
#define S_ARTI_ARMOR1 0
S_BRIGHT (BRAC, 'A', 4, NULL, &States[1]),
S_BRIGHT (BRAC, 'B', 4, NULL, &States[2]),
S_BRIGHT (BRAC, 'C', 4, NULL, &States[3]),
S_BRIGHT (BRAC, 'D', 4, NULL, &States[4]),
S_BRIGHT (BRAC, 'E', 4, NULL, &States[5]),
S_BRIGHT (BRAC, 'F', 4, NULL, &States[6]),
S_BRIGHT (BRAC, 'G', 4, NULL, &States[7]),
S_BRIGHT (BRAC, 'H', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Centaurs are armored, vaguely leonine chimeras of men and horses
IMPLEMENT_ACTOR (ACentaur, Hexen, 107, 1)
PROP_SpawnHealth (200)
PROP_PainChance (135)
PROP_SpeedFixed (13)
PROP_HeightFixed (64)
PROP_Mass (120)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_SpawnState (S_CENTAUR_LOOK1)
PROP_SeeState (S_CENTAUR_WALK1)
PROP_PainState (S_CENTAUR_PAIN1)
PROP_MeleeState (S_CENTAUR_ATK1)
PROP_DeathState (S_CENTAUR_DEATH1)
PROP_XDeathState (S_CENTAUR_DEATH_X1)
PROP_IDeathState (S_CENTAUR_ICE1)
PROP_SeeSound ("CentaurSight")
PROP_AttackSound ("CentaurAttack")
PROP_PainSound ("CentaurPain")
PROP_DeathSound ("CentaurDeath")
PROP_ActiveSound ("CentaurActive")
END_DEFAULTS
FState ACentaur::States[] =
{
#define S_CENTAUR_LOOK1 0
S_NORMAL1 (CENT, 'A', 10, A_Look , &States[S_CENTAUR_LOOK1+1]),
S_NORMAL1 (CENT, 'B', 10, A_Look , &States[S_CENTAUR_LOOK1]),
#define S_CENTAUR_WALK1 (S_CENTAUR_LOOK1+2)
S_NORMAL1 (CENT, 'A', 4, A_Chase , &States[S_CENTAUR_WALK1+1]),
S_NORMAL1 (CENT, 'B', 4, A_Chase , &States[S_CENTAUR_WALK1+2]),
S_NORMAL1 (CENT, 'C', 4, A_Chase , &States[S_CENTAUR_WALK1+3]),
S_NORMAL1 (CENT, 'D', 4, A_Chase , &States[S_CENTAUR_WALK1]),
#define S_CENTAUR_PAIN1 (S_CENTAUR_WALK1+4)
S_NORMAL1 (CENT, 'G', 6, A_Pain , &States[S_CENTAUR_PAIN1+1]),
S_NORMAL1 (CENT, 'G', 6, A_SetReflectiveInvulnerable, &States[S_CENTAUR_PAIN1+2]),
S_NORMAL1 (CENT, 'E', 15, A_CentaurDefend , &States[S_CENTAUR_PAIN1+3]),
S_NORMAL1 (CENT, 'E', 15, A_CentaurDefend , &States[S_CENTAUR_PAIN1+4]),
S_NORMAL1 (CENT, 'E', 15, A_CentaurDefend , &States[S_CENTAUR_PAIN1+5]),
S_NORMAL1 (CENT, 'E', 1, A_UnSetReflectiveInvulnerable, &States[S_CENTAUR_WALK1]),
#define S_CENTAUR_ATK1 (S_CENTAUR_PAIN1+6)
S_NORMAL1 (CENT, 'H', 5, A_FaceTarget , &States[S_CENTAUR_ATK1+1]),
S_NORMAL1 (CENT, 'I', 4, A_FaceTarget , &States[S_CENTAUR_ATK1+2]),
S_NORMAL1 (CENT, 'J', 7, A_CentaurAttack , &States[S_CENTAUR_WALK1]),
#define S_CENTAUR_MISSILE1 (S_CENTAUR_ATK1+3)
S_NORMAL1 (CENT, 'E', 10, A_FaceTarget , &States[S_CENTAUR_MISSILE1+1]),
S_BRIGHT (CENT, 'F', 8, A_CentaurAttack2 , &States[S_CENTAUR_MISSILE1+2]),
S_NORMAL1 (CENT, 'E', 10, A_FaceTarget , &States[S_CENTAUR_MISSILE1+3]),
S_BRIGHT (CENT, 'F', 8, A_CentaurAttack2 , &States[S_CENTAUR_WALK1]),
#define S_CENTAUR_DEATH1 (S_CENTAUR_MISSILE1+4)
S_NORMAL1 (CENT, 'K', 4, NULL , &States[S_CENTAUR_DEATH1+1]),
S_NORMAL1 (CENT, 'L', 4, A_Scream , &States[S_CENTAUR_DEATH1+2]),
S_NORMAL1 (CENT, 'M', 4, NULL , &States[S_CENTAUR_DEATH1+3]),
S_NORMAL1 (CENT, 'N', 4, NULL , &States[S_CENTAUR_DEATH1+4]),
S_NORMAL1 (CENT, 'O', 4, A_NoBlocking , &States[S_CENTAUR_DEATH1+5]),
S_NORMAL1 (CENT, 'P', 4, NULL , &States[S_CENTAUR_DEATH1+6]),
S_NORMAL1 (CENT, 'Q', 4, NULL , &States[S_CENTAUR_DEATH1+7]),
S_NORMAL1 (CENT, 'R', 4, A_QueueCorpse , &States[S_CENTAUR_DEATH1+8]),
S_NORMAL1 (CENT, 'S', 4, NULL , &States[S_CENTAUR_DEATH1+9]),
S_NORMAL1 (CENT, 'T', -1, NULL , NULL),
#define S_CENTAUR_DEATH_X1 (S_CENTAUR_DEATH1+10)
S_NORMAL1 (CTXD, 'A', 4, NULL , &States[S_CENTAUR_DEATH_X1+1]),
S_NORMAL1 (CTXD, 'B', 4, A_NoBlocking , &States[S_CENTAUR_DEATH_X1+2]),
S_NORMAL1 (CTXD, 'C', 4, A_CentaurDropStuff , &States[S_CENTAUR_DEATH_X1+3]),
S_NORMAL1 (CTXD, 'D', 3, A_Scream , &States[S_CENTAUR_DEATH_X1+4]),
S_NORMAL1 (CTXD, 'E', 4, A_QueueCorpse , &States[S_CENTAUR_DEATH_X1+5]),
S_NORMAL1 (CTXD, 'F', 3, NULL , &States[S_CENTAUR_DEATH_X1+6]),
S_NORMAL1 (CTXD, 'G', 4, NULL , &States[S_CENTAUR_DEATH_X1+7]),
S_NORMAL1 (CTXD, 'H', 3, NULL , &States[S_CENTAUR_DEATH_X1+8]),
S_NORMAL1 (CTXD, 'I', 4, NULL , &States[S_CENTAUR_DEATH_X1+9]),
S_NORMAL1 (CTXD, 'J', 3, NULL , &States[S_CENTAUR_DEATH_X1+10]),
S_NORMAL1 (CTXD, 'K', -1, NULL , NULL),
#define S_CENTAUR_ICE1 (S_CENTAUR_DEATH_X1+11)
S_NORMAL1 (CENT, 'U', 5, A_FreezeDeath , &States[S_CENTAUR_ICE1+1]),
S_NORMAL1 (CENT, 'U', 1, A_FreezeDeathChunks , &States[S_CENTAUR_ICE1+1]),
};
------------------------------------------------------------------------
//========== Slaughtaurs are the elite caste of centaurs.
IMPLEMENT_STATELESS_ACTOR (ACentaurLeader, Hexen, 115, 2)
PROP_SpawnHealth (250)
PROP_PainChance (96)
PROP_SpeedFixed (10)
PROP_MissileState (S_CENTAUR_MISSILE1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Ghostly centaurs spawned by Hexen's final boss, Korax.
IMPLEMENT_STATELESS_ACTOR (ACentaurMash, Hexen, -1, 103)
PROP_FlagsSet (MF_NOBLOOD)
PROP_Flags2Set (MF2_BLASTED)
PROP_Flags2Clear (MF2_TELESTOMP)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_DeathState (~0)
PROP_XDeathState (~0)
PROP_IDeathState (~0)
END_DEFAULTS
------------------------------------------------------------------------
//========== The projectile fired by a Slaughtaur's shield.
IMPLEMENT_ACTOR (ACentaurFX, Hexen, -1, 0)
PROP_SpeedFixed (20)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_CENTAUR_FX1)
PROP_DeathState (S_CENTAUR_FX_X1)
PROP_DeathSound ("CentaurMissileExplode")
END_DEFAULTS
FState ACentaurFX::States[] =
{
#define S_CENTAUR_FX1 0
S_BRIGHT (CTFX, 'A', -1, NULL, NULL),
#define S_CENTAUR_FX_X1 (S_CENTAUR_FX1+1)
S_BRIGHT (CTFX, 'B', 4, NULL, &States[S_CENTAUR_FX_X1+1]),
S_BRIGHT (CTFX, 'C', 3, NULL, &States[S_CENTAUR_FX_X1+2]),
S_BRIGHT (CTFX, 'D', 4, NULL, &States[S_CENTAUR_FX_X1+3]),
S_BRIGHT (CTFX, 'E', 3, NULL, &States[S_CENTAUR_FX_X1+4]),
S_BRIGHT (CTFX, 'F', 2, NULL, NULL),
};
------------------------------------------------------------------------
//========== A magic shield that gives reflective invulnerability and a ranged attack, spawned when a centaur or slaughtaur is gibbed.
IMPLEMENT_ACTOR (ACentaurShield, Hexen, -1, 0)
PROP_Flags (MF_DROPOFF|MF_CORPSE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_CENTAUR_SHIELD1)
PROP_DeathState (S_CENTAUR_SHIELD_X1)
END_DEFAULTS
FState ACentaurShield::States[] =
{
#define S_CENTAUR_SHIELD1 0
S_NORMAL1 (CTDP, 'A', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+1]),
S_NORMAL1 (CTDP, 'B', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+2]),
S_NORMAL1 (CTDP, 'C', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+3]),
S_NORMAL1 (CTDP, 'D', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+4]),
S_NORMAL1 (CTDP, 'E', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+5]),
S_NORMAL1 (CTDP, 'F', 3, A_CheckFloor , &States[S_CENTAUR_SHIELD1+2]),
#define S_CENTAUR_SHIELD_X1 (S_CENTAUR_SHIELD1+6)
S_NORMAL1 (CTDP, 'G', 4, NULL , &States[S_CENTAUR_SHIELD_X1+1]),
S_NORMAL1 (CTDP, 'H', 4, A_QueueCorpse , &States[S_CENTAUR_SHIELD_X1+2]),
S_NORMAL1 (CTDP, 'I', 4, NULL , &States[S_CENTAUR_SHIELD_X1+3]),
S_NORMAL1 (CTDP, 'J', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== A sword, spawned when a centaur or slaughtaur is gibbed.
IMPLEMENT_ACTOR (ACentaurSword, Hexen, -1, 0)
PROP_Flags (MF_DROPOFF|MF_CORPSE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_CENTAUR_SWORD1)
PROP_DeathState (S_CENTAUR_SWORD_X1)
END_DEFAULTS
FState ACentaurSword::States[] =
{
#define S_CENTAUR_SWORD1 0
S_NORMAL1 (CTDP, 'K', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+1]),
S_NORMAL1 (CTDP, 'L', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+2]),
S_NORMAL1 (CTDP, 'M', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+3]),
S_NORMAL1 (CTDP, 'N', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+4]),
S_NORMAL1 (CTDP, 'O', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+5]),
S_NORMAL1 (CTDP, 'P', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+6]),
S_NORMAL1 (CTDP, 'Q', 3, A_CheckFloor , &States[S_CENTAUR_SWORD1+2]),
#define S_CENTAUR_SWORD_X1 (S_CENTAUR_SWORD1+7)
S_NORMAL1 (CTDP, 'R', 4, NULL , &States[S_CENTAUR_SWORD_X1+1]),
S_NORMAL1 (CTDP, 'S', 4, A_QueueCorpse , &States[S_CENTAUR_SWORD_X1+2]),
S_NORMAL1 (CTDP, 'T', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Cleric Boss (Traductus): one of the three penultimate bosses of Hexen.
IMPLEMENT_ACTOR (AClericBoss, Hexen, 10101, 0)
PROP_SpawnHealth (800)
PROP_PainChance (50)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_SpawnState (S_CLERIC)
PROP_SeeState (S_CLERIC_RUN1)
PROP_PainState (S_CLERIC_PAIN)
PROP_MeleeState (S_CLERIC_ATK1)
PROP_MissileState (S_CLERIC_ATK1)
PROP_DeathState (S_CLERIC_DIE1)
PROP_XDeathState (S_CLERIC_XDIE1)
PROP_BDeathState (S_CLERIC_BURN)
PROP_IDeathState (S_CLERIC_ICE)
PROP_PainSound ("PlayerClericPain")
PROP_DeathSound ("PlayerClericCrazyDeath")
END_DEFAULTS
FState AClericBoss::States[] =
{
#define S_CLERIC 0
S_NORMAL1 (CLER, 'A', 2, NULL , &States[S_CLERIC+1]),
S_NORMAL1 (CLER, 'A', 3, A_ClassBossHealth , &States[S_CLERIC+2]),
S_NORMAL1 (CLER, 'A', 5, A_Look , &States[S_CLERIC+2]),
#define S_CLERIC_RUN1 (S_CLERIC+3)
S_NORMAL1 (CLER, 'A', 4, A_FastChase , &States[S_CLERIC_RUN1+1]),
S_NORMAL1 (CLER, 'B', 4, A_FastChase , &States[S_CLERIC_RUN1+2]),
S_NORMAL1 (CLER, 'C', 4, A_FastChase , &States[S_CLERIC_RUN1+3]),
S_NORMAL1 (CLER, 'D', 4, A_FastChase , &States[S_CLERIC_RUN1]),
#define S_CLERIC_PAIN (S_CLERIC_RUN1+4)
S_NORMAL1 (CLER, 'H', 4, NULL , &States[S_CLERIC_PAIN+1]),
S_NORMAL1 (CLER, 'H', 4, A_Pain , &States[S_CLERIC_RUN1]),
#define S_CLERIC_ATK1 (S_CLERIC_PAIN+2)
S_NORMAL1 (CLER, 'E', 8, A_FaceTarget , &States[S_CLERIC_ATK1+1]),
S_NORMAL1 (CLER, 'F', 8, A_FaceTarget , &States[S_CLERIC_ATK1+2]),
S_NORMAL1 (CLER, 'G', 10, A_ClericAttack , &States[S_CLERIC_RUN1]),
#define S_CLERIC_DIE1 (S_CLERIC_ATK1+3)
S_NORMAL1 (CLER, 'I', 6, NULL , &States[S_CLERIC_DIE1+1]),
S_NORMAL1 (CLER, 'K', 6, A_Scream , &States[S_CLERIC_DIE1+2]),
S_NORMAL1 (CLER, 'L', 6, NULL , &States[S_CLERIC_DIE1+3]),
S_NORMAL1 (CLER, 'L', 6, NULL , &States[S_CLERIC_DIE1+4]),
S_NORMAL1 (CLER, 'M', 6, A_NoBlocking , &States[S_CLERIC_DIE1+5]),
S_NORMAL1 (CLER, 'N', 6, NULL , &States[S_CLERIC_DIE1+6]),
S_NORMAL1 (CLER, 'O', 6, NULL , &States[S_CLERIC_DIE1+7]),
S_NORMAL1 (CLER, 'P', 6, NULL , &States[S_CLERIC_DIE1+8]),
S_NORMAL1 (CLER, 'Q', -1, NULL , NULL),
#define S_CLERIC_XDIE1 (S_CLERIC_DIE1+9)
S_NORMAL1 (CLER, 'R', 5, A_Scream , &States[S_CLERIC_XDIE1+1]),
S_NORMAL1 (CLER, 'S', 5, NULL , &States[S_CLERIC_XDIE1+2]),
S_NORMAL1 (CLER, 'T', 5, A_NoBlocking , &States[S_CLERIC_XDIE1+3]),
S_NORMAL1 (CLER, 'U', 5, NULL , &States[S_CLERIC_XDIE1+4]),
S_NORMAL1 (CLER, 'V', 5, NULL , &States[S_CLERIC_XDIE1+5]),
S_NORMAL1 (CLER, 'W', 5, NULL , &States[S_CLERIC_XDIE1+6]),
S_NORMAL1 (CLER, 'X', 5, NULL , &States[S_CLERIC_XDIE1+7]),
S_NORMAL1 (CLER, 'Y', 5, NULL , &States[S_CLERIC_XDIE1+8]),
S_NORMAL1 (CLER, 'Z', 5, NULL , &States[S_CLERIC_XDIE1+9]),
S_NORMAL1 (CLER, '[', -1, NULL , NULL),
#define S_CLERIC_ICE (S_CLERIC_XDIE1+10)
S_NORMAL1 (CLER, '\\', 5, A_FreezeDeath , &States[S_CLERIC_ICE+1]),
S_NORMAL1 (CLER, '\\', 1, A_FreezeDeathChunks , &States[S_CLERIC_ICE+1]),
#define S_CLERIC_BURN (S_CLERIC_ICE+2)
S_BRIGHT (FDTH, 'C', 5, A_ClericBurnScream , &States[S_CLERIC_BURN+1]),
S_BRIGHT (FDTH, 'D', 4, NULL , &States[S_CLERIC_BURN+2]),
S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_CLERIC_BURN+3]),
S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_CLERIC_BURN+4]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_CLERIC_BURN+5]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_CLERIC_BURN+6]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_CLERIC_BURN+7]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_CLERIC_BURN+8]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_CLERIC_BURN+9]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_CLERIC_BURN+10]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_CLERIC_BURN+11]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_CLERIC_BURN+12]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_CLERIC_BURN+13]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_CLERIC_BURN+14]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_CLERIC_BURN+15]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_CLERIC_BURN+16]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_CLERIC_BURN+17]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_CLERIC_BURN+18]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_CLERIC_BURN+18]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
};
------------------------------------------------------------------------
//========== The Cleric's firestorm spell
IMPLEMENT_ACTOR (ACWeapFlame, Hexen, 8009, 0)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (S_CFLAME1)
END_DEFAULTS
FState ACWeapFlame::States[] =
{
#define S_CFLAME1 0
S_BRIGHT (WCFM, 'A', 4, NULL , &States[S_CFLAME1+1]),
S_BRIGHT (WCFM, 'B', 4, NULL , &States[S_CFLAME1+2]),
S_BRIGHT (WCFM, 'C', 4, NULL , &States[S_CFLAME1+3]),
S_BRIGHT (WCFM, 'D', 4, NULL , &States[S_CFLAME1+4]),
S_BRIGHT (WCFM, 'E', 4, NULL , &States[S_CFLAME1+5]),
S_BRIGHT (WCFM, 'F', 4, NULL , &States[S_CFLAME1+6]),
S_BRIGHT (WCFM, 'G', 4, NULL , &States[S_CFLAME1+7]),
S_BRIGHT (WCFM, 'H', 4, NULL , &States[S_CFLAME1]),
#define S_CFLAMEREADY (S_CFLAME1+8)
S_NORMAL1(CFLM, 'A', 1, A_WeaponReady , &States[S_CFLAMEREADY+1]),
S_NORMAL1(CFLM, 'A', 1, A_WeaponReady , &States[S_CFLAMEREADY+2]),
S_NORMAL1(CFLM, 'A', 1, A_WeaponReady , &States[S_CFLAMEREADY+3]),
S_NORMAL1(CFLM, 'A', 1, A_WeaponReady , &States[S_CFLAMEREADY+4]),
S_NORMAL1(CFLM, 'B', 1, A_WeaponReady , &States[S_CFLAMEREADY+5]),
S_NORMAL1(CFLM, 'B', 1, A_WeaponReady , &States[S_CFLAMEREADY+6]),
S_NORMAL1(CFLM, 'B', 1, A_WeaponReady , &States[S_CFLAMEREADY+7]),
S_NORMAL1(CFLM, 'B', 1, A_WeaponReady , &States[S_CFLAMEREADY+8]),
S_NORMAL1(CFLM, 'C', 1, A_WeaponReady , &States[S_CFLAMEREADY+9]),
S_NORMAL1(CFLM, 'C', 1, A_WeaponReady , &States[S_CFLAMEREADY+10]),
S_NORMAL1(CFLM, 'C', 1, A_WeaponReady , &States[S_CFLAMEREADY+11]),
S_NORMAL1(CFLM, 'C', 1, A_WeaponReady , &States[S_CFLAMEREADY]),
#define S_CFLAMEDOWN (S_CFLAMEREADY+12)
S_NORMAL1(CFLM, 'A', 1, A_Lower , &States[S_CFLAMEDOWN]),
#define S_CFLAMEUP (S_CFLAMEDOWN+1)
S_NORMAL1(CFLM, 'A', 1, A_Raise , &States[S_CFLAMEUP]),
#define S_CFLAMEATK (S_CFLAMEUP+1)
S_NORMAL2 (CFLM, 'A', 2, NULL , &States[S_CFLAMEATK+1], 0, 40),
S_NORMAL2 (CFLM, 'D', 2, NULL , &States[S_CFLAMEATK+2], 0, 50),
S_NORMAL2 (CFLM, 'D', 2, NULL , &States[S_CFLAMEATK+3], 0, 36),
S_BRIGHT (CFLM, 'E', 4, NULL , &States[S_CFLAMEATK+4]),
S_BRIGHT (CFLM, 'F', 4, A_CFlameAttack , &States[S_CFLAMEATK+5]),
S_BRIGHT (CFLM, 'E', 4, NULL , &States[S_CFLAMEATK+6]),
S_NORMAL2 (CFLM, 'G', 2, NULL , &States[S_CFLAMEATK+7], 0, 40),
S_NORMAL1(CFLM, 'G', 2, NULL , &States[S_CFLAMEREADY]),
};
FWeaponInfo ACWeapFlame::WeaponInfo =
{
0, // DWORD flags;
MANA_2, // ammotype_t ammo;
4, // int ammouse;
25, // int ammogive;
&States[S_CFLAMEUP], // FState *upstate;
&States[S_CFLAMEDOWN], // FState *downstate;
&States[S_CFLAMEREADY], // FState *readystate;
&States[S_CFLAMEATK], // FState *atkstate;
&States[S_CFLAMEATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
6*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(ACWeapFlame), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Firestorm floor flame
IMPLEMENT_ACTOR (ACFlameFloor, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
END_DEFAULTS
FState ACFlameFloor::States[] =
{
S_BRIGHT (CFFX, 'N', 5, NULL, &States[1]),
S_BRIGHT (CFFX, 'O', 4, NULL, &States[2]),
S_BRIGHT (CFFX, 'P', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Firestorm puff
IMPLEMENT_ACTOR (AFlamePuff, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
PROP_SeeSound ("ClericFlameExplode")
PROP_AttackSound ("ClericFlameExplode")
END_DEFAULTS
FState AFlamePuff::States[] =
{
S_BRIGHT (CFFX, 'A', 3, NULL, &States[1]),
S_BRIGHT (CFFX, 'B', 3, NULL, &States[2]),
S_BRIGHT (CFFX, 'C', 3, NULL, &States[3]),
S_BRIGHT (CFFX, 'D', 4, NULL, &States[4]),
S_BRIGHT (CFFX, 'E', 3, NULL, &States[5]),
S_BRIGHT (CFFX, 'F', 4, NULL, &States[6]),
S_BRIGHT (CFFX, 'G', 3, NULL, &States[7]),
S_BRIGHT (CFFX, 'H', 4, NULL, &States[8]),
S_BRIGHT (CFFX, 'I', 3, NULL, &States[9]),
S_BRIGHT (CFFX, 'J', 4, NULL, &States[10]),
S_BRIGHT (CFFX, 'K', 3, NULL, &States[11]),
S_BRIGHT (CFFX, 'L', 4, NULL, &States[12]),
S_BRIGHT (CFFX, 'M', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Firestorm puff 2
IMPLEMENT_ACTOR (AFlamePuff2, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
PROP_SeeSound ("ClericFlameExplode")
PROP_AttackSound ("ClericFlameExplode")
END_DEFAULTS
FState AFlamePuff2::States[] =
{
S_BRIGHT (CFFX, 'A', 3, NULL, &States[1]),
S_BRIGHT (CFFX, 'B', 3, NULL, &States[2]),
S_BRIGHT (CFFX, 'C', 3, NULL, &States[3]),
S_BRIGHT (CFFX, 'D', 4, NULL, &States[4]),
S_BRIGHT (CFFX, 'E', 3, NULL, &States[5]),
S_BRIGHT (CFFX, 'F', 4, NULL, &States[6]),
S_BRIGHT (CFFX, 'G', 3, NULL, &States[7]),
S_BRIGHT (CFFX, 'H', 4, NULL, &States[8]),
S_BRIGHT (CFFX, 'I', 3, NULL, &States[9]),
S_BRIGHT (CFFX, 'C', 3, NULL, &States[10]),
S_BRIGHT (CFFX, 'D', 4, NULL, &States[11]),
S_BRIGHT (CFFX, 'E', 3, NULL, &States[12]),
S_BRIGHT (CFFX, 'F', 4, NULL, &States[13]),
S_BRIGHT (CFFX, 'G', 3, NULL, &States[14]),
S_BRIGHT (CFFX, 'H', 4, NULL, &States[15]),
S_BRIGHT (CFFX, 'I', 3, NULL, &States[16]),
S_BRIGHT (CFFX, 'J', 4, NULL, &States[17]),
S_BRIGHT (CFFX, 'K', 3, NULL, &States[18]),
S_BRIGHT (CFFX, 'L', 4, NULL, &States[19]),
S_BRIGHT (CFFX, 'M', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Firestorm circle flame
IMPLEMENT_ACTOR (ACircleFlame, Hexen, -1, 0)
PROP_RadiusFixed (6)
PROP_Damage (2)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_CIRCLE_FLAME1)
PROP_DeathState (S_CIRCLE_FLAME_X1)
PROP_DeathSound ("ClericFlameCircle")
END_DEFAULTS
FState ACircleFlame::States[] =
{
#define S_CIRCLE_FLAME1 0
S_BRIGHT (CFCF, 'A', 4, NULL , &States[S_CIRCLE_FLAME1+1]),
S_BRIGHT (CFCF, 'B', 2, A_CFlameRotate , &States[S_CIRCLE_FLAME1+2]),
S_BRIGHT (CFCF, 'C', 2, NULL , &States[S_CIRCLE_FLAME1+3]),
S_BRIGHT (CFCF, 'D', 1, NULL , &States[S_CIRCLE_FLAME1+4]),
S_BRIGHT (CFCF, 'E', 2, NULL , &States[S_CIRCLE_FLAME1+5]),
S_BRIGHT (CFCF, 'F', 2, A_CFlameRotate , &States[S_CIRCLE_FLAME1+6]),
S_BRIGHT (CFCF, 'G', 1, NULL , &States[S_CIRCLE_FLAME1+7]),
S_BRIGHT (CFCF, 'H', 2, NULL , &States[S_CIRCLE_FLAME1+8]),
S_BRIGHT (CFCF, 'I', 2, NULL , &States[S_CIRCLE_FLAME1+9]),
S_BRIGHT (CFCF, 'J', 1, A_CFlameRotate , &States[S_CIRCLE_FLAME1+10]),
S_BRIGHT (CFCF, 'K', 2, NULL , &States[S_CIRCLE_FLAME1+11]),
S_BRIGHT (CFCF, 'L', 3, NULL , &States[S_CIRCLE_FLAME1+12]),
S_BRIGHT (CFCF, 'M', 3, NULL , &States[S_CIRCLE_FLAME1+13]),
S_BRIGHT (CFCF, 'N', 2, A_CFlameRotate , &States[S_CIRCLE_FLAME1+14]),
S_BRIGHT (CFCF, 'O', 3, NULL , &States[S_CIRCLE_FLAME1+15]),
S_BRIGHT (CFCF, 'P', 2, NULL , NULL),
#define S_CIRCLE_FLAME_X1 (S_CIRCLE_FLAME1+16)
S_BRIGHT (CFCF, 'Q', 3, NULL , &States[S_CIRCLE_FLAME_X1+1]),
S_BRIGHT (CFCF, 'R', 3, NULL , &States[S_CIRCLE_FLAME_X1+2]),
S_BRIGHT (CFCF, 'S', 3, A_Explode , &States[S_CIRCLE_FLAME_X1+3]),
S_BRIGHT (CFCF, 'T', 3, NULL , &States[S_CIRCLE_FLAME_X1+4]),
S_BRIGHT (CFCF, 'U', 3, NULL , &States[S_CIRCLE_FLAME_X1+5]),
S_BRIGHT (CFCF, 'V', 3, NULL , &States[S_CIRCLE_FLAME_X1+6]),
S_BRIGHT (CFCF, 'W', 3, NULL , &States[S_CIRCLE_FLAME_X1+7]),
S_BRIGHT (CFCF, 'X', 3, NULL , &States[S_CIRCLE_FLAME_X1+8]),
S_BRIGHT (CFCF, 'Y', 3, NULL , &States[S_CIRCLE_FLAME_X1+9]),
S_BRIGHT (CFCF, 'Z', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Firestom missile
IMPLEMENT_ACTOR (ACFlameMissile, Hexen, -1, 0)
PROP_SpeedFixed (200)
PROP_RadiusFixed (14)
PROP_HeightFixed (8)
PROP_Damage (8)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_RenderFlags (RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_CFLAME_MISSILE1)
PROP_DeathState (S_CFLAME_MISSILE_X)
END_DEFAULTS
FState ACFlameMissile::States[] =
{
#define S_CFLAME_MISSILE1 0
S_BRIGHT (CFFX, 'A', 4, NULL , &States[S_CFLAME_MISSILE1+1]),
S_NORMAL1(CFFX, 'A', 1, A_CFlamePuff , &AFlamePuff::States[0]),
#define S_CFLAME_MISSILE_X (S_CFLAME_MISSILE1+2)
S_BRIGHT (CFFX, 'A', 1, A_CFlameMissile , &AFlamePuff::States[0]),
};
------------------------------------------------------------------------
//========== One of three pieces of the Wraithverge (cleric's fourth weapon).
IMPLEMENT_ACTOR (ACWeaponPiece1, Hexen, 18, 33)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ACWeaponPiece1::States[] =
{
S_BRIGHT (WCH1, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== One of three pieces of the Wraithverge (cleric's fourth weapon).
IMPLEMENT_ACTOR (ACWeaponPiece2, Hexen, 19, 34)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ACWeaponPiece2::States[] =
{
S_BRIGHT (WCH2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== One of three pieces of the Wraithverge (cleric's fourth weapon).
IMPLEMENT_ACTOR (ACWeaponPiece3, Hexen, 20, 35)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ACWeaponPiece3::States[] =
{
S_BRIGHT (WCH3, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== An actor that spawns the three pieces of the Wraithverge (cleric's fourth weapon). It gets spawned if weapon drop is on so that other players can pick up the dead player's weapon.
IMPLEMENT_ACTOR (AWraithvergeDrop, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState AWraithvergeDrop::States[] =
{
S_NORMAL1(TNT1, 'A', 1, NULL, &States[1]),
S_NORMAL1(TNT1, 'A', 1, A_DropWraithvergePieces, NULL)
};
------------------------------------------------------------------------
//========== Wraithverge: cleric's ultimate weapon
IMPLEMENT_ACTOR (ACWeapWraithverge, Hexen, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ACWeapWraithverge::States[] =
{
// Dummy state, because the fourth weapon does not appear in a level directly.
S_NORMAL1(TNT1, 'A', -1, NULL , NULL),
#define S_CHOLYREADY 1
S_NORMAL1(CHLY, 'A', 1, A_WeaponReady , &States[S_CHOLYREADY]),
#define S_CHOLYDOWN (S_CHOLYREADY+1)
S_NORMAL1(CHLY, 'A', 1, A_Lower , &States[S_CHOLYDOWN]),
#define S_CHOLYUP (S_CHOLYDOWN+1)
S_NORMAL1(CHLY, 'A', 1, A_Raise , &States[S_CHOLYUP]),
#define S_CHOLYATK (S_CHOLYUP+1)
S_BRIGHT2 (CHLY, 'A', 1, NULL , &States[S_CHOLYATK+1], 0, 40),
S_BRIGHT2 (CHLY, 'B', 1, NULL , &States[S_CHOLYATK+2], 0, 40),
S_BRIGHT2 (CHLY, 'C', 2, NULL , &States[S_CHOLYATK+3], 0, 43),
S_BRIGHT2 (CHLY, 'D', 2, NULL , &States[S_CHOLYATK+4], 0, 43),
S_BRIGHT2 (CHLY, 'E', 2, NULL , &States[S_CHOLYATK+5], 0, 45),
S_BRIGHT2 (CHLY, 'F', 6, A_CHolyAttack , &States[S_CHOLYATK+6], 0, 48),
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYATK+7], 0, 40),
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYATK+8], 0, 40),
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYREADY], 0, 36)
};
FWeaponInfo ACWeapWraithverge::WeaponInfo =
{
0, // DWORD flags;
MANA_BOTH, // ammotype_t ammo;
18, // int ammouse;
0, // int ammogive;
&States[S_CHOLYUP], // FState *upstate;
&States[S_CHOLYDOWN], // FState *downstate;
&States[S_CHOLYREADY], // FState *readystate;
&States[S_CHOLYATK], // FState *atkstate;
&States[S_CHOLYATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
0, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(ACWeapWraithverge), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Wraithverge spirit ball
IMPLEMENT_ACTOR (AHolyMissile, Hexen, -1, 0)
PROP_SpeedFixed (30)
PROP_RadiusFixed (15)
PROP_HeightFixed (8)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (0)
PROP_DeathState (4)
END_DEFAULTS
FState AHolyMissile::States[] =
{
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[1]),
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[2]),
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[3]),
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[4]),
S_BRIGHT (SPIR, 'P', 1, A_CHolyAttack2 , NULL),
};
------------------------------------------------------------------------
//========== Wraithverge spirit ball puff
IMPLEMENT_ACTOR (AHolyMissilePuff, Hexen, -1, 0)
PROP_RadiusFixed (4)
PROP_HeightFixed (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AHolyMissilePuff::States[] =
{
S_NORMAL1(SPIR, 'Q', 3, NULL, &States[1]),
S_NORMAL1(SPIR, 'R', 3, NULL, &States[2]),
S_NORMAL1(SPIR, 'S', 3, NULL, &States[3]),
S_NORMAL1(SPIR, 'T', 3, NULL, &States[4]),
S_NORMAL1(SPIR, 'U', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Wraithverge spirit puff
IMPLEMENT_ACTOR (AHolyPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AHolyPuff::States[] =
{
S_NORMAL1(SPIR, 'K', 3, NULL, &States[1]),
S_NORMAL1(SPIR, 'L', 3, NULL, &States[2]),
S_NORMAL1(SPIR, 'M', 3, NULL, &States[3]),
S_NORMAL1(SPIR, 'N', 3, NULL, &States[4]),
S_NORMAL1(SPIR, 'O', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Wraithverge spirit
IMPLEMENT_ACTOR (AHolySpirit, Hexen, -1, 0)
PROP_SpawnHealth (105)
PROP_SpeedFixed (12)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_IMPACT|MF2_PCROSS|MF2_SEEKERMISSILE)
PROP_Flags3 (MF3_FOILINVUL|MF3_SKYEXPLODE|MF3_NOEXPLODEFLOOR|MF3_CANBLAST)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (S_HOLY_FX1)
PROP_DeathState (S_HOLY_FX_X1)
PROP_DeathSound ("SpiritDie")
END_DEFAULTS
FState AHolySpirit::States[] =
{
#define S_HOLY_FX1 0
S_NORMAL1(SPIR, 'A', 2, A_CHolySeek , &States[S_HOLY_FX1+1]),
S_NORMAL1(SPIR, 'A', 2, A_CHolySeek , &States[S_HOLY_FX1+2]),
S_NORMAL1(SPIR, 'B', 2, A_CHolySeek , &States[S_HOLY_FX1+3]),
S_NORMAL1(SPIR, 'B', 2, A_CHolyCheckScream , &States[S_HOLY_FX1]),
#define S_HOLY_FX_X1 (S_HOLY_FX1+4)
S_NORMAL1(SPIR, 'D', 4, NULL , &States[S_HOLY_FX_X1+1]),
S_NORMAL1(SPIR, 'E', 4, A_Scream , &States[S_HOLY_FX_X1+2]),
S_NORMAL1(SPIR, 'F', 4, NULL , &States[S_HOLY_FX_X1+3]),
S_NORMAL1(SPIR, 'G', 4, NULL , &States[S_HOLY_FX_X1+4]),
S_NORMAL1(SPIR, 'H', 4, NULL , &States[S_HOLY_FX_X1+5]),
S_NORMAL1(SPIR, 'I', 4, NULL , NULL),
};
------------------------------------------------------------------------
//========== Wraithverge spirit tail
IMPLEMENT_ACTOR (AHolyTail, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_NOCLIP)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AHolyTail::States[] =
{
S_NORMAL1(SPIR, 'C', 1, A_CHolyTail , &States[0]),
S_NORMAL1(SPIR, 'D', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Wraithverge spirit trail
IMPLEMENT_STATELESS_ACTOR (AHolyTailTrail, Hexen, -1, 0)
PROP_SpawnState (1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Mace of contrition
IMPLEMENT_ACTOR (ACWeapMace, Hexen, -1, 0)
END_DEFAULTS
FState ACWeapMace::States[] =
{
#define S_CMACEREADY 0
S_NORMAL1(CMCE, 'A', 1, A_WeaponReady , &States[S_CMACEREADY]),
#define S_CMACEDOWN (S_CMACEREADY+1)
S_NORMAL1(CMCE, 'A', 1, A_Lower , &States[S_CMACEDOWN]),
#define S_CMACEUP (S_CMACEDOWN+1)
S_NORMAL1(CMCE, 'A', 1, A_Raise , &States[S_CMACEUP]),
#define S_CMACEATK (S_CMACEUP+1)
S_NORMAL2 (CMCE, 'B', 2, NULL , &States[S_CMACEATK+1], 60, 20),
S_NORMAL2 (CMCE, 'B', 1, NULL , &States[S_CMACEATK+2], 30, 33),
S_NORMAL2 (CMCE, 'B', 2, NULL , &States[S_CMACEATK+3], 8, 45),
S_NORMAL2 (CMCE, 'C', 1, NULL , &States[S_CMACEATK+4], 8, 45),
S_NORMAL2 (CMCE, 'D', 1, NULL , &States[S_CMACEATK+5], 8, 45),
S_NORMAL2 (CMCE, 'E', 1, NULL , &States[S_CMACEATK+6], 8, 45),
S_NORMAL2 (CMCE, 'E', 1, A_CMaceAttack , &States[S_CMACEATK+7], -11, 58),
S_NORMAL2 (CMCE, 'F', 1, NULL , &States[S_CMACEATK+8], 8, 45),
S_NORMAL2 (CMCE, 'F', 2, NULL , &States[S_CMACEATK+9], -8, 74),
S_NORMAL2 (CMCE, 'F', 1, NULL , &States[S_CMACEATK+10], -20, 96),
S_NORMAL2 (CMCE, 'F', 8, NULL , &States[S_CMACEATK+11], -33, 160),
S_NORMAL2 (CMCE, 'A', 2, A_ReFire , &States[S_CMACEATK+12], 8, 75),
S_NORMAL2 (CMCE, 'A', 1, NULL , &States[S_CMACEATK+13], 8, 65),
S_NORMAL2 (CMCE, 'A', 2, NULL , &States[S_CMACEATK+14], 8, 60),
S_NORMAL2 (CMCE, 'A', 1, NULL , &States[S_CMACEATK+15], 8, 55),
S_NORMAL2 (CMCE, 'A', 2, NULL , &States[S_CMACEATK+16], 8, 50),
S_NORMAL2 (CMCE, 'A', 1, NULL , &States[S_CMACEREADY], 8, 45),
};
FWeaponInfo ACWeapMace::WeaponInfo =
{
0, // DWORD flags;
MANA_NONE, // ammotype_t ammo;
0, // int ammouse;
0, // int ammogive;
&States[S_CMACEUP], // FState *upstate;
&States[S_CMACEDOWN], // FState *downstate;
&States[S_CMACEREADY], // FState *readystate;
&States[S_CMACEATK], // FState *atkstate;
&States[S_CMACEATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
-8*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(ACWeapMace), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== The Cleric is one of the three character classes available to Hexen players.
IMPLEMENT_ACTOR (AClericPlayer, Hexen, -1, 0)
PROP_SpawnHealth (100)
PROP_ReactionTime (0)
PROP_PainChance (255)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_SpeedFixed (1)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH|MF_FRIENDLY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_Flags4 (MF4_NOSKIN)
PROP_SpawnState (S_CPLAY)
PROP_SeeState (S_CPLAY_RUN1)
PROP_PainState (S_CPLAY_PAIN)
PROP_MissileState (S_CPLAY_ATK1)
PROP_DeathState (S_CPLAY_DIE1)
PROP_XDeathState (S_CPLAY_XDIE1)
PROP_BDeathState (S_PLAY_C_FDTH)
PROP_IDeathState (S_CPLAY_ICE)
PROP_PainSound ("PlayerClericPain")
END_DEFAULTS
FState AClericPlayer::States[] =
{
#define S_CPLAY 0
S_NORMAL1(CLER, 'A', -1, NULL , NULL),
#define S_CPLAY_RUN1 (S_CPLAY+1)
S_NORMAL1(CLER, 'A', 4, NULL , &States[S_CPLAY_RUN1+1]),
S_NORMAL1(CLER, 'B', 4, NULL , &States[S_CPLAY_RUN1+2]),
S_NORMAL1(CLER, 'C', 4, NULL , &States[S_CPLAY_RUN1+3]),
S_NORMAL1(CLER, 'D', 4, NULL , &States[S_CPLAY_RUN1]),
#define S_CPLAY_PAIN (S_CPLAY_RUN1+4)
S_NORMAL1(CLER, 'H', 4, NULL , &States[S_CPLAY_PAIN+1]),
S_NORMAL1(CLER, 'H', 4, A_Pain , &States[S_CPLAY]),
#define S_CPLAY_ATK1 (S_CPLAY_PAIN+2)
S_NORMAL1(CLER, 'E', 6, NULL , &States[S_CPLAY_ATK1+1]),
S_NORMAL1(CLER, 'F', 6, NULL , &States[S_CPLAY_ATK1+2]),
S_NORMAL1(CLER, 'G', 6, NULL , &States[S_CPLAY]),
#define S_CPLAY_DIE1 (S_CPLAY_ATK1+3)
S_NORMAL1(CLER, 'I', 6, NULL , &States[S_CPLAY_DIE1+1]),
S_NORMAL1(CLER, 'K', 6, A_PlayerScream , &States[S_CPLAY_DIE1+2]),
S_NORMAL1(CLER, 'L', 6, NULL , &States[S_CPLAY_DIE1+3]),
S_NORMAL1(CLER, 'L', 6, NULL , &States[S_CPLAY_DIE1+4]),
S_NORMAL1(CLER, 'M', 6, A_NoBlocking , &States[S_CPLAY_DIE1+5]),
S_NORMAL1(CLER, 'N', 6, NULL , &States[S_CPLAY_DIE1+6]),
S_NORMAL1(CLER, 'O', 6, NULL , &States[S_CPLAY_DIE1+7]),
S_NORMAL1(CLER, 'P', 6, NULL , &States[S_CPLAY_DIE1+8]),
S_NORMAL1(CLER, 'Q', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_CPLAY_XDIE1 (S_CPLAY_DIE1+9)
S_NORMAL1(CLER, 'R', 5, A_PlayerScream , &States[S_CPLAY_XDIE1+1]),
S_NORMAL1(CLER, 'S', 5, NULL , &States[S_CPLAY_XDIE1+2]),
S_NORMAL1(CLER, 'T', 5, A_NoBlocking , &States[S_CPLAY_XDIE1+3]),
S_NORMAL1(CLER, 'U', 5, NULL , &States[S_CPLAY_XDIE1+4]),
S_NORMAL1(CLER, 'V', 5, NULL , &States[S_CPLAY_XDIE1+5]),
S_NORMAL1(CLER, 'W', 5, NULL , &States[S_CPLAY_XDIE1+6]),
S_NORMAL1(CLER, 'X', 5, NULL , &States[S_CPLAY_XDIE1+7]),
S_NORMAL1(CLER, 'Y', 5, NULL , &States[S_CPLAY_XDIE1+8]),
S_NORMAL1(CLER, 'Z', 5, NULL , &States[S_CPLAY_XDIE1+9]),
S_NORMAL1(CLER, '[', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_CPLAY_ICE (S_CPLAY_XDIE1+10)
S_NORMAL1(CLER, '\\', 5, A_FreezeDeath , &States[S_CPLAY_ICE+1]),
S_NORMAL1(CLER, '\\', 1, A_FreezeDeathChunks, &States[S_CPLAY_ICE+1]),
#define S_PLAY_C_FDTH (S_CPLAY_ICE+2)
S_BRIGHT (FDTH, 'C', 5, NULL , &States[S_PLAY_C_FDTH+1]),
S_BRIGHT (FDTH, 'D', 4, NULL , &States[S_PLAY_C_FDTH+2]),
#define S_PLAY_FDTH (S_PLAY_C_FDTH+2)
S_BRIGHT (FDTH, 'G', 5, A_FireScream , &States[S_PLAY_FDTH+1]),
S_BRIGHT (FDTH, 'H', 4, A_PlayerScream , &States[S_PLAY_FDTH+2]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_PLAY_FDTH+3]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_PLAY_FDTH+4]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_PLAY_FDTH+5]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_PLAY_FDTH+6]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_PLAY_FDTH+7]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_PLAY_FDTH+8]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_PLAY_FDTH+9]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_PLAY_FDTH+10]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_PLAY_FDTH+11]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_PLAY_FDTH+12]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_PLAY_FDTH+13]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_PLAY_FDTH+14]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_PLAY_FDTH+15]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
};
------------------------------------------------------------------------
//========== Serpent Staff: the Cleric's second weapon
IMPLEMENT_ACTOR (ACWeapStaff, Hexen, 10, 32)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_CSTAFF)
END_DEFAULTS
FState ACWeapStaff::States[] =
{
#define S_CSTAFF 0
S_NORMAL1(WCSS, 'A', -1, NULL , NULL),
#define S_CSTAFFREADY (S_CSTAFF+1)
S_NORMAL1(CSSF, 'C', 4, NULL , &States[S_CSTAFFREADY+1]),
S_NORMAL1(CSSF, 'B', 3, A_CStaffInitBlink , &States[S_CSTAFFREADY+2]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+3]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+4]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+5]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+6]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+7]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+8]),
S_NORMAL1(CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+9]),
S_NORMAL1(CSSF, 'A', 1, A_CStaffCheckBlink, &States[S_CSTAFFREADY+2]),
#define S_CSTAFFBLINK (S_CSTAFFREADY+10)
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+1]),
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+2]),
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+3]),
S_NORMAL1(CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+4]),
S_NORMAL1(CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+5]),
S_NORMAL1(CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+6]),
S_NORMAL1(CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+7]),
S_NORMAL1(CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+8]),
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+9]),
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+10]),
S_NORMAL1(CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFREADY+2]),
#define S_CSTAFFDOWN (S_CSTAFFBLINK+11)
S_NORMAL1(CSSF, 'B', 3, NULL , &States[S_CSTAFFDOWN+1]),
S_NORMAL1(CSSF, 'C', 4, NULL , &States[S_CSTAFFDOWN+2]),
S_NORMAL1(CSSF, 'C', 1, A_Lower , &States[S_CSTAFFDOWN+2]),
#define S_CSTAFFUP (S_CSTAFFDOWN+3)
S_NORMAL1(CSSF, 'C', 1, A_Raise , &States[S_CSTAFFUP]),
#define S_CSTAFFATK (S_CSTAFFUP+1)
S_NORMAL2 (CSSF, 'A', 1, A_CStaffCheck , &States[S_CSTAFFATK+1], 0, 45),
S_NORMAL2 (CSSF, 'J', 1, A_CStaffAttack , &States[S_CSTAFFATK+2], 0, 50),
S_NORMAL2 (CSSF, 'J', 2, NULL , &States[S_CSTAFFATK+3], 0, 50),
S_NORMAL2 (CSSF, 'J', 2, NULL , &States[S_CSTAFFATK+4], 0, 45),
S_NORMAL2 (CSSF, 'A', 2, NULL , &States[S_CSTAFFATK+5], 0, 40),
S_NORMAL2 (CSSF, 'A', 2, NULL , &States[S_CSTAFFREADY+2], 0, 36),
#define S_CSTAFFATK2 (S_CSTAFFATK+6)
S_NORMAL2 (CSSF, 'K', 10, NULL , &States[S_CSTAFFREADY+2], 0, 36),
};
FWeaponInfo ACWeapStaff::WeaponInfo =
{
0, // DWORD flags;
MANA_1, // ammotype_t ammo;
1, // int ammouse;
25, // int ammogive;
&States[S_CSTAFFUP], // FState *upstate;
&States[S_CSTAFFDOWN], // FState *downstate;
&States[S_CSTAFFREADY], // FState *readystate;
&States[S_CSTAFFATK], // FState *atkstate;
&States[S_CSTAFFATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
6*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(ACWeapStaff), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== The projectile fired by the Serpent Staff.
IMPLEMENT_ACTOR (ACStaffMissile, Hexen, -1, 0)
PROP_SpeedFixed (22)
PROP_RadiusFixed (12)
PROP_HeightFixed (10)
PROP_Damage (5)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_CSTAFF_MISSILE1)
PROP_DeathState (S_CSTAFF_MISSILE_X1)
PROP_DeathSound ("ClericCStaffExplode")
END_DEFAULTS
FState ACStaffMissile::States[] =
{
#define S_CSTAFF_MISSILE1 0
S_BRIGHT (CSSF, 'D', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+1]),
S_BRIGHT (CSSF, 'D', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+2]),
S_BRIGHT (CSSF, 'E', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+3]),
S_BRIGHT (CSSF, 'E', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1]),
#define S_CSTAFF_MISSILE_X1 (S_CSTAFF_MISSILE1+4)
S_BRIGHT (CSSF, 'F', 4, NULL , &States[S_CSTAFF_MISSILE_X1+1]),
S_BRIGHT (CSSF, 'G', 4, NULL , &States[S_CSTAFF_MISSILE_X1+2]),
S_BRIGHT (CSSF, 'H', 3, NULL , &States[S_CSTAFF_MISSILE_X1+3]),
S_BRIGHT (CSSF, 'I', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== The puff of smoke spawned when the serpent staff is used on a target at close range.
IMPLEMENT_ACTOR (ACStaffPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
PROP_SeeSound ("ClericCStaffHitThing")
END_DEFAULTS
FState ACStaffPuff::States[] =
{
S_NORMAL1(FHFX, 'S', 4, NULL, &States[1]),
S_NORMAL1(FHFX, 'T', 4, NULL, &States[2]),
S_NORMAL1(FHFX, 'U', 4, NULL, &States[3]),
S_NORMAL1(FHFX, 'V', 4, NULL, &States[4]),
S_NORMAL1(FHFX, 'W', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Demon, type 1 (green chaos serpent, like D'Sparil's)
IMPLEMENT_ACTOR (ADemon1, Hexen, 31, 3)
PROP_SpawnHealth (250)
PROP_PainChance (50)
PROP_SpeedFixed (13)
PROP_RadiusFixed (32)
PROP_HeightFixed (64)
PROP_Mass (220)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_MCROSS)
PROP_SpawnState (S_DEMN_LOOK1)
PROP_SeeState (S_DEMN_CHASE1)
PROP_PainState (S_DEMN_PAIN1)
PROP_MeleeState (S_DEMN_ATK1_1)
PROP_MissileState (S_DEMN_ATK2_1)
PROP_DeathState (S_DEMN_DEATH1)
PROP_XDeathState (S_DEMN_XDEATH1)
PROP_IDeathState (S_DEMON_ICE1)
PROP_SeeSound ("DemonSight")
PROP_AttackSound ("DemonAttack")
PROP_PainSound ("DemonPain")
PROP_DeathSound ("DemonDeath")
PROP_ActiveSound ("DemonActive")
END_DEFAULTS
FState ADemon1::States[] =
{
#define S_DEMN_LOOK1 0
S_NORMAL1 (DEMN, 'A', 10, A_Look , &States[S_DEMN_LOOK1+1]),
S_NORMAL1 (DEMN, 'A', 10, A_Look , &States[S_DEMN_LOOK1]),
#define S_DEMN_CHASE1 (S_DEMN_LOOK1+2)
S_NORMAL1 (DEMN, 'A', 4, A_Chase , &States[S_DEMN_CHASE1+1]),
S_NORMAL1 (DEMN, 'B', 4, A_Chase , &States[S_DEMN_CHASE1+2]),
S_NORMAL1 (DEMN, 'C', 4, A_Chase , &States[S_DEMN_CHASE1+3]),
S_NORMAL1 (DEMN, 'D', 4, A_Chase , &States[S_DEMN_CHASE1]),
#define S_DEMN_PAIN1 (S_DEMN_CHASE1+4)
S_NORMAL1 (DEMN, 'E', 4, NULL , &States[S_DEMN_PAIN1+1]),
S_NORMAL1 (DEMN, 'E', 4, A_Pain , &States[S_DEMN_CHASE1]),
#define S_DEMN_ATK1_1 (S_DEMN_PAIN1+2)
S_NORMAL1 (DEMN, 'E', 6, A_FaceTarget , &States[S_DEMN_ATK1_1+1]),
S_NORMAL1 (DEMN, 'F', 8, A_FaceTarget , &States[S_DEMN_ATK1_1+2]),
S_NORMAL1 (DEMN, 'G', 6, A_DemonAttack1 , &States[S_DEMN_CHASE1]),
#define S_DEMN_ATK2_1 (S_DEMN_ATK1_1+3)
S_NORMAL1 (DEMN, 'E', 5, A_FaceTarget , &States[S_DEMN_ATK2_1+1]),
S_NORMAL1 (DEMN, 'F', 6, A_FaceTarget , &States[S_DEMN_ATK2_1+2]),
S_NORMAL1 (DEMN, 'G', 5, A_DemonAttack2_1 , &States[S_DEMN_CHASE1]),
#define S_DEMN_DEATH1 (S_DEMN_ATK2_1+3)
S_NORMAL1 (DEMN, 'H', 6, NULL , &States[S_DEMN_DEATH1+1]),
S_NORMAL1 (DEMN, 'I', 6, NULL , &States[S_DEMN_DEATH1+2]),
S_NORMAL1 (DEMN, 'J', 6, A_Scream , &States[S_DEMN_DEATH1+3]),
S_NORMAL1 (DEMN, 'K', 6, A_NoBlocking , &States[S_DEMN_DEATH1+4]),
S_NORMAL1 (DEMN, 'L', 6, A_QueueCorpse , &States[S_DEMN_DEATH1+5]),
S_NORMAL1 (DEMN, 'M', 6, NULL , &States[S_DEMN_DEATH1+6]),
S_NORMAL1 (DEMN, 'N', 6, NULL , &States[S_DEMN_DEATH1+7]),
S_NORMAL1 (DEMN, 'O', 6, NULL , &States[S_DEMN_DEATH1+8]),
S_NORMAL1 (DEMN, 'P', -1, NULL , NULL),
#define S_DEMN_XDEATH1 (S_DEMN_DEATH1+9)
S_NORMAL1 (DEMN, 'H', 6, NULL , &States[S_DEMN_XDEATH1+1]),
S_NORMAL1 (DEMN, 'I', 6, A_DemonDeath , &States[S_DEMN_XDEATH1+2]),
S_NORMAL1 (DEMN, 'J', 6, A_Scream , &States[S_DEMN_XDEATH1+3]),
S_NORMAL1 (DEMN, 'K', 6, A_NoBlocking , &States[S_DEMN_XDEATH1+4]),
S_NORMAL1 (DEMN, 'L', 6, A_QueueCorpse , &States[S_DEMN_XDEATH1+5]),
S_NORMAL1 (DEMN, 'M', 6, NULL , &States[S_DEMN_XDEATH1+6]),
S_NORMAL1 (DEMN, 'N', 6, NULL , &States[S_DEMN_XDEATH1+7]),
S_NORMAL1 (DEMN, 'O', 6, NULL , &States[S_DEMN_XDEATH1+8]),
S_NORMAL1 (DEMN, 'P', -1, NULL , NULL),
#define S_DEMON_ICE1 (S_DEMN_XDEATH1+9)
S_NORMAL1 (DEMN, 'Q', 5, A_FreezeDeath , &States[S_DEMON_ICE1+1]),
S_NORMAL1 (DEMN, 'Q', 1, A_FreezeDeathChunks , &States[S_DEMON_ICE1+1]),
};
------------------------------------------------------------------------
//========== Demon, type 1, mashed
IMPLEMENT_STATELESS_ACTOR (ADemon1Mash, Hexen, -1, 100)
PROP_FlagsSet (MF_NOBLOOD)
PROP_Flags2Set (MF2_BLASTED)
PROP_Flags2Clear (MF2_TELESTOMP)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_DeathState (~0)
PROP_XDeathState (~0)
PROP_IDeathState (~0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Demon chunk, base class
IMPLEMENT_STATELESS_ACTOR (ADemonChunk, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE|MF_CORPSE)
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT)
END_DEFAULTS
------------------------------------------------------------------------
//========== Demon, type 1, chunk 1
IMPLEMENT_ACTOR (ADemon1Chunk1, Hexen, -1, 0)
PROP_SpawnState (S_DEMONCHUNK1_1)
PROP_DeathState (S_DEMONCHUNK1_4)
END_DEFAULTS
FState ADemon1Chunk1::States[] =
{
#define S_DEMONCHUNK1_1 0
S_NORMAL1 (DEMA, 'A', 4, NULL , &States[S_DEMONCHUNK1_1+1]),
S_NORMAL1 (DEMA, 'A', 10, A_QueueCorpse , &States[S_DEMONCHUNK1_1+2]),
S_NORMAL1 (DEMA, 'A', 20, NULL , &States[S_DEMONCHUNK1_1+2]),
#define S_DEMONCHUNK1_4 (S_DEMONCHUNK1_1+3)
S_NORMAL1 (DEMA, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 1, chunk 2
IMPLEMENT_ACTOR (ADemon1Chunk2, Hexen, -1, 0)
PROP_SpawnState (S_DEMONCHUNK2_1)
PROP_DeathState (S_DEMONCHUNK2_4)
END_DEFAULTS
FState ADemon1Chunk2::States[] =
{
#define S_DEMONCHUNK2_1 0
S_NORMAL1 (DEMB, 'A', 4, NULL , &States[S_DEMONCHUNK2_1+1]),
S_NORMAL1 (DEMB, 'A', 10, A_QueueCorpse, &States[S_DEMONCHUNK2_1+2]),
S_NORMAL1 (DEMB, 'A', 20, NULL , &States[S_DEMONCHUNK2_1+2]),
#define S_DEMONCHUNK2_4 (S_DEMONCHUNK2_1+3)
S_NORMAL1 (DEMB, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 1, chunk 3
IMPLEMENT_ACTOR (ADemon1Chunk3, Hexen, -1, 0)
PROP_SpawnState (S_DEMONCHUNK3_1)
PROP_DeathState (S_DEMONCHUNK3_4)
END_DEFAULTS
FState ADemon1Chunk3::States[] =
{
#define S_DEMONCHUNK3_1 0
S_NORMAL1 (DEMC, 'A', 4, NULL , &States[S_DEMONCHUNK3_1+1]),
S_NORMAL1 (DEMC, 'A', 10, A_QueueCorpse, &States[S_DEMONCHUNK3_1+2]),
S_NORMAL1 (DEMC, 'A', 20, NULL , &States[S_DEMONCHUNK3_1+2]),
#define S_DEMONCHUNK3_4 (S_DEMONCHUNK3_1+3)
S_NORMAL1 (DEMC, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 1, chunk 4
IMPLEMENT_ACTOR (ADemon1Chunk4, Hexen, -1, 0)
PROP_SpawnState (S_DEMONCHUNK4_1)
PROP_DeathState (S_DEMONCHUNK4_4)
END_DEFAULTS
FState ADemon1Chunk4::States[] =
{
#define S_DEMONCHUNK4_1 0
S_NORMAL1 (DEMD, 'A', 4, NULL , &States[S_DEMONCHUNK4_1+1]),
S_NORMAL1 (DEMD, 'A', 10, A_QueueCorpse, &States[S_DEMONCHUNK4_1+2]),
S_NORMAL1 (DEMD, 'A', 20, NULL , &States[S_DEMONCHUNK4_1+2]),
#define S_DEMONCHUNK4_4 (S_DEMONCHUNK4_1+3)
S_NORMAL1 (DEMD, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 1, chunk 5
IMPLEMENT_ACTOR (ADemon1Chunk5, Hexen, -1, 0)
PROP_SpawnState (S_DEMONCHUNK5_1)
PROP_DeathState (S_DEMONCHUNK5_4)
END_DEFAULTS
FState ADemon1Chunk5::States[] =
{
#define S_DEMONCHUNK5_1 0
S_NORMAL1 (DEME, 'A', 4, NULL , &States[S_DEMONCHUNK5_1+1]),
S_NORMAL1 (DEME, 'A', 10, A_QueueCorpse, &States[S_DEMONCHUNK5_1+2]),
S_NORMAL1 (DEME, 'A', 20, NULL , &States[S_DEMONCHUNK5_1+2]),
#define S_DEMONCHUNK5_4 (S_DEMONCHUNK5_1+3)
S_NORMAL1 (DEME, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Green chaos serpent projectile
IMPLEMENT_ACTOR (ADemon1FX1, Hexen, -1, 0)
PROP_SpeedFixed (15)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_Damage (5)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_DEMONFX_MOVE1)
PROP_DeathState (S_DEMONFX_BOOM1)
PROP_DeathSound ("DemonMissileExplode")
END_DEFAULTS
FState ADemon1FX1::States[] =
{
#define S_DEMONFX_MOVE1 0
S_BRIGHT (DMFX, 'A', 4, NULL, &States[S_DEMONFX_MOVE1+1]),
S_BRIGHT (DMFX, 'B', 4, NULL, &States[S_DEMONFX_MOVE1+2]),
S_BRIGHT (DMFX, 'C', 4, NULL, &States[S_DEMONFX_MOVE1]),
#define S_DEMONFX_BOOM1 (S_DEMONFX_MOVE1+3)
S_BRIGHT (DMFX, 'D', 4, NULL, &States[S_DEMONFX_BOOM1+1]),
S_BRIGHT (DMFX, 'E', 4, NULL, &States[S_DEMONFX_BOOM1+2]),
S_BRIGHT (DMFX, 'F', 3, NULL, &States[S_DEMONFX_BOOM1+3]),
S_BRIGHT (DMFX, 'G', 3, NULL, &States[S_DEMONFX_BOOM1+4]),
S_BRIGHT (DMFX, 'H', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2 (brown chaos serpent)
IMPLEMENT_ACTOR (ADemon2, Hexen, 8080, 0)
PROP_SpawnState (S_DEMN2_LOOK1)
PROP_SeeState (S_DEMN2_CHASE1)
PROP_PainState (S_DEMN2_PAIN1)
PROP_MeleeState (S_DEMN2_ATK1_1)
PROP_MissileState (S_DEMN2_ATK2_1)
PROP_DeathState (S_DEMN2_DEATH1)
PROP_XDeathState (S_DEMN2_XDEATH1)
END_DEFAULTS
FState ADemon2::States[] =
{
#define S_DEMN2_LOOK1 0
S_NORMAL1 (DEM2, 'A', 10, A_Look , &States[S_DEMN2_LOOK1+1]),
S_NORMAL1 (DEM2, 'A', 10, A_Look , &States[S_DEMN2_LOOK1]),
#define S_DEMN2_CHASE1 (S_DEMN2_LOOK1+2)
S_NORMAL1 (DEM2, 'A', 4, A_Chase , &States[S_DEMN2_CHASE1+1]),
S_NORMAL1 (DEM2, 'B', 4, A_Chase , &States[S_DEMN2_CHASE1+2]),
S_NORMAL1 (DEM2, 'C', 4, A_Chase , &States[S_DEMN2_CHASE1+3]),
S_NORMAL1 (DEM2, 'D', 4, A_Chase , &States[S_DEMN2_CHASE1]),
#define S_DEMN2_PAIN1 (S_DEMN2_CHASE1+4)
S_NORMAL1 (DEM2, 'E', 4, NULL , &States[S_DEMN2_PAIN1+1]),
S_NORMAL1 (DEM2, 'E', 4, A_Pain , &States[S_DEMN2_CHASE1]),
#define S_DEMN2_ATK1_1 (S_DEMN2_PAIN1+2)
S_NORMAL1 (DEM2, 'E', 6, A_FaceTarget , &States[S_DEMN2_ATK1_1+1]),
S_NORMAL1 (DEM2, 'F', 8, A_FaceTarget , &States[S_DEMN2_ATK1_1+2]),
S_NORMAL1 (DEM2, 'G', 6, A_DemonAttack1 , &States[S_DEMN2_CHASE1]),
#define S_DEMN2_ATK2_1 (S_DEMN2_ATK1_1+3)
S_NORMAL1 (DEM2, 'E', 5, A_FaceTarget , &States[S_DEMN2_ATK2_1+1]),
S_NORMAL1 (DEM2, 'F', 6, A_FaceTarget , &States[S_DEMN2_ATK2_1+2]),
S_NORMAL1 (DEM2, 'G', 5, A_DemonAttack2_2 , &States[S_DEMN2_CHASE1]),
#define S_DEMN2_DEATH1 (S_DEMN2_ATK2_1+3)
S_NORMAL1 (DEM2, 'H', 6, NULL , &States[S_DEMN2_DEATH1+1]),
S_NORMAL1 (DEM2, 'I', 6, NULL , &States[S_DEMN2_DEATH1+2]),
S_NORMAL1 (DEM2, 'J', 6, A_Scream , &States[S_DEMN2_DEATH1+3]),
S_NORMAL1 (DEM2, 'K', 6, A_NoBlocking , &States[S_DEMN2_DEATH1+4]),
S_NORMAL1 (DEM2, 'L', 6, A_QueueCorpse , &States[S_DEMN2_DEATH1+5]),
S_NORMAL1 (DEM2, 'M', 6, NULL , &States[S_DEMN2_DEATH1+6]),
S_NORMAL1 (DEM2, 'N', 6, NULL , &States[S_DEMN2_DEATH1+7]),
S_NORMAL1 (DEM2, 'O', 6, NULL , &States[S_DEMN2_DEATH1+8]),
S_NORMAL1 (DEM2, 'P', -1, NULL , NULL),
#define S_DEMN2_XDEATH1 (S_DEMN2_DEATH1+9)
S_NORMAL1 (DEM2, 'H', 6, NULL , &States[S_DEMN2_XDEATH1+1]),
S_NORMAL1 (DEM2, 'I', 6, A_Demon2Death , &States[S_DEMN2_XDEATH1+2]),
S_NORMAL1 (DEM2, 'J', 6, A_Scream , &States[S_DEMN2_XDEATH1+3]),
S_NORMAL1 (DEM2, 'K', 6, A_NoBlocking , &States[S_DEMN2_XDEATH1+4]),
S_NORMAL1 (DEM2, 'L', 6, A_QueueCorpse , &States[S_DEMN2_XDEATH1+5]),
S_NORMAL1 (DEM2, 'M', 6, NULL , &States[S_DEMN2_XDEATH1+6]),
S_NORMAL1 (DEM2, 'N', 6, NULL , &States[S_DEMN2_XDEATH1+7]),
S_NORMAL1 (DEM2, 'O', 6, NULL , &States[S_DEMN2_XDEATH1+8]),
S_NORMAL1 (DEM2, 'P', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2, mashed
IMPLEMENT_STATELESS_ACTOR (ADemon2Mash, Hexen, -1, 101)
PROP_FlagsSet (MF_NOBLOOD)
PROP_Flags2Set (MF2_BLASTED)
PROP_Flags2Clear (MF2_TELESTOMP)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_DeathState (~0)
PROP_XDeathState (~0)
PROP_IDeathState (~0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Demon, type 2, chunk 1
IMPLEMENT_ACTOR (ADemon2Chunk1, Hexen, -1, 0)
PROP_SpawnState (S_DEMON2CHUNK1_1)
PROP_DeathState (S_DEMON2CHUNK1_4)
END_DEFAULTS
FState ADemon2Chunk1::States[] =
{
#define S_DEMON2CHUNK1_1 0
S_NORMAL1 (DMBA, 'A', 4, NULL , &States[S_DEMON2CHUNK1_1+1]),
S_NORMAL1 (DMBA, 'A', 10, A_QueueCorpse, &States[S_DEMON2CHUNK1_1+2]),
S_NORMAL1 (DMBA, 'A', 20, NULL , &States[S_DEMON2CHUNK1_1+2]),
#define S_DEMON2CHUNK1_4 (S_DEMON2CHUNK1_1+3)
S_NORMAL1 (DMBA, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2, chunk 2
IMPLEMENT_ACTOR (ADemon2Chunk2, Hexen, -1, 0)
PROP_SpawnState (S_DEMON2CHUNK2_1)
PROP_DeathState (S_DEMON2CHUNK2_4)
END_DEFAULTS
FState ADemon2Chunk2::States[] =
{
#define S_DEMON2CHUNK2_1 0
S_NORMAL1 (DMBB, 'A', 4, NULL , &States[S_DEMON2CHUNK2_1+1]),
S_NORMAL1 (DMBB, 'A', 10, A_QueueCorpse, &States[S_DEMON2CHUNK2_1+2]),
S_NORMAL1 (DMBB, 'A', 20, NULL , &States[S_DEMON2CHUNK2_1+2]),
#define S_DEMON2CHUNK2_4 (S_DEMON2CHUNK2_1+3)
S_NORMAL1 (DMBB, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2, chunk 3
IMPLEMENT_ACTOR (ADemon2Chunk3, Hexen, -1, 0)
PROP_SpawnState (S_DEMON2CHUNK3_1)
PROP_DeathState (S_DEMON2CHUNK3_4)
END_DEFAULTS
FState ADemon2Chunk3::States[] =
{
#define S_DEMON2CHUNK3_1 0
S_NORMAL1 (DMBC, 'A', 4, NULL , &States[S_DEMON2CHUNK3_1+1]),
S_NORMAL1 (DMBC, 'A', 10, A_QueueCorpse, &States[S_DEMON2CHUNK3_1+2]),
S_NORMAL1 (DMBC, 'A', 20, NULL , &States[S_DEMON2CHUNK3_1+2]),
#define S_DEMON2CHUNK3_4 (S_DEMON2CHUNK3_1+3)
S_NORMAL1 (DMBC, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2, chunk 4
IMPLEMENT_ACTOR (ADemon2Chunk4, Hexen, -1, 0)
PROP_SpawnState (S_DEMON2CHUNK4_1)
PROP_DeathState (S_DEMON2CHUNK4_4)
END_DEFAULTS
FState ADemon2Chunk4::States[] =
{
#define S_DEMON2CHUNK4_1 0
S_NORMAL1 (DMBD, 'A', 4, NULL , &States[S_DEMON2CHUNK4_1+1]),
S_NORMAL1 (DMBD, 'A', 10, A_QueueCorpse, &States[S_DEMON2CHUNK4_1+2]),
S_NORMAL1 (DMBD, 'A', 20, NULL , &States[S_DEMON2CHUNK4_1+2]),
#define S_DEMON2CHUNK4_4 (S_DEMON2CHUNK4_1+3)
S_NORMAL1 (DMBD, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Demon, type 2, chunk 5
IMPLEMENT_ACTOR (ADemon2Chunk5, Hexen, -1, 0)
PROP_SpawnState (S_DEMON2CHUNK5_1)
PROP_DeathState (S_DEMON2CHUNK5_4)
END_DEFAULTS
FState ADemon2Chunk5::States[] =
{
#define S_DEMON2CHUNK5_1 0
S_NORMAL1 (DMBE, 'A', 4, NULL, &States[S_DEMON2CHUNK5_1+1]),
S_NORMAL1 (DMBE, 'A', 10, NULL, &States[S_DEMON2CHUNK5_1+2]),
S_NORMAL1 (DMBE, 'A', 20, NULL, &States[S_DEMON2CHUNK5_1+2]),
#define S_DEMON2CHUNK5_4 (S_DEMON2CHUNK5_1+3)
S_NORMAL1 (DMBE, 'A', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Brown chaos serpent projectile
IMPLEMENT_ACTOR (ADemon2FX1, Hexen, -1, 0)
PROP_SpeedFixed (15)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_Damage (5)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_DEMON2FX_MOVE1)
PROP_DeathState (S_DEMON2FX_BOOM1)
PROP_DeathSound ("DemonMissileExplode")
END_DEFAULTS
FState ADemon2FX1::States[] =
{
#define S_DEMON2FX_MOVE1 0
S_BRIGHT (D2FX, 'A', 4, NULL, &States[S_DEMON2FX_MOVE1+1]),
S_BRIGHT (D2FX, 'B', 4, NULL, &States[S_DEMON2FX_MOVE1+2]),
S_BRIGHT (D2FX, 'C', 4, NULL, &States[S_DEMON2FX_MOVE1+3]),
S_BRIGHT (D2FX, 'D', 4, NULL, &States[S_DEMON2FX_MOVE1+4]),
S_BRIGHT (D2FX, 'E', 4, NULL, &States[S_DEMON2FX_MOVE1+5]),
S_BRIGHT (D2FX, 'F', 4, NULL, &States[S_DEMON2FX_MOVE1]),
#define S_DEMON2FX_BOOM1 (S_DEMON2FX_MOVE1+6)
S_BRIGHT (D2FX, 'G', 4, NULL, &States[S_DEMON2FX_BOOM1+1]),
S_BRIGHT (D2FX, 'H', 4, NULL, &States[S_DEMON2FX_BOOM1+2]),
S_BRIGHT (D2FX, 'I', 4, NULL, &States[S_DEMON2FX_BOOM1+3]),
S_BRIGHT (D2FX, 'J', 4, NULL, &States[S_DEMON2FX_BOOM1+4]),
S_BRIGHT (D2FX, 'K', 3, NULL, &States[S_DEMON2FX_BOOM1+5]),
S_BRIGHT (D2FX, 'L', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== The death wyvern is an undead dragon
IMPLEMENT_ACTOR (ADragon, Hexen, 254, 0)
PROP_SpawnHealth (640)
PROP_PainChance (128)
PROP_SpeedFixed (10)
PROP_HeightFixed (65)
PROP_MassLong (0x7fffffff)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY|MF_FLOAT|MF_NOBLOOD|MF_COUNTKILL)
PROP_Flags2 (MF2_PASSMOBJ|MF2_BOSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_DRAGON_LOOK1)
PROP_SeeState (S_DRAGON_INIT)
PROP_PainState (S_DRAGON_PAIN1)
PROP_MissileState (S_DRAGON_ATK1)
PROP_DeathState (S_DRAGON_DEATH1)
PROP_SeeSound ("DragonSight")
PROP_AttackSound ("DragonAttack")
PROP_PainSound ("DragonPain")
PROP_DeathSound ("DragonDeath")
PROP_ActiveSound ("DragonActive")
END_DEFAULTS
FState ADragon::States[] =
{
#define S_DRAGON_LOOK1 0
S_NORMAL1(DRAG, 'D', 10, A_Look , &States[S_DRAGON_LOOK1]),
#define S_DRAGON_INIT (S_DRAGON_LOOK1+1)
S_NORMAL1(DRAG, 'C', 5, NULL , &States[S_DRAGON_INIT+1]),
S_NORMAL1(DRAG, 'B', 5, NULL , &States[S_DRAGON_INIT+2]),
S_NORMAL1(DRAG, 'A', 5, A_DragonInitFlight , &States[S_DRAGON_INIT+3]),
S_NORMAL1(DRAG, 'B', 3, A_DragonFlap , &States[S_DRAGON_INIT+4]),
S_NORMAL1(DRAG, 'B', 3, A_DragonFlight , &States[S_DRAGON_INIT+5]),
S_NORMAL1(DRAG, 'C', 3, A_DragonFlight , &States[S_DRAGON_INIT+6]),
S_NORMAL1(DRAG, 'C', 3, A_DragonFlight , &States[S_DRAGON_INIT+7]),
S_NORMAL1(DRAG, 'D', 3, A_DragonFlight , &States[S_DRAGON_INIT+8]),
S_NORMAL1(DRAG, 'D', 3, A_DragonFlight , &States[S_DRAGON_INIT+9]),
S_NORMAL1(DRAG, 'C', 3, A_DragonFlight , &States[S_DRAGON_INIT+10]),
S_NORMAL1(DRAG, 'C', 3, A_DragonFlight , &States[S_DRAGON_INIT+11]),
S_NORMAL1(DRAG, 'B', 3, A_DragonFlight , &States[S_DRAGON_INIT+12]),
S_NORMAL1(DRAG, 'B', 3, A_DragonFlight , &States[S_DRAGON_INIT+13]),
S_NORMAL1(DRAG, 'A', 3, A_DragonFlight , &States[S_DRAGON_INIT+14]),
S_NORMAL1(DRAG, 'A', 3, A_DragonFlight , &States[S_DRAGON_INIT+3]),
#define S_DRAGON_PAIN1 (S_DRAGON_INIT+15)
S_NORMAL1(DRAG, 'F', 10, A_DragonPain , &States[S_DRAGON_INIT+3]),
#define S_DRAGON_ATK1 (S_DRAGON_PAIN1+1)
S_NORMAL1(DRAG, 'E', 8, A_DragonAttack , &States[S_DRAGON_INIT+3]),
#define S_DRAGON_DEATH1 (S_DRAGON_ATK1+1)
S_NORMAL1(DRAG, 'G', 5, A_Scream , &States[S_DRAGON_DEATH1+1]),
S_NORMAL1(DRAG, 'H', 4, A_NoBlocking , &States[S_DRAGON_DEATH1+2]),
S_NORMAL1(DRAG, 'I', 4, NULL , &States[S_DRAGON_DEATH1+3]),
S_NORMAL1(DRAG, 'J', 4, A_DragonCheckCrash , &States[S_DRAGON_DEATH1+3]),
#define S_DRAGON_CRASH1 (S_DRAGON_DEATH1+4)
S_NORMAL1(DRAG, 'K', 5, NULL , &States[S_DRAGON_CRASH1+1]),
S_NORMAL1(DRAG, 'L', 5, NULL , &States[S_DRAGON_CRASH1+2]),
S_NORMAL1(DRAG, 'M', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== The fireball launched by the Death Wyvern
IMPLEMENT_ACTOR (ADragonFireball, Hexen, -1, 0)
PROP_SpeedFixed (24)
PROP_RadiusFixed (12)
PROP_HeightFixed (10)
PROP_Damage (6)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_DRAGON_FX1_1)
PROP_DeathState (S_DRAGON_FX1_X1)
PROP_DeathSound ("DragonFireballExplode")
END_DEFAULTS
FState ADragonFireball::States[] =
{
#define S_DRAGON_FX1_1 0
S_BRIGHT (DRFX, 'A', 4, NULL , &States[S_DRAGON_FX1_1+1]),
S_BRIGHT (DRFX, 'B', 4, NULL , &States[S_DRAGON_FX1_1+2]),
S_BRIGHT (DRFX, 'C', 4, NULL , &States[S_DRAGON_FX1_1+3]),
S_BRIGHT (DRFX, 'D', 4, NULL , &States[S_DRAGON_FX1_1+4]),
S_BRIGHT (DRFX, 'E', 4, NULL , &States[S_DRAGON_FX1_1+5]),
S_BRIGHT (DRFX, 'F', 4, NULL , &States[S_DRAGON_FX1_1]),
#define S_DRAGON_FX1_X1 (S_DRAGON_FX1_1+6)
S_BRIGHT (DRFX, 'G', 4, NULL , &States[S_DRAGON_FX1_X1+1]),
S_BRIGHT (DRFX, 'H', 4, NULL , &States[S_DRAGON_FX1_X1+2]),
S_BRIGHT (DRFX, 'I', 4, NULL , &States[S_DRAGON_FX1_X1+3]),
S_BRIGHT (DRFX, 'J', 4, A_DragonFX2 , &States[S_DRAGON_FX1_X1+4]),
S_BRIGHT (DRFX, 'K', 3, NULL , &States[S_DRAGON_FX1_X1+5]),
S_BRIGHT (DRFX, 'L', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Dragon Fireball Secondary Explosion
IMPLEMENT_ACTOR (ADragonExplosion, Hexen, -1, 0)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderFlags (RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_DRAGON_FX2_1)
PROP_DeathSound ("DragonFireballExplode")
END_DEFAULTS
FState ADragonExplosion::States[] =
{
#define S_DRAGON_FX2_1 0
S_BRIGHT (CFCF, 'Q', 1, NULL , &States[S_DRAGON_FX2_1+1]),
S_BRIGHT (CFCF, 'Q', 4, A_UnHideThing , &States[S_DRAGON_FX2_1+2]),
S_BRIGHT (CFCF, 'R', 3, A_Scream , &States[S_DRAGON_FX2_1+3]),
S_BRIGHT (CFCF, 'S', 4, NULL , &States[S_DRAGON_FX2_1+4]),
S_BRIGHT (CFCF, 'T', 3, A_Explode , &States[S_DRAGON_FX2_1+5]),
S_BRIGHT (CFCF, 'U', 4, NULL , &States[S_DRAGON_FX2_1+6]),
S_BRIGHT (CFCF, 'V', 3, NULL , &States[S_DRAGON_FX2_1+7]),
S_BRIGHT (CFCF, 'W', 4, NULL , &States[S_DRAGON_FX2_1+8]),
S_BRIGHT (CFCF, 'X', 3, NULL , &States[S_DRAGON_FX2_1+9]),
S_BRIGHT (CFCF, 'Y', 4, NULL , &States[S_DRAGON_FX2_1+10]),
S_BRIGHT (CFCF, 'Z', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Ettins are big, brawny, brown bicephalous beasties in Hexen
IMPLEMENT_ACTOR (AEttin, Hexen, 10030, 4)
PROP_SpawnHealth (175)
PROP_RadiusFixed (25)
PROP_HeightFixed (68)
PROP_Mass (175)
PROP_SpeedFixed (13)
PROP_Damage (3)
PROP_PainChance (60)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PUSHWALL|MF2_MCROSS|MF2_TELESTOMP)
PROP_SpawnState (S_ETTIN_LOOK)
PROP_SeeState (S_ETTIN_CHASE)
PROP_PainState (S_ETTIN_PAIN)
PROP_MeleeState (S_ETTIN_ATK1)
PROP_DeathState (S_ETTIN_DEATH1)
PROP_XDeathState (S_ETTIN_DEATH2)
PROP_IDeathState (S_ETTIN_ICE)
PROP_SeeSound ("EttinSight")
PROP_AttackSound ("EttinAttack")
PROP_PainSound ("EttinPain")
PROP_DeathSound ("EttinDeath")
PROP_ActiveSound ("EttinActive")
END_DEFAULTS
FState AEttin::States[] =
{
#define S_ETTIN_LOOK 0
S_NORMAL1 (ETTN, 'A', 10, A_Look , &States[S_ETTIN_LOOK+1]),
S_NORMAL1 (ETTN, 'A', 10, A_Look , &States[S_ETTIN_LOOK+0]),
#define S_ETTIN_CHASE (S_ETTIN_LOOK+2)
S_NORMAL1 (ETTN, 'A', 5, A_Chase , &States[S_ETTIN_CHASE+1]),
S_NORMAL1 (ETTN, 'B', 5, A_Chase , &States[S_ETTIN_CHASE+2]),
S_NORMAL1 (ETTN, 'C', 5, A_Chase , &States[S_ETTIN_CHASE+3]),
S_NORMAL1 (ETTN, 'D', 5, A_Chase , &States[S_ETTIN_CHASE+0]),
#define S_ETTIN_PAIN (S_ETTIN_CHASE+4)
S_NORMAL1 (ETTN, 'H', 7, A_Pain , &States[S_ETTIN_CHASE+0]),
#define S_ETTIN_ATK1 (S_ETTIN_PAIN+1)
S_NORMAL1 (ETTN, 'E', 6, A_FaceTarget , &States[S_ETTIN_ATK1+1]),
S_NORMAL1 (ETTN, 'F', 6, A_FaceTarget , &States[S_ETTIN_ATK1+2]),
S_NORMAL1 (ETTN, 'G', 8, A_EttinAttack , &States[S_ETTIN_CHASE+0]),
#define S_ETTIN_DEATH1 (S_ETTIN_ATK1+3)
S_NORMAL1 (ETTN, 'I', 4, NULL , &States[S_ETTIN_DEATH1+1]),
S_NORMAL1 (ETTN, 'J', 4, NULL , &States[S_ETTIN_DEATH1+2]),
S_NORMAL1 (ETTN, 'K', 4, A_Scream , &States[S_ETTIN_DEATH1+3]),
S_NORMAL1 (ETTN, 'L', 4, A_NoBlocking , &States[S_ETTIN_DEATH1+4]),
S_NORMAL1 (ETTN, 'M', 4, A_QueueCorpse , &States[S_ETTIN_DEATH1+5]),
S_NORMAL1 (ETTN, 'N', 4, NULL , &States[S_ETTIN_DEATH1+6]),
S_NORMAL1 (ETTN, 'O', 4, NULL , &States[S_ETTIN_DEATH1+7]),
S_NORMAL1 (ETTN, 'P', 4, NULL , &States[S_ETTIN_DEATH1+8]),
S_NORMAL1 (ETTN, 'Q', -1, NULL , NULL),
#define S_ETTIN_DEATH2 (S_ETTIN_DEATH1+9)
S_NORMAL1 (ETTB, 'A', 4, NULL , &States[S_ETTIN_DEATH2+1]),
S_NORMAL1 (ETTB, 'B', 4, A_NoBlocking , &States[S_ETTIN_DEATH2+2]),
S_NORMAL1 (ETTB, 'C', 4, A_DropMace , &States[S_ETTIN_DEATH2+3]),
S_NORMAL1 (ETTB, 'D', 4, A_Scream , &States[S_ETTIN_DEATH2+4]),
S_NORMAL1 (ETTB, 'E', 4, A_QueueCorpse , &States[S_ETTIN_DEATH2+5]),
S_NORMAL1 (ETTB, 'F', 4, NULL , &States[S_ETTIN_DEATH2+6]),
S_NORMAL1 (ETTB, 'G', 4, NULL , &States[S_ETTIN_DEATH2+7]),
S_NORMAL1 (ETTB, 'H', 4, NULL , &States[S_ETTIN_DEATH2+8]),
S_NORMAL1 (ETTB, 'I', 4, NULL , &States[S_ETTIN_DEATH2+9]),
S_NORMAL1 (ETTB, 'J', 4, NULL , &States[S_ETTIN_DEATH2+10]),
S_NORMAL1 (ETTB, 'K', 4, NULL , &States[S_ETTIN_DEATH2+11]),
S_NORMAL1 (ETTB, 'L', -1, NULL , NULL),
#define S_ETTIN_ICE (S_ETTIN_DEATH2+12)
S_NORMAL1 (ETTN, 'R', 5, A_FreezeDeath , &States[S_ETTIN_ICE+1]),
S_NORMAL1 (ETTN, 'R', 1, A_FreezeDeathChunks, &States[S_ETTIN_ICE+1])
};
------------------------------------------------------------------------
//========== This item is spawned and thrown away when an ettin is gibbed
IMPLEMENT_ACTOR (AEttinMace, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_DROPOFF|MF_CORPSE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_FLOORCLIP)
PROP_SpawnState (0)
PROP_DeathState (4)
END_DEFAULTS
FState AEttinMace::States[] =
{
S_NORMAL1 (ETTB, 'M', 5, A_CheckFloor , &States[1]),
S_NORMAL1 (ETTB, 'N', 5, A_CheckFloor , &States[2]),
S_NORMAL1 (ETTB, 'O', 5, A_CheckFloor , &States[3]),
S_NORMAL1 (ETTB, 'P', 5, A_CheckFloor , &States[0]),
S_NORMAL1 (ETTB, 'Q', 5, NULL , &States[5]),
S_NORMAL1 (ETTB, 'R', 5, A_QueueCorpse, &States[6]),
S_NORMAL1 (ETTB, 'S', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Ghostly ettins spawned by Hexen's final boss, Korax.
IMPLEMENT_STATELESS_ACTOR (AEttinMash, Hexen, -1, 102)
PROP_FlagsSet (MF_NOBLOOD)
PROP_Flags2Set (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_MCROSS|MF2_PUSHWALL|MF2_BLASTED)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_DeathState (~0)
PROP_XDeathState (~0)
PROP_IDeathState (~0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Timon's Axe (Fighter's first weapon)
IMPLEMENT_ACTOR (AFWeapAxe, Hexen, 8010, 27)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_AXE)
END_DEFAULTS
FState AFWeapAxe::States[] =
{
#define S_AXE 0
S_NORMAL1(WFAX, 'A', -1, NULL , NULL),
#define S_FAXEREADY (S_AXE+1)
S_NORMAL1(FAXE, 'A', 1, A_FAxeCheckReady , &States[S_FAXEREADY]),
#define S_FAXEDOWN (S_FAXEREADY+1)
S_NORMAL1(FAXE, 'A', 1, A_Lower , &States[S_FAXEDOWN]),
#define S_FAXEUP (S_FAXEDOWN+1)
S_NORMAL1(FAXE, 'A', 1, A_FAxeCheckUp , &States[S_FAXEUP]),
#define S_FAXEATK (S_FAXEUP+1)
S_NORMAL2 (FAXE, 'B', 4, A_FAxeCheckAtk , &States[S_FAXEATK+1], 15, 32),
S_NORMAL2 (FAXE, 'C', 3, NULL , &States[S_FAXEATK+2], 15, 32),
S_NORMAL2 (FAXE, 'D', 2, NULL , &States[S_FAXEATK+3], 15, 32),
S_NORMAL2 (FAXE, 'D', 1, A_FAxeAttack , &States[S_FAXEATK+4], -5, 70),
S_NORMAL2 (FAXE, 'D', 2, NULL , &States[S_FAXEATK+5], -25, 90),
S_NORMAL2 (FAXE, 'E', 1, NULL , &States[S_FAXEATK+6], 15, 32),
S_NORMAL2 (FAXE, 'E', 2, NULL , &States[S_FAXEATK+7], 10, 54),
S_NORMAL2 (FAXE, 'E', 7, NULL , &States[S_FAXEATK+8], 10, 150),
S_NORMAL2 (FAXE, 'A', 1, A_ReFire , &States[S_FAXEATK+9], 0, 60),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+10], 0, 52),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+11], 0, 44),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+12], 0, 36),
S_NORMAL1 (FAXE, 'A', 1, NULL , &States[S_FAXEREADY]),
#define S_FAXEREADY_G (S_FAXEATK+13)
S_NORMAL1(FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+1]),
S_NORMAL1(FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+2]),
S_NORMAL1(FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+3]),
S_NORMAL1(FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+4]),
S_NORMAL1(FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+5]),
S_NORMAL1(FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G]),
#define S_FAXEDOWN_G (S_FAXEREADY_G+6)
S_NORMAL1(FAXE, 'L', 1, A_Lower , &States[S_FAXEDOWN_G]),
#define S_FAXEUP_G (S_FAXEDOWN_G+1)
S_NORMAL1(FAXE, 'L', 1, A_FAxeCheckUpG , &States[S_FAXEUP_G]),
#define S_FAXEATK_G (S_FAXEUP_G+1)
S_NORMAL2 (FAXE, 'N', 4, NULL , &States[S_FAXEATK_G+1], 15, 32),
S_NORMAL2 (FAXE, 'O', 3, NULL , &States[S_FAXEATK_G+2], 15, 32),
S_NORMAL2 (FAXE, 'P', 2, NULL , &States[S_FAXEATK_G+3], 15, 32),
S_NORMAL2 (FAXE, 'P', 1, A_FAxeAttack , &States[S_FAXEATK_G+4], -5, 70),
S_NORMAL2 (FAXE, 'P', 2, NULL , &States[S_FAXEATK_G+5], -25, 90),
S_NORMAL2 (FAXE, 'Q', 1, NULL , &States[S_FAXEATK_G+6], 15, 32),
S_NORMAL2 (FAXE, 'Q', 2, NULL , &States[S_FAXEATK_G+7], 10, 54),
S_NORMAL2 (FAXE, 'Q', 7, NULL , &States[S_FAXEATK_G+8], 10, 150),
S_NORMAL2 (FAXE, 'A', 1, A_ReFire , &States[S_FAXEATK_G+9], 0, 60),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+10], 0, 52),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+11], 0, 44),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+12], 0, 36),
S_NORMAL1 (FAXE, 'A', 1, NULL , &States[S_FAXEREADY_G]),
};
FWeaponInfo AFWeapAxe::WeaponInfo =
{
0, // DWORD flags;
MANA_1, // ammotype_t ammo;
0, // int ammouse;
25, // int ammogive;
&States[S_FAXEUP], // FState *upstate;
&States[S_FAXEDOWN], // FState *downstate;
&States[S_FAXEREADY], // FState *readystate;
&States[S_FAXEATK], // FState *atkstate;
&States[S_FAXEATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
-12*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AFWeapAxe), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== The smokey puff spawned on impact by the Timon's Axe in its "weak" form.
IMPLEMENT_ACTOR (AAxePuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
PROP_SeeSound ("FighterAxeHitThing")
PROP_AttackSound ("FighterHammerHitWall")
PROP_ActiveSound ("FighterHammerMiss")
END_DEFAULTS
FState AAxePuff::States[] =
{
S_NORMAL1(FHFX, 'S', 4, NULL, &States[1]),
S_NORMAL1(FHFX, 'T', 4, NULL, &States[2]),
S_NORMAL1(FHFX, 'U', 4, NULL, &States[3]),
S_NORMAL1(FHFX, 'V', 4, NULL, &States[4]),
S_NORMAL1(FHFX, 'W', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== The glowing, electric-like puff spawned on impact by the Timon's Axe in its "powered" form.
IMPLEMENT_ACTOR (AAxePuffGlow, Hexen, -1, 0)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Add)
PROP_Alpha (ZOPAQUE)
PROP_SpawnState (0)
END_DEFAULTS
FState AAxePuffGlow::States[] =
{
S_BRIGHT (FAXE, 'R', 4, NULL, &States[1]),
S_BRIGHT (FAXE, 'S', 4, NULL, &States[2]),
S_BRIGHT (FAXE, 'T', 4, NULL, &States[3]),
S_BRIGHT (FAXE, 'U', 4, NULL, &States[4]),
S_BRIGHT (FAXE, 'V', 4, NULL, &States[5]),
S_BRIGHT (FAXE, 'W', 4, NULL, &States[6]),
S_BRIGHT (FAXE, 'X', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Blood splatter created when someone is hurt by Timon's axe.
IMPLEMENT_ACTOR (AAxeBlood, Hexen, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH)
PROP_SpawnState (0)
PROP_DeathState (5)
END_DEFAULTS
FState AAxeBlood::States[] =
{
S_NORMAL1(FAXE, 'F', 3, NULL, &States[1]),
S_NORMAL1(FAXE, 'G', 3, NULL, &States[2]),
S_NORMAL1(FAXE, 'H', 3, NULL, &States[3]),
S_NORMAL1(FAXE, 'I', 3, NULL, &States[4]),
S_NORMAL1(FAXE, 'J', 3, NULL, &States[5]),
S_NORMAL1(FAXE, 'K', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Zedek is one of the three penultimate bosses of Hexen.
IMPLEMENT_ACTOR (AFighterBoss, Hexen, 10100, 0)
PROP_SpawnHealth (800)
PROP_PainChance (50)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_SpawnState (S_FIGHTER)
PROP_SeeState (S_FIGHTER_RUN1)
PROP_PainState (S_FIGHTER_PAIN)
PROP_MeleeState (S_FIGHTER_ATK1)
PROP_MissileState (S_FIGHTER_ATK1)
PROP_DeathState (S_FIGHTER_DIE1)
PROP_XDeathState (S_FIGHTER_XDIE1)
PROP_IDeathState (S_FIGHTER_ICE)
PROP_BDeathState (S_FIGHTER_BURN)
PROP_PainSound ("PlayerFighterPain")
PROP_DeathSound ("PlayerFighterCrazyDeath")
END_DEFAULTS
FState AFighterBoss::States[] =
{
#define S_FIGHTER 0
S_NORMAL1(PLAY, 'A', 2, NULL , &States[S_FIGHTER+1]),
S_NORMAL1(PLAY, 'A', 3, A_ClassBossHealth , &States[S_FIGHTER+2]),
S_NORMAL1(PLAY, 'A', 5, A_Look , &States[S_FIGHTER+2]),
#define S_FIGHTER_RUN1 (S_FIGHTER+3)
S_NORMAL1(PLAY, 'A', 4, A_FastChase , &States[S_FIGHTER_RUN1+1]),
S_NORMAL1(PLAY, 'B', 4, A_FastChase , &States[S_FIGHTER_RUN1+2]),
S_NORMAL1(PLAY, 'C', 4, A_FastChase , &States[S_FIGHTER_RUN1+3]),
S_NORMAL1(PLAY, 'D', 4, A_FastChase , &States[S_FIGHTER_RUN1]),
#define S_FIGHTER_PAIN (S_FIGHTER_RUN1+4)
S_NORMAL1(PLAY, 'G', 4, NULL , &States[S_FIGHTER_PAIN+1]),
S_NORMAL1(PLAY, 'G', 4, A_Pain , &States[S_FIGHTER_RUN1]),
#define S_FIGHTER_ATK1 (S_FIGHTER_PAIN+2)
S_NORMAL1(PLAY, 'E', 8, A_FaceTarget , &States[S_FIGHTER_ATK1+1]),
S_NORMAL1(PLAY, 'F', 8, A_FighterAttack , &States[S_FIGHTER_RUN1]),
#define S_FIGHTER_DIE1 (S_FIGHTER_ATK1+2)
S_NORMAL1(PLAY, 'H', 6, NULL , &States[S_FIGHTER_DIE1+1]),
S_NORMAL1(PLAY, 'I', 6, A_Scream , &States[S_FIGHTER_DIE1+2]),
S_NORMAL1(PLAY, 'J', 6, NULL , &States[S_FIGHTER_DIE1+3]),
S_NORMAL1(PLAY, 'K', 6, NULL , &States[S_FIGHTER_DIE1+4]),
S_NORMAL1(PLAY, 'L', 6, A_NoBlocking , &States[S_FIGHTER_DIE1+5]),
S_NORMAL1(PLAY, 'M', 6, NULL , &States[S_FIGHTER_DIE1+6]),
S_NORMAL1(PLAY, 'N', -1, NULL , NULL),
#define S_FIGHTER_XDIE1 (S_FIGHTER_DIE1+7)
S_NORMAL1(PLAY, 'O', 5, A_Scream , &States[S_FIGHTER_XDIE1+1]),
S_NORMAL1(PLAY, 'P', 5, A_SkullPop , &States[S_FIGHTER_XDIE1+2]),
S_NORMAL1(PLAY, 'R', 5, A_NoBlocking , &States[S_FIGHTER_XDIE1+3]),
S_NORMAL1(PLAY, 'S', 5, NULL , &States[S_FIGHTER_XDIE1+4]),
S_NORMAL1(PLAY, 'T', 5, NULL , &States[S_FIGHTER_XDIE1+5]),
S_NORMAL1(PLAY, 'U', 5, NULL , &States[S_FIGHTER_XDIE1+6]),
S_NORMAL1(PLAY, 'V', 5, NULL , &States[S_FIGHTER_XDIE1+7]),
S_NORMAL1(PLAY, 'W', -1, NULL , NULL),
#define S_FIGHTER_ICE (S_FIGHTER_XDIE1+8)
S_NORMAL1(PLAY, 'X', 5, A_FreezeDeath , &States[S_FIGHTER_ICE+1]),
S_NORMAL1(PLAY, 'X', 1, A_FreezeDeathChunks , &States[S_FIGHTER_ICE+1]),
#define S_FIGHTER_BURN (S_FIGHTER_ICE+2)
S_BRIGHT (FDTH, 'A', 5, A_FighterBurnScream , &States[S_FIGHTER_BURN+1]),
S_BRIGHT (FDTH, 'B', 4, NULL , &States[S_FIGHTER_BURN+2]),
S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_FIGHTER_BURN+3]),
S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_FIGHTER_BURN+4]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_FIGHTER_BURN+5]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_FIGHTER_BURN+6]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_FIGHTER_BURN+7]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_FIGHTER_BURN+8]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_FIGHTER_BURN+9]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_FIGHTER_BURN+10]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_FIGHTER_BURN+11]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_FIGHTER_BURN+12]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_FIGHTER_BURN+13]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_FIGHTER_BURN+14]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_FIGHTER_BURN+15]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_FIGHTER_BURN+16]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_FIGHTER_BURN+17]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_FIGHTER_BURN+18]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_FIGHTER_BURN+18]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
};
------------------------------------------------------------------------
//========== Hammer of retribution (Fighter's third weapon)
IMPLEMENT_ACTOR (AFWeapHammer, Hexen, 123, 28)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_HAMM)
END_DEFAULTS
FState AFWeapHammer::States[] =
{
#define S_HAMM 0
S_NORMAL1(WFHM, 'A', -1, NULL , NULL),
#define S_FHAMMERREADY (S_HAMM+1)
S_NORMAL1(FHMR, 'A', 1, A_WeaponReady , &States[S_FHAMMERREADY]),
#define S_FHAMMERDOWN (S_FHAMMERREADY+1)
S_NORMAL1(FHMR, 'A', 1, A_Lower , &States[S_FHAMMERDOWN]),
#define S_FHAMMERUP (S_FHAMMERDOWN+1)
S_NORMAL1(FHMR, 'A', 1, A_Raise , &States[S_FHAMMERUP]),
#define S_FHAMMERATK (S_FHAMMERUP+1)
S_NORMAL2 (FHMR, 'B', 6, NULL , &States[S_FHAMMERATK+1], 5, 0),
S_NORMAL2 (FHMR, 'C', 3, A_FHammerAttack , &States[S_FHAMMERATK+2], 5, 0),
S_NORMAL2 (FHMR, 'D', 3, NULL , &States[S_FHAMMERATK+3], 5, 0),
S_NORMAL2 (FHMR, 'E', 2, NULL , &States[S_FHAMMERATK+4], 5, 0),
S_NORMAL2 (FHMR, 'E', 10, A_FHammerThrow , &States[S_FHAMMERATK+5], 5, 150),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+6], 0, 60),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+7], 0, 55),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+8], 0, 50),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+9], 0, 45),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+10], 0, 40),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+11], 0, 35),
S_NORMAL1 (FHMR, 'A', 1, NULL , &States[S_FHAMMERREADY]),
};
FWeaponInfo AFWeapHammer::WeaponInfo =
{
0, // DWORD flags;
MANA_2, // ammotype_t ammo;
3, // int ammouse;
25, // int ammogive;
&States[S_FHAMMERUP], // FState *upstate;
&States[S_FHAMMERDOWN], // FState *downstate;
&States[S_FHAMMERREADY], // FState *readystate;
&States[S_FHAMMERATK], // FState *atkstate;
&States[S_FHAMMERATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
-10*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AFWeapHammer), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== The flaming hammer projectile fired by the Hammer of Retribution.
IMPLEMENT_ACTOR (AHammerMissile, Hexen, -1, 0)
PROP_SpeedFixed (25)
PROP_RadiusFixed (14)
PROP_HeightFixed (20)
PROP_Damage (10)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (S_HAMMER_MISSILE_1)
PROP_DeathState (S_HAMMER_MISSILE_X1)
PROP_DeathSound ("FighterHammerExplode")
END_DEFAULTS
FState AHammerMissile::States[] =
{
#define S_HAMMER_MISSILE_1 0
S_BRIGHT (FHFX, 'A', 2, NULL , &States[S_HAMMER_MISSILE_1+1]),
S_BRIGHT (FHFX, 'B', 2, A_HammerSound , &States[S_HAMMER_MISSILE_1+2]),
S_BRIGHT (FHFX, 'C', 2, NULL , &States[S_HAMMER_MISSILE_1+3]),
S_BRIGHT (FHFX, 'D', 2, NULL , &States[S_HAMMER_MISSILE_1+4]),
S_BRIGHT (FHFX, 'E', 2, NULL , &States[S_HAMMER_MISSILE_1+5]),
S_BRIGHT (FHFX, 'F', 2, NULL , &States[S_HAMMER_MISSILE_1+6]),
S_BRIGHT (FHFX, 'G', 2, NULL , &States[S_HAMMER_MISSILE_1+7]),
S_BRIGHT (FHFX, 'H', 2, NULL , &States[S_HAMMER_MISSILE_1]),
#define S_HAMMER_MISSILE_X1 (S_HAMMER_MISSILE_1+8)
S_BRIGHT (FHFX, 'I', 3, A_BeAdditive , &States[S_HAMMER_MISSILE_X1+1]),
S_BRIGHT (FHFX, 'J', 3, NULL , &States[S_HAMMER_MISSILE_X1+2]),
S_BRIGHT (FHFX, 'K', 3, A_Explode , &States[S_HAMMER_MISSILE_X1+3]),
S_BRIGHT (FHFX, 'L', 3, NULL , &States[S_HAMMER_MISSILE_X1+4]),
S_BRIGHT (FHFX, 'M', 3, NULL , &States[S_HAMMER_MISSILE_X1+5]),
S_NORMAL1(FHFX, 'N', 3, NULL , &States[S_HAMMER_MISSILE_X1+6]),
S_BRIGHT (FHFX, 'O', 3, NULL , &States[S_HAMMER_MISSILE_X1+7]),
S_BRIGHT (FHFX, 'P', 3, NULL , &States[S_HAMMER_MISSILE_X1+8]),
S_BRIGHT (FHFX, 'Q', 3, NULL , &States[S_HAMMER_MISSILE_X1+9]),
S_BRIGHT (FHFX, 'R', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== The puff spawned by the Hammer of Retribution when hitting a hittable object or a wall. Also used by the Mace of Contrition.
IMPLEMENT_ACTOR (AHammerPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
PROP_SeeSound ("FighterHammerHitThing")
PROP_AttackSound ("FighterHammerHitWall")
PROP_ActiveSound ("FighterHammerMiss")
END_DEFAULTS
FState AHammerPuff::States[] =
{
S_NORMAL1 (FHFX, 'S', 4, NULL, &States[1]),
S_NORMAL1 (FHFX, 'T', 4, NULL, &States[2]),
S_NORMAL1 (FHFX, 'U', 4, NULL, &States[3]),
S_NORMAL1 (FHFX, 'V', 4, NULL, &States[4]),
S_NORMAL1 (FHFX, 'W', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== The Fighter is one of the three character classes available to Hexen players.
IMPLEMENT_ACTOR (AFighterPlayer, Hexen, -1, 0)
PROP_SpawnHealth (100)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_Mass (100)
PROP_PainChance (255)
PROP_SpeedFixed (1)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH|MF_FRIENDLY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_Flags4 (MF4_NOSKIN)
PROP_SpawnState (S_FPLAY)
PROP_SeeState (S_FPLAY_RUN)
PROP_PainState (S_FPLAY_PAIN)
PROP_MissileState (S_FPLAY_ATK)
PROP_DeathState (S_FPLAY_DIE)
PROP_XDeathState (S_FPLAY_XDIE)
PROP_BDeathState (S_PLAY_F_FDTH)
PROP_IDeathState (S_FPLAY_ICE)
PROP_PainSound ("PlayerFighterPain")
END_DEFAULTS
FState AFighterPlayer::States[] =
{
#define S_FPLAY 0
S_NORMAL1(PLAY, 'A', -1, NULL , NULL),
#define S_FPLAY_RUN (S_FPLAY+1)
S_NORMAL1(PLAY, 'A', 4, NULL , &States[S_FPLAY_RUN+1]),
S_NORMAL1(PLAY, 'B', 4, NULL , &States[S_FPLAY_RUN+2]),
S_NORMAL1(PLAY, 'C', 4, NULL , &States[S_FPLAY_RUN+3]),
S_NORMAL1(PLAY, 'D', 4, NULL , &States[S_FPLAY_RUN+0]),
#define S_FPLAY_ATK (S_FPLAY_RUN+4)
S_NORMAL1(PLAY, 'E', 8, NULL , &States[S_FPLAY_ATK+1]),
S_NORMAL1(PLAY, 'F', 8, NULL , &States[S_FPLAY]),
#define S_FPLAY_PAIN (S_FPLAY_ATK+2)
S_NORMAL1(PLAY, 'G', 4, NULL , &States[S_FPLAY_PAIN+1]),
S_NORMAL1(PLAY, 'G', 4, A_Pain , &States[S_FPLAY]),
#define S_FPLAY_DIE (S_FPLAY_PAIN+2)
S_NORMAL1(PLAY, 'H', 6, NULL , &States[S_FPLAY_DIE+1]),
S_NORMAL1(PLAY, 'I', 6, A_PlayerScream , &States[S_FPLAY_DIE+2]),
S_NORMAL1(PLAY, 'J', 6, NULL , &States[S_FPLAY_DIE+3]),
S_NORMAL1(PLAY, 'K', 6, NULL , &States[S_FPLAY_DIE+4]),
S_NORMAL1(PLAY, 'L', 6, A_NoBlocking , &States[S_FPLAY_DIE+5]),
S_NORMAL1(PLAY, 'M', 6, NULL , &States[S_FPLAY_DIE+6]),
S_NORMAL1(PLAY, 'N', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_FPLAY_XDIE (S_FPLAY_DIE+7)
S_NORMAL1(PLAY, 'O', 5, A_PlayerScream , &States[S_FPLAY_XDIE+1]),
S_NORMAL1(PLAY, 'P', 5, A_SkullPop , &States[S_FPLAY_XDIE+2]),
S_NORMAL1(PLAY, 'R', 5, A_NoBlocking , &States[S_FPLAY_XDIE+3]),
S_NORMAL1(PLAY, 'S', 5, NULL , &States[S_FPLAY_XDIE+4]),
S_NORMAL1(PLAY, 'T', 5, NULL , &States[S_FPLAY_XDIE+5]),
S_NORMAL1(PLAY, 'U', 5, NULL , &States[S_FPLAY_XDIE+6]),
S_NORMAL1(PLAY, 'V', 5, NULL , &States[S_FPLAY_XDIE+7]),
S_NORMAL1(PLAY, 'W', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_FPLAY_ICE (S_FPLAY_XDIE+8)
S_NORMAL1(PLAY, 'X', 5, A_FreezeDeath , &States[S_FPLAY_ICE+1]),
S_NORMAL1(PLAY, 'X', 1, A_FreezeDeathChunks , &States[S_FPLAY_ICE+1]),
#define S_PLAY_FDTH (S_FPLAY_ICE+2)
S_BRIGHT (FDTH, 'G', 5, A_FireScream , &States[S_PLAY_FDTH+1]),
S_BRIGHT (FDTH, 'H', 4, A_PlayerScream , &States[S_PLAY_FDTH+2]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_PLAY_FDTH+3]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_PLAY_FDTH+4]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_PLAY_FDTH+5]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_PLAY_FDTH+6]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_PLAY_FDTH+7]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_PLAY_FDTH+8]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_PLAY_FDTH+9]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_PLAY_FDTH+10]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_PLAY_FDTH+11]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_PLAY_FDTH+12]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_PLAY_FDTH+13]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_PLAY_FDTH+14]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_PLAY_FDTH+15]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
#define S_PLAY_F_FDTH (S_PLAY_FDTH+18)
S_BRIGHT (FDTH, 'A', 5, NULL , &States[S_PLAY_F_FDTH+1]),
S_BRIGHT (FDTH, 'B', 4, NULL , &States[S_PLAY_FDTH]),
};
------------------------------------------------------------------------
//========== The spiked gauntlets used by fighters.
IMPLEMENT_ACTOR (AFWeapFist, Hexen, -1, 0)
END_DEFAULTS
FState AFWeapFist::States[] =
{
#define S_PUNCHREADY 0
S_NORMAL1(FPCH, 'A', 1, A_WeaponReady , &States[S_PUNCHREADY]),
#define S_PUNCHDOWN (S_PUNCHREADY+1)
S_NORMAL1(FPCH, 'A', 1, A_Lower , &States[S_PUNCHDOWN]),
#define S_PUNCHUP (S_PUNCHDOWN+1)
S_NORMAL1(FPCH, 'A', 1, A_Raise , &States[S_PUNCHUP]),
#define S_PUNCHATK1 (S_PUNCHUP+1)
S_NORMAL2(FPCH, 'B', 5, NULL , &States[S_PUNCHATK1+1], 5, 40),
S_NORMAL2(FPCH, 'C', 4, NULL , &States[S_PUNCHATK1+2], 5, 40),
S_NORMAL2(FPCH, 'D', 4, A_FPunchAttack , &States[S_PUNCHATK1+3], 5, 40),
S_NORMAL2(FPCH, 'C', 4, NULL , &States[S_PUNCHATK1+4], 5, 40),
S_NORMAL2(FPCH, 'B', 5, A_ReFire , &States[S_PUNCHREADY], 5, 40),
#define S_PUNCHATK2 (S_PUNCHATK1+5)
S_NORMAL2(FPCH, 'D', 4, NULL , &States[S_PUNCHATK2+1], 5, 40),
S_NORMAL2(FPCH, 'E', 4, NULL , &States[S_PUNCHATK2+2], 5, 40),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+3], 15, 50),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+4], 25, 60),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+5], 35, 70),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+6], 45, 80),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+7], 55, 90),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+8], 65, 100),
S_NORMAL2(FPCH, 'E', 10, NULL , &States[S_PUNCHREADY], 0, 150)
};
FWeaponInfo AFWeapFist::WeaponInfo =
{
0,
MANA_NONE,
0,
0,
&States[S_PUNCHUP],
&States[S_PUNCHDOWN],
&States[S_PUNCHREADY],
&States[S_PUNCHATK1],
&States[S_PUNCHATK1],
NULL,
NULL,
150,
0,
NULL,
NULL,
ZDRUNTIME_CLASS(AFWeapFist),
-1
};
------------------------------------------------------------------------
//========== The puff spawned when the fighter's fist strikes a hittable object or wall.
IMPLEMENT_ACTOR (APunchPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
PROP_SeeSound ("FighterPunchHitThing")
PROP_AttackSound ("FighterPunchHitWall")
PROP_ActiveSound ("FighterPunchMiss")
END_DEFAULTS
FState APunchPuff::States[] =
{
S_NORMAL1(FHFX, 'S', 4, NULL, &States[1]),
S_NORMAL1(FHFX, 'T', 4, NULL, &States[2]),
S_NORMAL1(FHFX, 'U', 4, NULL, &States[3]),
S_NORMAL1(FHFX, 'V', 4, NULL, &States[4]),
S_NORMAL1(FHFX, 'W', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== One of three pieces of the Quietus (fighter's 4th weapon).
IMPLEMENT_ACTOR (AFWeaponPiece1, Hexen, 12, 29)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AFWeaponPiece1::States[] =
{
S_BRIGHT (WFR1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== One of three pieces of the Quietus (fighter's 4th weapon).
IMPLEMENT_ACTOR (AFWeaponPiece2, Hexen, 13, 30)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AFWeaponPiece2::States[] =
{
S_BRIGHT (WFR2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== One of three pieces of the Quietus (fighter's 4th weapon).
IMPLEMENT_ACTOR (AFWeaponPiece3, Hexen, 16, 31)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AFWeaponPiece3::States[] =
{
S_BRIGHT (WFR3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== An actor that spawns the three pieces of the fighter's 4th weapon (Quietus). It gets spawned if weapon drop is on so that other players can pick up the dead player's weapon.
FState AQuietusDrop::States[] =
{
S_NORMAL1(TNT1, 'A', 1, NULL , &States[1]),
S_NORMAL1(TNT1, 'A', 1, A_DropQuietusPieces , NULL)
};
IMPLEMENT_ACTOR (AQuietusDrop, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
------------------------------------------------------------------------
//========== The Fighter's final weapon, the Quietus is a very powerful sword that sends out a spread of green balls.
IMPLEMENT_ACTOR (AFWeapQuietus, Hexen, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AFWeapQuietus::States[] =
{
// Dummy state, because the fourth weapon does not appear in a level directly.
S_NORMAL1(TNT1, 'A', -1, NULL , NULL),
#define S_FSWORDREADY (1)
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+1]),
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+2]),
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+3]),
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+4]),
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+5]),
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+6]),
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+7]),
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+8]),
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+9]),
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+10]),
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+11]),
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY]),
#define S_FSWORDDOWN (S_FSWORDREADY+12)
S_BRIGHT (FSRD, 'A', 1, A_Lower , &States[S_FSWORDDOWN]),
#define S_FSWORDUP (S_FSWORDDOWN+1)
S_BRIGHT (FSRD, 'A', 1, A_Raise , &States[S_FSWORDUP]),
#define S_FSWORDATK (S_FSWORDUP+1)
S_BRIGHT2 (FSRD, 'D', 3, NULL , &States[S_FSWORDATK+1], 5, 36),
S_BRIGHT2 (FSRD, 'E', 3, NULL , &States[S_FSWORDATK+2], 5, 36),
S_BRIGHT2 (FSRD, 'F', 2, NULL , &States[S_FSWORDATK+3], 5, 36),
S_BRIGHT2 (FSRD, 'G', 3, A_FSwordAttack , &States[S_FSWORDATK+4], 5, 36),
S_BRIGHT2 (FSRD, 'H', 2, NULL , &States[S_FSWORDATK+5], 5, 36),
S_BRIGHT2 (FSRD, 'I', 2, NULL , &States[S_FSWORDATK+6], 5, 36),
S_BRIGHT2 (FSRD, 'I', 10, NULL , &States[S_FSWORDATK+7], 5, 150),
S_BRIGHT2 (FSRD, 'A', 1, NULL , &States[S_FSWORDATK+8], 5, 60),
S_BRIGHT2 (FSRD, 'B', 1, NULL , &States[S_FSWORDATK+9], 5, 55),
S_BRIGHT2 (FSRD, 'C', 1, NULL , &States[S_FSWORDATK+10], 5, 50),
S_BRIGHT2 (FSRD, 'A', 1, NULL , &States[S_FSWORDATK+11], 5, 45),
S_BRIGHT2 (FSRD, 'B', 1, NULL , &States[S_FSWORDREADY], 5, 40),
};
FWeaponInfo AFWeapQuietus::WeaponInfo =
{
0, // DWORD flags;
MANA_BOTH, // ammotype_t ammo;
14, // int ammouse;
0, // int ammogive;
&States[S_FSWORDUP], // FState *upstate;
&States[S_FSWORDDOWN], // FState *downstate;
&States[S_FSWORDREADY], // FState *readystate;
&States[S_FSWORDATK], // FState *atkstate;
&States[S_FSWORDATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
4*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AFWeapQuietus), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== The powerful green projectile fired by the Quietus.
IMPLEMENT_ACTOR (AFSwordMissile, Hexen, -1, 0)
PROP_SpeedFixed (30)
PROP_RadiusFixed (16)
PROP_HeightFixed (8)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FSWORD_MISSILE1)
PROP_DeathState (S_FSWORD_MISSILE_X1)
PROP_DeathSound ("FighterSwordExplode")
END_DEFAULTS
FState AFSwordMissile::States[] =
{
#define S_FSWORD_MISSILE1 0
S_BRIGHT (FSFX, 'A', 3, NULL , &States[S_FSWORD_MISSILE1+1]),
S_BRIGHT (FSFX, 'B', 3, NULL , &States[S_FSWORD_MISSILE1+2]),
S_BRIGHT (FSFX, 'C', 3, NULL , &States[S_FSWORD_MISSILE1]),
#define S_FSWORD_MISSILE_X1 (S_FSWORD_MISSILE1+3)
S_BRIGHT (FSFX, 'D', 4, NULL , &States[S_FSWORD_MISSILE_X1+1]),
S_BRIGHT (FSFX, 'E', 3, A_FSwordFlames , &States[S_FSWORD_MISSILE_X1+2]),
S_BRIGHT (FSFX, 'F', 4, A_Explode , &States[S_FSWORD_MISSILE_X1+3]),
S_BRIGHT (FSFX, 'G', 3, NULL , &States[S_FSWORD_MISSILE_X1+4]),
S_BRIGHT (FSFX, 'H', 4, NULL , &States[S_FSWORD_MISSILE_X1+5]),
S_BRIGHT (FSFX, 'I', 3, NULL , &States[S_FSWORD_MISSILE_X1+6]),
S_BRIGHT (FSFX, 'J', 4, NULL , &States[S_FSWORD_MISSILE_X1+7]),
S_BRIGHT (FSFX, 'K', 3, NULL , &States[S_FSWORD_MISSILE_X1+8]),
S_BRIGHT (FSFX, 'L', 3, NULL , &States[S_FSWORD_MISSILE_X1+9]),
S_BRIGHT (FSFX, 'M', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== The green flame spawned by the Quietus's projectile(s) on impact.
IMPLEMENT_ACTOR (AFSwordFlame, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AFSwordFlame::States[] =
{
S_BRIGHT (FSFX, 'N', 3, NULL , &States[1]),
S_BRIGHT (FSFX, 'O', 3, NULL , &States[2]),
S_BRIGHT (FSFX, 'P', 3, NULL , &States[3]),
S_BRIGHT (FSFX, 'Q', 3, NULL , &States[4]),
S_BRIGHT (FSFX, 'R', 3, NULL , &States[5]),
S_BRIGHT (FSFX, 'S', 3, NULL , &States[6]),
S_BRIGHT (FSFX, 'T', 3, NULL , &States[7]),
S_BRIGHT (FSFX, 'U', 3, NULL , &States[8]),
S_BRIGHT (FSFX, 'V', 3, NULL , &States[9]),
S_BRIGHT (FSFX, 'W', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== The afrit looks like a small black gargoyle wreathed in flames.
IMPLEMENT_ACTOR (AFireDemon, Hexen, 10060, 5)
PROP_SpawnHealth (80)
PROP_ReactionTime (8)
PROP_PainChance (1)
PROP_SpeedLong (13)
PROP_RadiusFixed (20)
PROP_HeightFixed (68)
PROP_Mass (75)
PROP_Damage (1)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF|MF_NOGRAVITY|MF_FLOAT)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_INVULNERABLE|MF2_MCROSS|MF2_TELESTOMP)
PROP_SpawnState (S_FIRED_SPAWN1)
PROP_SeeState (S_FIRED_LOOK1+3)
PROP_PainState (S_FIRED_PAIN1)
PROP_MissileState (S_FIRED_ATTACK1)
PROP_CrashState (S_FIRED_XDEATH1)
PROP_DeathState (S_FIRED_DEATH1)
PROP_XDeathState (S_FIRED_XDEATH1)
PROP_IDeathState (S_FIRED_ICE1)
PROP_SeeSound ("FireDemonSpawn")
PROP_PainSound ("FireDemonPain")
PROP_DeathSound ("FireDemonDeath")
PROP_ActiveSound ("FireDemonActive")
END_DEFAULTS
FState AFireDemon::States[] =
{
#define S_FIRED_SPAWN1 0
S_BRIGHT (FDMN, 'X', 5, NULL , &States[S_FIRED_SPAWN1+1]),
#define S_FIRED_LOOK1 (S_FIRED_SPAWN1+1)
S_BRIGHT (FDMN, 'E', 10, A_Look , &States[S_FIRED_LOOK1+1]),
S_BRIGHT (FDMN, 'F', 10, A_Look , &States[S_FIRED_LOOK1+2]),
S_BRIGHT (FDMN, 'G', 10, A_Look , &States[S_FIRED_LOOK1+0]),
S_BRIGHT (FDMN, 'E', 8, NULL , &States[S_FIRED_LOOK1+4]),
S_BRIGHT (FDMN, 'F', 6, NULL , &States[S_FIRED_LOOK1+5]),
S_BRIGHT (FDMN, 'G', 5, NULL , &States[S_FIRED_LOOK1+6]),
S_BRIGHT (FDMN, 'F', 8, NULL , &States[S_FIRED_LOOK1+7]),
S_BRIGHT (FDMN, 'E', 6, NULL , &States[S_FIRED_LOOK1+8]),
S_BRIGHT (FDMN, 'F', 7, A_FiredRocks , &States[S_FIRED_LOOK1+9]),
S_BRIGHT (FDMN, 'H', 5, NULL , &States[S_FIRED_LOOK1+10]),
S_BRIGHT (FDMN, 'I', 5, NULL , &States[S_FIRED_LOOK1+11]),
S_BRIGHT (FDMN, 'J', 5, A_UnSetInvulnerable , &States[S_FIRED_LOOK1+12]),
#define S_FIRED_WALK1 (S_FIRED_LOOK1+12)
S_BRIGHT (FDMN, 'A', 5, A_FiredChase , &States[S_FIRED_WALK1+1]),
S_BRIGHT (FDMN, 'B', 5, A_FiredChase , &States[S_FIRED_WALK1+2]),
S_BRIGHT (FDMN, 'C', 5, A_FiredChase , &States[S_FIRED_WALK1+0]),
#define S_FIRED_PAIN1 (S_FIRED_WALK1+3)
S_BRIGHT (FDMN, 'D', 6, A_Pain , &States[S_FIRED_WALK1]),
#define S_FIRED_ATTACK1 (S_FIRED_PAIN1+1)
S_BRIGHT (FDMN, 'K', 3, A_FaceTarget , &States[S_FIRED_ATTACK1+1]),
S_BRIGHT (FDMN, 'K', 5, A_FiredAttack , &States[S_FIRED_ATTACK1+2]),
S_BRIGHT (FDMN, 'K', 5, A_FiredAttack , &States[S_FIRED_ATTACK1+3]),
S_BRIGHT (FDMN, 'K', 5, A_FiredAttack , &States[S_FIRED_WALK1]),
#define S_FIRED_DEATH1 (S_FIRED_ATTACK1+4)
S_BRIGHT (FDMN, 'D', 4, A_FaceTarget , &States[S_FIRED_DEATH1+1]),
S_BRIGHT (FDMN, 'L', 4, A_Scream , &States[S_FIRED_DEATH1+2]),
S_BRIGHT (FDMN, 'L', 4, A_NoBlocking , &States[S_FIRED_DEATH1+3]),
S_BRIGHT (FDMN, 'L', 200, NULL , NULL),
#define S_FIRED_XDEATH1 (S_FIRED_DEATH1+4)
S_NORMAL1 (FDMN, 'M', 5, A_FaceTarget , &States[S_FIRED_XDEATH1+1]),
S_NORMAL1 (FDMN, 'N', 5, A_NoBlocking , &States[S_FIRED_XDEATH1+2]),
S_NORMAL1 (FDMN, 'O', 5, A_FiredSplotch , NULL),
#define S_FIRED_ICE1 (S_FIRED_XDEATH1+3)
S_NORMAL1 (FDMN, 'R', 5, A_FreezeDeath , &States[S_FIRED_ICE1+1]),
S_NORMAL1 (FDMN, 'R', 1, A_FreezeDeathChunks , &States[S_FIRED_ICE1+1])
};
------------------------------------------------------------------------
//========== A small lump of overcooked afrit meat, dropped along with the rest of the monster when it dies.
IMPLEMENT_ACTOR (AFireDemonSplotch1, Hexen, -1, 0)
PROP_SpawnHealth (1000)
PROP_ReactionTime (8)
PROP_PainChance (0)
PROP_SpeedLong (0)
PROP_RadiusFixed (3)
PROP_HeightFixed (16)
PROP_Mass (100)
PROP_Damage (0)
PROP_Flags (MF_DROPOFF|MF_CORPSE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_FLOORCLIP)
PROP_SpawnState (0)
END_DEFAULTS
FState AFireDemonSplotch1::States[] =
{
S_NORMAL1 (FDMN, 'P', 3, NULL , &States[1]),
S_NORMAL1 (FDMN, 'P', 6, A_QueueCorpse, &States[2]),
S_NORMAL1 (FDMN, 'Y', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== A small lump of overcooked afrit meat, dropped along with the rest of the monster when it dies.
IMPLEMENT_ACTOR (AFireDemonSplotch2, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState AFireDemonSplotch2::States[] =
{
S_NORMAL1 (FDMN, 'Q', 3, NULL , &States[1]),
S_NORMAL1 (FDMN, 'Q', 6, A_QueueCorpse, &States[2]),
S_NORMAL1 (FDMN, 'Z', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== A rock that can be created when an afrit unrolls from its protective ball.
IMPLEMENT_ACTOR (AFireDemonRock1, Hexen, -1, 0)
PROP_SpawnHealth (1000)
PROP_ReactionTime (8)
PROP_PainChance (0)
PROP_SpeedLong (0)
PROP_RadiusFixed (3)
PROP_HeightFixed (5)
PROP_Mass (16)
PROP_Damage (0)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_FIRED_RDROP1)
PROP_DeathState (S_FIRED_RDEAD1)
PROP_XDeathState (S_FIRED_RDEAD1+1)
END_DEFAULTS
FState AFireDemonRock1::States[] =
{
#define S_FIRED_RDROP1 0
S_NORMAL1 (FDMN, 'S', 4, NULL , &States[S_FIRED_RDROP1]),
#define S_FIRED_RDEAD1 (S_FIRED_RDROP1+1)
S_NORMAL1 (FDMN, 'S', 5, A_SmBounce, &States[S_FIRED_RDEAD1+1]),
S_NORMAL1 (FDMN, 'S', 200, NULL , NULL)
};
------------------------------------------------------------------------
//========== A rock that can be created when an afrit unrolls from its protective ball.
IMPLEMENT_ACTOR (AFireDemonRock2, Hexen, -1, 0)
PROP_SpawnState (S_FIRED_RDROP2)
PROP_DeathState (S_FIRED_RDEAD2)
PROP_XDeathState (S_FIRED_RDEAD2+1)
END_DEFAULTS
FState AFireDemonRock2::States[] =
{
#define S_FIRED_RDROP2 0
S_NORMAL1 (FDMN, 'T', 4, NULL , &States[S_FIRED_RDROP2]),
#define S_FIRED_RDEAD2 (S_FIRED_RDROP2+1)
S_NORMAL1 (FDMN, 'T', 5, A_SmBounce, &States[S_FIRED_RDEAD2+1]),
S_NORMAL1 (FDMN, 'T', 200, NULL , NULL)
};
------------------------------------------------------------------------
//========== A rock that can be created when an afrit unrolls from its protective ball.
IMPLEMENT_ACTOR (AFireDemonRock3, Hexen, -1, 0)
PROP_SpawnState (S_FIRED_RDROP3)
PROP_DeathState (S_FIRED_RDEAD3)
PROP_XDeathState (S_FIRED_RDEAD3+1)
END_DEFAULTS
FState AFireDemonRock3::States[] =
{
#define S_FIRED_RDROP3 0
S_NORMAL1 (FDMN, 'U', 4, NULL , &States[S_FIRED_RDROP3]),
#define S_FIRED_RDEAD3 (S_FIRED_RDROP3+1)
S_NORMAL1 (FDMN, 'U', 5, A_SmBounce, &States[S_FIRED_RDEAD3+1]),
S_NORMAL1 (FDMN, 'U', 200, NULL , NULL)
};
------------------------------------------------------------------------
//========== A rock that can be created when an afrit unrolls from its protective ball.
FState AFireDemonRock4::States[] =
{
#define S_FIRED_RDROP4 0
S_NORMAL1 (FDMN, 'V', 4, NULL , &States[S_FIRED_RDROP4]),
#define S_FIRED_RDEAD4 (S_FIRED_RDROP4+1)
S_NORMAL1 (FDMN, 'V', 5, A_SmBounce, &States[S_FIRED_RDEAD4+1]),
S_NORMAL1 (FDMN, 'V', 200, NULL , NULL)
};
IMPLEMENT_ACTOR (AFireDemonRock4, Hexen, -1, 0)
PROP_SpawnState (S_FIRED_RDROP4)
PROP_DeathState (S_FIRED_RDEAD4)
PROP_XDeathState (S_FIRED_RDEAD4+1)
END_DEFAULTS
------------------------------------------------------------------------
//========== A rock that can be created when an afrit unrolls from its protective ball.
IMPLEMENT_ACTOR (AFireDemonRock5, Hexen, -1, 0)
PROP_SpawnState (S_FIRED_RDROP5)
PROP_DeathState (S_FIRED_RDEAD5)
PROP_XDeathState (S_FIRED_RDEAD5+1)
END_DEFAULTS
FState AFireDemonRock5::States[] =
{
#define S_FIRED_RDROP5 0
S_NORMAL1 (FDMN, 'W', 4, NULL , &States[S_FIRED_RDROP5]),
#define S_FIRED_RDEAD5 (S_FIRED_RDROP5+1)
S_NORMAL1 (FDMN, 'W', 5, A_SmBounce, &States[S_FIRED_RDEAD5+1]),
S_NORMAL1 (FDMN, 'W', 200, NULL , NULL)
};
------------------------------------------------------------------------
//========== The yellow fireballs thrown by afrits.
IMPLEMENT_ACTOR (AFireDemonMissile, Hexen, -1, 0)
PROP_SpawnHealth (1000)
PROP_ReactionTime (8)
PROP_PainChance (0)
PROP_SpeedFixed (10)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_Mass (15)
PROP_Damage (1)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS|MF2_FLOORCLIP)
PROP_SpawnState (S_FIRED_FX6_1)
PROP_DeathState (S_FIRED_FX6_2)
PROP_DeathSound ("FireDemonMissileHit")
END_DEFAULTS
FState AFireDemonMissile::States[] =
{
#define S_FIRED_FX6_1 0
S_BRIGHT (FDMB, 'A', 5, NULL, &States[S_FIRED_FX6_1]),
#define S_FIRED_FX6_2 (S_FIRED_FX6_1+1)
S_BRIGHT (FDMB, 'B', 5, NULL, &States[S_FIRED_FX6_2+1]),
S_BRIGHT (FDMB, 'C', 5, NULL, &States[S_FIRED_FX6_2+2]),
S_BRIGHT (FDMB, 'D', 5, NULL, &States[S_FIRED_FX6_2+3]),
S_BRIGHT (FDMB, 'E', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== Small temporary flame
IMPLEMENT_ACTOR (AFlameSmallTemp, Hexen, 10500, 96)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
END_DEFAULTS
FState AFlameSmallTemp::States[] =
{
S_BRIGHT (FFSM, 'A', 3, NULL , &States[1]),
S_BRIGHT (FFSM, 'B', 3, NULL , &States[2]),
S_BRIGHT (FFSM, 'C', 2, A_FlameCheck , &States[3]),
S_BRIGHT (FFSM, 'C', 2, NULL , &States[4]),
S_BRIGHT (FFSM, 'D', 3, NULL , &States[5]),
S_BRIGHT (FFSM, 'E', 3, A_FlameCheck , &States[0]),
};
------------------------------------------------------------------------
//========== Large temporary flame
IMPLEMENT_ACTOR (AFlameLargeTemp, Hexen, 10502, 98)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (0)
END_DEFAULTS
FState AFlameLargeTemp::States[] =
{
S_BRIGHT (FFLG, 'A', 4, NULL , &States[1]),
S_BRIGHT (FFLG, 'B', 4, A_FlameCheck , &States[2]),
S_BRIGHT (FFLG, 'C', 4, NULL , &States[3]),
S_BRIGHT (FFLG, 'D', 4, A_FlameCheck , &States[4]),
S_BRIGHT (FFLG, 'E', 4, NULL , &States[5]),
S_BRIGHT (FFLG, 'F', 4, A_FlameCheck , &States[6]),
S_BRIGHT (FFLG, 'G', 4, NULL , &States[7]),
S_BRIGHT (FFLG, 'H', 4, A_FlameCheck , &States[8]),
S_BRIGHT (FFLG, 'I', 4, NULL , &States[9]),
S_BRIGHT (FFLG, 'J', 4, A_FlameCheck , &States[10]),
S_BRIGHT (FFLG, 'K', 4, NULL , &States[11]),
S_BRIGHT (FFLG, 'L', 4, A_FlameCheck , &States[12]),
S_BRIGHT (FFLG, 'M', 4, NULL , &States[13]),
S_BRIGHT (FFLG, 'N', 4, A_FlameCheck , &States[14]),
S_BRIGHT (FFLG, 'O', 4, NULL , &States[15]),
S_BRIGHT (FFLG, 'P', 4, A_FlameCheck , &States[4]),
};
------------------------------------------------------------------------
//========== Small flame (switchable decoration)
IMPLEMENT_ACTOR (AFlameSmall, Hexen, 10501, 97)
PROP_Flags2 (MF2_NOTELEPORT|RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FLAME_SMALL1)
END_DEFAULTS
FState AFlameSmall::States[] =
{
#define S_FLAME_SMALL1 0
S_BRIGHT (FFSM, 'A', 3, NULL , &States[S_FLAME_SMALL1+1]),
S_BRIGHT (FFSM, 'A', 3, A_UnHideThing , &States[S_FLAME_SMALL1+2]),
S_BRIGHT (FFSM, 'A', 3, NULL , &States[S_FLAME_SMALL1+3]),
S_BRIGHT (FFSM, 'B', 3, NULL , &States[S_FLAME_SMALL1+4]),
S_BRIGHT (FFSM, 'C', 3, NULL , &States[S_FLAME_SMALL1+5]),
S_BRIGHT (FFSM, 'D', 3, NULL , &States[S_FLAME_SMALL1+6]),
S_BRIGHT (FFSM, 'E', 3, NULL , &States[S_FLAME_SMALL1+2]),
#define S_FLAME_SDORM1 (S_FLAME_SMALL1+7)
S_NORMAL1(FFSM, 'A', 2, NULL , &States[S_FLAME_SDORM1+1]),
S_NORMAL1(FFSM, 'B', 2, A_HideThing , &States[S_FLAME_SDORM1+2]),
S_NORMAL1(FFSM, 'C', 200, NULL , &States[S_FLAME_SDORM1+2]),
};
------------------------------------------------------------------------
//========== Large flame (switchable decoration)
IMPLEMENT_ACTOR (AFlameLarge, Hexen, 10503, 99)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderFlags (RF_INVISIBLE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FLAME_LARGE1)
END_DEFAULTS
FState AFlameLarge::States[] =
{
#define S_FLAME_LARGE1 0
S_BRIGHT (FFLG, 'A', 2, NULL , &States[S_FLAME_LARGE1+1]),
S_BRIGHT (FFLG, 'A', 2, A_UnHideThing , &States[S_FLAME_LARGE1+2]),
S_BRIGHT (FFLG, 'A', 4, NULL , &States[S_FLAME_LARGE1+3]),
S_BRIGHT (FFLG, 'B', 4, NULL , &States[S_FLAME_LARGE1+4]),
S_BRIGHT (FFLG, 'C', 4, NULL , &States[S_FLAME_LARGE1+5]),
S_BRIGHT (FFLG, 'D', 4, NULL , &States[S_FLAME_LARGE1+6]),
S_BRIGHT (FFLG, 'E', 4, NULL , &States[S_FLAME_LARGE1+7]),
S_BRIGHT (FFLG, 'F', 4, NULL , &States[S_FLAME_LARGE1+8]),
S_BRIGHT (FFLG, 'G', 4, NULL , &States[S_FLAME_LARGE1+9]),
S_BRIGHT (FFLG, 'H', 4, NULL , &States[S_FLAME_LARGE1+10]),
S_BRIGHT (FFLG, 'I', 4, NULL , &States[S_FLAME_LARGE1+11]),
S_BRIGHT (FFLG, 'J', 4, NULL , &States[S_FLAME_LARGE1+12]),
S_BRIGHT (FFLG, 'K', 4, NULL , &States[S_FLAME_LARGE1+13]),
S_BRIGHT (FFLG, 'L', 4, NULL , &States[S_FLAME_LARGE1+14]),
S_BRIGHT (FFLG, 'M', 4, NULL , &States[S_FLAME_LARGE1+15]),
S_BRIGHT (FFLG, 'N', 4, NULL , &States[S_FLAME_LARGE1+16]),
S_BRIGHT (FFLG, 'O', 4, NULL , &States[S_FLAME_LARGE1+17]),
S_BRIGHT (FFLG, 'P', 4, NULL , &States[S_FLAME_LARGE1+6]),
#define S_FLAME_LDORM1 (S_FLAME_LARGE1+18)
S_NORMAL1(FFLG, 'D', 2, NULL , &States[S_FLAME_LDORM1+1]),
S_NORMAL1(FFLG, 'C', 2, NULL , &States[S_FLAME_LDORM1+2]),
S_NORMAL1(FFLG, 'B', 2, NULL , &States[S_FLAME_LDORM1+3]),
S_NORMAL1(FFLG, 'A', 2, A_HideThing , &States[S_FLAME_LDORM1+4]),
S_NORMAL1(FFLG, 'A', 200, NULL , &States[S_FLAME_LDORM1+4]),
};
------------------------------------------------------------------------
//========== Flechette used by clerics
IMPLEMENT_ACTOR (APoisonBag, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_SpawnState (S_POISONBAG1)
END_DEFAULTS
FState APoisonBag::States[] =
{
#define S_POISONBAG1 0
S_BRIGHT (PSBG, 'A', 18, NULL , &States[S_POISONBAG1+1]),
S_BRIGHT (PSBG, 'B', 4, NULL , &States[S_POISONBAG1+2]),
S_NORMAL1(PSBG, 'C', 3, NULL , &States[S_POISONBAG1+3]),
S_NORMAL1(PSBG, 'C', 1, A_PoisonBagInit , NULL),
};
------------------------------------------------------------------------
//========== Flechette used by mages
IMPLEMENT_ACTOR (AFireBomb, Hexen, -1, 0)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOGRAVITY)
PROP_Flags3 (MF3_FOILINVUL)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (S_FIREBOMB1)
PROP_DeathSound ("FlechetteExplode")
END_DEFAULTS
FState AFireBomb::States[] =
{
#define S_FIREBOMB1 0
S_NORMAL1(PSBG, 'A', 20, NULL , &States[S_FIREBOMB1+1]),
S_NORMAL1(PSBG, 'A', 10, NULL , &States[S_FIREBOMB1+2]),
S_NORMAL1(PSBG, 'A', 10, NULL , &States[S_FIREBOMB1+3]),
S_NORMAL1(PSBG, 'B', 4, NULL , &States[S_FIREBOMB1+4]),
S_NORMAL1(PSBG, 'C', 4, A_Scream , &States[S_FIREBOMB1+5]),
S_BRIGHT (XPL1, 'A', 4, A_Explode , &States[S_FIREBOMB1+6]),
S_BRIGHT (XPL1, 'B', 4, NULL , &States[S_FIREBOMB1+7]),
S_BRIGHT (XPL1, 'C', 4, NULL , &States[S_FIREBOMB1+8]),
S_BRIGHT (XPL1, 'D', 4, NULL , &States[S_FIREBOMB1+9]),
S_BRIGHT (XPL1, 'E', 4, NULL , &States[S_FIREBOMB1+10]),
S_BRIGHT (XPL1, 'F', 4, NULL , NULL),
};
------------------------------------------------------------------------
//========== Flechette used by fighters
IMPLEMENT_ACTOR (AThrowingBomb, Hexen, -1, 0)
PROP_SpawnHealth (48)
PROP_SpeedFixed (12)
PROP_RadiusFixed (8)
PROP_HeightFixed (10)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_HEXENBOUNCE)
PROP_SpawnState (S_THROWINGBOMB1)
PROP_DeathState (S_THROWINGBOMB_X1)
PROP_SeeSound ("FlechetteBounce")
PROP_DeathSound ("FlechetteExplode")
END_DEFAULTS
FState AThrowingBomb::States[] =
{
#define S_THROWINGBOMB1 0
S_NORMAL1(THRW, 'A', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB1+1]),
S_NORMAL1(THRW, 'B', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+2]),
S_NORMAL1(THRW, 'C', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+3]),
S_NORMAL1(THRW, 'D', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+4]),
S_NORMAL1(THRW, 'E', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1+5]),
S_NORMAL1(THRW, 'F', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB1]),
#define S_THROWINGBOMB7 (S_THROWINGBOMB1+6)
S_NORMAL1(THRW, 'G', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+1]),
S_NORMAL1(THRW, 'F', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB7+2]),
S_NORMAL1(THRW, 'H', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+3]),
S_NORMAL1(THRW, 'F', 4, A_CheckThrowBomb , &States[S_THROWINGBOMB7+4]),
S_NORMAL1(THRW, 'G', 6, A_CheckThrowBomb , &States[S_THROWINGBOMB7+5]),
S_NORMAL1(THRW, 'F', 3, A_CheckThrowBomb , &States[S_THROWINGBOMB7+5]),
#define S_THROWINGBOMB_X1 (S_THROWINGBOMB7+6)
S_BRIGHT (CFCF, 'Q', 4, A_NoGravity , &States[S_THROWINGBOMB_X1+1]),
S_BRIGHT (CFCF, 'R', 3, A_Scream , &States[S_THROWINGBOMB_X1+2]),
S_BRIGHT (CFCF, 'S', 4, A_Explode , &States[S_THROWINGBOMB_X1+3]),
S_BRIGHT (CFCF, 'T', 3, NULL , &States[S_THROWINGBOMB_X1+4]),
S_BRIGHT (CFCF, 'U', 4, NULL , &States[S_THROWINGBOMB_X1+5]),
S_BRIGHT (CFCF, 'W', 3, NULL , &States[S_THROWINGBOMB_X1+6]),
S_BRIGHT (CFCF, 'X', 4, NULL , &States[S_THROWINGBOMB_X1+7]),
S_BRIGHT (CFCF, 'Z', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Flechette: a collectible vial of green liquid which acts as a versatile support weapon for Hexen players.
IMPLEMENT_ACTOR (AArtiPoisonBag, Hexen, 8000, 72)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiPoisonBag::States[] =
{
S_NORMAL1(PSBG, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== The flechette as used by clerics (Poison cloud flechette)
IMPLEMENT_STATELESS_ACTOR (AArtiPoisonBag1, Hexen, -1, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== The flechette as used by mages (Time bomb flechette)
IMPLEMENT_STATELESS_ACTOR (AArtiPoisonBag2, Hexen, -1, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== The flechette as used fighters (Thrown grenade flechette)
IMPLEMENT_STATELESS_ACTOR (AArtiPoisonBag3, Hexen, -1, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== The cloud of poison gas that is created by a cleric's flechette or by the destruction of a poison mushroom.
IMPLEMENT_ACTOR (APoisonCloud, Hexen, -1, 0)
PROP_Radius (20)
PROP_Height (30)
PROP_MassLong (0x7fffffff)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF)
PROP_Flags2 (MF2_NODMGTHRUST)
PROP_Flags3 (MF3_DONTSPLASH|MF3_FOILINVUL|MF3_CANBLAST)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (S_POISONCLOUD1)
PROP_DeathSound ("PoisonShroomDeath")
END_DEFAULTS
FState APoisonCloud::States[] =
{
#define S_POISONCLOUD1 0
S_NORMAL1(PSBG, 'D', 1, NULL , &States[S_POISONCLOUD1+1]),
S_NORMAL1(PSBG, 'D', 1, A_Scream , &States[S_POISONCLOUD1+2]),
S_NORMAL1(PSBG, 'D', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+3]),
S_NORMAL1(PSBG, 'E', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+4]),
S_NORMAL1(PSBG, 'E', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+5]),
S_NORMAL1(PSBG, 'E', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+6]),
S_NORMAL1(PSBG, 'F', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+7]),
S_NORMAL1(PSBG, 'F', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+8]),
S_NORMAL1(PSBG, 'F', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+9]),
S_NORMAL1(PSBG, 'G', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+10]),
S_NORMAL1(PSBG, 'G', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+11]),
S_NORMAL1(PSBG, 'G', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+12]),
S_NORMAL1(PSBG, 'H', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+13]),
S_NORMAL1(PSBG, 'H', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+14]),
S_NORMAL1(PSBG, 'H', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+15]),
S_NORMAL1(PSBG, 'I', 2, A_PoisonBagDamage , &States[S_POISONCLOUD1+16]),
S_NORMAL1(PSBG, 'I', 1, A_PoisonBagDamage , &States[S_POISONCLOUD1+17]),
S_NORMAL1(PSBG, 'I', 1, A_PoisonBagCheck , &States[S_POISONCLOUD1+3]),
#define S_POISONCLOUD_X1 (S_POISONCLOUD1+18)
S_NORMAL1(PSBG, 'H', 7, NULL , &States[S_POISONCLOUD_X1+1]),
S_NORMAL1(PSBG, 'G', 7, NULL , &States[S_POISONCLOUD_X1+2]),
S_NORMAL1(PSBG, 'F', 6, NULL , &States[S_POISONCLOUD_X1+3]),
S_NORMAL1(PSBG, 'D', 6, NULL , NULL)
};
------------------------------------------------------------------------
//========== A generator that creates small, medium and large patches of fog.
IMPLEMENT_ACTOR (AFogSpawner, Hexen, 10000, 0)
PROP_Flags (MF_NOSECTOR|MF_NOBLOCKMAP)
PROP_Flags2 (MF2_FLOATBOB)
PROP_RenderFlags (RF_INVISIBLE)
PROP_SpawnState (S_SPAWNFOG1)
END_DEFAULTS
FState AFogSpawner::States[] =
{
#define S_SPAWNFOG1 0
S_NORMAL1(MAN1, 'A', 20, A_FogSpaw, &States[S_SPAWNFOG1]),
};
------------------------------------------------------------------------
//========== A small patch of fog generated by a FogSpawner actor.
IMPLEMENT_ACTOR (AFogPatchSmall, Hexen, 10001, 0)
PROP_SpeedFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_FLOAT)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (S_FOGPATCHS1)
PROP_DeathState (S_FOGPATCHS0)
END_DEFAULTS
FState AFogPatchSmall::States[] =
{
#define S_FOGPATCHS1 0
S_NORMAL1(FOGS, 'A', 7, A_FogMove, &States[S_FOGPATCHS1+1]),
S_NORMAL1(FOGS, 'B', 7, A_FogMove, &States[S_FOGPATCHS1+2]),
S_NORMAL1(FOGS, 'C', 7, A_FogMove, &States[S_FOGPATCHS1+3]),
S_NORMAL1(FOGS, 'D', 7, A_FogMove, &States[S_FOGPATCHS1+4]),
S_NORMAL1(FOGS, 'E', 7, A_FogMove, &States[S_FOGPATCHS1]),
#define S_FOGPATCHS0 (S_FOGPATCHS1+5)
S_NORMAL1(FOGS, 'E', 5, NULL , NULL),
};
------------------------------------------------------------------------
//========== A medium-sized patch of fog generated by a FogSpawner actor.
IMPLEMENT_ACTOR (AFogPatchMedium, Hexen, 10002, 0)
PROP_SpeedFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_FLOAT)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (S_FOGPATCHM1)
PROP_DeathState (S_FOGPATCHM0)
END_DEFAULTS
FState AFogPatchMedium::States[] =
{
#define S_FOGPATCHM1 0
S_NORMAL1(FOGM, 'A', 7, A_FogMove , &States[S_FOGPATCHM1+1]),
S_NORMAL1(FOGM, 'B', 7, A_FogMove , &States[S_FOGPATCHM1+2]),
S_NORMAL1(FOGM, 'C', 7, A_FogMove , &States[S_FOGPATCHM1+3]),
S_NORMAL1(FOGM, 'D', 7, A_FogMove , &States[S_FOGPATCHM1+4]),
S_NORMAL1(FOGM, 'E', 7, A_FogMove , &States[S_FOGPATCHM1]),
#define S_FOGPATCHM0 (S_FOGPATCHM1+5)
S_NORMAL1(FOGS, 'A', 5, NULL , &States[S_FOGPATCHM0+1]),
S_NORMAL1(FOGS, 'B', 5, NULL , &States[S_FOGPATCHM0+2]),
S_NORMAL1(FOGS, 'C', 5, NULL , &States[S_FOGPATCHM0+3]),
S_NORMAL1(FOGS, 'D', 5, NULL , &States[S_FOGPATCHM0+4]),
S_NORMAL1(FOGS, 'E', 5, NULL , &AFogPatchSmall::States[S_FOGPATCHS0]),
};
------------------------------------------------------------------------
//========== A large patch of fog generated by a FogSpawner actor.
IMPLEMENT_ACTOR (AFogPatchLarge, Hexen, 10003, 0)
PROP_SpeedFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOCLIP|MF_FLOAT)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (S_FOGPATCHL1)
PROP_DeathState (S_FOGPATCHL0)
END_DEFAULTS
FState AFogPatchLarge::States[] =
{
#define S_FOGPATCHL1 0
S_NORMAL1(FOGL, 'A', 7, A_FogMove , &States[S_FOGPATCHL1+1]),
S_NORMAL1(FOGL, 'B', 7, A_FogMove , &States[S_FOGPATCHL1+2]),
S_NORMAL1(FOGL, 'C', 7, A_FogMove , &States[S_FOGPATCHL1+3]),
S_NORMAL1(FOGL, 'D', 7, A_FogMove , &States[S_FOGPATCHL1+4]),
S_NORMAL1(FOGL, 'E', 7, A_FogMove , &States[S_FOGPATCHL1]),
#define S_FOGPATCHL0 (S_FOGPATCHL1+5)
S_NORMAL1(FOGM, 'A', 4, NULL , &States[S_FOGPATCHL0+1]),
S_NORMAL1(FOGM, 'B', 4, NULL , &States[S_FOGPATCHL0+2]),
S_NORMAL1(FOGM, 'C', 4, NULL , &States[S_FOGPATCHL0+3]),
S_NORMAL1(FOGM, 'D', 4, NULL , &States[S_FOGPATCHL0+4]),
S_NORMAL1(FOGM, 'E', 4, NULL , &AFogPatchMedium::States[S_FOGPATCHM0]),
};
------------------------------------------------------------------------
//========== Mystic Ambit Incant artifact
IMPLEMENT_ACTOR (AArtiHealingRadius, Hexen, 10120, 0)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiHealingRadius::States[] =
{
S_BRIGHT (HRAD, 'A', 4, NULL, &States[1]),
S_BRIGHT (HRAD, 'B', 4, NULL, &States[2]),
S_BRIGHT (HRAD, 'C', 4, NULL, &States[3]),
S_BRIGHT (HRAD, 'D', 4, NULL, &States[4]),
S_BRIGHT (HRAD, 'E', 4, NULL, &States[5]),
S_BRIGHT (HRAD, 'F', 4, NULL, &States[6]),
S_BRIGHT (HRAD, 'G', 4, NULL, &States[7]),
S_BRIGHT (HRAD, 'H', 4, NULL, &States[8]),
S_BRIGHT (HRAD, 'I', 4, NULL, &States[9]),
S_BRIGHT (HRAD, 'J', 4, NULL, &States[10]),
S_BRIGHT (HRAD, 'K', 4, NULL, &States[11]),
S_BRIGHT (HRAD, 'L', 4, NULL, &States[12]),
S_BRIGHT (HRAD, 'M', 4, NULL, &States[13]),
S_BRIGHT (HRAD, 'N', 4, NULL, &States[14]),
S_BRIGHT (HRAD, 'O', 4, NULL, &States[15]),
S_BRIGHT (HRAD, 'P', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== The Heresiarch him/itself
IMPLEMENT_ACTOR (AHeresiarch, Hexen, 10080, 0)
PROP_SpawnHealth (5000)
PROP_PainChance (10)
PROP_SpeedFixed (16)
PROP_RadiusFixed (40)
PROP_HeightFixed (110)
PROP_Mass (500)
PROP_Damage (9)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_BOSS|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_SORC_SPAWN1)
PROP_SeeState (S_SORC_WALK1)
PROP_PainState (S_SORC_PAIN1)
PROP_MissileState (S_SORC_ATK2_1)
PROP_DeathState (S_SORC_DIE1)
PROP_SeeSound ("SorcererSight")
PROP_PainSound ("SorcererPain")
PROP_DeathSound ("SorcererDeathScream")
PROP_ActiveSound ("SorcererActive")
END_DEFAULTS
FState AHeresiarch::States[] =
{
#define S_SORC_SPAWN1 0
S_NORMAL1(SORC, 'A', 3, NULL , &States[S_SORC_SPAWN1+1]),
S_NORMAL1(SORC, 'A', 2, A_SorcSpinBalls , &States[S_SORC_SPAWN1+2]),
S_NORMAL1(SORC, 'A', 10, A_Look , &States[S_SORC_SPAWN1+2]),
#define S_SORC_WALK1 (S_SORC_SPAWN1+3)
S_NORMAL1(SORC, 'A', 5, A_Chase , &States[S_SORC_WALK1+1]),
S_NORMAL1(SORC, 'B', 5, A_Chase , &States[S_SORC_WALK1+2]),
S_NORMAL1(SORC, 'C', 5, A_Chase , &States[S_SORC_WALK1+3]),
S_NORMAL1(SORC, 'D', 5, A_Chase , &States[S_SORC_WALK1]),
#define S_SORC_PAIN1 (S_SORC_WALK1+4)
S_NORMAL1(SORC, 'G', 8, NULL , &States[S_SORC_PAIN1+1]),
S_NORMAL1(SORC, 'G', 8, A_Pain , &States[S_SORC_WALK1]),
#define S_SORC_ATK2_1 (S_SORC_PAIN1+2)
S_BRIGHT (SORC, 'F', 6, A_FaceTarget , &States[S_SORC_ATK2_1+1]),
S_BRIGHT (SORC, 'F', 6, A_SpeedBalls , &States[S_SORC_ATK2_1+2]),
S_BRIGHT (SORC, 'F', 6, A_FaceTarget , &States[S_SORC_ATK2_1+2]),
#define S_SORC_ATTACK1 (S_SORC_ATK2_1+3)
S_BRIGHT (SORC, 'E', 6, NULL , &States[S_SORC_ATTACK1+1]),
S_BRIGHT (SORC, 'E', 6, A_SpawnFizzle , &States[S_SORC_ATTACK1+2]),
S_BRIGHT (SORC, 'E', 5, A_FaceTarget , &States[S_SORC_ATTACK1+1]),
S_BRIGHT (SORC, 'E', 2, NULL , &States[S_SORC_ATTACK1+4]),
S_BRIGHT (SORC, 'E', 2, A_SorcBossAttack , &States[S_SORC_WALK1]),
#define S_SORC_DIE1 (S_SORC_ATTACK1+5)
S_BRIGHT (SORC, 'H', 5, NULL , &States[S_SORC_DIE1+1]),
S_BRIGHT (SORC, 'I', 5, A_FaceTarget , &States[S_SORC_DIE1+2]),
S_BRIGHT (SORC, 'J', 5, A_Scream , &States[S_SORC_DIE1+3]),
S_BRIGHT (SORC, 'K', 5, NULL , &States[S_SORC_DIE1+4]),
S_BRIGHT (SORC, 'L', 5, NULL , &States[S_SORC_DIE1+5]),
S_BRIGHT (SORC, 'M', 5, NULL , &States[S_SORC_DIE1+6]),
S_BRIGHT (SORC, 'N', 5, NULL , &States[S_SORC_DIE1+7]),
S_BRIGHT (SORC, 'O', 5, NULL , &States[S_SORC_DIE1+8]),
S_BRIGHT (SORC, 'P', 5, NULL , &States[S_SORC_DIE1+9]),
S_BRIGHT (SORC, 'Q', 5, NULL , &States[S_SORC_DIE1+10]),
S_BRIGHT (SORC, 'R', 5, NULL , &States[S_SORC_DIE1+11]),
S_BRIGHT (SORC, 'S', 5, NULL , &States[S_SORC_DIE1+12]),
S_BRIGHT (SORC, 'T', 5, NULL , &States[S_SORC_DIE1+13]),
S_BRIGHT (SORC, 'U', 5, A_NoBlocking , &States[S_SORC_DIE1+14]),
S_BRIGHT (SORC, 'V', 5, NULL , &States[S_SORC_DIE1+15]),
S_BRIGHT (SORC, 'W', 5, NULL , &States[S_SORC_DIE1+16]),
S_BRIGHT (SORC, 'X', 5, NULL , &States[S_SORC_DIE1+17]),
S_BRIGHT (SORC, 'Y', 5, NULL , &States[S_SORC_DIE1+18]),
S_BRIGHT (SORC, 'Z', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Base class for the balls flying around the Heresiarch's head
IMPLEMENT_STATELESS_ACTOR (ASorcBall, Hexen, -1, 0)
PROP_SpeedFixed (10)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags2 (MF2_HEXENBOUNCE|MF2_NOTELEPORT)
PROP_Flags3 (MF3_FULLVOLDEATH|MF3_CANBOUNCEWATER|MF3_NOWALLBOUNCESND)
PROP_SeeSound ("SorcererBallBounce")
PROP_DeathSound ("SorcererBigBallExplode")
END_DEFAULTS
------------------------------------------------------------------------
//========== First ball flying around the Heresiarch's head (purple) - fires projectiles
IMPLEMENT_ACTOR (ASorcBall1, Hexen, -1, 0)
PROP_SpawnState (S_SORCBALL1_1)
PROP_PainState (S_SORCBALL1_D1)
PROP_DeathState (S_SORCBALL1_D5)
END_DEFAULTS
FState ASorcBall1::States[] =
{
#define S_SORCBALL1_1 0
S_NORMAL1(SBMP, 'A', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+1]),
S_NORMAL1(SBMP, 'B', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+2]),
S_NORMAL1(SBMP, 'C', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+3]),
S_NORMAL1(SBMP, 'D', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+4]),
S_NORMAL1(SBMP, 'E', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+5]),
S_NORMAL1(SBMP, 'F', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+6]),
S_NORMAL1(SBMP, 'G', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+7]),
S_NORMAL1(SBMP, 'H', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+8]),
S_NORMAL1(SBMP, 'I', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+9]),
S_NORMAL1(SBMP, 'J', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+10]),
S_NORMAL1(SBMP, 'K', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+11]),
S_NORMAL1(SBMP, 'L', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+12]),
S_NORMAL1(SBMP, 'M', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+13]),
S_NORMAL1(SBMP, 'N', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+14]),
S_NORMAL1(SBMP, 'O', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1+15]),
S_NORMAL1(SBMP, 'P', 2, A_SorcBallOrbit , &States[S_SORCBALL1_1]),
#define S_SORCBALL1_D1 (S_SORCBALL1_1+16)
S_NORMAL1(SBMP, 'A', 5, A_SorcBallPop , &States[S_SORCBALL1_D1+1]),
S_NORMAL1(SBMP, 'B', 2, A_BounceCheck , &States[S_SORCBALL1_D1+1]),
#define S_SORCBALL1_D5 (S_SORCBALL1_D1+2)
S_NORMAL1(SBS4, 'D', 5, A_Explode , &States[S_SORCBALL1_D5+1]),
S_NORMAL1(SBS4, 'E', 5, NULL , &States[S_SORCBALL1_D5+2]),
S_NORMAL1(SBS4, 'F', 6, NULL , &States[S_SORCBALL1_D5+3]),
S_NORMAL1(SBS4, 'G', 6, NULL , &States[S_SORCBALL1_D5+4]),
S_NORMAL1(SBS4, 'H', 6, NULL , NULL),
};
------------------------------------------------------------------------
//========== Second ball flying around the Heresiarch's head (blue) - generates the shield
IMPLEMENT_ACTOR (ASorcBall2, Hexen, -1, 0)
PROP_SpawnState (S_SORCBALL2_1)
PROP_PainState (S_SORCBALL2_D1)
PROP_DeathState (S_SORCBALL2_D5)
END_DEFAULTS
FState ASorcBall2::States[] =
{
#define S_SORCBALL2_1 0
S_NORMAL1(SBMB, 'A', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+1]),
S_NORMAL1(SBMB, 'B', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+2]),
S_NORMAL1(SBMB, 'C', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+3]),
S_NORMAL1(SBMB, 'D', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+4]),
S_NORMAL1(SBMB, 'E', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+5]),
S_NORMAL1(SBMB, 'F', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+6]),
S_NORMAL1(SBMB, 'G', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+7]),
S_NORMAL1(SBMB, 'H', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+8]),
S_NORMAL1(SBMB, 'I', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+9]),
S_NORMAL1(SBMB, 'J', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+10]),
S_NORMAL1(SBMB, 'K', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+11]),
S_NORMAL1(SBMB, 'L', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+12]),
S_NORMAL1(SBMB, 'M', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+13]),
S_NORMAL1(SBMB, 'N', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+14]),
S_NORMAL1(SBMB, 'O', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1+15]),
S_NORMAL1(SBMB, 'P', 2, A_SorcBallOrbit , &States[S_SORCBALL2_1]),
#define S_SORCBALL2_D1 (S_SORCBALL2_1+16)
S_NORMAL1(SBMB, 'A', 5, A_SorcBallPop , &States[S_SORCBALL2_D1+1]),
S_NORMAL1(SBMB, 'B', 2, A_BounceCheck , &States[S_SORCBALL2_D1+1]),
#define S_SORCBALL2_D5 (S_SORCBALL2_D1+2)
S_NORMAL1(SBS3, 'D', 5, A_Explode , &States[S_SORCBALL2_D5+1]),
S_NORMAL1(SBS3, 'E', 5, NULL , &States[S_SORCBALL2_D5+2]),
S_NORMAL1(SBS3, 'F', 6, NULL , &States[S_SORCBALL2_D5+3]),
S_NORMAL1(SBS3, 'G', 6, NULL , &States[S_SORCBALL2_D5+4]),
S_NORMAL1(SBS3, 'H', 6, NULL , NULL),
};
------------------------------------------------------------------------
//========== Third ball flying around the Heresiarch's head (green) - summons Bishops
IMPLEMENT_ACTOR (ASorcBall3, Hexen, -1, 0)
PROP_SpawnState (S_SORCBALL3_1)
PROP_PainState (S_SORCBALL3_D1)
PROP_DeathState (S_SORCBALL3_D5)
END_DEFAULTS
FState ASorcBall3::States[] =
{
#define S_SORCBALL3_1 0
S_NORMAL1(SBMG, 'A', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+1]),
S_NORMAL1(SBMG, 'B', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+2]),
S_NORMAL1(SBMG, 'C', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+3]),
S_NORMAL1(SBMG, 'D', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+4]),
S_NORMAL1(SBMG, 'E', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+5]),
S_NORMAL1(SBMG, 'F', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+6]),
S_NORMAL1(SBMG, 'G', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+7]),
S_NORMAL1(SBMG, 'H', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+8]),
S_NORMAL1(SBMG, 'I', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+9]),
S_NORMAL1(SBMG, 'J', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+10]),
S_NORMAL1(SBMG, 'K', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+11]),
S_NORMAL1(SBMG, 'L', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+12]),
S_NORMAL1(SBMG, 'M', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+13]),
S_NORMAL1(SBMG, 'N', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+14]),
S_NORMAL1(SBMG, 'O', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1+15]),
S_NORMAL1(SBMG, 'P', 2, A_SorcBallOrbit , &States[S_SORCBALL3_1]),
#define S_SORCBALL3_D1 (S_SORCBALL3_1+16)
S_NORMAL1(SBMG, 'A', 5, A_SorcBallPop , &States[S_SORCBALL3_D1+1]),
S_NORMAL1(SBMG, 'B', 2, A_BounceCheck , &States[S_SORCBALL3_D1+1]),
#define S_SORCBALL3_D5 (S_SORCBALL3_D1+2)
S_NORMAL1(SBS3, 'D', 5, A_Explode , &States[S_SORCBALL3_D5+1]),
S_NORMAL1(SBS3, 'E', 5, NULL , &States[S_SORCBALL3_D5+2]),
S_NORMAL1(SBS3, 'F', 6, NULL , &States[S_SORCBALL3_D5+3]),
S_NORMAL1(SBS3, 'G', 6, NULL , &States[S_SORCBALL3_D5+4]),
S_NORMAL1(SBS3, 'H', 6, NULL , NULL),
};
------------------------------------------------------------------------
//========== Sorcerer spell 1 (The burning, bouncing head thing)
IMPLEMENT_ACTOR (ASorcFX1, Hexen, -1, 0)
PROP_SpeedFixed (7)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE)
PROP_Flags2 (MF2_HEXENBOUNCE|MF2_NOTELEPORT)
PROP_Flags3 (MF3_FULLVOLDEATH|MF3_CANBOUNCEWATER|MF3_NOWALLBOUNCESND)
PROP_SpawnState (S_SORCFX1_1)
PROP_DeathState (S_SORCFX1_D1)
PROP_XDeathState (S_SORCFX1_D1)
PROP_SeeSound ("SorcererBallBounce")
PROP_DeathSound ("SorcererHeadScream")
END_DEFAULTS
FState ASorcFX1::States[] =
{
#define S_SORCFX1_1 0
S_BRIGHT (SBS1, 'A', 2, NULL , &States[S_SORCFX1_1+1]),
S_BRIGHT (SBS1, 'B', 3, A_SorcFX1Seek, &States[S_SORCFX1_1+2]),
S_BRIGHT (SBS1, 'C', 3, A_SorcFX1Seek, &States[S_SORCFX1_1+3]),
S_BRIGHT (SBS1, 'D', 3, A_SorcFX1Seek, &States[S_SORCFX1_1]),
#define S_SORCFX1_D1 (S_SORCFX1_1+4)
S_BRIGHT (FHFX, 'S', 2, A_Explode , &States[S_SORCFX1_D1+1]),
S_BRIGHT (FHFX, 'S', 6, NULL , &States[S_SORCFX1_D1+2]),
S_BRIGHT (FHFX, 'S', 6, NULL , NULL),
};
------------------------------------------------------------------------
//========== Sorcerer spell 2 (The visible part of the shield)
IMPLEMENT_ACTOR (ASorcFX2, Hexen, -1, 0)
PROP_SpeedFixed (15)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_SORCFX2_SPLIT1)
PROP_DeathState (S_SORCFX2T1)
END_DEFAULTS
FState ASorcFX2::States[] =
{
#define S_SORCFX2_SPLIT1 0
S_BRIGHT (SBS2, 'A', 3, A_SorcFX2Split , &States[S_SORCFX2_SPLIT1]),
#define S_SORCFX2T1 (S_SORCFX2_SPLIT1+1)
S_NORMAL1(SBS2, 'A', 10, NULL , NULL),
#define S_SORCFX2_ORBIT1 (S_SORCFX2T1+1)
S_BRIGHT (SBS2, 'A', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+1]),
S_BRIGHT (SBS2, 'B', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+2]),
S_BRIGHT (SBS2, 'C', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+3]),
S_BRIGHT (SBS2, 'D', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+4]),
S_BRIGHT (SBS2, 'E', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+5]),
S_BRIGHT (SBS2, 'F', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+6]),
S_BRIGHT (SBS2, 'G', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+7]),
S_BRIGHT (SBS2, 'H', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+8]),
S_BRIGHT (SBS2, 'I', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+9]),
S_BRIGHT (SBS2, 'J', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+10]),
S_BRIGHT (SBS2, 'K', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+11]),
S_BRIGHT (SBS2, 'L', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+12]),
S_BRIGHT (SBS2, 'M', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+13]),
S_BRIGHT (SBS2, 'N', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+14]),
S_BRIGHT (SBS2, 'O', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1+15]),
S_BRIGHT (SBS2, 'P', 2, A_SorcFX2Orbit , &States[S_SORCFX2_ORBIT1]),
};
------------------------------------------------------------------------
//========== The translucent trail behind SorcFX2
IMPLEMENT_STATELESS_ACTOR (ASorcFX2T1, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (S_SORCFX2T1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Sorcerer spell 3 (The Bishop spawner)
IMPLEMENT_ACTOR (ASorcFX3, Hexen, -1, 0)
PROP_SpeedFixed (15)
PROP_RadiusFixed (22)
PROP_HeightFixed (65)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_SORCFX3_1)
PROP_DeathState (S_BISHMORPH1)
PROP_SeeSound ("SorcererBishopSpawn")
END_DEFAULTS
FState ASorcFX3::States[] =
{
#define S_SORCFX3_1 0
S_BRIGHT (SBS3, 'A', 2, NULL , &States[S_SORCFX3_1+1]),
S_BRIGHT (SBS3, 'B', 2, NULL , &States[S_SORCFX3_1+2]),
S_BRIGHT (SBS3, 'C', 2, NULL , &States[S_SORCFX3_1]),
#define S_BISHMORPH1 (S_SORCFX3_1+3)
S_BRIGHT (SBS3, 'A', 4, NULL , &States[S_BISHMORPH1+1]),
S_NORMAL1(BISH, 'P', 4, A_SorcererBishopEntry, &States[S_BISHMORPH1+2]),
S_NORMAL1(BISH, 'O', 4, NULL , &States[S_BISHMORPH1+3]),
S_NORMAL1(BISH, 'N', 4, NULL , &States[S_BISHMORPH1+4]),
S_NORMAL1(BISH, 'M', 3, NULL , &States[S_BISHMORPH1+5]),
S_NORMAL1(BISH, 'L', 3, NULL , &States[S_BISHMORPH1+6]),
S_NORMAL1(BISH, 'K', 3, NULL , &States[S_BISHMORPH1+7]),
S_NORMAL1(BISH, 'J', 3, NULL , &States[S_BISHMORPH1+8]),
S_NORMAL1(BISH, 'I', 3, NULL , &States[S_BISHMORPH1+9]),
S_NORMAL1(BISH, 'H', 3, NULL , &States[S_BISHMORPH1+10]),
S_NORMAL1(BISH, 'G', 3, A_SpawnBishop , NULL),
};
------------------------------------------------------------------------
//========== The Bishop spawner's explosion animation
IMPLEMENT_ACTOR (ASorcFX3Explosion, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (S_SORCFX3_EXP1)
END_DEFAULTS
FState ASorcFX3Explosion::States[] =
{
#define S_SORCFX3_EXP1 0
S_NORMAL1(SBS3, 'D', 3, NULL, &States[S_SORCFX3_EXP1+1]),
S_NORMAL1(SBS3, 'E', 3, NULL, &States[S_SORCFX3_EXP1+2]),
S_NORMAL1(SBS3, 'F', 3, NULL, &States[S_SORCFX3_EXP1+3]),
S_NORMAL1(SBS3, 'G', 3, NULL, &States[S_SORCFX3_EXP1+4]),
S_NORMAL1(SBS3, 'H', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Sorcerer spell 4 (The purple projectile)
IMPLEMENT_ACTOR (ASorcFX4, Hexen, -1, 0)
PROP_SpeedFixed (12)
PROP_RadiusFixed (10)
PROP_HeightFixed (10)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_SORCFX4_1)
PROP_DeathState (S_SORCFX4_D1)
PROP_DeathSound ("SorcererBallExplode")
END_DEFAULTS
FState ASorcFX4::States[] =
{
#define S_SORCFX4_1 0
S_BRIGHT (SBS4, 'A', 2, A_SorcFX4Check , &States[S_SORCFX4_1+1]),
S_BRIGHT (SBS4, 'B', 2, A_SorcFX4Check , &States[S_SORCFX4_1+2]),
S_BRIGHT (SBS4, 'C', 2, A_SorcFX4Check , &States[S_SORCFX4_1]),
#define S_SORCFX4_D1 (S_SORCFX4_1+3)
S_BRIGHT (SBS4, 'D', 2, NULL , &States[S_SORCFX4_D1+1]),
S_BRIGHT (SBS4, 'E', 2, A_Explode , &States[S_SORCFX4_D1+2]),
S_BRIGHT (SBS4, 'F', 2, NULL , &States[S_SORCFX4_D1+3]),
S_BRIGHT (SBS4, 'G', 2, NULL , &States[S_SORCFX4_D1+4]),
S_BRIGHT (SBS4, 'H', 2, NULL , NULL),
};
------------------------------------------------------------------------
//========== Spark that appears when shooting SorcFX4
IMPLEMENT_ACTOR (ASorcSpark1, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_SORCSPARK1)
END_DEFAULTS
FState ASorcSpark1::States[] =
{
#define S_SORCSPARK1 0
S_BRIGHT (SBFX, 'A', 4, NULL, &States[S_SORCSPARK1+1]),
S_BRIGHT (SBFX, 'B', 4, NULL, &States[S_SORCSPARK1+2]),
S_BRIGHT (SBFX, 'C', 4, NULL, &States[S_SORCSPARK1+3]),
S_BRIGHT (SBFX, 'D', 4, NULL, &States[S_SORCSPARK1+4]),
S_BRIGHT (SBFX, 'E', 4, NULL, &States[S_SORCSPARK1+5]),
S_BRIGHT (SBFX, 'F', 4, NULL, &States[S_SORCSPARK1+6]),
S_BRIGHT (SBFX, 'G', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Mesh Armor
IMPLEMENT_ACTOR (AMeshArmor, Hexen, 8005, 68)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (0)
END_DEFAULTS
FState AMeshArmor::States[] =
{
S_NORMAL1 (ARM1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Falcon Shield
IMPLEMENT_ACTOR (AFalconShield, Hexen, 8006, 69)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (0)
END_DEFAULTS
FState AFalconShield::States[] =
{
S_NORMAL1 (ARM2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Platinum Helmet
IMPLEMENT_ACTOR (APlatinumHelm, Hexen, 8007, 70)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (0)
END_DEFAULTS
FState APlatinumHelm::States[] =
{
S_NORMAL1 (ARM3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Amulet of Warding
IMPLEMENT_ACTOR (AAmuletOfWarding, Hexen, 8008, 71)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (0)
END_DEFAULTS
FState AAmuletOfWarding::States[] =
{
S_NORMAL1 (ARM4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Steel key
IMPLEMENT_ACTOR (AKeySteel, Hexen, 8030, 85)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeySteel::States[] = { S_NORMAL1 (KEY1, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Cave key
IMPLEMENT_ACTOR (AKeyCave, Hexen, 8031, 86)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyCave::States[] = { S_NORMAL1 (KEY2, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Axe key
IMPLEMENT_ACTOR (AKeyAxe, Hexen, 8032, 87)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyAxe::States[] = { S_NORMAL1 (KEY3, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Fire key
IMPLEMENT_ACTOR (AKeyFire, Hexen, 8033, 88)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyFire::States[] = { S_NORMAL1 (KEY4, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Emerald key
IMPLEMENT_ACTOR (AKeyEmerald, Hexen, 8034, 89)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyEmerald::States[] = { S_NORMAL1 (KEY5, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Dungeon key
IMPLEMENT_ACTOR (AKeyDungeon, Hexen, 8035, 90)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyDungeon::States[] = { S_NORMAL1 (KEY6, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Silver key
IMPLEMENT_ACTOR (AKeySilver, Hexen, 8036, 91)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeySilver::States[] = { S_NORMAL1 (KEY7, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Rusted key
IMPLEMENT_ACTOR (AKeyRusted, Hexen, 8037, 92)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyRusted::States[] = { S_NORMAL1 (KEY8, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Horn key
IMPLEMENT_ACTOR (AKeyHorn, Hexen, 8038, 93)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyHorn::States[] = { S_NORMAL1 (KEY9, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Swamp key
IMPLEMENT_ACTOR (AKeySwamp, Hexen, 8039, 94)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeySwamp::States[] = { S_NORMAL1 (KEYA, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Castle key
IMPLEMENT_ACTOR (AKeyCastle, Hexen, 8200, 0)
PROP_RadiusFixed (8)
PROP_HeightFixed (20)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyCastle::States[] = { S_NORMAL1 (KEYB, 'A', -1, NULL, NULL) };
------------------------------------------------------------------------
//========== Winged Statue (no skull)
IMPLEMENT_ACTOR (AZWingedStatueNoSkull, Hexen, 9011, 0)
PROP_RadiusFixed (10)
PROP_HeightFixed (62)
PROP_Flags (MF_SOLID)
PROP_SpawnState (0)
PROP_SeeState (0)
PROP_MeleeState (1)
END_DEFAULTS
FState AZWingedStatueNoSkull::States[] =
{
S_NORMAL1 (STWN, 'A', -1, NULL, NULL),
S_NORMAL1 (STWN, 'B', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Gem pedestal
IMPLEMENT_ACTOR (AZGemPedestal, Hexen, 9012, 0)
PROP_RadiusFixed (10)
PROP_HeightFixed (40)
PROP_Flags (MF_SOLID)
PROP_SpawnState (0)
PROP_SeeState (0)
PROP_MeleeState (1)
END_DEFAULTS
FState AZGemPedestal::States[] =
{
S_NORMAL1 (GMPD, 'A', -1, NULL, NULL),
S_NORMAL1 (GMPD, 'B', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Tree (destructible)
IMPLEMENT_ACTOR (ATreeDestructible, Hexen, 8062, 0)
PROP_SpawnHealth (70)
PROP_RadiusFixed (15)
PROP_HeightFixed (180)
PROP_MassLong (INT_MAX)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_SpawnState (S_ZTREEDESTRUCTIBLE)
PROP_DeathState (S_ZTREEDES_D)
PROP_BDeathState (S_ZTREEDES_X)
PROP_PainSound ("TreeExplode")
PROP_DeathSound ("TreeBreak")
END_DEFAULTS
FState ATreeDestructible::States[] =
{
#define S_ZTREEDESTRUCTIBLE 0
S_NORMAL1 (TRDT, 'A', -1, NULL , NULL),
#define S_ZTREEDES_D (S_ZTREEDESTRUCTIBLE+1)
S_NORMAL1 (TRDT, 'B', 5, NULL , &States[S_ZTREEDES_D+1]),
S_NORMAL1 (TRDT, 'C', 5, A_Scream , &States[S_ZTREEDES_D+2]),
S_NORMAL1 (TRDT, 'D', 5, NULL , &States[S_ZTREEDES_D+3]),
S_NORMAL1 (TRDT, 'E', 5, NULL , &States[S_ZTREEDES_D+4]),
S_NORMAL1 (TRDT, 'F', 5, NULL , &States[S_ZTREEDES_D+5]),
S_NORMAL1 (TRDT, 'G', -1, NULL , NULL),
#define S_ZTREEDES_X (S_ZTREEDES_D+6)
S_BRIGHT (TRDT, 'H', 5, A_Pain , &States[S_ZTREEDES_X+1]),
S_BRIGHT (TRDT, 'I', 5, NULL , &States[S_ZTREEDES_X+2]),
S_BRIGHT (TRDT, 'J', 5, NULL , &States[S_ZTREEDES_X+3]),
S_BRIGHT (TRDT, 'K', 5, NULL , &States[S_ZTREEDES_X+4]),
S_BRIGHT (TRDT, 'L', 5, NULL , &States[S_ZTREEDES_X+5]),
S_BRIGHT (TRDT, 'M', 5, A_Explode , &States[S_ZTREEDES_X+6]),
S_BRIGHT (TRDT, 'N', 5, NULL , &States[S_ZTREEDES_X+7]),
S_NORMAL1 (TRDT, 'O', 5, NULL , &States[S_ZTREEDES_X+8]),
S_NORMAL1 (TRDT, 'P', 5, NULL , &States[S_ZTREEDES_X+9]),
S_NORMAL1 (TRDT, 'Q', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== A pottery that can be broken.
IMPLEMENT_ACTOR (APottery1, Hexen, 104, 0)
PROP_SpawnHealth (15)
PROP_RadiusFixed (10)
PROP_HeightFixed (32)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_DROPOFF)
PROP_Flags2 (MF2_SLIDE|MF2_PUSHABLE|MF2_TELESTOMP|MF2_PASSMOBJ)
PROP_SpawnState (S_ZPOTTERY)
PROP_DeathState (S_ZPOTTERY_EXPLODE)
END_DEFAULTS
FState APottery1::States[] =
{
#define S_ZPOTTERY 0
S_NORMAL1 (POT1, 'A', -1, NULL , NULL),
#define S_ZPOTTERY_EXPLODE (S_ZPOTTERY+1)
S_NORMAL1 (POT1, 'A', 0, A_PotteryExplode, NULL)
};
------------------------------------------------------------------------
//========== A pottery that can be broken.
IMPLEMENT_ACTOR (APottery2, Hexen, 105, 0)
PROP_HeightFixed (25)
PROP_SpawnState (0)
END_DEFAULTS
FState APottery2::States[] =
{
S_NORMAL1 (POT2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== A pottery that can be broken.
IMPLEMENT_ACTOR (APottery3, Hexen, 106, 0)
PROP_HeightFixed (25)
PROP_SpawnState (0)
END_DEFAULTS
FState APottery3::States[] =
{
S_NORMAL1 (POT3, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== A shattered pottery piece spawned when a pottery is smashed.
IMPLEMENT_ACTOR (APotteryBit, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_POTTERYBIT)
PROP_DeathState (S_POTTERYBIT_EX0)
END_DEFAULTS
FState APotteryBit::States[] =
{
#define S_POTTERYBIT 0
S_NORMAL1 (PBIT, 'A', -1, NULL , NULL),
S_NORMAL1 (PBIT, 'B', -1, NULL , NULL),
S_NORMAL1 (PBIT, 'C', -1, NULL , NULL),
S_NORMAL1 (PBIT, 'D', -1, NULL , NULL),
S_NORMAL1 (PBIT, 'E', -1, NULL , NULL),
#define S_POTTERYBIT_EX0 (S_POTTERYBIT+5)
S_NORMAL1 (PBIT, 'F', 0, A_PotteryChooseBit , NULL),
#define S_POTTERYBIT_EX1 (S_POTTERYBIT_EX0+1)
S_NORMAL1 (PBIT, 'F', 140, NULL , &States[S_POTTERYBIT_EX0+1]),
S_NORMAL1 (PBIT, 'F', 1, A_PotteryCheck , NULL),
#define S_POTTERYBIT_EX2 (S_POTTERYBIT_EX1+2)
S_NORMAL1 (PBIT, 'G', 140, NULL , &States[S_POTTERYBIT_EX1+1]),
S_NORMAL1 (PBIT, 'G', 1, A_PotteryCheck , NULL),
#define S_POTTERYBIT_EX3 (S_POTTERYBIT_EX2+2)
S_NORMAL1 (PBIT, 'H', 140, NULL , &States[S_POTTERYBIT_EX2+1]),
S_NORMAL1 (PBIT, 'H', 1, A_PotteryCheck , NULL),
#define S_POTTERYBIT_EX4 (S_POTTERYBIT_EX3+2)
S_NORMAL1 (PBIT, 'I', 140, NULL , &States[S_POTTERYBIT_EX3+1]),
S_NORMAL1 (PBIT, 'I', 1, A_PotteryCheck , NULL),
#define S_POTTERYBIT_EX5 (S_POTTERYBIT_EX4+2)
S_NORMAL1 (PBIT, 'J', 140, NULL , &States[S_POTTERYBIT_EX4+1]),
S_NORMAL1 (PBIT, 'J', 1, A_PotteryCheck , NULL)
};
------------------------------------------------------------------------
//========== Blood pool
IMPLEMENT_ACTOR (ABloodPool, Hexen, 111, 0)
PROP_Flags (MF_NOBLOCKMAP)
PROP_SpawnState (0)
END_DEFAULTS
FState ABloodPool::States[] =
{
S_NORMAL1 (BDPL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== An emaciated hanging corpse, its legs broken and its ribcage torn out.
IMPLEMENT_ACTOR (AZCorpseLynchedNoHeart, Hexen, 109, 0)
PROP_RadiusFixed (10)
PROP_HeightFixed (100)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
PROP_SpawnState (0)
END_DEFAULTS
FState AZCorpseLynchedNoHeart::States[] =
{
S_NORMAL1 (CPS5, 'A', 140, A_CorpseBloodDrip, &States[0])
};
------------------------------------------------------------------------
//========== A blood droplet from a hanging corpse.
IMPLEMENT_ACTOR (ACorpseBloodDrip, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (4)
PROP_Flags (MF_MISSILE)
PROP_Flags2 (MF2_LOGRAV)
PROP_SpawnState (S_CORPSEBLOODDRIP)
PROP_DeathState (S_CORPSEBLOODDRIP_X)
END_DEFAULTS
FState ACorpseBloodDrip::States[] =
{
#define S_CORPSEBLOODDRIP 0
S_NORMAL1 (BDRP, 'A', -1, NULL, NULL),
#define S_CORPSEBLOODDRIP_X (S_CORPSEBLOODDRIP+1)
S_NORMAL1 (BDSH, 'A', 3, NULL, &States[S_CORPSEBLOODDRIP_X+1]),
S_NORMAL1 (BDSH, 'B', 3, NULL, &States[S_CORPSEBLOODDRIP_X+2]),
S_NORMAL1 (BDSH, 'C', 2, NULL, &States[S_CORPSEBLOODDRIP_X+3]),
S_NORMAL1 (BDSH, 'D', 2, NULL, NULL)
};
------------------------------------------------------------------------
//========== A container actor for four different bits of an exploded sitting corpse.
IMPLEMENT_ACTOR (ACorpseBit, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (5)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags2 (MF2_TELESTOMP)
PROP_SpawnState (0)
END_DEFAULTS
FState ACorpseBit::States[] =
{
S_NORMAL1 (CPB1, 'A', -1, NULL, NULL),
S_NORMAL1 (CPB2, 'A', -1, NULL, NULL),
S_NORMAL1 (CPB3, 'A', -1, NULL, NULL),
S_NORMAL1 (CPB4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Sitting corpse, splatterable
IMPLEMENT_ACTOR (AZCorpseSitting, Hexen, 110, 0)
PROP_SpawnHealth (30)
PROP_RadiusFixed (15)
PROP_HeightFixed (35)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_SpawnState (0)
PROP_DeathState (1)
PROP_DeathSound ("FireDemonDeath")
END_DEFAULTS
FState AZCorpseSitting::States[] =
{
S_NORMAL1 (CPS6, 'A', -1, NULL , NULL),
S_NORMAL1 (CPS6, 'A', 1, A_CorpseExplode, NULL)
};
------------------------------------------------------------------------
//========== Leaf spawner
IMPLEMENT_ACTOR (ALeafSpawner, Hexen, 113, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR)
PROP_RenderFlags (RF_INVISIBLE)
PROP_SpawnState (0)
END_DEFAULTS
FState ALeafSpawner::States[] =
{
S_NORMAL1 (MAN1, 'A', 20, A_LeafSpawn, &States[0])
};
------------------------------------------------------------------------
//========== Leaf
IMPLEMENT_ACTOR (ALeaf1, Hexen, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_LEAF1)
PROP_DeathState (S_LEAF_X)
END_DEFAULTS
FState ALeaf1::States[] =
{
#define S_LEAF1 0
S_NORMAL1 (LEF1, 'A', 4, NULL , &States[S_LEAF1+1]),
S_NORMAL1 (LEF1, 'B', 4, NULL , &States[S_LEAF1+2]),
S_NORMAL1 (LEF1, 'C', 4, NULL , &States[S_LEAF1+3]),
S_NORMAL1 (LEF1, 'D', 4, A_LeafThrust, &States[S_LEAF1+4]),
S_NORMAL1 (LEF1, 'E', 4, NULL , &States[S_LEAF1+5]),
S_NORMAL1 (LEF1, 'F', 4, NULL , &States[S_LEAF1+6]),
S_NORMAL1 (LEF1, 'G', 4, NULL , &States[S_LEAF1+7]),
S_NORMAL1 (LEF1, 'H', 4, A_LeafThrust, &States[S_LEAF1+8]),
S_NORMAL1 (LEF1, 'I', 4, NULL , &States[S_LEAF1+9]),
S_NORMAL1 (LEF1, 'A', 4, NULL , &States[S_LEAF1+10]),
S_NORMAL1 (LEF1, 'B', 4, NULL , &States[S_LEAF1+11]),
S_NORMAL1 (LEF1, 'C', 4, A_LeafThrust, &States[S_LEAF1+12]),
S_NORMAL1 (LEF1, 'D', 4, NULL , &States[S_LEAF1+13]),
S_NORMAL1 (LEF1, 'E', 4, NULL , &States[S_LEAF1+14]),
S_NORMAL1 (LEF1, 'F', 4, NULL , &States[S_LEAF1+15]),
S_NORMAL1 (LEF1, 'G', 4, A_LeafThrust, &States[S_LEAF1+16]),
S_NORMAL1 (LEF1, 'H', 4, NULL , &States[S_LEAF1+17]),
S_NORMAL1 (LEF1, 'I', 4, NULL , NULL),
#define S_LEAF_X (S_LEAF1+18)
S_NORMAL1 (LEF3, 'D', 10, A_LeafCheck , &States[S_LEAF_X+0])
};
------------------------------------------------------------------------
//========== Leaf
IMPLEMENT_ACTOR (ALeaf2, Hexen, -1, 0)
PROP_SpawnState (S_LEAF2)
END_DEFAULTS
FState ALeaf2::States[] =
{
#define S_LEAF2 0
S_NORMAL1 (LEF2, 'A', 4, NULL , &States[S_LEAF2+1]),
S_NORMAL1 (LEF2, 'B', 4, NULL , &States[S_LEAF2+2]),
S_NORMAL1 (LEF2, 'C', 4, NULL , &States[S_LEAF2+3]),
S_NORMAL1 (LEF2, 'D', 4, A_LeafThrust, &States[S_LEAF2+4]),
S_NORMAL1 (LEF2, 'E', 4, NULL , &States[S_LEAF2+5]),
S_NORMAL1 (LEF2, 'F', 4, NULL , &States[S_LEAF2+6]),
S_NORMAL1 (LEF2, 'G', 4, NULL , &States[S_LEAF2+7]),
S_NORMAL1 (LEF2, 'H', 4, A_LeafThrust, &States[S_LEAF2+8]),
S_NORMAL1 (LEF2, 'I', 4, NULL , &States[S_LEAF2+9]),
S_NORMAL1 (LEF2, 'A', 4, NULL , &States[S_LEAF2+10]),
S_NORMAL1 (LEF2, 'B', 4, NULL , &States[S_LEAF2+11]),
S_NORMAL1 (LEF2, 'C', 4, A_LeafThrust, &States[S_LEAF2+12]),
S_NORMAL1 (LEF2, 'D', 4, NULL , &States[S_LEAF2+13]),
S_NORMAL1 (LEF2, 'E', 4, NULL , &States[S_LEAF2+14]),
S_NORMAL1 (LEF2, 'F', 4, NULL , &States[S_LEAF2+15]),
S_NORMAL1 (LEF2, 'G', 4, A_LeafThrust, &States[S_LEAF2+16]),
S_NORMAL1 (LEF2, 'H', 4, NULL , &States[S_LEAF2+17]),
S_NORMAL1 (LEF2, 'I', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== Twined torch
IMPLEMENT_ACTOR (AZTwinedTorch, Hexen, 116, 0)
PROP_RadiusFixed (10)
PROP_HeightFixed (64)
PROP_Flags (MF_SOLID)
PROP_SpawnState (S_ZTWINEDTORCH)
PROP_SeeState (S_ZTWINEDTORCH)
PROP_MeleeState (S_ZTWINEDTORCH_UNLIT)
END_DEFAULTS
FState AZTwinedTorch::States[] =
{
#define S_ZTWINEDTORCH 0
S_BRIGHT (TWTR, 'A', 4, NULL, &States[S_ZTWINEDTORCH+1]),
S_BRIGHT (TWTR, 'B', 4, NULL, &States[S_ZTWINEDTORCH+2]),
S_BRIGHT (TWTR, 'C', 4, NULL, &States[S_ZTWINEDTORCH+3]),
S_BRIGHT (TWTR, 'D', 4, NULL, &States[S_ZTWINEDTORCH+4]),
S_BRIGHT (TWTR, 'E', 4, NULL, &States[S_ZTWINEDTORCH+5]),
S_BRIGHT (TWTR, 'F', 4, NULL, &States[S_ZTWINEDTORCH+6]),
S_BRIGHT (TWTR, 'G', 4, NULL, &States[S_ZTWINEDTORCH+7]),
S_BRIGHT (TWTR, 'H', 4, NULL, &States[S_ZTWINEDTORCH+0]),
#define S_ZTWINEDTORCH_UNLIT (S_ZTWINEDTORCH+8)
S_NORMAL1(TWTR, 'I', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Twined torch unlit
IMPLEMENT_STATELESS_ACTOR (AZTwinedTorchUnlit, Hexen, 117, 0)
PROP_SpawnState (S_ZTWINEDTORCH_UNLIT)
END_DEFAULTS
------------------------------------------------------------------------
//========== Wall torch
IMPLEMENT_ACTOR (AZWallTorch, Hexen, 54, 0)
PROP_RadiusFixed (6)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags4 (MF4_FIXMAPTHINGPOS)
PROP_SpawnState (S_ZWALLTORCH)
PROP_SeeState (S_ZWALLTORCH)
PROP_MeleeState (S_ZWALLTORCH_U)
END_DEFAULTS
FState AZWallTorch::States[] =
{
#define S_ZWALLTORCH 0
S_BRIGHT (WLTR, 'A', 5, NULL, &States[S_ZWALLTORCH+1]),
S_BRIGHT (WLTR, 'B', 5, NULL, &States[S_ZWALLTORCH+2]),
S_BRIGHT (WLTR, 'C', 5, NULL, &States[S_ZWALLTORCH+3]),
S_BRIGHT (WLTR, 'D', 5, NULL, &States[S_ZWALLTORCH+4]),
S_BRIGHT (WLTR, 'E', 5, NULL, &States[S_ZWALLTORCH+5]),
S_BRIGHT (WLTR, 'F', 5, NULL, &States[S_ZWALLTORCH+6]),
S_BRIGHT (WLTR, 'G', 5, NULL, &States[S_ZWALLTORCH+7]),
S_BRIGHT (WLTR, 'H', 5, NULL, &States[S_ZWALLTORCH+0]),
#define S_ZWALLTORCH_U (S_ZWALLTORCH+8)
S_NORMAL1(WLTR, 'I', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Wall torch unlit
IMPLEMENT_STATELESS_ACTOR (AZWallTorchUnlit, Hexen, 55, 0)
PROP_SpawnState (S_ZWALLTORCH_U)
END_DEFAULTS
------------------------------------------------------------------------
//========== Small shrub
IMPLEMENT_ACTOR (AZShrub1, Hexen, 8101, 0)
PROP_RadiusFixed (8)
PROP_HeightFixed (24)
PROP_MassLong (FIXED_MAX)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_SpawnState (S_ZSHRUB1)
PROP_MeleeState (S_ZSHRUB1_X)
PROP_DeathState (S_ZSHRUB1_DIE)
PROP_DeathSound ("TreeExplode")
END_DEFAULTS
FState AZShrub1::States[] =
{
#define S_ZSHRUB1 0
S_NORMAL1 (SHB1, 'A', -1, NULL , NULL),
#define S_ZSHRUB1_DIE (S_ZSHRUB1+1)
S_NORMAL1 (SHB1, 'A', 1, A_TreeDeath , &States[S_ZSHRUB1+0]),
#define S_ZSHRUB1_X (S_ZSHRUB1_DIE+1)
S_BRIGHT (SHB1, 'B', 7, NULL , &States[S_ZSHRUB1_X+1]),
S_BRIGHT (SHB1, 'C', 6, A_Scream , &States[S_ZSHRUB1_X+2]),
S_BRIGHT (SHB1, 'D', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== Large shrub
IMPLEMENT_ACTOR (AZShrub2, Hexen, 8102, 0)
PROP_RadiusFixed (16)
PROP_HeightFixed (40)
PROP_MassLong (FIXED_MAX)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_SpawnState (S_ZSHRUB2)
PROP_MeleeState (S_ZSHRUB2_X)
PROP_DeathState (S_ZSHRUB2_DIE)
PROP_DeathSound ("TreeExplode")
END_DEFAULTS
FState AZShrub2::States[] =
{
#define S_ZSHRUB2 0
S_NORMAL1 (SHB2, 'A', -1, NULL , NULL),
#define S_ZSHRUB2_DIE (S_ZSHRUB2+1)
S_NORMAL1 (SHB2, 'A', 1, A_TreeDeath , &States[S_ZSHRUB2+1]),
#define S_ZSHRUB2_X (S_ZSHRUB2_DIE+1)
S_BRIGHT (SHB2, 'B', 7, NULL , &States[S_ZSHRUB2_X+1]),
S_BRIGHT (SHB2, 'C', 6, A_Scream , &States[S_ZSHRUB2_X+2]),
S_BRIGHT (SHB2, 'D', 5, A_Explode , &States[S_ZSHRUB2_X+3]),
S_BRIGHT (SHB2, 'E', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== A type of mushroom that is poisonous; when destroyed, it releases a green poison cloud.
IMPLEMENT_ACTOR (AZPoisonShroom, Hexen, 8104, 0)
PROP_RadiusFixed (6)
PROP_HeightFixed (20)
PROP_PainChance (255)
PROP_Flags (MF_SHOOTABLE|MF_SOLID|MF_NOBLOOD)
PROP_SpawnState (S_ZPOISONSHROOM)
PROP_PainState (S_ZPOISONSHROOM_P)
PROP_DeathState (S_ZPOISONSHROOM_X)
PROP_PainSound ("PoisonShroomPain")
PROP_DeathSound ("PoisonShroomDeath")
END_DEFAULTS
FState AZPoisonShroom::States[] =
{
#define S_ZPOISONSHROOM_P 0
S_NORMAL1 (SHRM, 'A', 6, NULL , &States[S_ZPOISONSHROOM_P+1]),
S_NORMAL1 (SHRM, 'B', 8, A_Pain , &States[S_ZPOISONSHROOM_P+2]),//<-- Intentional state
#define S_ZPOISONSHROOM (S_ZPOISONSHROOM_P+2)
S_NORMAL1 (SHRM, 'A', 5, A_PoisonShroom , &States[S_ZPOISONSHROOM_P+1]),
#define S_ZPOISONSHROOM_X (S_ZPOISONSHROOM+1)
S_NORMAL1 (SHRM, 'C', 5, NULL , &States[S_ZPOISONSHROOM_X+1]),
S_NORMAL1 (SHRM, 'D', 5, NULL , &States[S_ZPOISONSHROOM_X+2]),
S_NORMAL1 (SHRM, 'E', 5, A_PoisonBagInit , &States[S_ZPOISONSHROOM_X+3]),
S_NORMAL1 (SHRM, 'F', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Minotaur brazier
IMPLEMENT_ACTOR (AZFireBull, Hexen, 8042, 0)
PROP_RadiusFixed (20)
PROP_HeightFixed (80)
PROP_Flags (MF_SOLID)
PROP_SpawnState (S_ZFIREBULL)
PROP_SeeState (S_ZFIREBULL_BIRTH)
PROP_MeleeState (S_ZFIREBULL_U)
END_DEFAULTS
FState AZFireBull::States[] =
{
#define S_ZFIREBULL 0
S_BRIGHT (FBUL, 'A', 4, NULL, &States[S_ZFIREBULL+1]),
S_BRIGHT (FBUL, 'B', 4, NULL, &States[S_ZFIREBULL+2]),
S_BRIGHT (FBUL, 'C', 4, NULL, &States[S_ZFIREBULL+3]),
S_BRIGHT (FBUL, 'D', 4, NULL, &States[S_ZFIREBULL+4]),
S_BRIGHT (FBUL, 'E', 4, NULL, &States[S_ZFIREBULL+5]),
S_BRIGHT (FBUL, 'F', 4, NULL, &States[S_ZFIREBULL+6]),
S_BRIGHT (FBUL, 'G', 4, NULL, &States[S_ZFIREBULL+0]),
#define S_ZFIREBULL_U (S_ZFIREBULL+7)
S_NORMAL1(FBUL, 'H', -1, NULL, NULL),
#define S_ZFIREBULL_DEATH (S_ZFIREBULL_U+1)
S_BRIGHT (FBUL, 'J', 4, NULL, &States[S_ZFIREBULL_DEATH+1]),
S_BRIGHT (FBUL, 'I', 4, NULL, &States[S_ZFIREBULL_U]),
#define S_ZFIREBULL_BIRTH (S_ZFIREBULL_DEATH+2)
S_BRIGHT (FBUL, 'I', 4, NULL, &States[S_ZFIREBULL_BIRTH+1]),
S_BRIGHT (FBUL, 'J', 4, NULL, &States[S_ZFIREBULL+0])
};
------------------------------------------------------------------------
//========== Minotaur brazier unlit
IMPLEMENT_STATELESS_ACTOR (AZFireBullUnlit, Hexen, 8043, 0)
PROP_SpawnState (S_ZFIREBULL_U)
END_DEFAULTS
------------------------------------------------------------------------
//========== A knight's suit of armor on display. It can be smashed, causing it to spawn ZArmorChunk pieces upon its destruction as well as optionally containing a hidden item.
IMPLEMENT_ACTOR (AZSuitOfArmor, Hexen, 8064, 0)
PROP_SpawnHealth (60)
PROP_RadiusFixed (16)
PROP_HeightFixed (72)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_SpawnState (0)
PROP_DeathState (1)
PROP_DeathSound ("SuitofArmorBreak")
END_DEFAULTS
FState AZSuitOfArmor::States[] =
{
S_NORMAL1 (SUIT, 'A', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'A', 1, A_SoAExplode, NULL)
};
------------------------------------------------------------------------
//========== An armor piece that is spawned when a suit of armor is smashed.
IMPLEMENT_ACTOR (AZArmorChunk, Hexen, -1, 0)
PROP_RadiusFixed (4)
PROP_HeightFixed (8)
PROP_SpawnState (0)
END_DEFAULTS
FState AZArmorChunk::States[] =
{
S_NORMAL1 (SUIT, 'B', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'C', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'D', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'E', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'F', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'G', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'H', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'I', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'J', -1, NULL , NULL),
S_NORMAL1 (SUIT, 'K', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Bell
IMPLEMENT_ACTOR (AZBell, Hexen, 8065, 0)
PROP_SpawnHealth (5)
PROP_RadiusFixed (56)
PROP_HeightFixed (120)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_NOGRAVITY|MF_SPAWNCEILING)
PROP_SpawnState (S_ZBELL)
PROP_DeathState (S_ZBELL_X)
PROP_DeathSound ("BellRing")
END_DEFAULTS
FState AZBell::States[] =
{
#define S_ZBELL 0
S_NORMAL1 (BBLL, 'F', -1, NULL , NULL),
#define S_ZBELL_X (S_ZBELL+1)
S_NORMAL1 (BBLL, 'A', 4, A_BellReset1, &States[S_ZBELL_X+1]),
S_NORMAL1 (BBLL, 'B', 4, NULL , &States[S_ZBELL_X+2]),
S_NORMAL1 (BBLL, 'C', 4, NULL , &States[S_ZBELL_X+3]),
S_NORMAL1 (BBLL, 'D', 5, A_Scream , &States[S_ZBELL_X+4]),
S_NORMAL1 (BBLL, 'C', 4, NULL , &States[S_ZBELL_X+5]),
S_NORMAL1 (BBLL, 'B', 4, NULL , &States[S_ZBELL_X+6]),
S_NORMAL1 (BBLL, 'A', 3, NULL , &States[S_ZBELL_X+7]),
S_NORMAL1 (BBLL, 'E', 4, NULL , &States[S_ZBELL_X+8]),
S_NORMAL1 (BBLL, 'F', 5, NULL , &States[S_ZBELL_X+9]),
S_NORMAL1 (BBLL, 'G', 6, A_Scream , &States[S_ZBELL_X+10]),
S_NORMAL1 (BBLL, 'F', 5, NULL , &States[S_ZBELL_X+11]),
S_NORMAL1 (BBLL, 'E', 4, NULL , &States[S_ZBELL_X+12]),
S_NORMAL1 (BBLL, 'A', 4, NULL , &States[S_ZBELL_X+13]),
S_NORMAL1 (BBLL, 'B', 5, NULL , &States[S_ZBELL_X+14]),
S_NORMAL1 (BBLL, 'C', 5, NULL , &States[S_ZBELL_X+15]),
S_NORMAL1 (BBLL, 'D', 6, A_Scream , &States[S_ZBELL_X+16]),
S_NORMAL1 (BBLL, 'C', 5, NULL , &States[S_ZBELL_X+17]),
S_NORMAL1 (BBLL, 'B', 5, NULL , &States[S_ZBELL_X+18]),
S_NORMAL1 (BBLL, 'A', 4, NULL , &States[S_ZBELL_X+19]),
S_NORMAL1 (BBLL, 'E', 5, NULL , &States[S_ZBELL_X+20]),
S_NORMAL1 (BBLL, 'F', 5, NULL , &States[S_ZBELL_X+21]),
S_NORMAL1 (BBLL, 'G', 7, A_Scream , &States[S_ZBELL_X+22]),
S_NORMAL1 (BBLL, 'F', 5, NULL , &States[S_ZBELL_X+23]),
S_NORMAL1 (BBLL, 'E', 5, NULL , &States[S_ZBELL_X+24]),
S_NORMAL1 (BBLL, 'A', 5, NULL , &States[S_ZBELL_X+25]),
S_NORMAL1 (BBLL, 'B', 6, NULL , &States[S_ZBELL_X+26]),
S_NORMAL1 (BBLL, 'C', 6, NULL , &States[S_ZBELL_X+27]),
S_NORMAL1 (BBLL, 'D', 7, A_Scream , &States[S_ZBELL_X+28]),
S_NORMAL1 (BBLL, 'C', 6, NULL , &States[S_ZBELL_X+29]),
S_NORMAL1 (BBLL, 'B', 6, NULL , &States[S_ZBELL_X+30]),
S_NORMAL1 (BBLL, 'A', 5, NULL , &States[S_ZBELL_X+31]),
S_NORMAL1 (BBLL, 'E', 6, NULL , &States[S_ZBELL_X+32]),
S_NORMAL1 (BBLL, 'F', 6, NULL , &States[S_ZBELL_X+33]),
S_NORMAL1 (BBLL, 'G', 7, A_Scream , &States[S_ZBELL_X+34]),
S_NORMAL1 (BBLL, 'F', 6, NULL , &States[S_ZBELL_X+35]),
S_NORMAL1 (BBLL, 'E', 6, NULL , &States[S_ZBELL_X+36]),
S_NORMAL1 (BBLL, 'A', 6, NULL , &States[S_ZBELL_X+37]),
S_NORMAL1 (BBLL, 'B', 6, NULL , &States[S_ZBELL_X+38]),
S_NORMAL1 (BBLL, 'C', 6, NULL , &States[S_ZBELL_X+39]),
S_NORMAL1 (BBLL, 'B', 7, NULL , &States[S_ZBELL_X+40]),
S_NORMAL1 (BBLL, 'A', 8, NULL , &States[S_ZBELL_X+41]),
S_NORMAL1 (BBLL, 'E', 12, NULL , &States[S_ZBELL_X+42]),
S_NORMAL1 (BBLL, 'A', 10, NULL , &States[S_ZBELL_X+43]),
S_NORMAL1 (BBLL, 'B', 12, NULL , &States[S_ZBELL_X+44]),
S_NORMAL1 (BBLL, 'A', 12, NULL , &States[S_ZBELL_X+45]),
S_NORMAL1 (BBLL, 'E', 14, NULL , &States[S_ZBELL_X+46]),
S_NORMAL1 (BBLL, 'A', 1, A_BellReset2, &States[S_ZBELL])
};
------------------------------------------------------------------------
//========== Spruce ("Christmas") Tree
IMPLEMENT_ACTOR (AZXmasTree, Hexen, 8068, 0)
PROP_SpawnHealth (20)
PROP_RadiusFixed (11)
PROP_HeightFixed (130)
PROP_MassLong (0x7fffffff)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_ZXMAS_TREE)
PROP_MeleeState (S_ZXMAS_TREE_X)
PROP_DeathState (S_ZXMAS_TREE_DIE)
PROP_DeathSound ("TreeExplode")
END_DEFAULTS
FState AZXmasTree::States[] =
{
#define S_ZXMAS_TREE 0
S_NORMAL1 (XMAS, 'A', -1, NULL , NULL),
#define S_ZXMAS_TREE_DIE (S_ZXMAS_TREE+1)
S_NORMAL1 (XMAS, 'A', 4, A_TreeDeath , &States[S_ZXMAS_TREE]),
#define S_ZXMAS_TREE_X (S_ZXMAS_TREE_DIE+1)
S_BRIGHT (XMAS, 'B', 6, NULL , &States[S_ZXMAS_TREE_X+1]),
S_BRIGHT (XMAS, 'C', 6, A_Scream , &States[S_ZXMAS_TREE_X+2]),
S_BRIGHT (XMAS, 'D', 5, NULL , &States[S_ZXMAS_TREE_X+3]),
S_BRIGHT (XMAS, 'E', 5, A_Explode , &States[S_ZXMAS_TREE_X+4]),
S_BRIGHT (XMAS, 'F', 5, NULL , &States[S_ZXMAS_TREE_X+5]),
S_BRIGHT (XMAS, 'G', 4, NULL , &States[S_ZXMAS_TREE_X+6]),
S_NORMAL1 (XMAS, 'H', 5, NULL , &States[S_ZXMAS_TREE_X+7]),
S_NORMAL1 (XMAS, 'I', 4, A_NoBlocking, &States[S_ZXMAS_TREE_X+8]),
S_NORMAL1 (XMAS, 'J', 4, NULL , &States[S_ZXMAS_TREE_X+9]),
S_NORMAL1 (XMAS, 'K', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Cauldron
IMPLEMENT_ACTOR (AZCauldron, Hexen, 8069, 0)
PROP_RadiusFixed (12)
PROP_HeightFixed (26)
PROP_Flags (MF_SOLID)
PROP_SpawnState (S_ZCAULDRON)
PROP_SeeState (S_ZCAULDRON)
PROP_MeleeState (S_ZCAULDRON_U)
END_DEFAULTS
FState AZCauldron::States[] =
{
#define S_ZCAULDRON 0
S_BRIGHT (CDRN, 'B', 4, NULL, &States[S_ZCAULDRON+1]),
S_BRIGHT (CDRN, 'C', 4, NULL, &States[S_ZCAULDRON+2]),
S_BRIGHT (CDRN, 'D', 4, NULL, &States[S_ZCAULDRON+3]),
S_BRIGHT (CDRN, 'E', 4, NULL, &States[S_ZCAULDRON+4]),
S_BRIGHT (CDRN, 'F', 4, NULL, &States[S_ZCAULDRON+5]),
S_BRIGHT (CDRN, 'G', 4, NULL, &States[S_ZCAULDRON+6]),
S_BRIGHT (CDRN, 'H', 4, NULL, &States[S_ZCAULDRON+0]),
#define S_ZCAULDRON_U (S_ZCAULDRON+7)
S_NORMAL1 (CDRN, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Cauldron unlit
IMPLEMENT_STATELESS_ACTOR (AZCauldronUnlit, Hexen, 8070, 0)
PROP_SpawnState (S_ZCAULDRON_U)
END_DEFAULTS
------------------------------------------------------------------------
//========== Water drip
IMPLEMENT_ACTOR (AHWaterDrip, Hexen, -1, 95)
PROP_Flags (MF_MISSILE)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_Mass (1)
PROP_SpawnState (0)
PROP_DeathSound ("Drip")
END_DEFAULTS
FState AHWaterDrip::States[] =
{
S_NORMAL1 (HWAT, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== The wendigo, or ice golem, is a creature made of solid ice that is able to throw ice projectiles that upon impact explode into a volley of shards.
IMPLEMENT_ACTOR (AIceGuy, Hexen, 8020, 20)
PROP_SpawnHealth (120)
PROP_PainChance (144)
PROP_SpeedFixed (14)
PROP_RadiusFixed (22)
PROP_HeightFixed (75)
PROP_Mass (150)
PROP_DamageType (MOD_ICE)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOBLOOD|MF_COUNTKILL)
PROP_Flags2 (MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_ICEGUY_LOOK)
PROP_SeeState (S_ICEGUY_WALK1)
PROP_PainState (S_ICEGUY_PAIN1)
PROP_MissileState (S_ICEGUY_ATK1)
PROP_DeathState (S_ICEGUY_DEATH)
PROP_SeeSound ("IceGuySight")
PROP_AttackSound ("IceGuyAttack")
PROP_ActiveSound ("IceGuyActive")
END_DEFAULTS
FState AIceGuy::States[] =
{
#define S_ICEGUY_LOOK 0
S_NORMAL1 (ICEY, 'A', 10, A_IceGuyLook , &States[S_ICEGUY_LOOK]),
#define S_ICEGUY_WALK1 (S_ICEGUY_LOOK+1)
S_NORMAL1 (ICEY, 'A', 4, A_Chase , &States[S_ICEGUY_WALK1+1]),
S_NORMAL1 (ICEY, 'B', 4, A_IceGuyChase, &States[S_ICEGUY_WALK1+2]),
S_NORMAL1 (ICEY, 'C', 4, A_Chase , &States[S_ICEGUY_WALK1+3]),
S_NORMAL1 (ICEY, 'D', 4, A_Chase , &States[S_ICEGUY_WALK1]),
#define S_ICEGUY_PAIN1 (S_ICEGUY_WALK1+4)
S_NORMAL1 (ICEY, 'A', 1, A_Pain , &States[S_ICEGUY_WALK1]),
#define S_ICEGUY_ATK1 (S_ICEGUY_PAIN1+1)
S_NORMAL1 (ICEY, 'E', 3, A_FaceTarget , &States[S_ICEGUY_ATK1+1]),
S_NORMAL1 (ICEY, 'F', 3, A_FaceTarget , &States[S_ICEGUY_ATK1+2]),
S_BRIGHT (ICEY, 'G', 8, A_IceGuyAttack, &States[S_ICEGUY_ATK1+3]),
S_NORMAL1 (ICEY, 'F', 4, A_FaceTarget , &States[S_ICEGUY_WALK1]),
#define S_ICEGUY_DEATH (S_ICEGUY_ATK1+4)
S_NORMAL1 (ICEY, 'A', 1, A_IceGuyDie , NULL),
#define S_ICEGUY_DORMANT (S_ICEGUY_DEATH+1)
S_NORMAL1 (ICEY, 'A', -1, NULL , &States[S_ICEGUY_LOOK]),
};
------------------------------------------------------------------------
//========== The ice projectile fired by an ice golem; on impact, it bursts into eight damaging ice shards.
IMPLEMENT_ACTOR (AIceGuyFX, Hexen, -1, 0)
PROP_SpeedFixed (14)
PROP_RadiusFixed (8)
PROP_HeightFixed (10)
PROP_Damage (1)
PROP_DamageType (MOD_ICE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_ICEGUY_FX1)
PROP_DeathState (S_ICEGUY_FX_X1)
PROP_DeathSound ("IceGuyMissileExplode")
END_DEFAULTS
FState AIceGuyFX::States[] =
{
#define S_ICEGUY_FX1 0
S_BRIGHT (ICPR, 'A', 3, A_IceGuyMissilePuff , &States[S_ICEGUY_FX1+1]),
S_BRIGHT (ICPR, 'B', 3, A_IceGuyMissilePuff , &States[S_ICEGUY_FX1+2]),
S_BRIGHT (ICPR, 'C', 3, A_IceGuyMissilePuff , &States[S_ICEGUY_FX1]),
#define S_ICEGUY_FX_X1 (S_ICEGUY_FX1+3)
S_BRIGHT (ICPR, 'D', 4, NULL , &States[S_ICEGUY_FX_X1+1]),
S_BRIGHT (ICPR, 'E', 4, A_IceGuyMissileExplode, &States[S_ICEGUY_FX_X1+2]),
S_BRIGHT (ICPR, 'F', 4, NULL , &States[S_ICEGUY_FX_X1+3]),
S_BRIGHT (ICPR, 'G', 4, NULL , &States[S_ICEGUY_FX_X1+4]),
S_BRIGHT (ICPR, 'H', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== The trail spawned by the ice golem's projectile.
IMPLEMENT_ACTOR (AIceFXPuff, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_SHADOW)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceFXPuff::States[] =
{
S_NORMAL1 (ICPR, 'I', 3, NULL, &States[1]),
S_NORMAL1 (ICPR, 'J', 3, NULL, &States[2]),
S_NORMAL1 (ICPR, 'K', 3, NULL, &States[3]),
S_NORMAL1 (ICPR, 'L', 2, NULL, &States[4]),
S_NORMAL1 (ICPR, 'M', 2, NULL, NULL),
};
------------------------------------------------------------------------
//========== One of eight ice shard projectiles bursting from the ice golem's projectile upon impact.
IMPLEMENT_ACTOR (AIceGuyFX2, Hexen, -1, 0)
PROP_SpeedFixed (10)
PROP_RadiusFixed (4)
PROP_HeightFixed (4)
PROP_Damage (1)
PROP_DamageType (MOD_ICE)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceGuyFX2::States[] =
{
S_BRIGHT (ICPR, 'N', 3, NULL, &States[1]),
S_BRIGHT (ICPR, 'O', 3, NULL, &States[2]),
S_BRIGHT (ICPR, 'P', 3, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== The ice shards or pieces the ice golem bursts into when it dies.
IMPLEMENT_ACTOR (AIceGuyBit, Hexen, -1, 0)
PROP_RadiusFixed (1)
PROP_HeightFixed (1)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceGuyBit::States[] =
{
S_BRIGHT (ICPR, 'Q', 50, NULL, NULL),
#define S_ICEGUY_BIT2 (1)
S_BRIGHT (ICPR, 'R', 50, NULL, NULL),
};
------------------------------------------------------------------------
//========== Ice Guy Wisp 1
IMPLEMENT_ACTOR (AIceGuyWisp1, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceGuyWisp1::States[] =
{
S_NORMAL1 (ICWS, 'A', 2, NULL, &States[1]),
S_NORMAL1 (ICWS, 'B', 2, NULL, &States[2]),
S_NORMAL1 (ICWS, 'C', 2, NULL, &States[3]),
S_NORMAL1 (ICWS, 'D', 2, NULL, &States[4]),
S_NORMAL1 (ICWS, 'E', 2, NULL, &States[5]),
S_NORMAL1 (ICWS, 'F', 2, NULL, &States[6]),
S_NORMAL1 (ICWS, 'G', 2, NULL, &States[7]),
S_NORMAL1 (ICWS, 'H', 2, NULL, &States[8]),
S_NORMAL1 (ICWS, 'I', 2, NULL, NULL),
};
------------------------------------------------------------------------
//========== Ice Guy Wisp 2
IMPLEMENT_ACTOR (AIceGuyWisp2, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceGuyWisp2::States[] =
{
S_NORMAL1 (ICWS, 'J', 2, NULL, &States[1]),
S_NORMAL1 (ICWS, 'K', 2, NULL, &States[2]),
S_NORMAL1 (ICWS, 'L', 2, NULL, &States[3]),
S_NORMAL1 (ICWS, 'M', 2, NULL, &States[4]),
S_NORMAL1 (ICWS, 'N', 2, NULL, &States[5]),
S_NORMAL1 (ICWS, 'O', 2, NULL, &States[6]),
S_NORMAL1 (ICWS, 'P', 2, NULL, &States[7]),
S_NORMAL1 (ICWS, 'Q', 2, NULL, &States[8]),
S_NORMAL1 (ICWS, 'R', 2, NULL, NULL),
};
------------------------------------------------------------------------
//========== Korax is the second Serpent Rider and the final boss of Hexen.
IMPLEMENT_ACTOR (AKorax, Hexen, 10200, 0)
PROP_SpawnHealth (5000)
PROP_PainChance (20)
PROP_SpeedFixed (10)
PROP_RadiusFixed (65)
PROP_HeightFixed (115)
PROP_Mass (2000)
PROP_Damage (15)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_BOSS|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_KORAX_LOOK1)
PROP_SeeState (S_KORAX_CHASE2)
PROP_PainState (S_KORAX_PAIN1)
PROP_MissileState (S_KORAX_ATTACK1)
PROP_DeathState (S_KORAX_DEATH1)
PROP_SeeSound ("KoraxSight")
PROP_AttackSound ("KoraxAttack")
PROP_PainSound ("KoraxPain")
PROP_DeathSound ("KoraxDeath")
PROP_ActiveSound ("KoraxActive")
END_DEFAULTS
FState AKorax::States[] =
{
#define S_KORAX_LOOK1 0
S_NORMAL1(KORX, 'A', 5, A_Look , &States[S_KORAX_LOOK1]),
#define S_KORAX_CHASE2 (S_KORAX_LOOK1+1)
S_NORMAL1(KORX, 'A', 3, A_KoraxChase , &States[S_KORAX_CHASE2+1]),
S_NORMAL1(KORX, 'A', 3, A_KoraxChase , &States[S_KORAX_CHASE2+2]),
S_NORMAL1(KORX, 'A', 3, A_KoraxChase , &States[S_KORAX_CHASE2+3]),
S_NORMAL1(KORX, 'B', 3, A_KoraxStep , &States[S_KORAX_CHASE2+4]),
S_NORMAL1(KORX, 'B', 3, A_KoraxChase , &States[S_KORAX_CHASE2+5]),
S_NORMAL1(KORX, 'B', 3, A_KoraxChase , &States[S_KORAX_CHASE2+6]),
S_NORMAL1(KORX, 'B', 3, A_KoraxChase , &States[S_KORAX_CHASE2+7]),
S_NORMAL1(KORX, 'C', 3, A_KoraxStep2 , &States[S_KORAX_CHASE2+8]),
S_NORMAL1(KORX, 'C', 3, A_KoraxChase , &States[S_KORAX_CHASE2+9]),
S_NORMAL1(KORX, 'C', 3, A_KoraxChase , &States[S_KORAX_CHASE2+10]),
S_NORMAL1(KORX, 'C', 3, A_KoraxChase , &States[S_KORAX_CHASE2+11]),
S_NORMAL1(KORX, 'D', 3, A_KoraxStep , &States[S_KORAX_CHASE2+12]),
S_NORMAL1(KORX, 'D', 3, A_KoraxChase , &States[S_KORAX_CHASE2+13]),
S_NORMAL1(KORX, 'D', 3, A_KoraxChase , &States[S_KORAX_CHASE2+14]),
S_NORMAL1(KORX, 'D', 3, A_KoraxChase , &States[S_KORAX_CHASE2+15]),
S_NORMAL1(KORX, 'A', 3, A_KoraxStep2 , &States[S_KORAX_CHASE2]),
#define S_KORAX_PAIN1 (S_KORAX_CHASE2+16)
S_NORMAL1(KORX, 'H', 5, A_Pain , &States[S_KORAX_PAIN1+1]),
S_NORMAL1(KORX, 'H', 5, NULL , &States[S_KORAX_CHASE2]),
#define S_KORAX_ATTACK1 (S_KORAX_PAIN1+2)
S_BRIGHT (KORX, 'E', 2, A_FaceTarget , &States[S_KORAX_ATTACK1+1]),
S_BRIGHT (KORX, 'E', 5, A_KoraxDecide , &States[S_KORAX_ATTACK1+1]),
#define S_KORAX_DEATH1 (S_KORAX_ATTACK1+2)
S_NORMAL1(KORX, 'I', 5, NULL , &States[S_KORAX_DEATH1+1]),
S_NORMAL1(KORX, 'J', 5, A_FaceTarget , &States[S_KORAX_DEATH1+2]),
S_NORMAL1(KORX, 'K', 5, A_Scream , &States[S_KORAX_DEATH1+3]),
S_NORMAL1(KORX, 'L', 5, NULL , &States[S_KORAX_DEATH1+4]),
S_NORMAL1(KORX, 'M', 5, NULL , &States[S_KORAX_DEATH1+5]),
S_NORMAL1(KORX, 'N', 5, NULL , &States[S_KORAX_DEATH1+6]),
S_NORMAL1(KORX, 'O', 5, NULL , &States[S_KORAX_DEATH1+7]),
S_NORMAL1(KORX, 'P', 5, NULL , &States[S_KORAX_DEATH1+8]),
S_NORMAL1(KORX, 'Q', 10, NULL , &States[S_KORAX_DEATH1+9]),
S_NORMAL1(KORX, 'R', 5, A_KoraxBonePop , &States[S_KORAX_DEATH1+10]),
S_NORMAL1(KORX, 'S', 5, A_NoBlocking , &States[S_KORAX_DEATH1+11]),
S_NORMAL1(KORX, 'T', 5, NULL , &States[S_KORAX_DEATH1+12]),
S_NORMAL1(KORX, 'U', 5, NULL , &States[S_KORAX_DEATH1+13]),
S_NORMAL1(KORX, 'V', -1, NULL , NULL),
#define S_KORAX_MISSILE1 (S_KORAX_DEATH1+14)
S_BRIGHT (KORX, 'E', 4, A_FaceTarget , &States[S_KORAX_MISSILE1+1]),
S_BRIGHT (KORX, 'F', 8, A_KoraxMissile , &States[S_KORAX_MISSILE1+2]),
S_BRIGHT (KORX, 'E', 8, NULL , &States[S_KORAX_CHASE2]),
#define S_KORAX_COMMAND1 (S_KORAX_MISSILE1+3)
S_BRIGHT (KORX, 'E', 5, A_FaceTarget , &States[S_KORAX_COMMAND1+1]),
S_BRIGHT (KORX, 'W', 10, A_FaceTarget , &States[S_KORAX_COMMAND1+2]),
S_BRIGHT (KORX, 'G', 15, A_KoraxCommand , &States[S_KORAX_COMMAND1+3]),
S_BRIGHT (KORX, 'W', 10, NULL , &States[S_KORAX_COMMAND1+4]),
S_BRIGHT (KORX, 'E', 5, NULL , &States[S_KORAX_CHASE2]),
};
------------------------------------------------------------------------
//========== Korax spirit: 6 of them get spawned upon Korax's death
IMPLEMENT_ACTOR (AKoraxSpirit, Hexen, -1, 0)
PROP_SpeedFixed (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_NOCLIP|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_ALTSHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AKoraxSpirit::States[] =
{
S_NORMAL1(SPIR, 'A', 5, A_KSpiritRoam, &States[1]),
S_NORMAL1(SPIR, 'B', 5, A_KSpiritRoam, &States[0]),
#define S_KSPIRIT_DEATH (2)
S_NORMAL1(SPIR, 'D', 5, NULL , &States[S_KSPIRIT_DEATH+1]),
S_NORMAL1(SPIR, 'E', 5, NULL , &States[S_KSPIRIT_DEATH+2]),
S_NORMAL1(SPIR, 'F', 5, NULL , &States[S_KSPIRIT_DEATH+3]),
S_NORMAL1(SPIR, 'G', 5, NULL , &States[S_KSPIRIT_DEATH+4]),
S_NORMAL1(SPIR, 'H', 5, NULL , &States[S_KSPIRIT_DEATH+5]),
S_NORMAL1(SPIR, 'I', 5, NULL , NULL),
};
------------------------------------------------------------------------
//========== Korax command bolt: a special type of projectile that rises directly to the ceiling.
IMPLEMENT_ACTOR (AKoraxBolt, Hexen, -1, 0)
PROP_RadiusFixed (15)
PROP_HeightFixed (35)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_KBOLT1)
END_DEFAULTS
FState AKoraxBolt::States[] =
{
#define S_KBOLT1 0
S_BRIGHT (MLFX, 'I', 2, NULL , &States[S_KBOLT1+1]),
S_BRIGHT (MLFX, 'J', 2, A_KBoltRaise , &States[S_KBOLT1+2]),
S_BRIGHT (MLFX, 'I', 2, A_KBolt , &States[S_KBOLT1+3]),
S_BRIGHT (MLFX, 'J', 2, A_KBolt , &States[S_KBOLT1+4]),
S_BRIGHT (MLFX, 'K', 2, A_KBolt , &States[S_KBOLT1+5]),
S_BRIGHT (MLFX, 'L', 2, A_KBolt , &States[S_KBOLT1+6]),
S_BRIGHT (MLFX, 'M', 2, A_KBolt , &States[S_KBOLT1+2]),
};
------------------------------------------------------------------------
//========== Menelkir is one of the three penultimate bosses of Hexen.
IMPLEMENT_ACTOR (AMageBoss, Hexen, 10102, 0)
PROP_SpawnHealth (800)
PROP_PainChance (50)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_DONTMORPH)
PROP_SpawnState (S_MAGE)
PROP_SeeState (S_MAGE_RUN1)
PROP_PainState (S_MAGE_PAIN)
PROP_MeleeState (S_MAGE_ATK1)
PROP_MissileState (S_MAGE_ATK1)
PROP_DeathState (S_MAGE_DIE1)
PROP_XDeathState (S_MAGE_XDIE1)
PROP_IDeathState (S_MAGE_ICE)
PROP_BDeathState (S_MAGE_BURN)
PROP_PainSound ("PlayerMagePain")
PROP_DeathSound ("PlayerMageCrazyDeath")
END_DEFAULTS
FState AMageBoss::States[] =
{
#define S_MAGE 0
S_NORMAL1 (MAGE, 'A', 2, NULL , &States[S_MAGE+1]),
S_NORMAL1 (MAGE, 'A', 3, A_ClassBossHealth , &States[S_MAGE+2]),
S_NORMAL1 (MAGE, 'A', 5, A_Look , &States[S_MAGE+2]),
#define S_MAGE_RUN1 (S_MAGE+3)
S_NORMAL1 (MAGE, 'A', 4, A_FastChase , &States[S_MAGE_RUN1+1]),
S_NORMAL1 (MAGE, 'B', 4, A_FastChase , &States[S_MAGE_RUN1+2]),
S_NORMAL1 (MAGE, 'C', 4, A_FastChase , &States[S_MAGE_RUN1+3]),
S_NORMAL1 (MAGE, 'D', 4, A_FastChase , &States[S_MAGE_RUN1]),
#define S_MAGE_PAIN (S_MAGE_RUN1+4)
S_NORMAL1 (MAGE, 'G', 4, NULL , &States[S_MAGE_PAIN+1]),
S_NORMAL1 (MAGE, 'G', 4, A_Pain , &States[S_MAGE_RUN1]),
#define S_MAGE_ATK1 (S_MAGE_PAIN+2)
S_NORMAL1 (MAGE, 'E', 8, A_FaceTarget , &States[S_MAGE_ATK1+1]),
S_BRIGHT (MAGE, 'F', 8, A_MageAttack , &States[S_MAGE_RUN1]),
#define S_MAGE_DIE1 (S_MAGE_ATK1+2)
S_NORMAL1 (MAGE, 'H', 6, NULL , &States[S_MAGE_DIE1+1]),
S_NORMAL1 (MAGE, 'I', 6, A_Scream , &States[S_MAGE_DIE1+2]),
S_NORMAL1 (MAGE, 'J', 6, NULL , &States[S_MAGE_DIE1+3]),
S_NORMAL1 (MAGE, 'K', 6, NULL , &States[S_MAGE_DIE1+4]),
S_NORMAL1 (MAGE, 'L', 6, A_NoBlocking , &States[S_MAGE_DIE1+5]),
S_NORMAL1 (MAGE, 'M', 6, NULL , &States[S_MAGE_DIE1+6]),
S_NORMAL1 (MAGE, 'N', -1, NULL , NULL),
#define S_MAGE_XDIE1 (S_MAGE_DIE1+7)
S_NORMAL1 (MAGE, 'O', 5, A_Scream , &States[S_MAGE_XDIE1+1]),
S_NORMAL1 (MAGE, 'P', 5, NULL , &States[S_MAGE_XDIE1+2]),
S_NORMAL1 (MAGE, 'R', 5, A_NoBlocking , &States[S_MAGE_XDIE1+3]),
S_NORMAL1 (MAGE, 'S', 5, NULL , &States[S_MAGE_XDIE1+4]),
S_NORMAL1 (MAGE, 'T', 5, NULL , &States[S_MAGE_XDIE1+5]),
S_NORMAL1 (MAGE, 'U', 5, NULL , &States[S_MAGE_XDIE1+6]),
S_NORMAL1 (MAGE, 'V', 5, NULL , &States[S_MAGE_XDIE1+7]),
S_NORMAL1 (MAGE, 'W', 5, NULL , &States[S_MAGE_XDIE1+8]),
S_NORMAL1 (MAGE, 'X', -1, NULL , NULL),
#define S_MAGE_ICE (S_MAGE_XDIE1+9)
S_NORMAL1 (MAGE, 'Y', 5, A_FreezeDeath , &States[S_MAGE_ICE+1]),
S_NORMAL1 (MAGE, 'Y', 1, A_FreezeDeathChunks , &States[S_MAGE_ICE+1]),
#define S_MAGE_BURN (S_MAGE_ICE+2)
S_BRIGHT (FDTH, 'E', 5, A_MageBurnScream , &States[S_MAGE_BURN+1]),
S_BRIGHT (FDTH, 'F', 4, NULL , &States[S_MAGE_BURN+2]),
S_BRIGHT (FDTH, 'G', 5, NULL , &States[S_MAGE_BURN+3]),
S_BRIGHT (FDTH, 'H', 4, A_Scream , &States[S_MAGE_BURN+4]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_MAGE_BURN+5]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_MAGE_BURN+6]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_MAGE_BURN+7]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_MAGE_BURN+8]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_MAGE_BURN+9]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_MAGE_BURN+10]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_MAGE_BURN+11]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_MAGE_BURN+12]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_MAGE_BURN+13]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_MAGE_BURN+14]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_MAGE_BURN+15]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_MAGE_BURN+16]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_MAGE_BURN+17]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_MAGE_BURN+18]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_MAGE_BURN+18]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
};
------------------------------------------------------------------------
//========== The Mage's Frost Cone (2nd weapon)
IMPLEMENT_ACTOR (AMWeapFrost, Hexen, 53, 36)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_COS1)
END_DEFAULTS
FState AMWeapFrost::States[] =
{
#define S_COS1 0
S_BRIGHT (WMCS, 'A', 8, NULL , &States[S_COS1+1]),
S_BRIGHT (WMCS, 'B', 8, NULL , &States[S_COS1+2]),
S_BRIGHT (WMCS, 'C', 8, NULL , &States[S_COS1]),
#define S_CONEREADY (S_COS1+3)
S_NORMAL1(CONE, 'A', 1, A_WeaponReady , &States[S_CONEREADY]),
#define S_CONEDOWN (S_CONEREADY+1)
S_NORMAL1(CONE, 'A', 1, A_Lower , &States[S_CONEDOWN]),
#define S_CONEUP (S_CONEDOWN+1)
S_NORMAL1(CONE, 'A', 1, A_Raise , &States[S_CONEUP]),
#define S_CONEATK (S_CONEUP+1)
S_NORMAL1(CONE, 'B', 3, NULL , &States[S_CONEATK+1]),
S_NORMAL1(CONE, 'C', 4, NULL , &States[S_CONEATK+2]),
S_NORMAL1(CONE, 'D', 3, NULL , &States[S_CONEATK+3]),
S_NORMAL1(CONE, 'E', 5, NULL , &States[S_CONEATK+4]),
S_NORMAL1(CONE, 'F', 3, A_FireConePL1 , &States[S_CONEATK+5]),
S_NORMAL1(CONE, 'G', 3, NULL , &States[S_CONEATK+6]),
S_NORMAL1(CONE, 'A', 9, NULL , &States[S_CONEATK+7]),
S_NORMAL1(CONE, 'A', 10, A_ReFire , &States[S_CONEREADY]),
};
FWeaponInfo AMWeapFrost::WeaponInfo =
{
0, // DWORD flags;
MANA_1, // ammotype_t ammo;
3, // int ammouse;
25, // int ammogive;
&States[S_CONEUP], // FState *upstate;
&States[S_CONEDOWN], // FState *downstate;
&States[S_CONEREADY], // FState *readystate;
&States[S_CONEATK], // FState *atkstate;
&States[S_CONEATK+2], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
18*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AMWeapFrost), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Frost shard
IMPLEMENT_ACTOR (AFrostMissile, Hexen, -1, 0)
PROP_SpeedFixed (25)
PROP_RadiusFixed (13)
PROP_HeightFixed (8)
PROP_Damage (1)
PROP_DamageType (MOD_ICE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (0)
PROP_DeathState (S_SHARDFXE1_1)
PROP_DeathSound ("MageShardsExplode")
END_DEFAULTS
FState AFrostMissile::States[] =
{
S_BRIGHT (SHRD, 'A', 2, NULL , &States[1]),
S_BRIGHT (SHRD, 'A', 3, A_ShedShard , &States[2]),
S_BRIGHT (SHRD, 'B', 3, NULL , &States[3]),
S_BRIGHT (SHRD, 'C', 3, NULL , &States[0]),
#define S_SHARDFXE1_1 (4)
S_BRIGHT (SHEX, 'A', 5, NULL , &States[S_SHARDFXE1_1+1]),
S_BRIGHT (SHEX, 'B', 5, NULL , &States[S_SHARDFXE1_1+2]),
S_BRIGHT (SHEX, 'C', 5, NULL , &States[S_SHARDFXE1_1+3]),
S_BRIGHT (SHEX, 'D', 5, NULL , &States[S_SHARDFXE1_1+4]),
S_BRIGHT (SHEX, 'E', 5, NULL , NULL),
};
------------------------------------------------------------------------
//========== Ice Shard
IMPLEMENT_ACTOR (AIceShard, Hexen, -1, 65)
PROP_DamageType (MOD_ICE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
FState AIceShard::States[] =
{
S_BRIGHT (SHRD, 'A', 3, NULL, &States[1]),
S_BRIGHT (SHRD, 'B', 3, NULL, &States[2]),
S_BRIGHT (SHRD, 'C', 3, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== The Mage's Lightning Arc of Death
IMPLEMENT_ACTOR (AMWeapLightning, Hexen, 8040, 0)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (S_MW_LIGHTNING1)
END_DEFAULTS
FState AMWeapLightning::States[] =
{
#define S_MW_LIGHTNING1 0
S_BRIGHT (WMLG, 'A', 4, NULL , &States[S_MW_LIGHTNING1+1]),
S_BRIGHT (WMLG, 'B', 4, NULL , &States[S_MW_LIGHTNING1+2]),
S_BRIGHT (WMLG, 'C', 4, NULL , &States[S_MW_LIGHTNING1+3]),
S_BRIGHT (WMLG, 'D', 4, NULL , &States[S_MW_LIGHTNING1+4]),
S_BRIGHT (WMLG, 'E', 4, NULL , &States[S_MW_LIGHTNING1+5]),
S_BRIGHT (WMLG, 'F', 4, NULL , &States[S_MW_LIGHTNING1+6]),
S_BRIGHT (WMLG, 'G', 4, NULL , &States[S_MW_LIGHTNING1+7]),
S_BRIGHT (WMLG, 'H', 4, NULL , &States[S_MW_LIGHTNING1]),
#define S_MLIGHTNINGREADY (S_MW_LIGHTNING1+8)
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+1]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+2]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+3]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+4]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+5]),
S_BRIGHT (MLNG, 'A', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+6]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+7]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+8]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+9]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+10]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+11]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+12]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+13]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+14]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+15]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+16]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+17]),
S_BRIGHT (MLNG, 'C', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+18]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+19]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+20]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+21]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+22]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+23]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY]),
#define S_MLIGHTNINGDOWN (S_MLIGHTNINGREADY+24)
S_BRIGHT (MLNG, 'A', 1, A_Lower , &States[S_MLIGHTNINGDOWN]),
#define S_MLIGHTNINGUP (S_MLIGHTNINGDOWN+1)
S_BRIGHT (MLNG, 'A', 1, A_Raise , &States[S_MLIGHTNINGUP]),
#define S_MLIGHTNINGATK (S_MLIGHTNINGUP+1)
S_BRIGHT (MLNG, 'D', 3, NULL , &States[S_MLIGHTNINGATK+1]),
S_BRIGHT (MLNG, 'E', 3, NULL , &States[S_MLIGHTNINGATK+2]),
S_BRIGHT (MLNG, 'F', 4, A_MLightningAttack , &States[S_MLIGHTNINGATK+3]),
S_BRIGHT (MLNG, 'G', 4, NULL , &States[S_MLIGHTNINGATK+4]),
S_BRIGHT (MLNG, 'H', 3, NULL , &States[S_MLIGHTNINGATK+5]),
S_BRIGHT (MLNG, 'I', 3, NULL , &States[S_MLIGHTNINGATK+6]),
S_BRIGHT2 (MLNG, 'I', 6, NULL , &States[S_MLIGHTNINGATK+7], 0, 199),
S_BRIGHT2 (MLNG, 'C', 2, NULL , &States[S_MLIGHTNINGATK+8], 0, 55),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+9], 0, 50),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+10], 0, 45),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGREADY], 0, 40),
};
FWeaponInfo AMWeapLightning::WeaponInfo =
{
0, // DWORD flags;
MANA_2, // ammotype_t ammo;
5, // int ammouse;
25, // int ammogive;
&States[S_MLIGHTNINGUP], // FState *upstate;
&States[S_MLIGHTNINGDOWN], // FState *downstate;
&States[S_MLIGHTNINGREADY], // FState *readystate;
&States[S_MLIGHTNINGATK], // FState *atkstate;
&States[S_MLIGHTNINGATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
0, // int kickback;
12*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AMWeapLightning),// TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Ceiling Lightning
IMPLEMENT_ACTOR (ALightningCeiling, Hexen, -1, 0)
PROP_SpawnHealth (144)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (40)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags3 (MF3_CEILINGHUGGER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_CEILING1)
PROP_DeathState (S_LIGHTNING_C_X1)
END_DEFAULTS
FState ALightningCeiling::States[] =
{
#define S_LIGHTNING_CEILING1 0
S_BRIGHT (MLFX, 'A', 2, A_LightningZap , &States[S_LIGHTNING_CEILING1+1]),
S_BRIGHT (MLFX, 'B', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+2]),
S_BRIGHT (MLFX, 'C', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+3]),
S_BRIGHT (MLFX, 'D', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1]),
#define S_LIGHTNING_C_X1 (S_LIGHTNING_CEILING1+4)
S_BRIGHT (MLF2, 'A', 2, A_LightningRemove , &States[S_LIGHTNING_C_X1+1]),
S_BRIGHT (MLF2, 'B', 3, NULL , &States[S_LIGHTNING_C_X1+2]),
S_BRIGHT (MLF2, 'C', 3, NULL , &States[S_LIGHTNING_C_X1+3]),
S_BRIGHT (MLF2, 'D', 3, NULL , &States[S_LIGHTNING_C_X1+4]),
S_BRIGHT (MLF2, 'E', 3, NULL , &States[S_LIGHTNING_C_X1+5]),
S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_C_X1+6]),
S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_C_X1+7]),
S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_C_X1+8]),
S_NORMAL1(ACLO, 'E', 35, NULL , &States[S_LIGHTNING_C_X1+9]),
S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_C_X1+10]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+11]),
S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_C_X1+12]),
S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_C_X1+13]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+14]),
S_BRIGHT (MLF2, 'Q', 4, NULL , &States[S_LIGHTNING_C_X1+15]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+16]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+17]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+18]),
S_BRIGHT (MLF2, 'P', 1, A_HideThing , &States[S_LIGHTNING_C_X1+19]),
S_NORMAL1(ACLO, 'E', 1050, A_FreeTargMobj , NULL),
};
------------------------------------------------------------------------
//========== Floor Lightning
IMPLEMENT_ACTOR (ALightningFloor, Hexen, -1, 0)
PROP_SpawnHealth (144)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (40)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags3 (MF3_FLOORHUGGER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_FLOOR1)
PROP_DeathState (S_LIGHTNING_F_X1)
END_DEFAULTS
FState ALightningFloor::States[] =
{
#define S_LIGHTNING_FLOOR1 0
S_BRIGHT (MLFX, 'E', 2, A_LightningZap , &States[S_LIGHTNING_FLOOR1+1]),
S_BRIGHT (MLFX, 'F', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+2]),
S_BRIGHT (MLFX, 'G', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+3]),
S_BRIGHT (MLFX, 'H', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1]),
#define S_LIGHTNING_F_X1 (S_LIGHTNING_FLOOR1+4)
S_BRIGHT (MLF2, 'F', 2, A_LightningRemove , &States[S_LIGHTNING_F_X1+1]),
S_BRIGHT (MLF2, 'G', 3, NULL , &States[S_LIGHTNING_F_X1+2]),
S_BRIGHT (MLF2, 'H', 3, NULL , &States[S_LIGHTNING_F_X1+3]),
S_BRIGHT (MLF2, 'I', 3, NULL , &States[S_LIGHTNING_F_X1+4]),
S_BRIGHT (MLF2, 'J', 3, NULL , &States[S_LIGHTNING_F_X1+5]),
S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_F_X1+6]),
S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_F_X1+7]),
S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_F_X1+8]),
S_NORMAL1(ACLO, 'E', 20, NULL , &States[S_LIGHTNING_F_X1+9]),
S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_F_X1+10]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+11]),
S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_F_X1+12]),
S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_F_X1+13]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+14]),
S_BRIGHT (MLF2, 'Q', 4, A_LastZap , &States[S_LIGHTNING_F_X1+15]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+16]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+17]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+18]),
S_BRIGHT (MLF2, 'P', 1, A_HideThing , &ALightningCeiling::States[S_LIGHTNING_C_X1+19]),
};
------------------------------------------------------------------------
//========== Lightning Zap
IMPLEMENT_ACTOR (ALightningZap, Hexen, -1, 0)
PROP_RadiusFixed (15)
PROP_HeightFixed (35)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_ZAP1)
PROP_DeathState (S_LIGHTNING_ZAP_X1+7)
END_DEFAULTS
FState ALightningZap::States[] =
{
#define S_LIGHTNING_ZAP1 0
S_BRIGHT (MLFX, 'I', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+1]),
S_BRIGHT (MLFX, 'J', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+2]),
S_BRIGHT (MLFX, 'K', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+3]),
S_BRIGHT (MLFX, 'L', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+4]),
S_BRIGHT (MLFX, 'M', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1]),
#define S_LIGHTNING_ZAP_X1 (S_LIGHTNING_ZAP1+5)
S_BRIGHT (MLFX, 'N', 2, NULL , &States[S_LIGHTNING_ZAP_X1+1]),
S_BRIGHT (MLFX, 'O', 2, NULL , &States[S_LIGHTNING_ZAP_X1+2]),
S_BRIGHT (MLFX, 'P', 2, NULL , &States[S_LIGHTNING_ZAP_X1+3]),
S_BRIGHT (MLFX, 'Q', 2, NULL , &States[S_LIGHTNING_ZAP_X1+4]),
S_BRIGHT (MLFX, 'R', 2, NULL , &States[S_LIGHTNING_ZAP_X1+5]),
S_BRIGHT (MLFX, 'S', 2, NULL , &States[S_LIGHTNING_ZAP_X1+6]),
S_BRIGHT (MLFX, 'T', 2, NULL , &States[S_LIGHTNING_ZAP_X1+7]),
S_BRIGHT (MLFX, 'U', 2, NULL , NULL),
};
------------------------------------------------------------------------
//========== The mage
IMPLEMENT_ACTOR (AMagePlayer, Hexen, -1, 0)
PROP_SpawnHealth (100)
PROP_ReactionTime (0)
PROP_PainChance (255)
PROP_RadiusFixed (16)
PROP_HeightFixed (64)
PROP_SpeedFixed (1)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH|MF_FRIENDLY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_Flags4 (MF4_NOSKIN)
PROP_SpawnState (S_MPLAY)
PROP_SeeState (S_MPLAY_RUN1)
PROP_PainState (S_MPLAY_PAIN)
PROP_MissileState (S_MPLAY_ATK1)
PROP_DeathState (S_MPLAY_DIE1)
PROP_XDeathState (S_MPLAY_XDIE1)
PROP_BDeathState (S_PLAY_M_FDTH)
PROP_IDeathState (S_MPLAY_ICE)
PROP_PainSound ("PlayerMagePain")
END_DEFAULTS
FState AMagePlayer::States[] =
{
#define S_MPLAY 0
S_NORMAL1(MAGE, 'A', -1, NULL , NULL),
#define S_MPLAY_RUN1 (S_MPLAY+1)
S_NORMAL1(MAGE, 'A', 4, NULL , &States[S_MPLAY_RUN1+1]),
S_NORMAL1(MAGE, 'B', 4, NULL , &States[S_MPLAY_RUN1+2]),
S_NORMAL1(MAGE, 'C', 4, NULL , &States[S_MPLAY_RUN1+3]),
S_NORMAL1(MAGE, 'D', 4, NULL , &States[S_MPLAY_RUN1]),
#define S_MPLAY_PAIN (S_MPLAY_RUN1+4)
S_NORMAL1(MAGE, 'G', 4, NULL , &States[S_MPLAY_PAIN+1]),
S_NORMAL1(MAGE, 'G', 4, A_Pain , &States[S_MPLAY]),
#define S_MPLAY_ATK1 (S_MPLAY_PAIN+2)
S_NORMAL1(MAGE, 'E', 8, NULL , &States[S_MPLAY_ATK1+1]),
S_BRIGHT (MAGE, 'F', 8, NULL , &States[S_MPLAY]),
#define S_MPLAY_DIE1 (S_MPLAY_ATK1+2)
S_NORMAL1(MAGE, 'H', 6, NULL , &States[S_MPLAY_DIE1+1]),
S_NORMAL1(MAGE, 'I', 6, A_Scream , &States[S_MPLAY_DIE1+2]),
S_NORMAL1(MAGE, 'J', 6, NULL , &States[S_MPLAY_DIE1+3]),
S_NORMAL1(MAGE, 'K', 6, NULL , &States[S_MPLAY_DIE1+4]),
S_NORMAL1(MAGE, 'L', 6, A_NoBlocking , &States[S_MPLAY_DIE1+5]),
S_NORMAL1(MAGE, 'M', 6, NULL , &States[S_MPLAY_DIE1+6]),
S_NORMAL1(MAGE, 'N', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_MPLAY_XDIE1 (S_MPLAY_DIE1+7)
S_NORMAL1(MAGE, 'O', 5, A_Scream , &States[S_MPLAY_XDIE1+1]),
S_NORMAL1(MAGE, 'P', 5, NULL , &States[S_MPLAY_XDIE1+2]),
S_NORMAL1(MAGE, 'R', 5, A_NoBlocking , &States[S_MPLAY_XDIE1+3]),
S_NORMAL1(MAGE, 'S', 5, NULL , &States[S_MPLAY_XDIE1+4]),
S_NORMAL1(MAGE, 'T', 5, NULL , &States[S_MPLAY_XDIE1+5]),
S_NORMAL1(MAGE, 'U', 5, NULL , &States[S_MPLAY_XDIE1+6]),
S_NORMAL1(MAGE, 'V', 5, NULL , &States[S_MPLAY_XDIE1+7]),
S_NORMAL1(MAGE, 'W', 5, NULL , &States[S_MPLAY_XDIE1+8]),
S_NORMAL1(MAGE, 'X', -1, NULL/*A_AddPlayerCorpse*/, NULL),
#define S_MPLAY_ICE (S_MPLAY_XDIE1+9)
S_NORMAL1(MAGE, 'Y', 5, A_FreezeDeath , &States[S_MPLAY_ICE+1]),
S_NORMAL1(MAGE, 'Y', 1, A_FreezeDeathChunks , &States[S_MPLAY_ICE+1]),
#define S_PLAY_M_FDTH (S_MPLAY_ICE+2)
S_BRIGHT (FDTH, 'E', 5, NULL , &States[S_PLAY_M_FDTH+1]),
S_BRIGHT (FDTH, 'F', 4, NULL , &States[S_PLAY_M_FDTH+2]),
#define S_PLAY_FDTH (S_PLAY_M_FDTH+2)
S_BRIGHT (FDTH, 'G', 5, A_FireScream , &States[S_PLAY_FDTH+1]),
S_BRIGHT (FDTH, 'H', 4, A_PlayerScream , &States[S_PLAY_FDTH+2]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_PLAY_FDTH+3]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_PLAY_FDTH+4]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_PLAY_FDTH+5]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_PLAY_FDTH+6]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_PLAY_FDTH+7]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_PLAY_FDTH+8]),
S_BRIGHT (FDTH, 'O', 5, NULL , &States[S_PLAY_FDTH+9]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_PLAY_FDTH+10]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_PLAY_FDTH+11]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_PLAY_FDTH+12]),
S_BRIGHT (FDTH, 'S', 5, A_NoBlocking , &States[S_PLAY_FDTH+13]),
S_BRIGHT (FDTH, 'T', 4, NULL , &States[S_PLAY_FDTH+14]),
S_BRIGHT (FDTH, 'U', 5, NULL , &States[S_PLAY_FDTH+15]),
S_BRIGHT (FDTH, 'V', 4, NULL , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 35, A_CheckBurnGone , &States[S_PLAY_FDTH+16]),
S_NORMAL1(ACLO, 'E', 8, NULL , NULL),
};
------------------------------------------------------------------------
//========== First piece of the Bloodscourge
IMPLEMENT_ACTOR (AMWeaponPiece1, Hexen, 21, 37)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMWeaponPiece1::States[] =
{
S_BRIGHT (WMS1, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Second piece of the Bloodscourge
IMPLEMENT_ACTOR (AMWeaponPiece2, Hexen, 22, 38)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMWeaponPiece2::States[] =
{
S_BRIGHT (WMS2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Third piece of the Bloodscourge
IMPLEMENT_ACTOR (AMWeaponPiece3, Hexen, 23, 39)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMWeaponPiece3::States[] =
{
S_BRIGHT (WMS3, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//==========This spawns the three pieces of the mage's fourth weapon: gets spawned if weapon drop is on so that other players can pick up the dead guy's weapon.
IMPLEMENT_ACTOR (ABloodscourgeDrop, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState ABloodscourgeDrop::States[] =
{
S_NORMAL1 (TNT1, 'A', 1, NULL, &States[1]),
S_NORMAL1 (TNT1, 'A', 1, A_DropBloodscourgePieces, NULL)
};
------------------------------------------------------------------------
//========== The Mages's Staff (Bloodscourge)
IMPLEMENT_ACTOR (AMWeapBloodscourge, Hexen, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AMWeapBloodscourge::States[] =
{
// Dummy state, because the fourth weapon does not appear in a level directly.
S_NORMAL1 (TNT1, 'A', -1, NULL , NULL),
#define S_MSTAFFREADY 1
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+1]),
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+2]),
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+3]),
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+4]),
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+5]),
S_NORMAL1 (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+6]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+7]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+8]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+9]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+10]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+11]),
S_NORMAL1 (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+12]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+13]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+14]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+15]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+16]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+17]),
S_NORMAL1 (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+18]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+19]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+20]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+21]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+22]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+23]),
S_NORMAL1 (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+24]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+25]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+26]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+27]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+28]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+29]),
S_NORMAL1 (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+30]),
S_NORMAL1 (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+31]),
S_NORMAL1 (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+32]),
S_NORMAL1 (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+33]),
S_NORMAL1 (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+34]),
S_NORMAL1 (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY]),
#define S_MSTAFFDOWN (S_MSTAFFREADY+35)
S_NORMAL1 (MSTF, 'A', 1, A_Lower , &States[S_MSTAFFDOWN]),
#define S_MSTAFFUP (S_MSTAFFDOWN+1)
S_NORMAL1 (MSTF, 'A', 1, A_Raise , &States[S_MSTAFFUP]),
#define S_MSTAFFATK (S_MSTAFFUP+1)
S_NORMAL2 (MSTF, 'G', 4, NULL , &States[S_MSTAFFATK+1], 0, 40),
S_BRIGHT2 (MSTF, 'H', 4, A_MStaffAttack , &States[S_MSTAFFATK+2], 0, 48),
S_BRIGHT2 (MSTF, 'H', 2, A_MStaffPalette , &States[S_MSTAFFATK+3], 0, 48),
S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+4], 0, 48),
S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+5], 0, 48),
S_NORMAL2 (MSTF, 'I', 1, NULL , &States[S_MSTAFFATK+6], 0, 40),
S_NORMAL2 (MSTF, 'J', 5, NULL , &States[S_MSTAFFREADY], 0, 36)
};
FWeaponInfo AMWeapBloodscourge::WeaponInfo =
{
0, // DWORD flags;
MANA_BOTH, // ammotype_t ammo;
15, // int ammouse;
0, // int ammogive;
&States[S_MSTAFFUP], // FState *upstate;
&States[S_MSTAFFDOWN], // FState *downstate;
&States[S_MSTAFFREADY], // FState *readystate;
&States[S_MSTAFFATK], // FState *atkstate;
&States[S_MSTAFFATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
15*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AMWeapBloodscourge), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Bloodscourge shot
IMPLEMENT_ACTOR (AMageStaffFX2, Hexen, -1, 0)
PROP_SpeedFixed (17)
PROP_HeightFixed (8)
PROP_Damage (4)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS|MF2_SEEKERMISSILE)
PROP_SpawnState (S_MSTAFF_FX2_1)
PROP_DeathState (S_MSTAFF_FX2_X1)
PROP_DeathSound ("MageStaffExplode")
END_DEFAULTS
FState AMageStaffFX2::States[] =
{
#define S_MSTAFF_FX2_1 0
S_BRIGHT (MSP2, 'A', 2, A_MStaffTrack, &States[S_MSTAFF_FX2_1+1]),
S_BRIGHT (MSP2, 'B', 2, A_MStaffTrack, &States[S_MSTAFF_FX2_1+2]),
S_BRIGHT (MSP2, 'C', 2, A_MStaffTrack, &States[S_MSTAFF_FX2_1+3]),
S_BRIGHT (MSP2, 'D', 2, A_MStaffTrack, &States[S_MSTAFF_FX2_1]),
#define S_MSTAFF_FX2_X1 (S_MSTAFF_FX2_1+4)
S_BRIGHT (MSP2, 'E', 4, A_BeAdditive , &States[S_MSTAFF_FX2_X1+1]),
S_BRIGHT (MSP2, 'F', 5, A_Explode , &States[S_MSTAFF_FX2_X1+2]),
S_BRIGHT (MSP2, 'G', 5, NULL , &States[S_MSTAFF_FX2_X1+3]),
S_BRIGHT (MSP2, 'H', 5, NULL , &States[S_MSTAFF_FX2_X1+4]),
S_BRIGHT (MSP2, 'I', 4, NULL , NULL),
};
------------------------------------------------------------------------
//========== The Mage's Sapphire wand (first weapon)
IMPLEMENT_ACTOR (AMWeapWand, Hexen, -1, 0)
END_DEFAULTS
FState AMWeapWand::States[] =
{
#define S_MWANDREADY 0
S_NORMAL1 (MWND, 'A', 1, A_WeaponReady, &States[S_MWANDREADY]),
#define S_MWANDDOWN (S_MWANDREADY+1)
S_NORMAL1 (MWND, 'A', 1, A_Lower , &States[S_MWANDDOWN]),
#define S_MWANDUP (S_MWANDDOWN+1)
S_NORMAL1 (MWND, 'A', 1, A_Raise , &States[S_MWANDUP]),
#define S_MWANDATK (S_MWANDUP+1)
S_NORMAL1 (MWND, 'A', 6, NULL , &States[S_MWANDATK+1]),
S_BRIGHT2 (MWND, 'B', 6, A_MWandAttack, &States[S_MWANDATK+2], 0, 48),
S_NORMAL2 (MWND, 'A', 3, NULL , &States[S_MWANDATK+3], 0, 40),
S_NORMAL2 (MWND, 'A', 3, A_ReFire , &States[S_MWANDREADY], 0, 36),
};
FWeaponInfo AMWeapWand::WeaponInfo =
{
0, // DWORD flags;
MANA_NONE, // ammotype_t ammo;
0, // int ammouse;
0, // int ammogive;
&States[S_MWANDUP], // FState *upstate;
&States[S_MWANDDOWN], // FState *downstate;
&States[S_MWANDREADY], // FState *readystate;
&States[S_MWANDATK], // FState *atkstate;
&States[S_MWANDATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
0, // int kickback;
4*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(AMWeapWand), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Sapphire wand smoke
IMPLEMENT_ACTOR (AMageWandSmoke, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SHADOW)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH|MF2_NODMGTHRUST)
PROP_Flags4 (MF4_NOSPEEDCHECK|MF4_NONETSPAWN)
PROP_SpawnState (0)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
END_DEFAULTS
FState AMageWandSmoke::States[] =
{
S_NORMAL1 (MWND, 'C', 4, NULL, &States[1]),
S_NORMAL1 (MWND, 'D', 4, NULL, &States[2]),
S_NORMAL1 (MWND, 'C', 4, NULL, &States[3]),
S_NORMAL1 (MWND, 'D', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Sapphire wand missile
IMPLEMENT_ACTOR (AMageWandMissile, Hexen, -1, 0)
PROP_SpeedFixed (184)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_CANNOTPUSH|MF2_NODMGTHRUST|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (S_MWAND_MISSILE)
PROP_DeathState (S_MWANDPUFF)
END_DEFAULTS
FState AMageWandMissile::States[] =
{
#define S_MWAND_MISSILE 0
S_BRIGHT (MWND, 'C', 4, NULL, &States[S_MWAND_MISSILE+1]),
S_BRIGHT (MWND, 'D', 4, NULL, &States[S_MWAND_MISSILE]),
#define S_MWANDPUFF (S_MWAND_MISSILE+2)
S_BRIGHT (MWND, 'E', 4, NULL, &States[S_MWANDPUFF+1]),
S_BRIGHT (MWND, 'F', 3, NULL, &States[S_MWANDPUFF+2]),
S_BRIGHT (MWND, 'G', 4, NULL, &States[S_MWANDPUFF+3]),
S_BRIGHT (MWND, 'H', 3, NULL, &States[S_MWANDPUFF+4]),
S_BRIGHT (MWND, 'I', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Blue mana
IMPLEMENT_ACTOR (AMana1, Hexen, 122, 11)
PROP_SpawnHealth (10)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMana1::States[] =
{
S_BRIGHT (MAN1, 'A', 4, NULL, &States[1]),
S_BRIGHT (MAN1, 'B', 4, NULL, &States[2]),
S_BRIGHT (MAN1, 'C', 4, NULL, &States[3]),
S_BRIGHT (MAN1, 'D', 4, NULL, &States[4]),
S_BRIGHT (MAN1, 'E', 4, NULL, &States[5]),
S_BRIGHT (MAN1, 'F', 4, NULL, &States[6]),
S_BRIGHT (MAN1, 'G', 4, NULL, &States[7]),
S_BRIGHT (MAN1, 'H', 4, NULL, &States[8]),
S_BRIGHT (MAN1, 'I', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Green mana
IMPLEMENT_ACTOR (AMana2, Hexen, 124, 12)
PROP_SpawnHealth (10)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMana2::States[] =
{
S_BRIGHT (MAN2, 'A', 4, NULL, &States[1]),
S_BRIGHT (MAN2, 'B', 4, NULL, &States[2]),
S_BRIGHT (MAN2, 'C', 4, NULL, &States[3]),
S_BRIGHT (MAN2, 'D', 4, NULL, &States[4]),
S_BRIGHT (MAN2, 'E', 4, NULL, &States[5]),
S_BRIGHT (MAN2, 'F', 4, NULL, &States[6]),
S_BRIGHT (MAN2, 'G', 4, NULL, &States[7]),
S_BRIGHT (MAN2, 'H', 4, NULL, &States[8]),
S_BRIGHT (MAN2, 'I', 4, NULL, &States[9]),
S_BRIGHT (MAN2, 'J', 4, NULL, &States[10]),
S_BRIGHT (MAN2, 'K', 4, NULL, &States[11]),
S_BRIGHT (MAN2, 'L', 4, NULL, &States[12]),
S_BRIGHT (MAN2, 'M', 4, NULL, &States[13]),
S_BRIGHT (MAN2, 'N', 4, NULL, &States[14]),
S_BRIGHT (MAN2, 'O', 4, NULL, &States[15]),
S_BRIGHT (MAN2, 'P', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Combined mana
IMPLEMENT_ACTOR (AMana3, Hexen, 8004, 75)
PROP_SpawnHealth (20)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AMana3::States[] =
{
S_BRIGHT (MAN3, 'A', 4, NULL, &States[1]),
S_BRIGHT (MAN3, 'B', 4, NULL, &States[2]),
S_BRIGHT (MAN3, 'C', 4, NULL, &States[3]),
S_BRIGHT (MAN3, 'D', 4, NULL, &States[4]),
S_BRIGHT (MAN3, 'E', 4, NULL, &States[5]),
S_BRIGHT (MAN3, 'F', 4, NULL, &States[6]),
S_BRIGHT (MAN3, 'G', 4, NULL, &States[7]),
S_BRIGHT (MAN3, 'H', 4, NULL, &States[8]),
S_BRIGHT (MAN3, 'I', 4, NULL, &States[9]),
S_BRIGHT (MAN3, 'J', 4, NULL, &States[10]),
S_BRIGHT (MAN3, 'K', 4, NULL, &States[11]),
S_BRIGHT (MAN3, 'L', 4, NULL, &States[12]),
S_BRIGHT (MAN3, 'M', 4, NULL, &States[13]),
S_BRIGHT (MAN3, 'N', 4, NULL, &States[14]),
S_BRIGHT (MAN3, 'O', 4, NULL, &States[15]),
S_BRIGHT (MAN3, 'P', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Krater of might artifact
IMPLEMENT_ACTOR (AArtiBoostMana, Hexen, 8003, 26)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiBoostMana::States[] =
{
S_BRIGHT (BMAN, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Snout puff
IMPLEMENT_ACTOR (ASnoutPuff, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState ASnoutPuff::States[] =
{
S_NORMAL1(FHFX, 'S', 4, NULL, &States[1]),
S_NORMAL1(FHFX, 'T', 4, NULL, &States[2]),
S_NORMAL1(FHFX, 'U', 4, NULL, &States[3]),
S_NORMAL1(FHFX, 'V', 4, NULL, &States[4]),
S_NORMAL1(FHFX, 'W', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== The weapon used by players morphed into a pig.
IMPLEMENT_ACTOR (ASnout, Hexen, -1, 0)
END_DEFAULTS
FState ASnout::States[] =
{
#define S_SNOUTREADY 0
S_NORMAL1(WPIG, 'A', 1, A_WeaponReady, &States[S_SNOUTREADY]),
#define S_SNOUTDOWN 1
S_NORMAL1(WPIG, 'A', 1, A_Lower , &States[S_SNOUTDOWN]),
#define S_SNOUTUP 2
S_NORMAL1(WPIG, 'A', 1, A_Raise , &States[S_SNOUTUP]),
#define S_SNOUTATK 3
S_NORMAL1(WPIG, 'A', 4, A_SnoutAttack, &States[S_SNOUTATK+1]),
S_NORMAL1(WPIG, 'B', 8, A_SnoutAttack, &States[S_SNOUTREADY])
};
FWeaponInfo ASnout::WeaponInfo =
{
WIF_BLOODSPLATTER|WIF_DONTBOB, // DWORD flags;
am_noammo, // ammotype_t ammo;
0, // int ammouse;
0, // int ammogive;
&States[S_SNOUTUP], // FState *upstate;
&States[S_SNOUTDOWN], // FState *downstate;
&States[S_SNOUTREADY], // FState *readystate;
&States[S_SNOUTATK], // FState *atkstate;
&States[S_SNOUTATK], // FState *holdatkstate;
NULL, // FState *flashstate;
NULL, // const TypeInfo *droptype;
150, // int kickback;
10*FRACUNIT, // fixed_t yadjust;
NULL, // const char *upsound;
NULL, // const char *readysound;
ZDRUNTIME_CLASS(ASnout), // TypeInfo *type; // type of actor that represents this weapon
-1 // int minammo; // minimum ammo needed to switch to this weapon
};
------------------------------------------------------------------------
//========== Players hit by a porkalator shot are temporarily turned into this.
IMPLEMENT_ACTOR (APigPlayer, Hexen, -1, 0)
PROP_SpawnHealth (100)
PROP_ReactionTime (0)
PROP_PainChance (255)
PROP_RadiusFixed (16)
PROP_HeightFixed (24)
PROP_SpeedFixed (1)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOTDMATCH|MF_FRIENDLY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_Flags4 (MF4_NOSKIN)
PROP_SpawnState (S_PIGPLAY)
PROP_SeeState (S_PIGPLAY_RUN1)
PROP_PainState (S_PIGPLAY_PAIN)
PROP_MissileState (S_PIGPLAY_ATK1)
PROP_DeathState (S_PIGPLAY_DIE1)
PROP_IDeathState (S_PIGPLAY_ICE)
PROP_PainSound ("PigPain")
PROP_DeathSound ("PigDeath")
END_DEFAULTS
FState APigPlayer::States[] =
{
#define S_PIGPLAY 0
S_NORMAL1(PIGY, 'A', -1, NULL , NULL),
#define S_PIGPLAY_RUN1 (S_PIGPLAY+1)
S_NORMAL1(PIGY, 'A', 3, NULL , &States[S_PIGPLAY_RUN1+1]),
S_NORMAL1(PIGY, 'B', 3, NULL , &States[S_PIGPLAY_RUN1+2]),
S_NORMAL1(PIGY, 'C', 3, NULL , &States[S_PIGPLAY_RUN1+3]),
S_NORMAL1(PIGY, 'D', 3, NULL , &States[S_PIGPLAY_RUN1]),
#define S_PIGPLAY_PAIN (S_PIGPLAY_RUN1+4)
S_NORMAL1(PIGY, 'D', 4, A_PigPain , &States[S_PIGPLAY]),
#define S_PIGPLAY_ATK1 (S_PIGPLAY_PAIN+1)
S_NORMAL1(PIGY, 'A', 12, NULL , &States[S_PIGPLAY]),
#define S_PIGPLAY_DIE1 (S_PIGPLAY_ATK1+1)
S_NORMAL1(PIGY, 'E', 4, A_Scream , &States[S_PIGPLAY_DIE1+1]),
S_NORMAL1(PIGY, 'F', 3, A_NoBlocking , &States[S_PIGPLAY_DIE1+2]),
S_NORMAL1(PIGY, 'G', 4, NULL , &States[S_PIGPLAY_DIE1+3]),
S_NORMAL1(PIGY, 'H', 3, NULL , &States[S_PIGPLAY_DIE1+4]),
S_NORMAL1(PIGY, 'I', 4, NULL , &States[S_PIGPLAY_DIE1+5]),
S_NORMAL1(PIGY, 'J', 4, NULL , &States[S_PIGPLAY_DIE1+6]),
S_NORMAL1(PIGY, 'K', 4, NULL , &States[S_PIGPLAY_DIE1+7]),
S_NORMAL1(PIGY, 'L', -1, NULL , NULL),
#define S_PIGPLAY_ICE (S_PIGPLAY_DIE1+8)
S_NORMAL1(PIGY, 'M', 5, A_FreezeDeath, &States[S_PIGPLAY_ICE+1]),
S_NORMAL1(PIGY, 'M', 1, A_FreezeDeathChunks, &States[S_PIGPLAY_ICE+1]),
};
------------------------------------------------------------------------
//========== Monsters hit by a porkalator shot are temporarily turned into this.
IMPLEMENT_ACTOR (APig, Hexen, -1, 0)
PROP_SpawnHealth (25)
PROP_PainChance (128)
PROP_SpeedFixed (10)
PROP_RadiusFixed (12)
PROP_HeightFixed (22)
PROP_Mass (60)
PROP_Flags (MF_SOLID|MF_SHOOTABLE)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_DONTMORPH|MF3_ISMONSTER)
PROP_SpawnState (S_PIG_LOOK1)
PROP_SeeState (S_PIG_WALK1)
PROP_PainState (S_PIG_PAIN)
PROP_MeleeState (S_PIG_ATK1)
PROP_DeathState (S_PIG_DIE1)
PROP_IDeathState (S_PIG_ICE)
PROP_SeeSound ("PigActive1")
PROP_PainSound ("PigPain")
PROP_DeathSound ("PigDeath")
PROP_ActiveSound ("PigActive1")
END_DEFAULTS
FState APig::States[] =
{
#define S_PIG_LOOK1 0
S_NORMAL1(PIGY, 'B', 10, A_PigLook , &States[S_PIG_LOOK1]),
#define S_PIG_WALK1 (S_PIG_LOOK1+1)
S_NORMAL1(PIGY, 'A', 3, A_PigChase , &States[S_PIG_WALK1+1]),
S_NORMAL1(PIGY, 'B', 3, A_PigChase , &States[S_PIG_WALK1+2]),
S_NORMAL1(PIGY, 'C', 3, A_PigChase , &States[S_PIG_WALK1+3]),
S_NORMAL1(PIGY, 'D', 3, A_PigChase , &States[S_PIG_WALK1]),
#define S_PIG_PAIN (S_PIG_WALK1+4)
S_NORMAL1(PIGY, 'D', 4, A_PigPain , &States[S_PIG_WALK1]),
#define S_PIG_ATK1 (S_PIG_PAIN+1)
S_NORMAL1(PIGY, 'A', 5, A_FaceTarget , &States[S_PIG_ATK1+1]),
S_NORMAL1(PIGY, 'A', 10, A_PigAttack , &States[S_PIG_WALK1]),
#define S_PIG_DIE1 (S_PIG_ATK1+2)
S_NORMAL1(PIGY, 'E', 4, A_Scream , &States[S_PIG_DIE1+1]),
S_NORMAL1(PIGY, 'F', 3, A_NoBlocking , &States[S_PIG_DIE1+2]),
S_NORMAL1(PIGY, 'G', 4, A_QueueCorpse, &States[S_PIG_DIE1+3]),
S_NORMAL1(PIGY, 'H', 3, NULL , &States[S_PIG_DIE1+4]),
S_NORMAL1(PIGY, 'I', 4, NULL , &States[S_PIG_DIE1+5]),
S_NORMAL1(PIGY, 'J', 4, NULL , &States[S_PIG_DIE1+6]),
S_NORMAL1(PIGY, 'K', 4, NULL , &States[S_PIG_DIE1+7]),
S_NORMAL1(PIGY, 'L', -1, NULL , NULL),
#define S_PIG_ICE (S_PIG_DIE1+8)
S_NORMAL1(PIGY, 'M', 5, A_FreezeDeath, &States[S_PIG_ICE+1]),
S_NORMAL1(PIGY, 'M', 1, A_FreezeDeathChunks, &States[S_PIG_ICE+1]),
};
------------------------------------------------------------------------
//========== PuzzleItems are special inventory items which act like keys that get removed once they have been used.
IMPLEMENT_STATELESS_ACTOR (APuzzleItem, Any, -1, 0)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_PickupSound ("misc/i_pkup")
END_DEFAULTS
------------------------------------------------------------------------
//========== Yorick's skull. After obtaining this artifact, the player must find the headless statue onto which it fits.
IMPLEMENT_ACTOR (APuzzSkull, Hexen, 9002, 76)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzSkull::States[] =
{
S_NORMAL1 (ASKU, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Heart of D'Sparil
IMPLEMENT_ACTOR (APuzzGemBig, Hexen, 9003, 77)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemBig::States[] =
{
S_NORMAL1 (ABGM, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Red Gem (Ruby Planet)
IMPLEMENT_ACTOR (APuzzGemRed, Hexen, 9004, 78)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemRed::States[] =
{
S_NORMAL1 (AGMR, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Green Gem 1 (Emerald Planet)
IMPLEMENT_ACTOR (APuzzGemGreen1, Hexen, 9005, 79)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemGreen1::States[] =
{
S_NORMAL1 (AGMG, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Green Gem 2 (Emerald Planet)
IMPLEMENT_ACTOR (APuzzGemGreen2, Hexen, 9009, 80)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemGreen2::States[] =
{
S_NORMAL1 (AGG2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Blue Gem 1 (Sapphire Planet)
IMPLEMENT_ACTOR (APuzzGemBlue1, Hexen, 9006, 81)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemBlue1::States[] =
{
S_NORMAL1 (AGMB, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Blue Gem 2 (Sapphire Planet)
IMPLEMENT_ACTOR (APuzzGemBlue2, Hexen, 9010, 82)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGemBlue2::States[] =
{
S_NORMAL1 (AGB2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Book 1 (Daemon Codex)
IMPLEMENT_ACTOR (APuzzBook1, Hexen, 9007, 83)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzBook1::States[] =
{
S_NORMAL1 (ABK1, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Book 2 (Liber Oscura)
IMPLEMENT_ACTOR (APuzzBook2, Hexen, 9008, 84)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzBook2::States[] =
{
S_NORMAL1 (ABK2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Flame Mask
IMPLEMENT_ACTOR (APuzzFlameMask, Hexen, 9014, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzFlameMask::States[] =
{
S_NORMAL1 (ASK2, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Fighter Weapon (Glaive Seal)
IMPLEMENT_ACTOR (APuzzFWeapon, Hexen, 9015, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzFWeapon::States[] =
{
S_NORMAL1 (AFWP, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Cleric Weapon (Holy Relic)
IMPLEMENT_ACTOR (APuzzCWeapon, Hexen, 9016, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzCWeapon::States[] =
{
S_NORMAL1 (ACWP, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Mage Weapon (Sigil of the Magus)
IMPLEMENT_ACTOR (APuzzMWeapon, Hexen, 9017, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzMWeapon::States[] =
{
S_NORMAL1 (AMWP, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Clock Gear 1
IMPLEMENT_ACTOR (APuzzGear1, Hexen, 9018, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGear1::States[] =
{
S_BRIGHT (AGER, 'A', 4, NULL, &States[1]),
S_BRIGHT (AGER, 'B', 4, NULL, &States[2]),
S_BRIGHT (AGER, 'C', 4, NULL, &States[3]),
S_BRIGHT (AGER, 'D', 4, NULL, &States[4]),
S_BRIGHT (AGER, 'E', 4, NULL, &States[5]),
S_BRIGHT (AGER, 'F', 4, NULL, &States[6]),
S_BRIGHT (AGER, 'G', 4, NULL, &States[7]),
S_BRIGHT (AGER, 'H', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Clock Gear 2
IMPLEMENT_ACTOR (APuzzGear2, Hexen, 9019, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGear2::States[] =
{
S_BRIGHT (AGR2, 'A', 4, NULL, &States[1]),
S_BRIGHT (AGR2, 'B', 4, NULL, &States[2]),
S_BRIGHT (AGR2, 'C', 4, NULL, &States[3]),
S_BRIGHT (AGR2, 'D', 4, NULL, &States[4]),
S_BRIGHT (AGR2, 'E', 4, NULL, &States[5]),
S_BRIGHT (AGR2, 'F', 4, NULL, &States[6]),
S_BRIGHT (AGR2, 'G', 4, NULL, &States[7]),
S_BRIGHT (AGR2, 'H', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Clock Gear 3
IMPLEMENT_ACTOR (APuzzGear3, Hexen, 9020, 0)
PROP_SpawnState (0)
END_DEFAULTS
FState APuzzGear3::States[] =
{
S_BRIGHT (AGR3, 'A', 4, NULL, &States[1]),
S_BRIGHT (AGR3, 'B', 4, NULL, &States[2]),
S_BRIGHT (AGR3, 'C', 4, NULL, &States[3]),
S_BRIGHT (AGR3, 'D', 4, NULL, &States[4]),
S_BRIGHT (AGR3, 'E', 4, NULL, &States[5]),
S_BRIGHT (AGR3, 'F', 4, NULL, &States[6]),
S_BRIGHT (AGR3, 'G', 4, NULL, &States[7]),
S_BRIGHT (AGR3, 'H', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Clock Gear 4
FState APuzzGear4::States[] =
{
S_BRIGHT (AGR4, 'A', 4, NULL, &States[1]),
S_BRIGHT (AGR4, 'B', 4, NULL, &States[2]),
S_BRIGHT (AGR4, 'C', 4, NULL, &States[3]),
S_BRIGHT (AGR4, 'D', 4, NULL, &States[4]),
S_BRIGHT (AGR4, 'E', 4, NULL, &States[5]),
S_BRIGHT (AGR4, 'F', 4, NULL, &States[6]),
S_BRIGHT (AGR4, 'G', 4, NULL, &States[7]),
S_BRIGHT (AGR4, 'H', 4, NULL, &States[0]),
};
IMPLEMENT_ACTOR (APuzzGear4, Hexen, 9021, 0)
PROP_SpawnState (0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Fire Ball (intended to be spawned through ACS)
IMPLEMENT_ACTOR (AFireBall, Hexen, -1, 10)
PROP_SpeedFixed (2)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_Damage (4)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FIREBALL1_1)
PROP_DeathState (S_FIREBALL1_X1)
PROP_DeathSound ("Fireball")
END_DEFAULTS
FState AFireBall::States[] =
{
#define S_FIREBALL1_1 0
S_BRIGHT (FBL1, 'A', 4, NULL, &States[S_FIREBALL1_1+1]),
S_BRIGHT (FBL1, 'B', 4, NULL, &States[S_FIREBALL1_1]),
#define S_FIREBALL1_X1 (S_FIREBALL1_1+2)
S_BRIGHT (XPL1, 'A', 4, NULL, &States[S_FIREBALL1_X1+1]),
S_BRIGHT (XPL1, 'B', 4, NULL, &States[S_FIREBALL1_X1+2]),
S_BRIGHT (XPL1, 'C', 4, NULL, &States[S_FIREBALL1_X1+3]),
S_BRIGHT (XPL1, 'D', 4, NULL, &States[S_FIREBALL1_X1+4]),
S_BRIGHT (XPL1, 'E', 4, NULL, &States[S_FIREBALL1_X1+5]),
S_BRIGHT (XPL1, 'F', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Arrow (intended to be spawned through ACS)
IMPLEMENT_ACTOR (AArrow, Hexen, -1, 50)
PROP_SpeedFixed (6)
PROP_RadiusFixed (8)
PROP_HeightFixed (4)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_ARROW_1)
PROP_DeathState (S_ARROW_X1)
END_DEFAULTS
FState AArrow::States[] =
{
#define S_ARROW_1 0
S_NORMAL1(ARRW, 'A', -1, NULL, NULL),
#define S_ARROW_X1 (S_ARROW_1+1)
S_NORMAL1(ARRW, 'A', 1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Dart (intended to be spawned through ACS)
IMPLEMENT_ACTOR (ADart, Hexen, -1, 51)
PROP_SpeedFixed (6)
PROP_RadiusFixed (8)
PROP_HeightFixed (4)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_DART_1)
PROP_DeathState (S_DART_X1)
END_DEFAULTS
FState ADart::States[] =
{
#define S_DART_1 0
S_NORMAL1(DART, 'A', -1, NULL, NULL),
#define S_DART_X1 (S_DART_1+1)
S_NORMAL1(DART, 'A', 1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Poisonous Dart (intended to be spawned through ACS)
IMPLEMENT_STATELESS_ACTOR (APoisonDart, Hexen, -1, 52)
END_DEFAULTS
------------------------------------------------------------------------
//========== Ripper Ball (intended to be spawned through ACS)
IMPLEMENT_ACTOR (ARipperBall, Hexen, -1, 53)
PROP_SpeedFixed (6)
PROP_RadiusFixed (8)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP)
PROP_SpawnState (S_RIPPERBALL_1)
PROP_DeathState (S_RIPPERBALL_X1)
END_DEFAULTS
FState ARipperBall::States[] =
{
#define S_RIPPERBALL_1 0
S_NORMAL1 (RIPP, 'A', 3, NULL, &States[S_RIPPERBALL_1+1]),
S_NORMAL1 (RIPP, 'B', 3, NULL, &States[S_RIPPERBALL_1+2]),
S_NORMAL1 (RIPP, 'C', 3, NULL, &States[S_RIPPERBALL_1]),
#define S_RIPPERBALL_X1 (S_RIPPERBALL_1+3)
S_BRIGHT (CFCF, 'Q', 4, NULL, &States[S_RIPPERBALL_X1+1]),
S_BRIGHT (CFCF, 'R', 3, NULL, &States[S_RIPPERBALL_X1+2]),
S_BRIGHT (CFCF, 'S', 4, NULL, &States[S_RIPPERBALL_X1+3]),
S_BRIGHT (CFCF, 'T', 3, NULL, &States[S_RIPPERBALL_X1+4]),
S_BRIGHT (CFCF, 'U', 4, NULL, &States[S_RIPPERBALL_X1+5]),
S_BRIGHT (CFCF, 'V', 3, NULL, &States[S_RIPPERBALL_X1+6]),
S_BRIGHT (CFCF, 'W', 4, NULL, &States[S_RIPPERBALL_X1+7]),
S_BRIGHT (CFCF, 'X', 3, NULL, &States[S_RIPPERBALL_X1+8]),
S_BRIGHT (CFCF, 'Y', 4, NULL, &States[S_RIPPERBALL_X1+9]),
S_BRIGHT (CFCF, 'Z', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Projectile Blade (intended to be spawned through ACS)
IMPLEMENT_ACTOR (AProjectileBlade, Hexen, -1, 64)
PROP_SpeedFixed (6)
PROP_RadiusFixed (6)
PROP_HeightFixed (6)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_PRJ_BLADE1)
PROP_DeathState (S_PRJ_BLADE_X1)
END_DEFAULTS
FState AProjectileBlade::States[] =
{
#define S_PRJ_BLADE1 0
S_NORMAL1 (BLAD, 'A', -1, NULL, NULL),
#define S_PRJ_BLADE_X1 (S_PRJ_BLADE1+1)
S_NORMAL1 (BLAD, 'A', 1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Stalkers are 'underwater' serpents in Hexen.
IMPLEMENT_ACTOR (ASerpent, Hexen, 121, 6)
PROP_SpawnHealth (90)
PROP_PainChance (96)
PROP_SpeedFixed (12)
PROP_RadiusFixed (32)
PROP_HeightFixed (70)
PROP_MassLong (0x7fffffff)
PROP_Flags (MF_SOLID|MF_NOBLOOD|MF_COUNTKILL)
PROP_Flags2 (MF2_PASSMOBJ|MF2_MCROSS|MF2_CANTLEAVEFLOORPIC|MF2_NONSHOOTABLE)
PROP_Flags3 (MF3_STAYMORPHED|MF3_DONTBLAST|MF3_NOTELEOTHER)
PROP_RenderFlags (RF_INVISIBLE)
PROP_SpawnState (S_SERPENT_LOOK1)
PROP_SeeState (S_SERPENT_SWIM1)
PROP_PainState (S_SERPENT_PAIN1)
PROP_MeleeState (S_SERPENT_SURFACE1)
PROP_DeathState (S_SERPENT_DIE1)
PROP_XDeathState (S_SERPENT_XDIE1)
PROP_IDeathState (S_SERPENT_ICE)
PROP_SeeSound ("SerpentSight")
PROP_AttackSound ("SerpentAttack")
PROP_PainSound ("SerpentPain")
PROP_DeathSound ("SerpentDeath")
END_DEFAULTS
FState ASerpent::States[] =
{
#define S_SERPENT_LOOK1 0
S_NORMAL1 (SSPT, 'H', 10, A_Look , &States[S_SERPENT_LOOK1]),
#define S_SERPENT_SWIM1 (S_SERPENT_LOOK1+1)
S_NORMAL1 (SSPT, 'H', 1, A_SerpentChase , &States[S_SERPENT_SWIM1+1]),
S_NORMAL1 (SSPT, 'H', 1, A_SerpentChase , &States[S_SERPENT_SWIM1+2]),
S_NORMAL1 (SSPT, 'H', 2, A_SerpentHumpDecide , &States[S_SERPENT_SWIM1]),
#define S_SERPENT_PAIN1 (S_SERPENT_SWIM1+3)
S_NORMAL1 (SSPT, 'L', 5, NULL , &States[S_SERPENT_PAIN1+1]),
S_NORMAL1 (SSPT, 'L', 5, A_Pain , &States[S_SERPENT_PAIN1+2]),
S_NORMAL1 (SSDV, 'A', 4, NULL , &States[S_SERPENT_PAIN1+3]),
S_NORMAL1 (SSDV, 'B', 4, NULL , &States[S_SERPENT_PAIN1+4]),
S_NORMAL1 (SSDV, 'C', 4, NULL , &States[S_SERPENT_PAIN1+5]),
S_NORMAL1 (SSDV, 'D', 4, A_UnSetShootable , &States[S_SERPENT_PAIN1+6]),
S_NORMAL1 (SSDV, 'E', 3, A_SerpentDiveSound , &States[S_SERPENT_PAIN1+7]),
S_NORMAL1 (SSDV, 'F', 3, NULL , &States[S_SERPENT_PAIN1+8]),
S_NORMAL1 (SSDV, 'G', 4, NULL , &States[S_SERPENT_PAIN1+9]),
S_NORMAL1 (SSDV, 'H', 4, NULL , &States[S_SERPENT_PAIN1+10]),
S_NORMAL1 (SSDV, 'I', 3, NULL , &States[S_SERPENT_PAIN1+11]),
S_NORMAL1 (SSDV, 'J', 3, A_SerpentHide , &States[S_SERPENT_SWIM1]),
#define S_SERPENT_SURFACE1 (S_SERPENT_PAIN1+12)
S_NORMAL1 (SSPT, 'A', 1, A_UnHideThing , &States[S_SERPENT_SURFACE1+1]),
S_NORMAL1 (SSPT, 'A', 1, A_SerpentBirthScream, &States[S_SERPENT_SURFACE1+2]),
S_NORMAL1 (SSPT, 'B', 3, A_SetShootable , &States[S_SERPENT_SURFACE1+3]),
S_NORMAL1 (SSPT, 'C', 3, NULL , &States[S_SERPENT_SURFACE1+4]),
S_NORMAL1 (SSPT, 'D', 4, A_SerpentCheckForAttack, &States[S_SERPENT_PAIN1+2]),
#define S_SERPENT_DIE1 (S_SERPENT_SURFACE1+5)
S_NORMAL1 (SSPT, 'O', 4, NULL , &States[S_SERPENT_DIE1+1]),
S_NORMAL1 (SSPT, 'P', 4, A_Scream , &States[S_SERPENT_DIE1+2]),
S_NORMAL1 (SSPT, 'Q', 4, A_NoBlocking , &States[S_SERPENT_DIE1+3]),
S_NORMAL1 (SSPT, 'R', 4, NULL , &States[S_SERPENT_DIE1+4]),
S_NORMAL1 (SSPT, 'S', 4, NULL , &States[S_SERPENT_DIE1+5]),
S_NORMAL1 (SSPT, 'T', 4, NULL , &States[S_SERPENT_DIE1+6]),
S_NORMAL1 (SSPT, 'U', 4, NULL , &States[S_SERPENT_DIE1+7]),
S_NORMAL1 (SSPT, 'V', 4, NULL , &States[S_SERPENT_DIE1+8]),
S_NORMAL1 (SSPT, 'W', 4, NULL , &States[S_SERPENT_DIE1+9]),
S_NORMAL1 (SSPT, 'X', 4, NULL , &States[S_SERPENT_DIE1+10]),
S_NORMAL1 (SSPT, 'Y', 4, NULL , &States[S_SERPENT_DIE1+11]),
S_NORMAL1 (SSPT, 'Z', 4, NULL , NULL),
#define S_SERPENT_XDIE1 (S_SERPENT_DIE1+12)
S_NORMAL1 (SSXD, 'A', 4, NULL , &States[S_SERPENT_XDIE1+1]),
S_NORMAL1 (SSXD, 'B', 4, A_SerpentHeadPop , &States[S_SERPENT_XDIE1+2]),
S_NORMAL1 (SSXD, 'C', 4, A_NoBlocking , &States[S_SERPENT_XDIE1+3]),
S_NORMAL1 (SSXD, 'D', 4, NULL , &States[S_SERPENT_XDIE1+4]),
S_NORMAL1 (SSXD, 'E', 4, NULL , &States[S_SERPENT_XDIE1+5]),
S_NORMAL1 (SSXD, 'F', 3, NULL , &States[S_SERPENT_XDIE1+6]),
S_NORMAL1 (SSXD, 'G', 3, NULL , &States[S_SERPENT_XDIE1+7]),
S_NORMAL1 (SSXD, 'H', 3, A_SerpentSpawnGibs , NULL),
#define S_SERPENT_WALK1 (S_SERPENT_XDIE1+8)
S_NORMAL1 (SSPT, 'I', 5, A_SerpentWalk , &States[S_SERPENT_WALK1+1]),
S_NORMAL1 (SSPT, 'J', 5, A_SerpentWalk , &States[S_SERPENT_WALK1+2]),
S_NORMAL1 (SSPT, 'I', 5, A_SerpentWalk , &States[S_SERPENT_WALK1+3]),
S_NORMAL1 (SSPT, 'J', 5, A_SerpentCheckForAttack, &States[S_SERPENT_PAIN1+2]),
#define S_SERPENT_HUMP1 (S_SERPENT_WALK1+4)
S_NORMAL1 (SSPT, 'H', 3, A_SerpentUnHide , &States[S_SERPENT_HUMP1+1]),
S_NORMAL1 (SSPT, 'E', 3, A_SerpentRaiseHump , &States[S_SERPENT_HUMP1+2]),
S_NORMAL1 (SSPT, 'F', 3, A_SerpentRaiseHump , &States[S_SERPENT_HUMP1+3]),
S_NORMAL1 (SSPT, 'G', 3, A_SerpentRaiseHump , &States[S_SERPENT_HUMP1+4]),
S_NORMAL1 (SSPT, 'E', 3, A_SerpentRaiseHump , &States[S_SERPENT_HUMP1+5]),
S_NORMAL1 (SSPT, 'F', 3, A_SerpentRaiseHump , &States[S_SERPENT_HUMP1+6]),
S_NORMAL1 (SSPT, 'G', 3, NULL , &States[S_SERPENT_HUMP1+7]),
S_NORMAL1 (SSPT, 'E', 3, NULL , &States[S_SERPENT_HUMP1+8]),
S_NORMAL1 (SSPT, 'F', 3, NULL , &States[S_SERPENT_HUMP1+9]),
S_NORMAL1 (SSPT, 'G', 3, A_SerpentLowerHump , &States[S_SERPENT_HUMP1+10]),
S_NORMAL1 (SSPT, 'E', 3, A_SerpentLowerHump , &States[S_SERPENT_HUMP1+11]),
S_NORMAL1 (SSPT, 'F', 3, A_SerpentLowerHump , &States[S_SERPENT_HUMP1+12]),
S_NORMAL1 (SSPT, 'G', 3, A_SerpentLowerHump , &States[S_SERPENT_HUMP1+13]),
S_NORMAL1 (SSPT, 'E', 3, A_SerpentLowerHump , &States[S_SERPENT_HUMP1+14]),
S_NORMAL1 (SSPT, 'F', 3, A_SerpentHide , &States[S_SERPENT_SWIM1]),
#define S_SERPENT_MELEE1 (S_SERPENT_HUMP1+15)
S_NORMAL1 (SSPT, 'N', 5, A_SerpentMeleeAttack, &ASerpent::States[S_SERPENT_PAIN1+2]),
#define S_SERPENT_MISSILE1 (S_SERPENT_MELEE1+1)
S_NORMAL1 (SSPT, 'N', 5, A_SerpentMissileAttack, &ASerpent::States[S_SERPENT_PAIN1+2]),
#define S_SERPENT_ATK1 (S_SERPENT_MISSILE1+1)
S_NORMAL1 (SSPT, 'K', 6, A_FaceTarget , &States[S_SERPENT_ATK1+1]),
S_NORMAL1 (SSPT, 'L', 5, A_SerpentChooseAttack, &States[S_SERPENT_MELEE1]),
#define S_SERPENT_ICE (S_SERPENT_ATK1+2)
S_NORMAL1 (SSPT, '[', 5, A_FreezeDeath , &States[S_SERPENT_ICE+1]),
S_NORMAL1 (SSPT, '[', 1, A_FreezeDeathChunks , &States[S_SERPENT_ICE+1]),
};
------------------------------------------------------------------------
//========== Stalker variants that can throw a slimy ball from range.
IMPLEMENT_STATELESS_ACTOR (ASerpentLeader, Hexen, 120, 7)
PROP_Mass (200)
END_DEFAULTS
------------------------------------------------------------------------
//========== The slimy green ball of acid thrown by a stalker leader.
IMPLEMENT_ACTOR (ASerpentFX, Hexen, -1, 0)
PROP_SpeedFixed (15)
PROP_RadiusFixed (8)
PROP_HeightFixed (10)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_SERPENT_FX1)
PROP_DeathState (S_SERPENT_FX_X1)
PROP_DeathSound ("SerpentFXHit")
END_DEFAULTS
FState ASerpentFX::States[] =
{
#define S_SERPENT_FX1 0
// [RH] This 0-length state was added so that the looping sound can start
// playing as soon as possible, because action functions are not called
// when an actor is spawned. (Should I change that?)
S_BRIGHT (SSFX, 'A', 0, NULL , &States[S_SERPENT_FX1+1]),
S_BRIGHT (SSFX, 'A', 3, A_SerpentFXSound , &States[S_SERPENT_FX1+2]),
S_BRIGHT (SSFX, 'B', 3, NULL , &States[S_SERPENT_FX1+3]),
S_BRIGHT (SSFX, 'A', 3, NULL , &States[S_SERPENT_FX1+4]),
S_BRIGHT (SSFX, 'B', 3, NULL , &States[S_SERPENT_FX1+1]),
#define S_SERPENT_FX_X1 (S_SERPENT_FX1+5)
S_BRIGHT (SSFX, 'C', 4, A_StopSerpentFXSound , &States[S_SERPENT_FX_X1+1]),
S_BRIGHT (SSFX, 'D', 4, NULL , &States[S_SERPENT_FX_X1+2]),
S_BRIGHT (SSFX, 'E', 4, NULL , &States[S_SERPENT_FX_X1+3]),
S_BRIGHT (SSFX, 'F', 4, NULL , &States[S_SERPENT_FX_X1+4]),
S_BRIGHT (SSFX, 'G', 4, NULL , &States[S_SERPENT_FX_X1+5]),
S_BRIGHT (SSFX, 'H', 4, NULL , NULL),
};
------------------------------------------------------------------------
//========== The head of a stalker or a stalker leader. It is spawned when gibbed.
IMPLEMENT_ACTOR (ASerpentHead, Hexen, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (10)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags2 (MF2_LOGRAV)
PROP_SpawnState (S_SERPENT_HEAD1)
PROP_DeathState (S_SERPENT_HEAD_X1)
END_DEFAULTS
FState ASerpentHead::States[] =
{
#define S_SERPENT_HEAD1 0
S_NORMAL1 (SSXD, 'I', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+1]),
S_NORMAL1 (SSXD, 'J', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+2]),
S_NORMAL1 (SSXD, 'K', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+3]),
S_NORMAL1 (SSXD, 'L', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+4]),
S_NORMAL1 (SSXD, 'M', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+5]),
S_NORMAL1 (SSXD, 'N', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+6]),
S_NORMAL1 (SSXD, 'O', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1+7]),
S_NORMAL1 (SSXD, 'P', 4, A_SerpentHeadCheck , &States[S_SERPENT_HEAD1]),
#define S_SERPENT_HEAD_X1 (S_SERPENT_HEAD1+8)
S_NORMAL1 (SSXD, 'S', -1, NULL , &States[S_SERPENT_HEAD_X1]),
};
------------------------------------------------------------------------
//========== A meat chunk from a stalker or a stalker leader. It is spawned when gibbed.
IMPLEMENT_ACTOR (ASerpentGib1, Hexen, -1, 0)
PROP_RadiusFixed (3)
PROP_HeightFixed (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_SpawnState (S_SERPENT_GIB1_1)
END_DEFAULTS
FState ASerpentGib1::States[] =
{
#define S_SERPENT_GIB1_1 0
S_NORMAL1 (SSXD, 'Q', 6, NULL , &States[S_SERPENT_GIB1_1+1]),
S_NORMAL1 (SSXD, 'Q', 6, A_FloatGib , &States[S_SERPENT_GIB1_1+2]),
S_NORMAL1 (SSXD, 'Q', 8, A_FloatGib , &States[S_SERPENT_GIB1_1+3]),
S_NORMAL1 (SSXD, 'Q', 8, A_FloatGib , &States[S_SERPENT_GIB1_1+4]),
S_NORMAL1 (SSXD, 'Q', 12, A_FloatGib , &States[S_SERPENT_GIB1_1+5]),
S_NORMAL1 (SSXD, 'Q', 12, A_FloatGib , &States[S_SERPENT_GIB1_1+6]),
S_NORMAL1 (SSXD, 'Q', 232, A_DelayGib , &States[S_SERPENT_GIB1_1+7]),
S_NORMAL1 (SSXD, 'Q', 12, A_SinkGib , &States[S_SERPENT_GIB1_1+8]),
S_NORMAL1 (SSXD, 'Q', 12, A_SinkGib , &States[S_SERPENT_GIB1_1+9]),
S_NORMAL1 (SSXD, 'Q', 8, A_SinkGib , &States[S_SERPENT_GIB1_1+10]),
S_NORMAL1 (SSXD, 'Q', 8, A_SinkGib , &States[S_SERPENT_GIB1_1+11]),
S_NORMAL1 (SSXD, 'Q', 8, A_SinkGib , NULL),
};
------------------------------------------------------------------------
//========== A stalker or a stalker leader arm. It is spawned when gibbed.
IMPLEMENT_ACTOR (ASerpentGib2, Hexen, -1, 0)
PROP_RadiusFixed (3)
PROP_HeightFixed (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_SpawnState (S_SERPENT_GIB2_1)
END_DEFAULTS
FState ASerpentGib2::States[] =
{
#define S_SERPENT_GIB2_1 0
S_NORMAL1 (SSXD, 'R', 6, NULL , &States[S_SERPENT_GIB2_1+1]),
S_NORMAL1 (SSXD, 'R', 6, A_FloatGib , &States[S_SERPENT_GIB2_1+2]),
S_NORMAL1 (SSXD, 'R', 8, A_FloatGib , &States[S_SERPENT_GIB2_1+3]),
S_NORMAL1 (SSXD, 'R', 8, A_FloatGib , &States[S_SERPENT_GIB2_1+4]),
S_NORMAL1 (SSXD, 'R', 12, A_FloatGib , &States[S_SERPENT_GIB2_1+5]),
S_NORMAL1 (SSXD, 'R', 12, A_FloatGib , &States[S_SERPENT_GIB2_1+6]),
S_NORMAL1 (SSXD, 'R', 232, A_DelayGib , &States[S_SERPENT_GIB2_1+7]),
S_NORMAL1 (SSXD, 'R', 12, A_SinkGib , &States[S_SERPENT_GIB2_1+8]),
S_NORMAL1 (SSXD, 'R', 12, A_SinkGib , &States[S_SERPENT_GIB2_1+9]),
S_NORMAL1 (SSXD, 'R', 8, A_SinkGib , &States[S_SERPENT_GIB2_1+10]),
S_NORMAL1 (SSXD, 'R', 8, A_SinkGib , &States[S_SERPENT_GIB2_1+11]),
S_NORMAL1 (SSXD, 'R', 8, A_SinkGib , NULL),
};
------------------------------------------------------------------------
//========== A small meat chunk from a stalker or a stalker leader. It is spawned when gibbed.
IMPLEMENT_ACTOR (ASerpentGib3, Hexen, -1, 0)
PROP_RadiusFixed (3)
PROP_HeightFixed (3)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_SpawnState (S_SERPENT_GIB3_1)
END_DEFAULTS
FState ASerpentGib3::States[] =
{
#define S_SERPENT_GIB3_1 0
S_NORMAL1 (SSXD, 'T', 6, NULL , &States[S_SERPENT_GIB3_1+1]),
S_NORMAL1 (SSXD, 'T', 6, A_FloatGib , &States[S_SERPENT_GIB3_1+2]),
S_NORMAL1 (SSXD, 'T', 8, A_FloatGib , &States[S_SERPENT_GIB3_1+3]),
S_NORMAL1 (SSXD, 'T', 8, A_FloatGib , &States[S_SERPENT_GIB3_1+4]),
S_NORMAL1 (SSXD, 'T', 12, A_FloatGib , &States[S_SERPENT_GIB3_1+5]),
S_NORMAL1 (SSXD, 'T', 12, A_FloatGib , &States[S_SERPENT_GIB3_1+6]),
S_NORMAL1 (SSXD, 'T', 232, A_DelayGib , &States[S_SERPENT_GIB3_1+7]),
S_NORMAL1 (SSXD, 'T', 12, A_SinkGib , &States[S_SERPENT_GIB3_1+8]),
S_NORMAL1 (SSXD, 'T', 12, A_SinkGib , &States[S_SERPENT_GIB3_1+9]),
S_NORMAL1 (SSXD, 'T', 8, A_SinkGib , &States[S_SERPENT_GIB3_1+10]),
S_NORMAL1 (SSXD, 'T', 8, A_SinkGib , &States[S_SERPENT_GIB3_1+11]),
S_NORMAL1 (SSXD, 'T', 8, A_SinkGib , NULL),
};
------------------------------------------------------------------------
//========== Speed Boots Artifact
IMPLEMENT_ACTOR (AArtiSpeedBoots, Hexen, 8002, 13)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AArtiSpeedBoots::States[] =
{
S_BRIGHT (SPED, 'A', 3, NULL, &States[1]),
S_BRIGHT (SPED, 'B', 3, NULL, &States[2]),
S_BRIGHT (SPED, 'C', 3, NULL, &States[3]),
S_BRIGHT (SPED, 'D', 3, NULL, &States[4]),
S_BRIGHT (SPED, 'E', 3, NULL, &States[5]),
S_BRIGHT (SPED, 'F', 3, NULL, &States[6]),
S_BRIGHT (SPED, 'G', 3, NULL, &States[7]),
S_BRIGHT (SPED, 'H', 3, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Dirt clump (spawned by spike)
IMPLEMENT_ACTOR (ADirtClump, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
FState ADirtClump::States[] =
{
S_NORMAL1 (TSPK, 'C', 20, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Spike up
IMPLEMENT_STATELESS_ACTOR (AThrustFloorUp, Hexen, 10091, 104)
PROP_Flags (MF_SOLID)
PROP_Flags2 (MF2_NOTELEPORT|MF2_FLOORCLIP)
PROP_SpawnState (S_THRUSTINIT2)
END_DEFAULTS
------------------------------------------------------------------------
//========== Spike down
IMPLEMENT_STATELESS_ACTOR (AThrustFloorDown, Hexen, 10090, 105)
PROP_Flags2 (MF2_NOTELEPORT|MF2_FLOORCLIP)
PROP_RenderFlags (RF_INVISIBLE)
PROP_SpawnState (S_THRUSTINIT1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Dark Servant Artifact
IMPLEMENT_ACTOR (AArtiDarkServant, Hexen, 86, 16)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (S_ARTI_SUMMON)
PROP_PickupSound ("misc/p_pkup")
END_DEFAULTS
FState AArtiDarkServant::States[] =
{
#define S_ARTI_SUMMON 0
S_NORMAL1(SUMN, 'A', 350, NULL, &States[S_ARTI_SUMMON]),
};
------------------------------------------------------------------------
//========== Summoning Doll
IMPLEMENT_ACTOR (ASummoningDoll, Hexen, -1, 0)
PROP_SpeedFixed (20)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_SUMMON_FX1_1)
PROP_DeathState (S_SUMMON_FX2_1)
END_DEFAULTS
FState ASummoningDoll::States[] =
{
#define S_SUMMON_FX1_1 0
S_NORMAL1(SUMN, 'A', 4, NULL , &States[S_SUMMON_FX1_1]),
#define S_SUMMON_FX2_1 (S_SUMMON_FX1_1+1)
S_NORMAL1(SUMN, 'A', 4, NULL , &States[S_SUMMON_FX2_1+1]),
S_NORMAL1(SUMN, 'A', 4, NULL , &States[S_SUMMON_FX2_1+2]),
S_NORMAL1(SUMN, 'A', 4, A_Summon , NULL),
};
------------------------------------------------------------------------
//========== Minotaur Smoke
IMPLEMENT_ACTOR (AMinotaurSmoke, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AMinotaurSmoke::States[] =
{
S_NORMAL1(MNSM, 'A', 3, NULL, &States[1]),
S_NORMAL1(MNSM, 'B', 3, NULL, &States[2]),
S_NORMAL1(MNSM, 'C', 3, NULL, &States[3]),
S_NORMAL1(MNSM, 'D', 3, NULL, &States[4]),
S_NORMAL1(MNSM, 'E', 3, NULL, &States[5]),
S_NORMAL1(MNSM, 'F', 3, NULL, &States[6]),
S_NORMAL1(MNSM, 'G', 3, NULL, &States[7]),
S_NORMAL1(MNSM, 'H', 3, NULL, &States[8]),
S_NORMAL1(MNSM, 'I', 3, NULL, &States[9]),
S_NORMAL1(MNSM, 'J', 3, NULL, &States[10]),
S_NORMAL1(MNSM, 'K', 3, NULL, &States[11]),
S_NORMAL1(MNSM, 'L', 3, NULL, &States[12]),
S_NORMAL1(MNSM, 'M', 3, NULL, &States[13]),
S_NORMAL1(MNSM, 'N', 3, NULL, &States[14]),
S_NORMAL1(MNSM, 'O', 3, NULL, &States[15]),
S_NORMAL1(MNSM, 'P', 3, NULL, &States[16]),
S_NORMAL1(MNSM, 'Q', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Banishment device blast
IMPLEMENT_ACTOR (ATelOtherFX1, Any, -1, 0)
PROP_DamageLong (10001)
PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY|MF_NOBLOCKMAP)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags3 (MF3_BLOODLESSIMPACT)
PROP_RadiusFixed (16)
PROP_HeightFixed (16)
PROP_SpeedFixed (20)
PROP_SpawnState (S_TELO_FX1)
PROP_DeathState (S_TELO_FX_DONE)
END_DEFAULTS
FState ATelOtherFX1::States[] =
{
#define S_TELO_FX1 0
S_BRIGHT (TRNG, 'E', 5, NULL , &States[S_TELO_FX1+1]),
S_BRIGHT (TRNG, 'D', 4, NULL , &States[S_TELO_FX1+2]),
S_BRIGHT (TRNG, 'C', 3, A_TeloSpawnC , &States[S_TELO_FX1+3]),
S_BRIGHT (TRNG, 'B', 3, A_TeloSpawnB , &States[S_TELO_FX1+4]),
S_BRIGHT (TRNG, 'A', 3, A_TeloSpawnA , &States[S_TELO_FX1+5]),
S_BRIGHT (TRNG, 'B', 3, A_TeloSpawnB , &States[S_TELO_FX1+6]),
S_BRIGHT (TRNG, 'C', 3, A_TeloSpawnC , &States[S_TELO_FX1+7]),
S_BRIGHT (TRNG, 'D', 3, A_TeloSpawnD , &States[S_TELO_FX1+2]),
#define S_TELO_FX_DONE (S_TELO_FX1+8)
S_BRIGHT (TRNG, 'E', 3, NULL , NULL),
#define S_TELO_FX2 (S_TELO_FX_DONE+1)
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX2+1]),
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX2+2]),
S_BRIGHT (TRNG, 'D', 4, NULL , &States[S_TELO_FX2+3]),
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX2+4]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX2+5]),
S_BRIGHT (TRNG, 'A', 4, A_CheckTeleRing, &States[S_TELO_FX2+0]),
#define S_TELO_FX3 (S_TELO_FX2+6)
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX3+1]),
S_BRIGHT (TRNG, 'D', 4, NULL , &States[S_TELO_FX3+2]),
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX3+3]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX3+4]),
S_BRIGHT (TRNG, 'A', 4, NULL , &States[S_TELO_FX3+5]),
S_BRIGHT (TRNG, 'B', 4, A_CheckTeleRing, &States[S_TELO_FX3+0]),
#define S_TELO_FX4 (S_TELO_FX3+6)
S_BRIGHT (TRNG, 'D', 4, NULL , &States[S_TELO_FX4+1]),
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX4+2]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX4+3]),
S_BRIGHT (TRNG, 'A', 4, NULL , &States[S_TELO_FX4+4]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX4+5]),
S_BRIGHT (TRNG, 'C', 4, A_CheckTeleRing, &States[S_TELO_FX4+0]),
#define S_TELO_FX5 (S_TELO_FX4+6)
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX5+1]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX5+2]),
S_BRIGHT (TRNG, 'A', 4, NULL , &States[S_TELO_FX5+3]),
S_BRIGHT (TRNG, 'B', 4, NULL , &States[S_TELO_FX5+4]),
S_BRIGHT (TRNG, 'C', 4, NULL , &States[S_TELO_FX5+5]),
S_BRIGHT (TRNG, 'D', 4, A_CheckTeleRing, &States[S_TELO_FX5+0])
};
------------------------------------------------------------------------
//========== Banishment device blast
IMPLEMENT_STATELESS_ACTOR (ATelOtherFX2, Any, -1, 0)
PROP_SpeedFixed (16)
PROP_SpawnState (S_TELO_FX2)
END_DEFAULTS
------------------------------------------------------------------------
//========== Banishment device blast
IMPLEMENT_STATELESS_ACTOR (ATelOtherFX3, Any, -1, 0)
PROP_SpeedFixed (16)
PROP_SpawnState (S_TELO_FX3)
END_DEFAULTS
------------------------------------------------------------------------
//========== Banishment device blast
IMPLEMENT_STATELESS_ACTOR (ATelOtherFX4, Any, -1, 0)
PROP_SpeedFixed (16)
PROP_SpawnState (S_TELO_FX4)
END_DEFAULTS
------------------------------------------------------------------------
//========== Banishment device blast
IMPLEMENT_STATELESS_ACTOR (ATelOtherFX5, Any, -1, 0)
PROP_SpeedFixed (16)
PROP_SpawnState (S_TELO_FX5)
END_DEFAULTS
------------------------------------------------------------------------
//========== Banishment Device: teleports an enemy to a random deathmatch start.
IMPLEMENT_ACTOR (AArtiTeleportOther, Hexen, 10040, 17)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (S_ARTI_TELOTHER1)
PROP_PickupSound ("misc/p_pkup")
END_DEFAULTS
FState AArtiTeleportOther::States[] =
{
#define S_ARTI_TELOTHER1 0
S_NORMAL1(TELO, 'A', 5, NULL, &States[S_ARTI_TELOTHER1+1]),
S_NORMAL1(TELO, 'B', 5, NULL, &States[S_ARTI_TELOTHER1+2]),
S_NORMAL1(TELO, 'C', 5, NULL, &States[S_ARTI_TELOTHER1+3]),
S_NORMAL1(TELO, 'D', 5, NULL, &States[S_ARTI_TELOTHER1]),
};
------------------------------------------------------------------------
//========== Reivers are enemies in Hexen. Those flying monsters look like the upper half of a human's body, and throw fireballs.
IMPLEMENT_ACTOR (AWraith, Hexen, 34, 8)
PROP_SpawnHealth (150)
PROP_PainChance (25)
PROP_SpeedFixed (11)
PROP_HeightFixed (55)
PROP_Mass (75)
PROP_Damage (10)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_NOGRAVITY|MF_DROPOFF|MF_FLOAT|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_SpawnState (S_WRAITH_INIT1)
PROP_SeeState (S_WRAITH_CHASE1)
PROP_PainState (S_WRAITH_PAIN1)
PROP_MeleeState (S_WRAITH_ATK1_1)
PROP_MissileState (S_WRAITH_ATK2_1)
PROP_DeathState (S_WRAITH_DEATH1_1)
PROP_XDeathState (S_WRAITH_DEATH2_1)
PROP_IDeathState (S_WRAITH_ICE)
PROP_SeeSound ("WraithSight")
PROP_AttackSound ("WraithAttack")
PROP_PainSound ("WraithPain")
PROP_DeathSound ("WraithDeath")
PROP_ActiveSound ("WraithActive")
END_DEFAULTS
FState AWraith::States[] =
{
#define S_WRAITH_LOOK1 0
S_NORMAL1(WRTH, 'A', 15, A_WraithLook , &States[S_WRAITH_LOOK1+1]),
S_NORMAL1(WRTH, 'B', 15, A_WraithLook , &States[S_WRAITH_LOOK1]),
#define S_WRAITH_RAISE1 (S_WRAITH_LOOK1+2)
S_NORMAL1(WRTH, 'A', 2, A_WraithRaiseInit , &States[S_WRAITH_RAISE1+1]),
S_NORMAL1(WRTH, 'A', 2, A_WraithRaise , &States[S_WRAITH_RAISE1+2]),
S_NORMAL1(WRTH, 'A', 2, A_FaceTarget , &States[S_WRAITH_RAISE1+3]),
S_NORMAL1(WRTH, 'B', 2, A_WraithRaise , &States[S_WRAITH_RAISE1+4]),
S_NORMAL1(WRTH, 'B', 2, A_WraithRaise , &States[S_WRAITH_RAISE1+1]),
#define S_WRAITH_ICE (S_WRAITH_RAISE1+5)
S_NORMAL1(WRT2, 'I', 5, A_FreezeDeath , &States[S_WRAITH_ICE+1]),
S_NORMAL1(WRT2, 'I', 1, A_FreezeDeathChunks , &States[S_WRAITH_ICE+1]),
#define S_WRAITH_INIT1 (S_WRAITH_ICE+2)
S_NORMAL1(WRTH, 'A', 10, NULL , &States[S_WRAITH_INIT1+1]),
S_NORMAL1(WRTH, 'B', 5, A_WraithInit , &States[S_WRAITH_LOOK1]),
#define S_WRAITH_CHASE1 (S_WRAITH_INIT1+2)
S_NORMAL1(WRTH, 'A', 4, A_WraithChase , &States[S_WRAITH_CHASE1+1]),
S_NORMAL1(WRTH, 'B', 4, A_WraithChase , &States[S_WRAITH_CHASE1+2]),
S_NORMAL1(WRTH, 'C', 4, A_WraithChase , &States[S_WRAITH_CHASE1+3]),
S_NORMAL1(WRTH, 'D', 4, A_WraithChase , &States[S_WRAITH_CHASE1+0]),
#define S_WRAITH_PAIN1 (S_WRAITH_CHASE1+4)
S_NORMAL1(WRTH, 'A', 2, NULL , &States[S_WRAITH_PAIN1+1]),
S_NORMAL1(WRTH, 'H', 6, A_Pain , &States[S_WRAITH_CHASE1]),
#define S_WRAITH_ATK1_1 (S_WRAITH_PAIN1+2)
S_NORMAL1(WRTH, 'E', 6, A_FaceTarget , &States[S_WRAITH_ATK1_1+1]),
S_NORMAL1(WRTH, 'F', 6, A_WraithFX3 , &States[S_WRAITH_ATK1_1+2]),
S_NORMAL1(WRTH, 'G', 6, A_WraithMelee , &States[S_WRAITH_CHASE1]),
#define S_WRAITH_ATK2_1 (S_WRAITH_ATK1_1+3)
S_NORMAL1(WRTH, 'E', 6, A_FaceTarget , &States[S_WRAITH_ATK2_1+1]),
S_NORMAL1(WRTH, 'F', 6, NULL , &States[S_WRAITH_ATK2_1+2]),
S_NORMAL1(WRTH, 'G', 6, A_WraithMissile , &States[S_WRAITH_CHASE1]),
#define S_WRAITH_DEATH1_1 (S_WRAITH_ATK2_1+3)
S_NORMAL1(WRTH, 'I', 4, NULL , &States[S_WRAITH_DEATH1_1+1]),
S_NORMAL1(WRTH, 'J', 4, A_Scream , &States[S_WRAITH_DEATH1_1+2]),
S_NORMAL1(WRTH, 'K', 4, NULL , &States[S_WRAITH_DEATH1_1+3]),
S_NORMAL1(WRTH, 'L', 4, NULL , &States[S_WRAITH_DEATH1_1+4]),
S_NORMAL1(WRTH, 'M', 4, A_NoBlocking , &States[S_WRAITH_DEATH1_1+5]),
S_NORMAL1(WRTH, 'N', 4, A_QueueCorpse , &States[S_WRAITH_DEATH1_1+6]),
S_NORMAL1(WRTH, 'O', 4, NULL , &States[S_WRAITH_DEATH1_1+7]),
S_NORMAL1(WRTH, 'P', 5, NULL , &States[S_WRAITH_DEATH1_1+8]),
S_NORMAL1(WRTH, 'Q', 5, NULL , &States[S_WRAITH_DEATH1_1+9]),
S_NORMAL1(WRTH, 'R', -1, NULL , NULL),
#define S_WRAITH_DEATH2_1 (S_WRAITH_DEATH1_1+10)
S_NORMAL1(WRT2, 'A', 5, NULL , &States[S_WRAITH_DEATH2_1+1]),
S_NORMAL1(WRT2, 'B', 5, A_Scream , &States[S_WRAITH_DEATH2_1+2]),
S_NORMAL1(WRT2, 'C', 5, NULL , &States[S_WRAITH_DEATH2_1+3]),
S_NORMAL1(WRT2, 'D', 5, NULL , &States[S_WRAITH_DEATH2_1+4]),
S_NORMAL1(WRT2, 'E', 5, A_NoBlocking , &States[S_WRAITH_DEATH2_1+5]),
S_NORMAL1(WRT2, 'F', 5, A_QueueCorpse , &States[S_WRAITH_DEATH2_1+6]),
S_NORMAL1(WRT2, 'G', 5, NULL , &States[S_WRAITH_DEATH2_1+7]),
S_NORMAL1(WRT2, 'H', -1, NULL , NULL),
};
------------------------------------------------------------------------
//========== Exactly the same as a standard Reiver, except those are buried in the ground and raise when they see the player, simulating an 'undead' effect, as they appear in a graveyard.
IMPLEMENT_STATELESS_ACTOR (AWraithBuried, Hexen, 10011, 9)
PROP_HeightFixed (68)
PROP_Flags (MF_NOGRAVITY|MF_DROPOFF|MF_FLOAT|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL)
PROP_Flags3 (MF3_DONTMORPH|MF3_DONTBLAST|MF3_STAYMORPHED)
PROP_RenderFlags (RF_INVISIBLE)
PROP_PainChance (0)
PROP_SpawnState (S_WRAITH_LOOK1)
PROP_SeeState (S_WRAITH_RAISE1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Fireballs thrown by Reivers. Their native action spawns small sparks that fall from the main fireball.
IMPLEMENT_ACTOR (AWraithFX1, Hexen, -1, 0)
PROP_SpeedFixed (14)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_Mass (5)
PROP_Damage (5)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (S_WRTHFX_MOVE1)
PROP_DeathState (S_WRTHFX_BOOM1)
PROP_SeeSound ("WraithMissileFire")
PROP_DeathSound ("WraithMissileExplode")
END_DEFAULTS
FState AWraithFX1::States[] =
{
#define S_WRTHFX_MOVE1 0
S_BRIGHT (WRBL, 'A', 3, NULL , &States[S_WRTHFX_MOVE1+1]),
S_BRIGHT (WRBL, 'B', 3, A_WraithFX2 , &States[S_WRTHFX_MOVE1+2]),
S_BRIGHT (WRBL, 'C', 3, NULL , &States[S_WRTHFX_MOVE1]),
#define S_WRTHFX_BOOM1 (S_WRTHFX_MOVE1+3)
S_BRIGHT (WRBL, 'D', 4, NULL , &States[S_WRTHFX_BOOM1+1]),
S_BRIGHT (WRBL, 'E', 4, A_WraithFX2 , &States[S_WRTHFX_BOOM1+2]),
S_BRIGHT (WRBL, 'F', 4, NULL , &States[S_WRTHFX_BOOM1+3]),
S_BRIGHT (WRBL, 'G', 3, A_WraithFX2 , &States[S_WRTHFX_BOOM1+4]),
S_BRIGHT (WRBL, 'H', 3, A_WraithFX2 , &States[S_WRTHFX_BOOM1+5]),
S_BRIGHT (WRBL, 'I', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Reiver fireball sparks
IMPLEMENT_ACTOR (AWraithFX2, Hexen, -1, 108)
PROP_RadiusFixed (2)
PROP_HeightFixed (5)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF)
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT)
PROP_SpawnState (S_WRTHFX_SIZZLE1)
END_DEFAULTS
FState AWraithFX2::States[] =
{
#define S_WRTHFX_SIZZLE1 0
S_BRIGHT (WRBL, 'J', 4, NULL, &States[S_WRTHFX_SIZZLE1+1]),
S_BRIGHT (WRBL, 'K', 4, NULL, &States[S_WRTHFX_SIZZLE1+2]),
S_BRIGHT (WRBL, 'L', 4, NULL, &States[S_WRTHFX_SIZZLE1+3]),
S_BRIGHT (WRBL, 'M', 4, NULL, &States[S_WRTHFX_SIZZLE1+4]),
S_BRIGHT (WRBL, 'N', 4, NULL, &States[S_WRTHFX_SIZZLE1+5]),
S_BRIGHT (WRBL, 'O', 4, NULL, &States[S_WRTHFX_SIZZLE1+6]),
S_BRIGHT (WRBL, 'P', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Reiver spark
IMPLEMENT_ACTOR (AWraithFX3, Hexen, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (5)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_FLOORCLIP|MF2_NOTELEPORT)
PROP_SpawnState (S_WRTHFX_DROP1)
PROP_DeathState (S_WRTHFX_DEAD1)
PROP_DeathSound ("Drip")
END_DEFAULTS
FState AWraithFX3::States[] =
{
#define S_WRTHFX_DROP1 0
S_BRIGHT (WRBL, 'Q', 4, NULL, &States[S_WRTHFX_DROP1+1]),
S_BRIGHT (WRBL, 'R', 4, NULL, &States[S_WRTHFX_DROP1+2]),
S_BRIGHT (WRBL, 'S', 4, NULL, &States[S_WRTHFX_DROP1]),
#define S_WRTHFX_DEAD1 (S_WRTHFX_DROP1+3)
S_BRIGHT (WRBL, 'S', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== Dripping flesh
IMPLEMENT_ACTOR (AWraithFX4, Hexen, -1, 106)
PROP_RadiusFixed (2)
PROP_HeightFixed (5)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_WRTHFX_ADROP1)
PROP_DeathState (S_WRTHFX_ADEAD1)
PROP_DeathSound ("Drip")
END_DEFAULTS
FState AWraithFX4::States[] =
{
#define S_WRTHFX_ADROP1 0
S_NORMAL1(WRBL, 'T', 4, NULL, &States[S_WRTHFX_ADROP1+1]),
S_NORMAL1(WRBL, 'U', 4, NULL, &States[S_WRTHFX_ADROP1+2]),
S_NORMAL1(WRBL, 'V', 4, NULL, &States[S_WRTHFX_ADROP1+3]),
S_NORMAL1(WRBL, 'W', 4, NULL, &States[S_WRTHFX_ADROP1]),
#define S_WRTHFX_ADEAD1 (S_WRTHFX_ADROP1+4)
S_NORMAL1(WRBL, 'W', 10, NULL, NULL),
};
------------------------------------------------------------------------
//========== Dripping flesh
IMPLEMENT_ACTOR (AWraithFX5, Hexen, -1, 107)
PROP_RadiusFixed (2)
PROP_HeightFixed (5)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_WRTHFX_BDROP1)
PROP_DeathState (S_WRTHFX_BDEAD1)
PROP_DeathSound ("Drip")
END_DEFAULTS
FState AWraithFX5::States[] =
{
#define S_WRTHFX_BDROP1 0
S_NORMAL1(WRBL, 'X', 7, NULL, &States[S_WRTHFX_BDROP1+1]),
S_NORMAL1(WRBL, 'Y', 7, NULL, &States[S_WRTHFX_BDROP1+2]),
S_NORMAL1(WRBL, 'Z', 7, NULL, &States[S_WRTHFX_BDROP1]),
#define S_WRTHFX_BDEAD1 (S_WRTHFX_BDROP1+3)
S_NORMAL1(WRBL, 'Z', 35, NULL, NULL),
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZWingedStatue, Hexen, 5, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZWingedStatue::States[1] =
{
S_NORMAL1 (STTW, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRock1, Hexen, 6, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRock1::States[1] =
{
S_NORMAL1 (RCK1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRock2, Hexen, 7, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRock2::States[1] =
{
S_NORMAL1 (RCK2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRock3, Hexen, 9, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRock3::States[1] =
{
S_NORMAL1 (RCK3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRock4, Hexen, 15, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRock4::States[1] =
{
S_NORMAL1 (RCK4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChandelier, Hexen, 17, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(60)
PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChandelier::States[3] =
{
S_NORMAL1 (CDLR, 'A', 4, NULL, &States[1]),
S_NORMAL1 (CDLR, 'B', 4, NULL, &States[2]),
S_NORMAL1 (CDLR, 'C', 4, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChandelierUnlit, Hexen, 8063, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(60)
PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChandelierUnlit::States[1] =
{
S_NORMAL1 (CDLR, 'D', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeDead, Hexen, 24, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(96)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeDead::States[1] =
{
S_NORMAL1 (TRE1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTree, Hexen, 25, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(15)
PROP_HeightFixed(128)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTree::States[1] =
{
S_NORMAL1 (TRE1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeSwamp150, Hexen, 26, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(150)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeSwamp150::States[1] =
{
S_NORMAL1 (TRE2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeSwamp120, Hexen, 27, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(120)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeSwamp120::States[1] =
{
S_NORMAL1 (TRE3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStumpBurned, Hexen, 28, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(20)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStumpBurned::States[1] =
{
S_NORMAL1 (STM1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStumpBare, Hexen, 29, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(20)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStumpBare::States[1] =
{
S_NORMAL1 (STM2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStumpSwamp1, Hexen, 37, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZStumpSwamp1::States[1] =
{
S_NORMAL1 (STM3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStumpSwamp2, Hexen, 38, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZStumpSwamp2::States[1] =
{
S_NORMAL1 (STM4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomLarge1, Hexen, 39, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomLarge1::States[1] =
{
S_NORMAL1 (MSH1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomLarge2, Hexen, 40, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomLarge2::States[1] =
{
S_NORMAL1 (MSH2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomLarge3, Hexen, 41, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomLarge3::States[1] =
{
S_NORMAL1 (MSH3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomSmall1, Hexen, 42, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomSmall1::States[1] =
{
S_NORMAL1 (MSH4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomSmall2, Hexen, 44, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomSmall2::States[1] =
{
S_NORMAL1 (MSH5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomSmall3, Hexen, 45, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomSmall3::States[1] =
{
S_NORMAL1 (MSH6, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomSmall4, Hexen, 46, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomSmall4::States[1] =
{
S_NORMAL1 (MSH7, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZShroomSmall5, Hexen, 47, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZShroomSmall5::States[1] =
{
S_NORMAL1 (MSH8, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmitePillar, Hexen, 48, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(138)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmitePillar::States[1] =
{
S_NORMAL1 (SGMP, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteLarge, Hexen, 49, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(48)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteLarge::States[1] =
{
S_NORMAL1 (SGM1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteMedium, Hexen, 50, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(6)
PROP_HeightFixed(40)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteMedium::States[1] =
{
S_NORMAL1 (SGM2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteSmall, Hexen, 51, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(36)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteSmall::States[1] =
{
S_NORMAL1 (SGM3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteLarge, Hexen, 52, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(66)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteLarge::States[1] =
{
S_NORMAL1 (SLC1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteMedium, Hexen, 56, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(6)
PROP_HeightFixed(50)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteMedium::States[1] =
{
S_NORMAL1 (SLC2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteSmall, Hexen, 57, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(40)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteSmall::States[1] =
{
S_NORMAL1 (SLC3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZMossCeiling1, Hexen, 58, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(20)
PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZMossCeiling1::States[1] =
{
S_NORMAL1 (MSS1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZMossCeiling2, Hexen, 59, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(24)
PROP_Flags (MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZMossCeiling2::States[1] =
{
S_NORMAL1 (MSS2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZSwampVine, Hexen, 60, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(52)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZSwampVine::States[1] =
{
S_NORMAL1 (SWMV, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZCorpseKabob, Hexen, 61, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(92)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZCorpseKabob::States[1] =
{
S_NORMAL1 (CPS1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZCorpseSleeping, Hexen, 62, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZCorpseSleeping::States[1] =
{
S_NORMAL1 (CPS2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneRIP, Hexen, 63, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(46)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneRIP::States[1] =
{
S_NORMAL1 (TMS1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneShane, Hexen, 64, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(46)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneShane::States[1] =
{
S_NORMAL1 (TMS2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneBigCross, Hexen, 65, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(46)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneBigCross::States[1] =
{
S_NORMAL1 (TMS3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneBrianR, Hexen, 66, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(52)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneBrianR::States[1] =
{
S_NORMAL1 (TMS4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneCrossCircle, Hexen, 67, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(10)
PROP_HeightFixed(52)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneCrossCircle::States[1] =
{
S_NORMAL1 (TMS5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneSmallCross, Hexen, 68, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(46)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneSmallCross::States[1] =
{
S_NORMAL1 (TMS6, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTombstoneBrianP, Hexen, 69, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(46)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTombstoneBrianP::States[1] =
{
S_NORMAL1 (TMS7, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZCorpseHanging, Hexen, 71, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(6)
PROP_HeightFixed(75)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZCorpseHanging::States[1] =
{
S_NORMAL1 (CPS3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleGreenTall, Hexen, 72, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleGreenTall::States[1] =
{
S_NORMAL1 (STT2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleBlueTall, Hexen, 73, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleBlueTall::States[1] =
{
S_NORMAL1 (STT3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleGreenShort, Hexen, 74, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleGreenShort::States[1] =
{
S_NORMAL1 (STT4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleBlueShort, Hexen, 76, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleBlueShort::States[1] =
{
S_NORMAL1 (STT5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleStripeTall, Hexen, 8044, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleStripeTall::States[1] =
{
S_NORMAL1 (GAR1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleDarkRedTall, Hexen, 8045, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleDarkRedTall::States[1] =
{
S_NORMAL1 (GAR2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleRedTall, Hexen, 8046, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleRedTall::States[1] =
{
S_NORMAL1 (GAR3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleTanTall, Hexen, 8047, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleTanTall::States[1] =
{
S_NORMAL1 (GAR4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleRustTall, Hexen, 8048, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(108)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleRustTall::States[1] =
{
S_NORMAL1 (GAR5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleDarkRedShort, Hexen, 8049, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleDarkRedShort::States[1] =
{
S_NORMAL1 (GAR6, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleRedShort, Hexen, 8050, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleRedShort::States[1] =
{
S_NORMAL1 (GAR7, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleTanShort, Hexen, 8051, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleTanShort::States[1] =
{
S_NORMAL1 (GAR8, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStatueGargoyleRustShort, Hexen, 8052, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(62)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStatueGargoyleRustShort::States[1] =
{
S_NORMAL1 (GAR9, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZBannerTattered, Hexen, 77, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(120)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZBannerTattered::States[1] =
{
S_NORMAL1 (BNR1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeLarge1, Hexen, 78, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(15)
PROP_HeightFixed(180)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeLarge1::States[1] =
{
S_NORMAL1 (TRE4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeLarge2, Hexen, 79, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(15)
PROP_HeightFixed(180)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeLarge2::States[1] =
{
S_NORMAL1 (TRE5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeGnarled1, Hexen, 80, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(22)
PROP_HeightFixed(100)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeGnarled1::States[1] =
{
S_NORMAL1 (TRE6, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZTreeGnarled2, Hexen, 87, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(22)
PROP_HeightFixed(100)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZTreeGnarled2::States[1] =
{
S_NORMAL1 (TRE7, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZLog, Hexen, 88, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(25)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZLog::States[1] =
{
S_NORMAL1 (LOGG, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteIceLarge, Hexen, 89, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(66)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteIceLarge::States[1] =
{
S_NORMAL1 (ICT1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteIceMedium, Hexen, 90, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(5)
PROP_HeightFixed(50)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteIceMedium::States[1] =
{
S_NORMAL1 (ICT2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteIceSmall, Hexen, 91, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteIceSmall::States[1] =
{
S_NORMAL1 (ICT3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalactiteIceTiny, Hexen, 92, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(8)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZStalactiteIceTiny::States[1] =
{
S_NORMAL1 (ICT4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteIceLarge, Hexen, 93, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(66)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteIceLarge::States[1] =
{
S_NORMAL1 (ICM1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteIceMedium, Hexen, 94, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(5)
PROP_HeightFixed(50)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteIceMedium::States[1] =
{
S_NORMAL1 (ICM2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteIceSmall, Hexen, 95, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteIceSmall::States[1] =
{
S_NORMAL1 (ICM3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZStalagmiteIceTiny, Hexen, 96, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(8)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZStalagmiteIceTiny::States[1] =
{
S_NORMAL1 (ICM4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRockBrown1, Hexen, 97, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(17)
PROP_HeightFixed(72)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZRockBrown1::States[1] =
{
S_NORMAL1 (RKBL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRockBrown2, Hexen, 98, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(15)
PROP_HeightFixed(50)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZRockBrown2::States[1] =
{
S_NORMAL1 (RKBS, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRockBlack, Hexen, 99, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(40)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZRockBlack::States[1] =
{
S_NORMAL1 (RKBK, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRubble1, Hexen, 100, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRubble1::States[1] =
{
S_NORMAL1 (RBL1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRubble2, Hexen, 101, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRubble2::States[1] =
{
S_NORMAL1 (RBL2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZRubble3, Hexen, 102, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
END_DEFAULTS
FState AZRubble3::States[1] =
{
S_NORMAL1 (RBL3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZVasePillar, Hexen, 103, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(54)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZVasePillar::States[1] =
{
S_NORMAL1 (VASE, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZCorpseLynched, Hexen, 108, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(11)
PROP_HeightFixed(95)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZCorpseLynched::States[1] =
{
S_NORMAL1 (CPS4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZCandle, Hexen, 119, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
END_DEFAULTS
FState AZCandle::States[3] =
{
S_BRIGHT (CNDL, 'A', 4, NULL, &States[1]),
S_BRIGHT (CNDL, 'B', 4, NULL, &States[2]),
S_BRIGHT (CNDL, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZBarrel, Hexen, 8100, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(15)
PROP_HeightFixed(32)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZBarrel::States[1] =
{
S_NORMAL1 (BARL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZBucket, Hexen, 8103, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(72)
PROP_Flags (MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZBucket::States[1] =
{
S_NORMAL1 (BCKT, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AFireThing, Hexen, 8060, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(5)
PROP_HeightFixed(10)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AFireThing::States[9] =
{
S_BRIGHT (FSKL, 'A', 4, NULL, &States[1]),
S_BRIGHT (FSKL, 'B', 3, NULL, &States[2]),
S_BRIGHT (FSKL, 'C', 4, NULL, &States[3]),
S_BRIGHT (FSKL, 'D', 3, NULL, &States[4]),
S_BRIGHT (FSKL, 'E', 4, NULL, &States[5]),
S_BRIGHT (FSKL, 'F', 3, NULL, &States[6]),
S_BRIGHT (FSKL, 'G', 4, NULL, &States[7]),
S_BRIGHT (FSKL, 'H', 3, NULL, &States[8]),
S_BRIGHT (FSKL, 'I', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ABrassTorch, Hexen, 8061, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(6)
PROP_HeightFixed(35)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState ABrassTorch::States[13] =
{
S_BRIGHT (BRTR, 'A', 4, NULL, &States[1]),
S_BRIGHT (BRTR, 'B', 4, NULL, &States[2]),
S_BRIGHT (BRTR, 'C', 4, NULL, &States[3]),
S_BRIGHT (BRTR, 'D', 4, NULL, &States[4]),
S_BRIGHT (BRTR, 'E', 4, NULL, &States[5]),
S_BRIGHT (BRTR, 'F', 4, NULL, &States[6]),
S_BRIGHT (BRTR, 'G', 4, NULL, &States[7]),
S_BRIGHT (BRTR, 'H', 4, NULL, &States[8]),
S_BRIGHT (BRTR, 'I', 4, NULL, &States[9]),
S_BRIGHT (BRTR, 'J', 4, NULL, &States[10]),
S_BRIGHT (BRTR, 'K', 4, NULL, &States[11]),
S_BRIGHT (BRTR, 'L', 4, NULL, &States[12]),
S_BRIGHT (BRTR, 'M', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZBlueCandle, Hexen, 8066, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState AZBlueCandle::States[5] =
{
S_BRIGHT (CAND, 'A', 5, NULL, &States[1]),
S_BRIGHT (CAND, 'B', 5, NULL, &States[2]),
S_BRIGHT (CAND, 'C', 5, NULL, &States[3]),
S_BRIGHT (CAND, 'D', 5, NULL, &States[4]),
S_BRIGHT (CAND, 'E', 5, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZIronMaiden, Hexen, 8067, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(60)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AZIronMaiden::States[1] =
{
S_NORMAL1 (IRON, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainBit32, Hexen, 8071, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainBit32::States[1] =
{
S_NORMAL1 (CHNS, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainBit64, Hexen, 8072, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(64)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainBit64::States[1] =
{
S_NORMAL1 (CHNS, 'B', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainEndHeart, Hexen, 8073, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainEndHeart::States[1] =
{
S_NORMAL1 (CHNS, 'C', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainEndHook1, Hexen, 8074, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainEndHook1::States[1] =
{
S_NORMAL1 (CHNS, 'D', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainEndHook2, Hexen, 8075, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainEndHook2::States[1] =
{
S_NORMAL1 (CHNS, 'E', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainEndSpike, Hexen, 8076, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainEndSpike::States[1] =
{
S_NORMAL1 (CHNS, 'F', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (AZChainEndSkull, Hexen, 8077, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(4)
PROP_HeightFixed(32)
PROP_Flags (MF_NOBLOCKMAP|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AZChainEndSkull::States[1] =
{
S_NORMAL1 (CHNS, 'G', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit1, Hexen, 8500, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit1::States[1] =
{
S_NORMAL1 (TST1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit2, Hexen, 8501, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit2::States[1] =
{
S_NORMAL1 (TST2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit3, Hexen, 8502, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit3::States[1] =
{
S_NORMAL1 (TST3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit4, Hexen, 8503, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit4::States[1] =
{
S_NORMAL1 (TST4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit5, Hexen, 8504, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit5::States[1] =
{
S_NORMAL1 (TST5, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit6, Hexen, 8505, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit6::States[1] =
{
S_NORMAL1 (TST6, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit7, Hexen, 8506, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit7::States[1] =
{
S_NORMAL1 (TST7, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit8, Hexen, 8507, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit8::States[1] =
{
S_NORMAL1 (TST8, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit9, Hexen, 8508, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit9::States[1] =
{
S_NORMAL1 (TST9, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATableShit10, Hexen, 8509, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP)
END_DEFAULTS
FState ATableShit10::States[1] =
{
S_NORMAL1 (TST0, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Hexen decoration
IMPLEMENT_ACTOR (ATeleSmoke, Hexen, 140, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(16)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (ZOPAQUE*8/10)
END_DEFAULTS
FState ATeleSmoke::States[26] =
{
S_NORMAL1 (TSMK, 'A', 4, NULL, &States[1]),
S_NORMAL1 (TSMK, 'B', 3, NULL, &States[2]),
S_NORMAL1 (TSMK, 'C', 4, NULL, &States[3]),
S_NORMAL1 (TSMK, 'D', 3, NULL, &States[4]),
S_NORMAL1 (TSMK, 'E', 4, NULL, &States[5]),
S_NORMAL1 (TSMK, 'F', 3, NULL, &States[6]),
S_NORMAL1 (TSMK, 'G', 4, NULL, &States[7]),
S_NORMAL1 (TSMK, 'H', 3, NULL, &States[8]),
S_NORMAL1 (TSMK, 'I', 4, NULL, &States[9]),
S_NORMAL1 (TSMK, 'J', 3, NULL, &States[10]),
S_NORMAL1 (TSMK, 'K', 4, NULL, &States[11]),
S_NORMAL1 (TSMK, 'L', 3, NULL, &States[12]),
S_NORMAL1 (TSMK, 'M', 4, NULL, &States[13]),
S_NORMAL1 (TSMK, 'N', 3, NULL, &States[14]),
S_NORMAL1 (TSMK, 'O', 4, NULL, &States[15]),
S_NORMAL1 (TSMK, 'P', 3, NULL, &States[16]),
S_NORMAL1 (TSMK, 'Q', 4, NULL, &States[17]),
S_NORMAL1 (TSMK, 'R', 3, NULL, &States[18]),
S_NORMAL1 (TSMK, 'S', 4, NULL, &States[19]),
S_NORMAL1 (TSMK, 'T', 3, NULL, &States[20]),
S_NORMAL1 (TSMK, 'U', 4, NULL, &States[21]),
S_NORMAL1 (TSMK, 'V', 3, NULL, &States[22]),
S_NORMAL1 (TSMK, 'W', 4, NULL, &States[23]),
S_NORMAL1 (TSMK, 'X', 3, NULL, &States[24]),
S_NORMAL1 (TSMK, 'Y', 4, NULL, &States[25]),
S_NORMAL1 (TSMK, 'Z', 3, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Pork missile
IMPLEMENT_ACTOR(APorkFX, Hexen, -1, 40)
PROP_RadiusFixed(8)
PROP_HeightFixed(8)
PROP_SpeedFixed(18)
PROP_Damage(1)
PROP_Flags(MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2(MF2_NOTELEPORT)
PROP_SpawnState(S_EGGFX)
PROP_DeathState(S_EGGFXI2)
END_DEFAULTS
FState APorkFX::States[] =
{
//#define S_EGGFX 0
S_NORMAL1(EGGM, 'A', 4, NULL, &States[S_EGGFX+1]),
S_NORMAL1(EGGM, 'B', 4, NULL, &States[S_EGGFX+2]),
S_NORMAL1(EGGM, 'C', 4, NULL, &States[S_EGGFX+3]),
S_NORMAL1(EGGM, 'D', 4, NULL, &States[S_EGGFX+4]),
S_NORMAL1(EGGM, 'E', 4, NULL, &States[S_EGGFX+0]),
#define S_EGGFXI2 (S_EGGFX+5)
S_BRIGHT (FHFX, 'I', 3, NULL, &States[S_EGGFXI2+1]),
S_BRIGHT (FHFX, 'J', 3, NULL, &States[S_EGGFXI2+2]),
S_BRIGHT (FHFX, 'K', 3, NULL, &States[S_EGGFXI2+3]),
S_BRIGHT (FHFX, 'L', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== Porkalator
IMPLEMENT_ACTOR(AArtiPork, Hexen, 30, 14)
PROP_Flags(MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2(MF2_FLOATBOB)
PROP_SpawnState(0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiPork::States[] =
{
S_NORMAL1(PORK, 'A', 5, NULL, &States[1]),
S_NORMAL1(PORK, 'B', 5, NULL, &States[2]),
S_NORMAL1(PORK, 'C', 5, NULL, &States[3]),
S_NORMAL1(PORK, 'D', 5, NULL, &States[4]),
S_NORMAL1(PORK, 'E', 5, NULL, &States[5]),
S_NORMAL1(PORK, 'F', 5, NULL, &States[6]),
S_NORMAL1(PORK, 'G', 5, NULL, &States[7]),
S_NORMAL1(PORK, 'H', 5, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Minotaur Smoke Exit
IMPLEMENT_ACTOR (AMinotaurSmokeExit, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AMinotaurSmokeExit::States[] =
{
S_NORMAL1(MNSM, 'A', 3, NULL , &States[1]),
S_NORMAL1(MNSM, 'B', 3, NULL , &States[2]),
S_NORMAL1(MNSM, 'C', 3, NULL , &States[3]),
S_NORMAL1(MNSM, 'D', 3, NULL , &States[4]),
S_NORMAL1(MNSM, 'E', 3, NULL , &States[5]),
S_NORMAL1(MNSM, 'F', 3, NULL , &States[6]),
S_NORMAL1(MNSM, 'G', 3, NULL , &States[7]),
S_NORMAL1(MNSM, 'H', 3, NULL , &States[8]),
S_NORMAL1(MNSM, 'I', 3, NULL , &States[9]),
S_NORMAL1(MNSM, 'J', 3, NULL , &States[10]),
S_NORMAL1(MNSM, 'I', 3, NULL , &States[11]),
S_NORMAL1(MNSM, 'H', 3, NULL , &States[12]),
S_NORMAL1(MNSM, 'G', 3, NULL , &States[13]),
S_NORMAL1(MNSM, 'F', 3, NULL , &States[14]),
S_NORMAL1(MNSM, 'E', 3, NULL , &States[15]),
S_NORMAL1(MNSM, 'D', 3, NULL , &States[16]),
S_NORMAL1(MNSM, 'C', 3, NULL , &States[17]),
S_NORMAL1(MNSM, 'B', 3, NULL , &States[18]),
S_NORMAL1(MNSM, 'A', 3, NULL , NULL),
};
------------------------------------------------------------------------
//========== Minotaur Friend
IMPLEMENT_STATELESS_ACTOR (AMinotaurFriend, Hexen, -1, 0)
PROP_SpawnState (S_MNTR_FADEIN)
PROP_DeathState (S_MNTR_FADEOUT)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (ZOPAQUE/3)
PROP_SpawnHealth (2500)
PROP_FlagsClear (MF_DROPOFF)
PROP_FlagsSet (MF_FRIENDLY)
PROP_Flags2Clear (MF2_BOSS)
PROP_Flags2Set (MF2_TELESTOMP)
PROP_Flags3Set (MF3_STAYMORPHED)
PROP_Flags3Clear (MF3_DONTMORPH)
PROP_Flags4Set (MF4_NOTARGETSWITCH)
PROP_Flags5Set (MF5_SUMMONEDMONSTER)
END_DEFAULTS
------------------------------------------------------------------------