|
------------------------------------------------------------------------ //========== 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 ------------------------------------------------------------------------