ZDaemon Actors particular to Heretic only
------------------------------------------------------------------------
//========== Beast (Weredragon)
IMPLEMENT_ACTOR (ABeast, Heretic, 70, 3)
PROP_SpawnHealth (220)
PROP_RadiusFixed (32)
PROP_HeightFixed (74)
PROP_Mass (200)
PROP_SpeedFixed (14)
PROP_PainChance (100)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_SpawnState (S_BEAST_LOOK)
PROP_SeeState (S_BEAST_WALK)
PROP_PainState (S_BEAST_PAIN)
PROP_MissileState (S_BEAST_ATK)
PROP_DeathState (S_BEAST_DIE)
PROP_XDeathState (S_BEAST_XDIE)
PROP_SeeSound ("beast/sight")
PROP_AttackSound ("beast/attack")
PROP_PainSound ("beast/pain")
PROP_DeathSound ("beast/death")
PROP_ActiveSound ("beast/active")
END_DEFAULTS
FState ABeast::States[] =
{
#define S_BEAST_LOOK 0
S_NORMAL1 (BEAS, 'A', 10, A_Look , &States[S_BEAST_LOOK+1]),
S_NORMAL1 (BEAS, 'B', 10, A_Look , &States[S_BEAST_LOOK+0]),
#define S_BEAST_WALK (S_BEAST_LOOK+2)
S_NORMAL1 (BEAS, 'A', 3, A_Chase , &States[S_BEAST_WALK+1]),
S_NORMAL1 (BEAS, 'B', 3, A_Chase , &States[S_BEAST_WALK+2]),
S_NORMAL1 (BEAS, 'C', 3, A_Chase , &States[S_BEAST_WALK+3]),
S_NORMAL1 (BEAS, 'D', 3, A_Chase , &States[S_BEAST_WALK+4]),
S_NORMAL1 (BEAS, 'E', 3, A_Chase , &States[S_BEAST_WALK+5]),
S_NORMAL1 (BEAS, 'F', 3, A_Chase , &States[S_BEAST_WALK+0]),
#define S_BEAST_ATK (S_BEAST_WALK+6)
S_NORMAL1 (BEAS, 'H', 10, A_FaceTarget, &States[S_BEAST_ATK+1]),
S_NORMAL1 (BEAS, 'I', 10, A_BeastAttack, &States[S_BEAST_WALK+0]),
#define S_BEAST_PAIN (S_BEAST_ATK+2)
S_NORMAL1 (BEAS, 'G', 3, NULL , &States[S_BEAST_PAIN+1]),
S_NORMAL1 (BEAS, 'G', 3, A_Pain , &States[S_BEAST_WALK+0]),
#define S_BEAST_DIE (S_BEAST_PAIN+2)
S_NORMAL1 (BEAS, 'R', 6, NULL , &States[S_BEAST_DIE+1]),
S_NORMAL1 (BEAS, 'S', 6, A_Scream , &States[S_BEAST_DIE+2]),
S_NORMAL1 (BEAS, 'T', 6, NULL , &States[S_BEAST_DIE+3]),
S_NORMAL1 (BEAS, 'U', 6, NULL , &States[S_BEAST_DIE+4]),
S_NORMAL1 (BEAS, 'V', 6, NULL , &States[S_BEAST_DIE+5]),
S_NORMAL1 (BEAS, 'W', 6, A_NoBlocking, &States[S_BEAST_DIE+6]),
S_NORMAL1 (BEAS, 'X', 6, NULL , &States[S_BEAST_DIE+7]),
S_NORMAL1 (BEAS, 'Y', 6, NULL , &States[S_BEAST_DIE+8]),
S_NORMAL1 (BEAS, 'Z', -1, NULL , NULL),
#define S_BEAST_XDIE (S_BEAST_DIE+9)
S_NORMAL1 (BEAS, 'J', 5, NULL , &States[S_BEAST_XDIE+1]),
S_NORMAL1 (BEAS, 'K', 6, A_Scream , &States[S_BEAST_XDIE+2]),
S_NORMAL1 (BEAS, 'L', 5, NULL , &States[S_BEAST_XDIE+3]),
S_NORMAL1 (BEAS, 'M', 6, NULL , &States[S_BEAST_XDIE+4]),
S_NORMAL1 (BEAS, 'N', 5, NULL , &States[S_BEAST_XDIE+5]),
S_NORMAL1 (BEAS, 'O', 6, A_NoBlocking, &States[S_BEAST_XDIE+6]),
S_NORMAL1 (BEAS, 'P', 5, NULL , &States[S_BEAST_XDIE+7]),
S_NORMAL1 (BEAS, 'Q', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== The smoking projectile belched forth by Weredragons.
IMPLEMENT_ACTOR (ABeastBall, Heretic, -1, 120)
PROP_RadiusFixed (9)
PROP_HeightFixed (8)
PROP_SpeedFixed (12)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_BEASTBALL)
PROP_DeathState (S_BEASTBALLX)
END_DEFAULTS
FState ABeastBall::States[] =
{
#define S_BEASTBALL 0
S_NORMAL1 (FRB1, 'A', 2, A_BeastPuff, &States[S_BEASTBALL+1]),
S_NORMAL1 (FRB1, 'A', 2, A_BeastPuff, &States[S_BEASTBALL+2]),
S_NORMAL1 (FRB1, 'B', 2, A_BeastPuff, &States[S_BEASTBALL+3]),
S_NORMAL1 (FRB1, 'B', 2, A_BeastPuff, &States[S_BEASTBALL+4]),
S_NORMAL1 (FRB1, 'C', 2, A_BeastPuff, &States[S_BEASTBALL+5]),
S_NORMAL1 (FRB1, 'C', 2, A_BeastPuff, &States[S_BEASTBALL+0]),
#define S_BEASTBALLX (S_BEASTBALL+6)
S_NORMAL1 (FRB1, 'D', 4, NULL , &States[S_BEASTBALLX+1]),
S_NORMAL1 (FRB1, 'E', 4, NULL , &States[S_BEASTBALLX+2]),
S_NORMAL1 (FRB1, 'F', 4, NULL , &States[S_BEASTBALLX+3]),
S_NORMAL1 (FRB1, 'G', 4, NULL , &States[S_BEASTBALLX+4]),
S_NORMAL1 (FRB1, 'H', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== The trail of smoke left by the weredragon's fire ball.
IMPLEMENT_ACTOR (APuffy, Heretic, -1, 0)
PROP_RadiusFixed (6)
PROP_HeightFixed (8)
PROP_SpeedFixed (10)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_Flags4 (MF4_NOSPEEDCHECK)
PROP_SpawnState (0)
END_DEFAULTS
FState APuffy::States[] =
{
S_NORMAL1 (FRB1, 'D', 4, NULL, &States[1]),
S_NORMAL1 (FRB1, 'E', 4, NULL, &States[2]),
S_NORMAL1 (FRB1, 'F', 4, NULL, &States[3]),
S_NORMAL1 (FRB1, 'G', 4, NULL, &States[4]),
S_NORMAL1 (FRB1, 'H', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== The puff spawned when the Heretic player hits something with his beak.
IMPLEMENT_STATELESS_ACTOR (ABeakPuff, Heretic, -1, 0)
PROP_Mass (5)
PROP_AttackSound ("chicken/attack")
END_DEFAULTS
------------------------------------------------------------------------
//========== The weapon used by players morphed into a chicken.
IMPLEMENT_ACTOR (ABeak, Heretic, -1, 0)
END_DEFAULTS
FState ABeak::States[] =
{
#define S_BEAKREADY 0
S_NORMAL1 (BEAK, 'A', 1, A_BeakReady , &States[S_BEAKREADY]),
#define S_BEAKDOWN (S_BEAKREADY+1)
S_NORMAL1 (BEAK, 'A', 1, A_Lower , &States[S_BEAKDOWN]),
#define S_BEAKUP (S_BEAKDOWN+1)
S_NORMAL1 (BEAK, 'A', 1, A_BeakRaise , &States[S_BEAKUP]),
#define S_BEAKATK1 (S_BEAKUP+1)
S_NORMAL1 (BEAK, 'A', 18, A_BeakAttackPL1, &States[S_BEAKREADY]),
#define S_BEAKATK2 (S_BEAKATK1+1)
S_NORMAL1 (BEAK, 'A', 12, A_BeakAttackPL2, &States[S_BEAKREADY])
};
FWeaponInfo ABeak::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_BEAKUP],
&States[S_BEAKDOWN],
&States[S_BEAKREADY],
&States[S_BEAKATK1],
&States[S_BEAKATK1],
NULL,
NULL,
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ABeak),
-1
};
FWeaponInfo ABeak::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_BEAKUP],
&States[S_BEAKDOWN],
&States[S_BEAKREADY],
&States[S_BEAKATK2],
&States[S_BEAKATK2],
NULL,
NULL,
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ABeak),
-1
};
------------------------------------------------------------------------
//========== Player who has been morphed into a chicken
IMPLEMENT_ACTOR (AChickenPlayer, Heretic, -1, 0)
PROP_SpawnHealth (30)
PROP_RadiusFixed (16)
PROP_HeightFixed (24)
PROP_SpeedFixed (1)
PROP_PainChance (255)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOTDMATCH|MF_FRIENDLY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_SLIDE|MF2_PASSMOBJ|MF2_FLOORCLIP|MF2_LOGRAV|MF2_TELESTOMP)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_Flags4 (MF4_NOSKIN)
PROP_SpawnState (S_CHICPLAY)
PROP_SeeState (S_CHICPLAY_RUN)
PROP_PainState (S_CHICPLAY_PAIN)
PROP_MissileState (S_CHICPLAY_ATK)
PROP_DeathState (S_CHICPLAY_DIE)
PROP_PainSound ("chicken/pain")
PROP_DeathSound ("chicken/death")
END_DEFAULTS
FState AChickenPlayer::States[] =
{
#define S_CHICPLAY 0
S_NORMAL1 (CHKN, 'A', -1, NULL , NULL),
#define S_CHICPLAY_RUN (S_CHICPLAY+1)
S_NORMAL1 (CHKN, 'A', 3, NULL , &States[S_CHICPLAY_RUN+1]),
S_NORMAL1 (CHKN, 'B', 3, NULL , &States[S_CHICPLAY_RUN+2]),
S_NORMAL1 (CHKN, 'A', 3, NULL , &States[S_CHICPLAY_RUN+3]),
S_NORMAL1 (CHKN, 'B', 3, NULL , &States[S_CHICPLAY_RUN+0]),
#define S_CHICPLAY_ATK (S_CHICPLAY_RUN+4)
S_NORMAL1 (CHKN, 'C', 12, NULL , &States[S_CHICPLAY]),
#define S_CHICPLAY_PAIN (S_CHICPLAY_ATK+1)
S_NORMAL1 (CHKN, 'D', 4, A_Feathers , &States[S_CHICPLAY_PAIN+1]),
S_NORMAL1 (CHKN, 'C', 4, A_Pain , &States[S_CHICPLAY]),
#define S_CHICPLAY_DIE (S_CHICPLAY_PAIN+2)
S_NORMAL1 (CHKN, 'E', 6, A_Scream , &States[S_CHICPLAY_DIE+1]),
S_NORMAL1 (CHKN, 'F', 6, A_Feathers , &States[S_CHICPLAY_DIE+2]),
S_NORMAL1 (CHKN, 'G', 6, NULL , &States[S_CHICPLAY_DIE+3]),
S_NORMAL1 (CHKN, 'H', 6, A_NoBlocking, &States[S_CHICPLAY_DIE+4]),
S_NORMAL1 (CHKN, 'I', 6, NULL , &States[S_CHICPLAY_DIE+5]),
S_NORMAL1 (CHKN, 'J', 6, NULL , &States[S_CHICPLAY_DIE+6]),
S_NORMAL1 (CHKN, 'K', 6, NULL , &States[S_CHICPLAY_DIE+7]),
S_NORMAL1 (CHKN, 'L', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Monster that has been morphed into a chicken
IMPLEMENT_ACTOR (AChicken, Heretic, -1, 122)
PROP_SpawnHealth (10)
PROP_RadiusFixed (9)
PROP_HeightFixed (22)
PROP_Mass (40)
PROP_SpeedFixed (4)
PROP_PainChance (200)
PROP_Flags (MF_SOLID|MF_SHOOTABLE)
PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_PASSMOBJ)
PROP_Flags3 (MF3_DONTMORPH|MF3_ISMONSTER)
PROP_SpawnState (S_CHICKEN_LOOK)
PROP_SeeState (S_CHICKEN_WALK)
PROP_PainState (S_CHICKEN_PAIN)
PROP_MeleeState (S_CHICKEN_ATK)
PROP_DeathState (S_CHICKEN_DIE)
PROP_SeeSound ("chicken/pain")
PROP_AttackSound ("chicken/attack")
PROP_PainSound ("chicken/pain")
PROP_DeathSound ("chicken/death")
PROP_ActiveSound ("chicken/active")
END_DEFAULTS
FState AChicken::States[] =
{
#define S_CHICKEN_LOOK 0
S_NORMAL1 (CHKN, 'A', 10, A_ChicLook , &States[S_CHICKEN_LOOK+1]),
S_NORMAL1 (CHKN, 'B', 10, A_ChicLook , &States[S_CHICKEN_LOOK+0]),
#define S_CHICKEN_WALK (S_CHICKEN_LOOK+2)
S_NORMAL1 (CHKN, 'A', 3, A_ChicChase , &States[S_CHICKEN_WALK+1]),
S_NORMAL1 (CHKN, 'B', 3, A_ChicChase , &States[S_CHICKEN_WALK+0]),
#define S_CHICKEN_PAIN (S_CHICKEN_WALK+2)
S_NORMAL1 (CHKN, 'D', 5, A_Feathers , &States[S_CHICKEN_PAIN+1]),
S_NORMAL1 (CHKN, 'C', 5, A_ChicPain , &States[S_CHICKEN_WALK+0]),
#define S_CHICKEN_ATK (S_CHICKEN_PAIN+2)
S_NORMAL1 (CHKN, 'A', 8, A_FaceTarget, &States[S_CHICKEN_ATK+1]),
S_NORMAL1 (CHKN, 'C', 10, A_ChicAttack, &States[S_CHICKEN_WALK+0]),
#define S_CHICKEN_DIE (S_CHICKEN_ATK+2)
S_NORMAL1 (CHKN, 'E', 6, A_Scream , &States[S_CHICKEN_DIE+1]),
S_NORMAL1 (CHKN, 'F', 6, A_Feathers , &States[S_CHICKEN_DIE+2]),
S_NORMAL1 (CHKN, 'G', 6, NULL , &States[S_CHICKEN_DIE+3]),
S_NORMAL1 (CHKN, 'H', 6, A_NoBlocking, &States[S_CHICKEN_DIE+4]),
S_NORMAL1 (CHKN, 'I', 6, NULL , &States[S_CHICKEN_DIE+5]),
S_NORMAL1 (CHKN, 'J', 6, NULL , &States[S_CHICKEN_DIE+6]),
S_NORMAL1 (CHKN, 'K', 6, NULL , &States[S_CHICKEN_DIE+7]),
S_NORMAL1 (CHKN, 'L', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Feathers spawned when a chicken, player-controled or not, is hurt or killed.
IMPLEMENT_ACTOR (AFeather, Heretic, -1, 121)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH|MF2_WINDTHRUST)
PROP_Flags3 (MF3_DONTSPLASH)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_FEATHER)
PROP_DeathState (S_FEATHERX)
END_DEFAULTS
FState AFeather::States[] =
{
#define S_FEATHER 0
S_NORMAL1 (CHKN, 'M', 3, NULL, &States[S_FEATHER+1]),
S_NORMAL1 (CHKN, 'N', 3, NULL, &States[S_FEATHER+2]),
S_NORMAL1 (CHKN, 'O', 3, NULL, &States[S_FEATHER+3]),
S_NORMAL1 (CHKN, 'P', 3, NULL, &States[S_FEATHER+4]),
S_NORMAL1 (CHKN, 'Q', 3, NULL, &States[S_FEATHER+5]),
S_NORMAL1 (CHKN, 'P', 3, NULL, &States[S_FEATHER+6]),
S_NORMAL1 (CHKN, 'O', 3, NULL, &States[S_FEATHER+7]),
S_NORMAL1 (CHKN, 'N', 3, NULL, &States[S_FEATHER+0]),
#define S_FEATHERX (S_FEATHER+8)
S_NORMAL1 (CHKN, 'N', 6, NULL, NULL)
};
------------------------------------------------------------------------
//========== Clink (Sabreclaw): it's a mechano-magical being that has a blade for a right arm.
IMPLEMENT_ACTOR (AClink, Heretic, 90, 1)
PROP_SpawnHealth (150)
PROP_RadiusFixed (20)
PROP_HeightFixed (64)
PROP_Mass (75)
PROP_SpeedFixed (14)
PROP_PainChance (32)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_NOBLOOD)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ)
PROP_SpawnState (S_CLINK_LOOK)
PROP_SeeState (S_CLINK_WALK)
PROP_PainState (S_CLINK_PAIN)
PROP_MeleeState (S_CLINK_ATK)
PROP_DeathState (S_CLINK_DIE)
PROP_SeeSound ("clink/sight")
PROP_AttackSound ("clink/attack")
PROP_PainSound ("clink/pain")
PROP_DeathSound ("clink/death")
PROP_ActiveSound ("clink/active")
END_DEFAULTS
FState AClink::States[] =
{
#define S_CLINK_LOOK 0
S_NORMAL1 (CLNK, 'A', 10, A_Look , &States[S_CLINK_LOOK+1]),
S_NORMAL1 (CLNK, 'B', 10, A_Look , &States[S_CLINK_LOOK+0]),
#define S_CLINK_WALK (S_CLINK_LOOK+2)
S_NORMAL1 (CLNK, 'A', 3, A_Chase , &States[S_CLINK_WALK+1]),
S_NORMAL1 (CLNK, 'B', 3, A_Chase , &States[S_CLINK_WALK+2]),
S_NORMAL1 (CLNK, 'C', 3, A_Chase , &States[S_CLINK_WALK+3]),
S_NORMAL1 (CLNK, 'D', 3, A_Chase , &States[S_CLINK_WALK+0]),
#define S_CLINK_ATK (S_CLINK_WALK+4)
S_NORMAL1 (CLNK, 'E', 5, A_FaceTarget , &States[S_CLINK_ATK+1]),
S_NORMAL1 (CLNK, 'F', 4, A_FaceTarget , &States[S_CLINK_ATK+2]),
S_NORMAL1 (CLNK, 'G', 7, A_ClinkAttack, &States[S_CLINK_WALK+0]),
#define S_CLINK_PAIN (S_CLINK_ATK+3)
S_NORMAL1 (CLNK, 'H', 3, NULL , &States[S_CLINK_PAIN+1]),
S_NORMAL1 (CLNK, 'H', 3, A_Pain , &States[S_CLINK_WALK+0]),
#define S_CLINK_DIE (S_CLINK_PAIN+2)
S_NORMAL1 (CLNK, 'I', 6, NULL , &States[S_CLINK_DIE+1]),
S_NORMAL1 (CLNK, 'J', 6, NULL , &States[S_CLINK_DIE+2]),
S_NORMAL1 (CLNK, 'K', 5, A_Scream , &States[S_CLINK_DIE+3]),
S_NORMAL1 (CLNK, 'L', 5, A_NoBlocking , &States[S_CLINK_DIE+4]),
S_NORMAL1 (CLNK, 'M', 5, NULL , &States[S_CLINK_DIE+5]),
S_NORMAL1 (CLNK, 'N', 5, NULL , &States[S_CLINK_DIE+6]),
S_NORMAL1 (CLNK, 'O', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== D'Sparil teleport point: used randomly by D'Sparil when he teleports after having been hurt.
IMPLEMENT_STATELESS_ACTOR (ABossSpot, Heretic, 56, 141)
PROP_RenderFlags (RF_INVISIBLE)
END_DEFAULTS
------------------------------------------------------------------------
//========== Sorcerer (D'Sparil on his serpent)
IMPLEMENT_ACTOR (ASorcerer1, Heretic, 7, 142)
PROP_SpawnHealth (2000)
PROP_RadiusFixed (28)
PROP_HeightFixed (100)
PROP_Mass (800)
PROP_SpeedFixed (16)
PROP_PainChance (56)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_BOSS)
PROP_Flags3 (MF3_DONTMORPH|MF3_NORADIUSDMG|MF3_NOTARGET)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_SRCR1_LOOK)
PROP_SeeState (S_SRCR1_WALK)
PROP_PainState (S_SRCR1_PAIN)
PROP_MissileState (S_SRCR1_ATK)
PROP_DeathState (S_SRCR1_DIE)
PROP_SeeSound ("dsparilserpent/sight")
PROP_AttackSound ("dsparilserpent/attack")
PROP_PainSound ("dsparilserpent/pain")
PROP_DeathSound ("dsparilserpent/death")
PROP_ActiveSound ("dsparilserpent/active")
END_DEFAULTS
FState ASorcerer1::States[] =
{
#define S_SRCR1_LOOK 0
S_NORMAL1 (SRCR, 'A', 10, A_Look , &States[S_SRCR1_LOOK+1]),
S_NORMAL1 (SRCR, 'B', 10, A_Look , &States[S_SRCR1_LOOK+0]),
#define S_SRCR1_WALK (S_SRCR1_LOOK+2)
S_NORMAL1 (SRCR, 'A', 5, A_Sor1Chase , &States[S_SRCR1_WALK+1]),
S_NORMAL1 (SRCR, 'B', 5, A_Sor1Chase , &States[S_SRCR1_WALK+2]),
S_NORMAL1 (SRCR, 'C', 5, A_Sor1Chase , &States[S_SRCR1_WALK+3]),
S_NORMAL1 (SRCR, 'D', 5, A_Sor1Chase , &States[S_SRCR1_WALK+0]),
#define S_SRCR1_PAIN (S_SRCR1_WALK+4)
S_NORMAL1 (SRCR, 'Q', 6, A_Sor1Pain , &States[S_SRCR1_WALK+0]),
#define S_SRCR1_ATK (S_SRCR1_PAIN+1)
S_NORMAL1 (SRCR, 'Q', 7, A_FaceTarget , &States[S_SRCR1_ATK+1]),
S_NORMAL1 (SRCR, 'R', 6, A_FaceTarget , &States[S_SRCR1_ATK+2]),
S_NORMAL1 (SRCR, 'S', 10, A_Srcr1Attack , &States[S_SRCR1_WALK+0]),
S_NORMAL1 (SRCR, 'S', 10, A_FaceTarget , &States[S_SRCR1_ATK+4]),
S_NORMAL1 (SRCR, 'Q', 7, A_FaceTarget , &States[S_SRCR1_ATK+5]),
S_NORMAL1 (SRCR, 'R', 6, A_FaceTarget , &States[S_SRCR1_ATK+6]),
S_NORMAL1 (SRCR, 'S', 10, A_Srcr1Attack , &States[S_SRCR1_WALK+0]),
#define S_SRCR1_DIE (S_SRCR1_ATK+7)
S_NORMAL1 (SRCR, 'E', 7, NULL , &States[S_SRCR1_DIE+1]),
S_NORMAL1 (SRCR, 'F', 7, A_Scream , &States[S_SRCR1_DIE+2]),
S_NORMAL1 (SRCR, 'G', 7, NULL , &States[S_SRCR1_DIE+3]),
S_NORMAL1 (SRCR, 'H', 6, NULL , &States[S_SRCR1_DIE+4]),
S_NORMAL1 (SRCR, 'I', 6, NULL , &States[S_SRCR1_DIE+5]),
S_NORMAL1 (SRCR, 'J', 6, NULL , &States[S_SRCR1_DIE+6]),
S_NORMAL1 (SRCR, 'K', 6, NULL , &States[S_SRCR1_DIE+7]),
S_NORMAL1 (SRCR, 'L', 25, A_SorZap , &States[S_SRCR1_DIE+8]),
S_NORMAL1 (SRCR, 'M', 5, NULL , &States[S_SRCR1_DIE+9]),
S_NORMAL1 (SRCR, 'N', 5, NULL , &States[S_SRCR1_DIE+10]),
S_NORMAL1 (SRCR, 'O', 4, NULL , &States[S_SRCR1_DIE+11]),
S_NORMAL1 (SRCR, 'L', 20, A_SorZap , &States[S_SRCR1_DIE+12]),
S_NORMAL1 (SRCR, 'M', 5, NULL , &States[S_SRCR1_DIE+13]),
S_NORMAL1 (SRCR, 'N', 5, NULL , &States[S_SRCR1_DIE+14]),
S_NORMAL1 (SRCR, 'O', 4, NULL , &States[S_SRCR1_DIE+15]),
S_NORMAL1 (SRCR, 'L', 12, NULL , &States[S_SRCR1_DIE+16]),
S_NORMAL1 (SRCR, 'P', -1, A_SorcererRise, NULL)
};
------------------------------------------------------------------------
//========== The fireball spit by D'Sparil's chaos serpent
IMPLEMENT_ACTOR (ASorcererFX1, Heretic, -1, 144)
PROP_RadiusFixed (10)
PROP_HeightFixed (10)
PROP_SpeedFixed (20)
PROP_Damage (10)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_SRCRFX1)
PROP_DeathState (S_SRCRFXI1)
END_DEFAULTS
FState ASorcererFX1::States[] =
{
#define S_SRCRFX1 0
S_BRIGHT (FX14, 'A', 6, NULL, &States[S_SRCRFX1+1]),
S_BRIGHT (FX14, 'B', 6, NULL, &States[S_SRCRFX1+2]),
S_BRIGHT (FX14, 'C', 6, NULL, &States[S_SRCRFX1+0]),
#define S_SRCRFXI1 (S_SRCRFX1+3)
S_BRIGHT (FX14, 'D', 5, NULL, &States[S_SRCRFXI1+1]),
S_BRIGHT (FX14, 'E', 5, NULL, &States[S_SRCRFXI1+2]),
S_BRIGHT (FX14, 'F', 5, NULL, &States[S_SRCRFXI1+3]),
S_BRIGHT (FX14, 'G', 5, NULL, &States[S_SRCRFXI1+4]),
S_BRIGHT (FX14, 'H', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== Sorcerer 2 (D'Sparil without his serpent)
IMPLEMENT_ACTOR (ASorcerer2, Heretic, -1, 143)
PROP_SpawnHealth (3500)
PROP_RadiusFixed (16)
PROP_HeightFixed (70)
PROP_Mass (300)
PROP_SpeedFixed (14)
PROP_PainChance (32)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_BOSS)
PROP_Flags3 (MF3_DONTMORPH|MF3_FULLVOLACTIVE|MF3_NORADIUSDMG|MF3_NOTARGET)
PROP_Flags4 (MF4_NOICEDEATH)
PROP_SpawnState (S_SOR2_LOOK)
PROP_SeeState (S_SOR2_WALK)
PROP_PainState (S_SOR2_PAIN)
PROP_MissileState (S_SOR2_ATK)
PROP_DeathState (S_SOR2_DIE)
PROP_SeeSound ("dsparil/sight")
PROP_AttackSound ("dsparil/attack")
PROP_PainSound ("dsparil/pain")
PROP_ActiveSound ("dsparil/active")
END_DEFAULTS
FState ASorcerer2::States[] =
{
#define S_SOR2_LOOK 0
S_NORMAL1 (SOR2, 'M', 10, A_Look , &States[S_SOR2_LOOK+1]),
S_NORMAL1 (SOR2, 'N', 10, A_Look , &States[S_SOR2_LOOK+0]),
#define S_SOR2_WALK (S_SOR2_LOOK+2)
S_NORMAL1 (SOR2, 'M', 4, A_Chase , &States[S_SOR2_WALK+1]),
S_NORMAL1 (SOR2, 'N', 4, A_Chase , &States[S_SOR2_WALK+2]),
S_NORMAL1 (SOR2, 'O', 4, A_Chase , &States[S_SOR2_WALK+3]),
S_NORMAL1 (SOR2, 'P', 4, A_Chase , &States[S_SOR2_WALK+0]),
#define S_SOR2_RISE (S_SOR2_WALK+4)
S_NORMAL1 (SOR2, 'A', 4, NULL , &States[S_SOR2_RISE+1]),
S_NORMAL1 (SOR2, 'B', 4, NULL , &States[S_SOR2_RISE+2]),
S_NORMAL1 (SOR2, 'C', 4, A_SorRise , &States[S_SOR2_RISE+3]),
S_NORMAL1 (SOR2, 'D', 4, NULL , &States[S_SOR2_RISE+4]),
S_NORMAL1 (SOR2, 'E', 4, NULL , &States[S_SOR2_RISE+5]),
S_NORMAL1 (SOR2, 'F', 4, NULL , &States[S_SOR2_RISE+6]),
S_NORMAL1 (SOR2, 'G', 12, A_SorSightSnd, &States[S_SOR2_WALK+0]),
#define S_SOR2_PAIN (S_SOR2_RISE+7)
S_NORMAL1 (SOR2, 'Q', 3, NULL , &States[S_SOR2_PAIN+1]),
S_NORMAL1 (SOR2, 'Q', 6, A_Pain , &States[S_SOR2_WALK+0]),
#define S_SOR2_ATK (S_SOR2_PAIN+2)
S_NORMAL1 (SOR2, 'R', 9, A_Srcr2Decide, &States[S_SOR2_ATK+1]),
S_NORMAL1 (SOR2, 'S', 9, A_FaceTarget , &States[S_SOR2_ATK+2]),
S_NORMAL1 (SOR2, 'T', 20, A_Srcr2Attack, &States[S_SOR2_WALK+0]),
#define S_SOR2_TELE (S_SOR2_ATK+3)
S_NORMAL1 (SOR2, 'L', 6, NULL , &States[S_SOR2_TELE+1]),
S_NORMAL1 (SOR2, 'K', 6, NULL , &States[S_SOR2_TELE+2]),
S_NORMAL1 (SOR2, 'J', 6, NULL , &States[S_SOR2_TELE+3]),
S_NORMAL1 (SOR2, 'I', 6, NULL , &States[S_SOR2_TELE+4]),
S_NORMAL1 (SOR2, 'H', 6, NULL , &States[S_SOR2_TELE+5]),
S_NORMAL1 (SOR2, 'G', 6, NULL , &States[S_SOR2_WALK+0]),
#define S_SOR2_DIE (S_SOR2_TELE+6)
S_NORMAL1 (SDTH, 'A', 8, A_Sor2DthInit, &States[S_SOR2_DIE+1]),
S_NORMAL1 (SDTH, 'B', 8, NULL , &States[S_SOR2_DIE+2]),
S_NORMAL1 (SDTH, 'C', 8, A_SorDSph , &States[S_SOR2_DIE+3]),
S_NORMAL1 (SDTH, 'D', 7, NULL , &States[S_SOR2_DIE+4]),
S_NORMAL1 (SDTH, 'E', 7, NULL , &States[S_SOR2_DIE+5]),
S_NORMAL1 (SDTH, 'F', 7, A_Sor2DthLoop, &States[S_SOR2_DIE+6]),
S_NORMAL1 (SDTH, 'G', 6, A_SorDExp , &States[S_SOR2_DIE+7]),
S_NORMAL1 (SDTH, 'H', 6, NULL , &States[S_SOR2_DIE+8]),
S_NORMAL1 (SDTH, 'I', 18, NULL , &States[S_SOR2_DIE+9]),
S_NORMAL1 (SDTH, 'J', 6, A_NoBlocking , &States[S_SOR2_DIE+10]),
S_NORMAL1 (SDTH, 'K', 6, A_SorDBon , &States[S_SOR2_DIE+11]),
S_NORMAL1 (SDTH, 'L', 6, NULL , &States[S_SOR2_DIE+12]),
S_NORMAL1 (SDTH, 'M', 6, NULL , &States[S_SOR2_DIE+13]),
S_NORMAL1 (SDTH, 'N', 6, NULL , &States[S_SOR2_DIE+14]),
S_NORMAL1 (SDTH, 'O', -1, A_BossDeath , NULL)
};
------------------------------------------------------------------------
//========== The lightning bolt thrown by D'Sparil.
IMPLEMENT_ACTOR (ASorcerer2FX1, Heretic, -1, 145)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_SpeedFixed (20)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_SOR2FX1)
PROP_DeathState (S_SOR2FXI1)
END_DEFAULTS
FState ASorcerer2FX1::States[] =
{
#define S_SOR2FX1 0
S_BRIGHT (FX16, 'A', 3, A_BlueSpark, &States[S_SOR2FX1+1]),
S_BRIGHT (FX16, 'B', 3, A_BlueSpark, &States[S_SOR2FX1+2]),
S_BRIGHT (FX16, 'C', 3, A_BlueSpark, &States[S_SOR2FX1+0]),
#define S_SOR2FXI1 (S_SOR2FX1+3)
S_BRIGHT (FX16, 'G', 5, A_Explode , &States[S_SOR2FXI1+1]),
S_BRIGHT (FX16, 'H', 5, NULL , &States[S_SOR2FXI1+2]),
S_BRIGHT (FX16, 'I', 5, NULL , &States[S_SOR2FXI1+3]),
S_BRIGHT (FX16, 'J', 5, NULL , &States[S_SOR2FXI1+4]),
S_BRIGHT (FX16, 'K', 5, NULL , &States[S_SOR2FXI1+5]),
S_BRIGHT (FX16, 'L', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== The sparks that trail behind D'Sparil's lightning bolts.
IMPLEMENT_ACTOR (ASorcerer2FXSpark, Heretic, -1, 0)
PROP_RadiusFixed (20)
PROP_HeightFixed (16)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH)
PROP_SpawnState (S_SOR2FXSPARK)
END_DEFAULTS
FState ASorcerer2FXSpark::States[] =
{
#define S_SOR2FXSPARK 0
S_BRIGHT (FX16, 'D', 12, NULL, &States[S_SOR2FXSPARK+1]),
S_BRIGHT (FX16, 'E', 12, NULL, &States[S_SOR2FXSPARK+2]),
S_BRIGHT (FX16, 'F', 12, NULL, NULL)
};
------------------------------------------------------------------------
//========== One of D'Sparil's two modes of attack, this projectile spawns a disciple and dies afterwards.
IMPLEMENT_ACTOR (ASorcerer2FX2, Heretic, -1, 146)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_SpeedFixed (6)
PROP_Damage (10)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_SOR2FX2)
PROP_DeathState (S_SOR2FXI2)
END_DEFAULTS
FState ASorcerer2FX2::States[] =
{
#define S_SOR2FX2 0
S_BRIGHT (FX11, 'A', 35, NULL , &States[S_SOR2FX2+1]),
S_BRIGHT (FX11, 'A', 5, A_GenWizard, &States[S_SOR2FX2+2]),
S_BRIGHT (FX11, 'B', 5, NULL , &States[S_SOR2FX2+1]),
#define S_SOR2FXI2 (S_SOR2FX2+3)
S_BRIGHT (FX11, 'C', 5, NULL , &States[S_SOR2FXI2+1]),
S_BRIGHT (FX11, 'D', 5, NULL , &States[S_SOR2FXI2+2]),
S_BRIGHT (FX11, 'E', 5, NULL , &States[S_SOR2FXI2+3]),
S_BRIGHT (FX11, 'F', 5, NULL , &States[S_SOR2FXI2+4]),
S_BRIGHT (FX11, 'G', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== When D'Sparil teleports, this actor is spawned in his place.
IMPLEMENT_ACTOR (ASorcerer2Telefade, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP)
PROP_SpawnState (S_SOR2TELEFADE)
END_DEFAULTS
FState ASorcerer2Telefade::States[] =
{
#define S_SOR2TELEFADE 0
S_NORMAL1 (SOR2, 'G', 8, NULL, &States[S_SOR2TELEFADE+1]),
S_NORMAL1 (SOR2, 'H', 6, NULL, &States[S_SOR2TELEFADE+2]),
S_NORMAL1 (SOR2, 'I', 6, NULL, &States[S_SOR2TELEFADE+3]),
S_NORMAL1 (SOR2, 'J', 6, NULL, &States[S_SOR2TELEFADE+4]),
S_NORMAL1 (SOR2, 'K', 6, NULL, &States[S_SOR2TELEFADE+5]),
S_NORMAL1 (SOR2, 'L', 6, NULL, NULL)
};
------------------------------------------------------------------------
//========== Master for all scripted ambient sounds on a level
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbientMaster, Heretic, -1, 0)
PROP_Flags (MF_NOSECTOR|MF_NOBLOCKMAP)
END_DEFAULTS
------------------------------------------------------------------------
//========== Individual ambient sound things
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient, Heretic, -1, 0)
PROP_Flags (MF_NOSECTOR|MF_NOBLOCKMAP)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient1, Heretic, 1200, 0)
PROP_SpawnHealth (1200)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient2, Heretic, 1201, 0)
PROP_SpawnHealth (1201)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient3, Heretic, 1202, 0)
PROP_SpawnHealth (1202)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient4, Heretic, 1203, 0)
PROP_SpawnHealth (1203)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient5, Heretic, 1204, 0)
PROP_SpawnHealth (1204)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient6, Heretic, 1205, 0)
PROP_SpawnHealth (1205)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient7, Heretic, 1206, 0)
PROP_SpawnHealth (1206)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient8, Heretic, 1207, 0)
PROP_SpawnHealth (1207)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient9, Heretic, 1208, 0)
PROP_SpawnHealth (1208)
END_DEFAULTS
------------------------------------------------------------------------
//========== Scripted ambient sound thing
IMPLEMENT_STATELESS_ACTOR (AScriptedAmbient10, Heretic, 1209, 0)
PROP_SpawnHealth (1209)
END_DEFAULTS
------------------------------------------------------------------------
//========== Silver Shield (Shield1)
IMPLEMENT_ACTOR (ASilverShield, Heretic, 85, 68)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ASilverShield::States[] =
{
S_NORMAL1 (SHLD, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Enchanted shield (Shield2)
IMPLEMENT_ACTOR (AEnchantedShield, Heretic, 31, 69)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AEnchantedShield::States[] =
{
S_NORMAL1 (SHD2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Invisibility artifact
IMPLEMENT_ACTOR (AArtiInvisibility, Heretic, 75, 135)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState AArtiInvisibility::States[] =
{
S_BRIGHT (INVS, 'A', 350, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Tome of power artifact
IMPLEMENT_ACTOR (AArtiTomeOfPower, Heretic, 86, 134)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AArtiTomeOfPower::States[] =
{
S_NORMAL1 (PWBK, 'A', 350, NULL, &States[0])
};
------------------------------------------------------------------------
//========== The time bomb artifact is a large hourglass that explodes a few seconds after being used.
IMPLEMENT_ACTOR (AArtiTimeBomb, Heretic, 34, 72)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState AArtiTimeBomb::States[] =
{
S_NORMAL1 (FBMB, 'E', 350, NULL, &States[0]),
};
------------------------------------------------------------------------
//========== When a time bomb of the Ancients is used, this actor is spawned.
IMPLEMENT_ACTOR (AActivatedTimeBomb, Heretic, -1, 72)
PROP_Flags (MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (0)
PROP_DeathSound ("misc/timebomb")
END_DEFAULTS
FState AActivatedTimeBomb::States[] =
{
S_NORMAL1(FBMB, 'A', 10, NULL , &States[1]),
S_NORMAL1(FBMB, 'B', 10, NULL , &States[2]),
S_NORMAL1(FBMB, 'C', 10, NULL , &States[3]),
S_NORMAL1(FBMB, 'D', 10, NULL , &States[4]),
S_NORMAL1(FBMB, 'E', 6, A_Scream , &States[5]),
S_BRIGHT (XPL1, 'A', 4, A_Explode, &States[6]),
S_BRIGHT (XPL1, 'B', 4, NULL , &States[7]),
S_BRIGHT (XPL1, 'C', 4, NULL , &States[8]),
S_BRIGHT (XPL1, 'D', 4, NULL , &States[9]),
S_BRIGHT (XPL1, 'E', 4, NULL , &States[10]),
S_BRIGHT (XPL1, 'F', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== Heretic imp (gargoyle)
IMPLEMENT_ACTOR (AHereticImp, Heretic, 66, 5)
PROP_SpawnHealth (40)
PROP_RadiusFixed (16)
PROP_HeightFixed (36)
PROP_Mass (50)
PROP_SpeedFixed (10)
PROP_PainChance (200)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL)
PROP_Flags2 (MF2_SPAWNFLOAT|MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_Flags3 (MF3_DONTOVERLAP)
PROP_SpawnState (S_IMP_LOOK)
PROP_SeeState (S_IMP_FLY)
PROP_PainState (S_IMP_PAIN)
PROP_MeleeState (S_IMP_MEATK)
PROP_MissileState (S_IMP_MSATK1)
PROP_CrashState (S_IMP_CRASH)
PROP_DeathState (S_IMP_DIE)
PROP_XDeathState (S_IMP_XDIE)
PROP_SeeSound ("imp/sight")
PROP_AttackSound ("imp/attack")
PROP_PainSound ("imp/pain")
PROP_DeathSound ("imp/death")
PROP_ActiveSound ("imp/active")
END_DEFAULTS
FState AHereticImp::States[] =
{
#define S_IMP_LOOK 0
S_NORMAL1 (IMPX, 'A', 10, A_Look , &States[S_IMP_LOOK+1]),
S_NORMAL1 (IMPX, 'B', 10, A_Look , &States[S_IMP_LOOK+2]),
S_NORMAL1 (IMPX, 'C', 10, A_Look , &States[S_IMP_LOOK+3]),
S_NORMAL1 (IMPX, 'B', 10, A_Look , &States[S_IMP_LOOK+0]),
#define S_IMP_FLY (S_IMP_LOOK+4)
S_NORMAL1 (IMPX, 'A', 3, A_Chase , &States[S_IMP_FLY+1]),
S_NORMAL1 (IMPX, 'A', 3, A_Chase , &States[S_IMP_FLY+2]),
S_NORMAL1 (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+3]),
S_NORMAL1 (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+4]),
S_NORMAL1 (IMPX, 'C', 3, A_Chase , &States[S_IMP_FLY+5]),
S_NORMAL1 (IMPX, 'C', 3, A_Chase , &States[S_IMP_FLY+6]),
S_NORMAL1 (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+7]),
S_NORMAL1 (IMPX, 'B', 3, A_Chase , &States[S_IMP_FLY+0]),
#define S_IMP_MEATK (S_IMP_FLY+8)
S_NORMAL1 (IMPX, 'D', 6, A_FaceTarget , &States[S_IMP_MEATK+1]),
S_NORMAL1 (IMPX, 'E', 6, A_FaceTarget , &States[S_IMP_MEATK+2]),
S_NORMAL1 (IMPX, 'F', 6, A_ImpMeAttack, &States[S_IMP_FLY+0]),
#define S_IMP_MSATK1 (S_IMP_MEATK+3)
S_NORMAL1 (IMPX, 'A', 10, A_FaceTarget , &States[S_IMP_MSATK1+1]),
S_NORMAL1 (IMPX, 'B', 6, A_ImpMsAttack, &States[S_IMP_MSATK1+2]),
S_NORMAL1 (IMPX, 'C', 6, NULL , &States[S_IMP_MSATK1+3]),
S_NORMAL1 (IMPX, 'B', 6, NULL , &States[S_IMP_MSATK1+4]),
S_NORMAL1 (IMPX, 'A', 6, NULL , &States[S_IMP_MSATK1+5]),
S_NORMAL1 (IMPX, 'B', 6, NULL , &States[S_IMP_MSATK1+2]),
#define S_IMP_PAIN (S_IMP_MSATK1+6)
S_NORMAL1 (IMPX, 'G', 3, NULL , &States[S_IMP_PAIN+1]),
S_NORMAL1 (IMPX, 'G', 3, A_Pain , &States[S_IMP_FLY+0]),
#define S_IMP_DIE (S_IMP_PAIN+2)
S_NORMAL1 (IMPX, 'G', 4, A_ImpDeath , &States[S_IMP_DIE+1]),
S_NORMAL1 (IMPX, 'H', 5, NULL , &States[S_IMP_DIE+1]),
#define S_IMP_XDIE (S_IMP_DIE+2)
S_NORMAL1 (IMPX, 'S', 5, A_ImpXDeath1 , &States[S_IMP_XDIE+1]),
S_NORMAL1 (IMPX, 'T', 5, NULL , &States[S_IMP_XDIE+2]),
S_NORMAL1 (IMPX, 'U', 5, NULL , &States[S_IMP_XDIE+3]),
S_NORMAL1 (IMPX, 'V', 5, A_ImpXDeath2 , &States[S_IMP_XDIE+4]),
S_NORMAL1 (IMPX, 'W', 5, NULL , &States[S_IMP_XDIE+4]),
#define S_IMP_CRASH (S_IMP_XDIE+5)
S_NORMAL1 (IMPX, 'I', 7, A_ImpExplode , &States[S_IMP_CRASH+1]),
S_NORMAL1 (IMPX, 'J', 7, A_Scream , &States[S_IMP_CRASH+2]),
S_NORMAL1 (IMPX, 'K', 7, NULL , &States[S_IMP_CRASH+3]),
S_NORMAL1 (IMPX, 'L', -1, NULL , NULL),
#define S_IMP_XCRASH (S_IMP_CRASH+4)
S_NORMAL1 (IMPX, 'X', 7, NULL , &States[S_IMP_XCRASH+1]),
S_NORMAL1 (IMPX, 'Y', 7, NULL , &States[S_IMP_XCRASH+2]),
S_NORMAL1 (IMPX, 'Z', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Heretic imp leader (Fire gargoyle)
IMPLEMENT_ACTOR (AHereticImpLeader, Heretic, 5, 7)
PROP_SpawnHealth (80)
PROP_MeleeState (~0)
PROP_MissileState (S_IMP_MSATK2)
PROP_AttackSound ("imp/leaderattack")
END_DEFAULTS
FState AHereticImpLeader::States[] =
{
#define S_IMP_MSATK2 0
S_NORMAL1 (IMPX, 'D', 6, A_FaceTarget , &States[S_IMP_MSATK2+1]),
S_NORMAL1 (IMPX, 'E', 6, A_FaceTarget , &States[S_IMP_MSATK2+2]),
S_NORMAL1 (IMPX, 'F', 6, A_ImpMsAttack2, &AHereticImp::States[S_IMP_FLY]),
};
------------------------------------------------------------------------
//========== A chunk of gargoyle meat created by the death of a gargoyle or fire gargoyle.
IMPLEMENT_ACTOR (AHereticImpChunk1, Heretic, -1, 0)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState AHereticImpChunk1::States[] =
{
S_NORMAL1 (IMPX, 'M', 5, NULL, &States[1]),
S_NORMAL1 (IMPX, 'N', 700, NULL, &States[2]),
S_NORMAL1 (IMPX, 'O', 700, NULL, NULL)
};
------------------------------------------------------------------------
//========== A chunk of gargoyle meat created by the death of a gargoyle or fire gargoyle.
IMPLEMENT_ACTOR (AHereticImpChunk2, Heretic, -1, 0)
PROP_Mass (5)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState AHereticImpChunk2::States[] =
{
S_NORMAL1 (IMPX, 'P', 5, NULL, &States[1]),
S_NORMAL1 (IMPX, 'Q', 700, NULL, &States[2]),
S_NORMAL1 (IMPX, 'R', 700, NULL, NULL)
};
------------------------------------------------------------------------
//========== The little fireball thrown by fire gargoyles. Common gargoyles are unable to produce them.
IMPLEMENT_ACTOR (AHereticImpBall, Heretic, -1, 10)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_SpeedFixed (10)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_IMPFX)
PROP_DeathState (S_IMPFXI)
END_DEFAULTS
FState AHereticImpBall::States[] =
{
#define S_IMPFX 0
S_BRIGHT (FX10, 'A', 6, NULL, &States[S_IMPFX+1]),
S_BRIGHT (FX10, 'B', 6, NULL, &States[S_IMPFX+2]),
S_BRIGHT (FX10, 'C', 6, NULL, &States[S_IMPFX+0]),
#define S_IMPFXI (S_IMPFX+3)
S_BRIGHT (FX10, 'D', 5, NULL, &States[S_IMPFXI+1]),
S_BRIGHT (FX10, 'E', 5, NULL, &States[S_IMPFXI+2]),
S_BRIGHT (FX10, 'F', 5, NULL, &States[S_IMPFXI+3]),
S_BRIGHT (FX10, 'G', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== Green key
IMPLEMENT_ACTOR (AKeyGreen, Heretic, 73, 86)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyGreen::States[] =
{
S_BRIGHT (AKYY, 'A', 3, NULL, &States[1]),
S_BRIGHT (AKYY, 'B', 3, NULL, &States[2]),
S_BRIGHT (AKYY, 'C', 3, NULL, &States[3]),
S_BRIGHT (AKYY, 'D', 3, NULL, &States[4]),
S_BRIGHT (AKYY, 'E', 3, NULL, &States[5]),
S_BRIGHT (AKYY, 'F', 3, NULL, &States[6]),
S_BRIGHT (AKYY, 'G', 3, NULL, &States[7]),
S_BRIGHT (AKYY, 'H', 3, NULL, &States[8]),
S_BRIGHT (AKYY, 'I', 3, NULL, &States[9]),
S_BRIGHT (AKYY, 'J', 3, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Blue key
IMPLEMENT_ACTOR (AKeyBlue, Heretic, 79, 85)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyBlue::States[] =
{
S_BRIGHT (BKYY, 'A', 3, NULL, &States[1]),
S_BRIGHT (BKYY, 'B', 3, NULL, &States[2]),
S_BRIGHT (BKYY, 'C', 3, NULL, &States[3]),
S_BRIGHT (BKYY, 'D', 3, NULL, &States[4]),
S_BRIGHT (BKYY, 'E', 3, NULL, &States[5]),
S_BRIGHT (BKYY, 'F', 3, NULL, &States[6]),
S_BRIGHT (BKYY, 'G', 3, NULL, &States[7]),
S_BRIGHT (BKYY, 'H', 3, NULL, &States[8]),
S_BRIGHT (BKYY, 'I', 3, NULL, &States[9]),
S_BRIGHT (BKYY, 'J', 3, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Yellow key
FState AKeyYellow::States[] =
{
S_BRIGHT (CKYY, 'A', 3, NULL, &States[1]),
S_BRIGHT (CKYY, 'B', 3, NULL, &States[2]),
S_BRIGHT (CKYY, 'C', 3, NULL, &States[3]),
S_BRIGHT (CKYY, 'D', 3, NULL, &States[4]),
S_BRIGHT (CKYY, 'E', 3, NULL, &States[5]),
S_BRIGHT (CKYY, 'F', 3, NULL, &States[6]),
S_BRIGHT (CKYY, 'G', 3, NULL, &States[7]),
S_BRIGHT (CKYY, 'H', 3, NULL, &States[8]),
S_BRIGHT (CKYY, 'I', 3, NULL, &States[0])
};
IMPLEMENT_ACTOR (AKeyYellow, Heretic, 80, 87)
PROP_Flags (MF_SPECIAL|MF_NOTDMATCH)
PROP_SpawnState (0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Key gizmos
IMPLEMENT_ACTOR (AKeyGizmo, Heretic, -1, 0)
PROP_RadiusFixed (16)
PROP_HeightFixed (50)
PROP_Flags (MF_SOLID)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyGizmo::States[] =
{
S_NORMAL1 (KGZ1, 'A', 1, NULL , &States[1]),
S_NORMAL1 (KGZ1, 'A', 1, A_InitKeyGizmo, &States[2]),
S_NORMAL1 (KGZ1, 'A', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Key gizmo float
IMPLEMENT_ACTOR (AKeyGizmoFloat, Heretic, -1, 0)
PROP_RadiusFixed (16)
PROP_HeightFixed (16)
PROP_Flags (MF_SOLID|MF_NOGRAVITY)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState AKeyGizmoFloat::States[] =
{
#define S_KGZ_BLUEFLOAT 0
S_BRIGHT (KGZB, 'A', -1, NULL, NULL),
#define S_KGZ_GREENFLOAT (S_KGZ_BLUEFLOAT+1)
S_BRIGHT (KGZG, 'A', -1, NULL, NULL),
#define S_KGZ_YELLOWFLOAT (S_KGZ_GREENFLOAT+1)
S_BRIGHT (KGZY, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Blue gizmo
IMPLEMENT_STATELESS_ACTOR (AKeyGizmoBlue, Heretic, 94, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Green gizmo
IMPLEMENT_STATELESS_ACTOR (AKeyGizmoGreen, Heretic, 95, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== Yellow gizmo
IMPLEMENT_STATELESS_ACTOR (AKeyGizmoYellow, Heretic, 96, 0)
END_DEFAULTS
------------------------------------------------------------------------
//========== A strange fungal growth, floating a few inches over the ground, which explodes when damaged too much.
BEGIN_DEFAULTS (APod, Heretic, 2035, 125)
PROP_SpawnHealth (45)
PROP_RadiusFixed (16)
PROP_HeightFixed (54)
PROP_PainChance (255)
PROP_Flags (MF_SOLID|MF_NOBLOOD|MF_SHOOTABLE|MF_DROPOFF)
PROP_Flags2 (MF2_WINDTHRUST|MF2_PUSHABLE|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP)
PROP_Flags3 (MF3_DONTMORPH|MF3_NOBLOCKMONST)
PROP_SpawnState (S_POD_WAIT)
PROP_PainState (S_POD_PAIN)
PROP_DeathState (S_POD_DIE)
PROP_DeathSound ("world/podexplode")
END_DEFAULTS
FState APod::States[] =
{
#define S_POD_WAIT 0
S_NORMAL1 (PPOD, 'A', 10, NULL , &States[S_POD_WAIT+0]),
#define S_POD_PAIN (S_POD_WAIT+1)
S_NORMAL1 (PPOD, 'B', 14, A_PodPain , &States[S_POD_WAIT+0]),
#define S_POD_DIE (S_POD_PAIN+1)
S_BRIGHT (PPOD, 'C', 5, A_RemovePod, &States[S_POD_DIE+1]),
S_BRIGHT (PPOD, 'D', 5, A_Scream , &States[S_POD_DIE+2]),
S_BRIGHT (PPOD, 'E', 5, A_Explode , &States[S_POD_DIE+3]),
S_BRIGHT (PPOD, 'F', 10, NULL , &AActor::States[S_FREETARGMOBJ]),
#define S_POD_GROW (S_POD_DIE+4)
S_NORMAL1 (PPOD, 'I', 3, NULL , &States[S_POD_GROW+1]),
S_NORMAL1 (PPOD, 'J', 3, NULL , &States[S_POD_GROW+2]),
S_NORMAL1 (PPOD, 'K', 3, NULL , &States[S_POD_GROW+3]),
S_NORMAL1 (PPOD, 'L', 3, NULL , &States[S_POD_GROW+4]),
S_NORMAL1 (PPOD, 'M', 3, NULL , &States[S_POD_GROW+5]),
S_NORMAL1 (PPOD, 'N', 3, NULL , &States[S_POD_GROW+6]),
S_NORMAL1 (PPOD, 'O', 3, NULL , &States[S_POD_GROW+7]),
S_NORMAL1 (PPOD, 'P', 3, NULL , &States[S_POD_WAIT+0])
};
------------------------------------------------------------------------
//========== Pod goo (falls from pod when damaged)
IMPLEMENT_ACTOR (APodGoo, Heretic, -1, 0)
PROP_RadiusFixed (2)
PROP_HeightFixed (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_NOTELEPORT|MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_PODGOO)
END_DEFAULTS
FState APodGoo::States[] =
{
#define S_PODGOO 0
S_NORMAL1 (PPOD, 'G', 8, NULL, &States[S_PODGOO+1]),
S_NORMAL1 (PPOD, 'H', 8, NULL, &States[S_PODGOO+0]),
#define S_PODGOOX (S_PODGOO+2)
S_NORMAL1 (PPOD, 'G', 10, NULL, NULL)
};
------------------------------------------------------------------------
//========== Pod generator
IMPLEMENT_ACTOR (APodGenerator, Heretic, 43, 126)
PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState APodGenerator::States[] =
{
S_NORMAL1 (TNT1, 'A', 35, A_MakePod, &States[0])
};
------------------------------------------------------------------------
//========== This constantly creates small red particles. They are typically used to mark intra-level teleporters.
IMPLEMENT_ACTOR (ATeleGlitterGenerator1, Heretic, 74, 166)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOSECTOR)
PROP_SpawnState (0)
END_DEFAULTS
FState ATeleGlitterGenerator1::States[] =
{
S_NORMAL1 (TGLT, 'A', 8, A_SpawnTeleGlitter, &States[0])
};
------------------------------------------------------------------------
//========== This constantly creates small blue particles. They are typically used to mark level-exit teleporters.
IMPLEMENT_ACTOR (ATeleGlitterGenerator2, Heretic, 52, 167)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_NOSECTOR)
PROP_SpawnState (0)
END_DEFAULTS
FState ATeleGlitterGenerator2::States[] =
{
S_NORMAL1 (TGLT, 'F', 8, A_SpawnTeleGlitter2, &States[0])
};
------------------------------------------------------------------------
//========== A small particle created by a red glitter generator.
IMPLEMENT_ACTOR (ATeleGlitter1, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState ATeleGlitter1::States[] =
{
S_BRIGHT (TGLT, 'A', 2, NULL , &States[1]),
S_BRIGHT (TGLT, 'B', 2, A_AccTeleGlitter, &States[2]),
S_BRIGHT (TGLT, 'C', 2, NULL , &States[3]),
S_BRIGHT (TGLT, 'D', 2, A_AccTeleGlitter, &States[4]),
S_BRIGHT (TGLT, 'E', 2, NULL , &States[0])
};
------------------------------------------------------------------------
//========== A blue variant of the red glitter, created by a blue glitter generator.
IMPLEMENT_ACTOR (ATeleGlitter2, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_MISSILE)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (0)
END_DEFAULTS
FState ATeleGlitter2::States[] =
{
S_BRIGHT (TGLT, 'F', 2, NULL , &States[1]),
S_BRIGHT (TGLT, 'G', 2, A_AccTeleGlitter, &States[2]),
S_BRIGHT (TGLT, 'H', 2, NULL , &States[3]),
S_BRIGHT (TGLT, 'I', 2, A_AccTeleGlitter, &States[4]),
S_BRIGHT (TGLT, 'J', 2, NULL , &States[0])
};
------------------------------------------------------------------------
//========== The Map Scroll. Reveals all the unexplored areas with gray lines.
IMPLEMENT_ACTOR (ASuperMap, Heretic, 35, 137)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ASuperMap::States[] =
{
#define S_ITEM_SPMP 0
S_NORMAL1 (SPMP, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== A miniature volcano that spouts gouts of fire.
IMPLEMENT_ACTOR (AVolcano, Heretic, 87, 150)
PROP_RadiusFixed (12)
PROP_HeightFixed (20)
PROP_Flags (MF_SOLID)
PROP_SpawnState (0)
END_DEFAULTS
FState AVolcano::States[] =
{
S_NORMAL1 (VLCO, 'A', 350, NULL , &States[1]),
S_NORMAL1 (VLCO, 'A', 35, A_VolcanoSet , &States[2]),
S_NORMAL1 (VLCO, 'B', 3, NULL , &States[3]),
S_NORMAL1 (VLCO, 'C', 3, NULL , &States[4]),
S_NORMAL1 (VLCO, 'D', 3, NULL , &States[5]),
S_NORMAL1 (VLCO, 'B', 3, NULL , &States[6]),
S_NORMAL1 (VLCO, 'C', 3, NULL , &States[7]),
S_NORMAL1 (VLCO, 'D', 3, NULL , &States[8]),
S_NORMAL1 (VLCO, 'E', 10, A_VolcanoBlast, &States[1])
};
------------------------------------------------------------------------
//========== A big ball of fire spitted by a volcano.
IMPLEMENT_ACTOR (AVolcanoBlast, Heretic, -1, 123)
PROP_RadiusFixed (8)
PROP_HeightFixed (8)
PROP_SpeedFixed (2)
PROP_Damage (2)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_SpawnState (S_VOLCANOBALL)
PROP_DeathState (S_VOLCANOBALLX)
PROP_DeathSound ("world/volcano/blast")
END_DEFAULTS
FState AVolcanoBlast::States[] =
{
#define S_VOLCANOBALL 0
S_NORMAL1 (VFBL, 'A', 4, A_BeastPuff , &States[S_VOLCANOBALL+1]),
S_NORMAL1 (VFBL, 'B', 4, A_BeastPuff , &States[S_VOLCANOBALL+0]),
#define S_VOLCANOBALLX (S_VOLCANOBALL+2)
S_NORMAL1 (XPL1, 'A', 4, A_VolcBallImpact, &States[S_VOLCANOBALLX+1]),
S_NORMAL1 (XPL1, 'B', 4, NULL , &States[S_VOLCANOBALLX+2]),
S_NORMAL1 (XPL1, 'C', 4, NULL , &States[S_VOLCANOBALLX+3]),
S_NORMAL1 (XPL1, 'D', 4, NULL , &States[S_VOLCANOBALLX+4]),
S_NORMAL1 (XPL1, 'E', 4, NULL , &States[S_VOLCANOBALLX+5]),
S_NORMAL1 (XPL1, 'F', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== A tiny ball of fire, resulting from the explosion of a bigger one spitted by a volcano.
IMPLEMENT_ACTOR (AVolcanoTBlast, Heretic, -1, 124)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (2)
PROP_Damage (1)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_NOTELEPORT)
PROP_SpawnState (S_VOLCANOTBALL)
PROP_DeathState (S_VOLCANOTBALLX)
END_DEFAULTS
FState AVolcanoTBlast::States[] =
{
#define S_VOLCANOTBALL 0
S_NORMAL1 (VTFB, 'A', 4, NULL, &States[S_VOLCANOTBALL+1]),
S_NORMAL1 (VTFB, 'B', 4, NULL, &States[S_VOLCANOTBALL+0]),
#define S_VOLCANOTBALLX (S_VOLCANOTBALL+2)
S_NORMAL1 (SFFI, 'C', 4, NULL, &States[S_VOLCANOTBALLX+1]),
S_NORMAL1 (SFFI, 'B', 4, NULL, &States[S_VOLCANOTBALLX+2]),
S_NORMAL1 (SFFI, 'A', 4, NULL, &States[S_VOLCANOTBALLX+3]),
S_NORMAL1 (SFFI, 'B', 4, NULL, &States[S_VOLCANOTBALLX+4]),
S_NORMAL1 (SFFI, 'C', 4, NULL, &States[S_VOLCANOTBALLX+5]),
S_NORMAL1 (SFFI, 'D', 4, NULL, &States[S_VOLCANOTBALLX+6]),
S_NORMAL1 (SFFI, 'E', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Player (Corvus)
IMPLEMENT_ACTOR (AHereticPlayer, Heretic, -1, 0)
PROP_SpawnHealth (100)
PROP_RadiusFixed (16)
PROP_HeightFixed (56)
PROP_SpeedFixed (1)
PROP_Mass (100)
PROP_PainChance (255)
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_PUSHWALL|MF2_TELESTOMP)
PROP_Flags3 (MF3_NOBLOCKMONST)
PROP_SpawnState (S_PLAY)
PROP_SeeState (S_PLAY_RUN)
PROP_PainState (S_PLAY_PAIN)
PROP_MissileState (S_PLAY_ATK)
PROP_DeathState (S_PLAY_DIE)
PROP_XDeathState (S_PLAY_XDIE)
PROP_BDeathState (S_PLAY_FDTH)
END_DEFAULTS
FState AHereticPlayer::States[] =
{
#define S_PLAY 0
S_NORMAL1 (PLAY, 'A', -1, NULL , NULL),
#define S_PLAY_RUN (S_PLAY+1)
S_NORMAL1 (PLAY, 'A', 4, NULL , &States[S_PLAY_RUN+1]),
S_NORMAL1 (PLAY, 'B', 4, NULL , &States[S_PLAY_RUN+2]),
S_NORMAL1 (PLAY, 'C', 4, NULL , &States[S_PLAY_RUN+3]),
S_NORMAL1 (PLAY, 'D', 4, NULL , &States[S_PLAY_RUN+0]),
#define S_PLAY_ATK (S_PLAY_RUN+4)
S_NORMAL1 (PLAY, 'E', 12, NULL , &States[S_PLAY]),
S_BRIGHT (PLAY, 'F', 6, NULL , &States[S_PLAY_ATK+0]),
#define S_PLAY_PAIN (S_PLAY_ATK+2)
S_NORMAL1 (PLAY, 'G', 4, NULL , &States[S_PLAY_PAIN+1]),
S_NORMAL1 (PLAY, 'G', 4, A_Pain , &States[S_PLAY]),
#define S_PLAY_DIE (S_PLAY_PAIN+2)
S_NORMAL1 (PLAY, 'H', 6, NULL , &States[S_PLAY_DIE+1]),
S_NORMAL1 (PLAY, 'I', 6, A_PlayerScream , &States[S_PLAY_DIE+2]),
S_NORMAL1 (PLAY, 'J', 6, NULL , &States[S_PLAY_DIE+3]),
S_NORMAL1 (PLAY, 'K', 6, NULL , &States[S_PLAY_DIE+4]),
S_NORMAL1 (PLAY, 'L', 6, A_NoBlocking , &States[S_PLAY_DIE+5]),
S_NORMAL1 (PLAY, 'M', 6, NULL , &States[S_PLAY_DIE+6]),
S_NORMAL1 (PLAY, 'N', 6, NULL , &States[S_PLAY_DIE+7]),
S_NORMAL1 (PLAY, 'O', 6, NULL , &States[S_PLAY_DIE+8]),
S_NORMAL1 (PLAY, 'P', -1, NULL , NULL),
#define S_PLAY_XDIE (S_PLAY_DIE+9)
S_NORMAL1 (PLAY, 'Q', 5, A_PlayerScream , &States[S_PLAY_XDIE+1]),
S_NORMAL1 (PLAY, 'R', 0, A_NoBlocking , &States[S_PLAY_XDIE+2]),
S_NORMAL1 (PLAY, 'R', 5, A_SkullPop , &States[S_PLAY_XDIE+3]),
S_NORMAL1 (PLAY, 'S', 5, NULL , &States[S_PLAY_XDIE+4]),
S_NORMAL1 (PLAY, 'T', 5, NULL , &States[S_PLAY_XDIE+5]),
S_NORMAL1 (PLAY, 'U', 5, NULL , &States[S_PLAY_XDIE+6]),
S_NORMAL1 (PLAY, 'V', 5, NULL , &States[S_PLAY_XDIE+7]),
S_NORMAL1 (PLAY, 'W', 5, NULL , &States[S_PLAY_XDIE+8]),
S_NORMAL1 (PLAY, 'X', 5, NULL , &States[S_PLAY_XDIE+9]),
S_NORMAL1 (PLAY, 'Y', -1, NULL , NULL),
#define S_PLAY_FDTH (S_PLAY_XDIE+10)
S_BRIGHT (FDTH, 'A', 5, A_FlameSnd , &States[S_PLAY_FDTH+1]),
S_BRIGHT (FDTH, 'B', 4, NULL , &States[S_PLAY_FDTH+2]),
S_BRIGHT (FDTH, 'C', 5, NULL , &States[S_PLAY_FDTH+3]),
S_BRIGHT (FDTH, 'D', 4, A_PlayerScream , &States[S_PLAY_FDTH+4]),
S_BRIGHT (FDTH, 'E', 5, NULL , &States[S_PLAY_FDTH+5]),
S_BRIGHT (FDTH, 'F', 4, NULL , &States[S_PLAY_FDTH+6]),
S_BRIGHT (FDTH, 'G', 5, A_FlameSnd , &States[S_PLAY_FDTH+7]),
S_BRIGHT (FDTH, 'H', 4, NULL , &States[S_PLAY_FDTH+8]),
S_BRIGHT (FDTH, 'I', 5, NULL , &States[S_PLAY_FDTH+9]),
S_BRIGHT (FDTH, 'J', 4, NULL , &States[S_PLAY_FDTH+10]),
S_BRIGHT (FDTH, 'K', 5, NULL , &States[S_PLAY_FDTH+11]),
S_BRIGHT (FDTH, 'L', 4, NULL , &States[S_PLAY_FDTH+12]),
S_BRIGHT (FDTH, 'M', 5, NULL , &States[S_PLAY_FDTH+13]),
S_BRIGHT (FDTH, 'N', 4, NULL , &States[S_PLAY_FDTH+14]),
S_BRIGHT (FDTH, 'O', 5, A_NoBlocking , &States[S_PLAY_FDTH+15]),
S_BRIGHT (FDTH, 'P', 4, NULL , &States[S_PLAY_FDTH+16]),
S_BRIGHT (FDTH, 'Q', 5, NULL , &States[S_PLAY_FDTH+17]),
S_BRIGHT (FDTH, 'R', 4, NULL , &States[S_PLAY_FDTH+18]),
S_NORMAL1 (ACLO, 'E', 35, A_CheckBurnGone, &States[S_PLAY_FDTH+18])
};
------------------------------------------------------------------------
//========== Bloody skull created when Corvus is gibbed.
IMPLEMENT_ACTOR (ABloodySkull, Heretic, -1, 0)
PROP_RadiusFixed(4)
PROP_HeightFixed(4)
PROP_Flags(MF_NOBLOCKMAP|MF_DROPOFF)
PROP_Flags2(MF2_LOGRAV|MF2_CANNOTPUSH)
PROP_Flags3(MF3_SKYEXPLODE|MF3_NOBLOCKMONST)
PROP_Flags4(MF4_NONETSPAWN)
PROP_SpawnState(0)
END_DEFAULTS
FState ABloodySkull::States[] =
{
S_NORMAL1 (PLAY, 'A', 0, NULL , &States[1]),
#define S_BLOODYSKULL 1
S_NORMAL1 (BSKL, 'A', 5, A_CheckSkullFloor, &States[S_BLOODYSKULL+1]),
S_NORMAL1 (BSKL, 'B', 5, A_CheckSkullFloor, &States[S_BLOODYSKULL+2]),
S_NORMAL1 (BSKL, 'C', 5, A_CheckSkullFloor, &States[S_BLOODYSKULL+3]),
S_NORMAL1 (BSKL, 'D', 5, A_CheckSkullFloor, &States[S_BLOODYSKULL+4]),
S_NORMAL1 (BSKL, 'E', 5, A_CheckSkullFloor, &States[S_BLOODYSKULL+0]),
#define S_BLOODYSKULLX1 (S_BLOODYSKULL+5)
S_NORMAL1 (BSKL, 'F', 16, A_CheckSkullDone , &States[S_BLOODYSKULLX1]),
};
------------------------------------------------------------------------
//========== Corvus's ironshod staff. Useless against ghosts.
IMPLEMENT_ACTOR (AStaff, Heretic, -1, 0)
END_DEFAULTS
FState AStaff::States[] =
{
#define S_STAFFREADY 0
S_NORMAL1 (STFF, 'A', 1, A_WeaponReady , &States[S_STAFFREADY]),
#define S_STAFFDOWN (S_STAFFREADY+1)
S_NORMAL1 (STFF, 'A', 1, A_Lower , &States[S_STAFFDOWN]),
#define S_STAFFUP (S_STAFFDOWN+1)
S_NORMAL1 (STFF, 'A', 1, A_Raise , &States[S_STAFFUP]),
#define S_STAFFREADY2 (S_STAFFUP+1)
S_NORMAL1 (STFF, 'D', 4, A_WeaponReady , &States[S_STAFFREADY2+1]),
S_NORMAL1 (STFF, 'E', 4, A_WeaponReady , &States[S_STAFFREADY2+2]),
S_NORMAL1 (STFF, 'F', 4, A_WeaponReady , &States[S_STAFFREADY2+0]),
#define S_STAFFDOWN2 (S_STAFFREADY2+3)
S_NORMAL1 (STFF, 'D', 1, A_Lower , &States[S_STAFFDOWN2]),
#define S_STAFFUP2 (S_STAFFDOWN2+1)
S_NORMAL1 (STFF, 'D', 1, A_Raise , &States[S_STAFFUP2]),
#define S_STAFFATK1 (S_STAFFUP2+1)
S_NORMAL1 (STFF, 'B', 6, NULL , &States[S_STAFFATK1+1]),
S_NORMAL1 (STFF, 'C', 8, A_StaffAttackPL1, &States[S_STAFFATK1+2]),
S_NORMAL1 (STFF, 'B', 8, A_ReFire , &States[S_STAFFREADY]),
#define S_STAFFATK2 (S_STAFFATK1+3)
S_NORMAL1 (STFF, 'G', 6, NULL , &States[S_STAFFATK2+1]),
S_NORMAL1 (STFF, 'H', 8, A_StaffAttackPL2, &States[S_STAFFATK2+2]),
S_NORMAL1 (STFF, 'G', 8, A_ReFire , &States[S_STAFFREADY2+0])
};
FWeaponInfo AStaff::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_STAFFUP],
&States[S_STAFFDOWN],
&States[S_STAFFREADY],
&States[S_STAFFATK1],
&States[S_STAFFATK1],
NULL,
NULL,
150,
0,
NULL,
NULL,
ZDRUNTIME_CLASS(AStaff),
-1
};
FWeaponInfo AStaff::WeaponInfo2 =
{
WIF_READYSNDHALF|WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_STAFFUP2],
&States[S_STAFFDOWN2],
&States[S_STAFFREADY2],
&States[S_STAFFATK2],
&States[S_STAFFATK2],
NULL,
NULL,
150,
0,
NULL,
"weapons/staffcrackle",
ZDRUNTIME_CLASS(AStaff),
-1
};
------------------------------------------------------------------------
//========== Impact puff from Corvus's staff.
IMPLEMENT_ACTOR (AStaffPuff, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_SpawnState (0)
PROP_AttackSound ("weapons/staffhit")
END_DEFAULTS
FState AStaffPuff::States[] =
{
S_BRIGHT (PUF3, 'A', 4, NULL, &States[1]),
S_NORMAL1 (PUF3, 'B', 4, NULL, &States[2]),
S_NORMAL1 (PUF3, 'C', 4, NULL, &States[3]),
S_NORMAL1 (PUF3, 'D', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Electric impact puff from Corvus's tomed staff.
IMPLEMENT_ACTOR (AStaffPuff2, Heretic, -1, 0)
PROP_SpawnState (0)
PROP_AttackSound ("weapons/staffpowerhit")
END_DEFAULTS
FState AStaffPuff2::States[] =
{
S_BRIGHT (PUF4, 'A', 4, NULL, &States[1]),
S_BRIGHT (PUF4, 'B', 4, NULL, &States[2]),
S_BRIGHT (PUF4, 'C', 4, NULL, &States[3]),
S_BRIGHT (PUF4, 'D', 4, NULL, &States[4]),
S_BRIGHT (PUF4, 'E', 4, NULL, &States[5]),
S_BRIGHT (PUF4, 'F', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Small crystal containing ten charges for the gold wand. When dropped by a golem, they contain only three charges.
IMPLEMENT_ACTOR (AGoldWandAmmo, Heretic, 10, 11)
PROP_SpawnHealth (AMMO_GWND_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AGoldWandAmmo::States[] =
{
S_NORMAL1 (AMG1, 'A', -1, NULL, NULL),
};
------------------------------------------------------------------------
//========== Large crystal containing fifty charges for the gold wand.
IMPLEMENT_ACTOR (AGoldWandHefty, Heretic, 12, 12)
PROP_SpawnHealth (AMMO_GWND_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AGoldWandHefty::States[] =
{
S_NORMAL1 (AMG2, 'A', 4, NULL, &States[1]),
S_NORMAL1 (AMG2, 'B', 4, NULL, &States[2]),
S_NORMAL1 (AMG2, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Corvus's elvenwand. It fires magical hitscan shots.
IMPLEMENT_ACTOR (AGoldWand, Heretic, -1, 0)
END_DEFAULTS
FState AGoldWand::States[] =
{
#define S_GOLDWANDREADY 0
S_NORMAL1 (GWND, 'A', 1, A_WeaponReady , &States[S_GOLDWANDREADY]),
#define S_GOLDWANDDOWN (S_GOLDWANDREADY+1)
S_NORMAL1 (GWND, 'A', 1, A_Lower , &States[S_GOLDWANDDOWN]),
#define S_GOLDWANDUP (S_GOLDWANDDOWN+1)
S_NORMAL1 (GWND, 'A', 1, A_Raise , &States[S_GOLDWANDUP]),
#define S_GOLDWANDATK1 (S_GOLDWANDUP+1)
S_NORMAL1 (GWND, 'B', 3, NULL , &States[S_GOLDWANDATK1+1]),
S_NORMAL1 (GWND, 'C', 5, A_FireGoldWandPL1, &States[S_GOLDWANDATK1+2]),
S_NORMAL1 (GWND, 'D', 3, NULL , &States[S_GOLDWANDATK1+3]),
S_NORMAL1 (GWND, 'D', 0, A_ReFire , &States[S_GOLDWANDREADY]),
#define S_GOLDWANDATK2 (S_GOLDWANDATK1+4)
S_NORMAL1 (GWND, 'B', 3, NULL , &States[S_GOLDWANDATK2+1]),
S_NORMAL1 (GWND, 'C', 4, A_FireGoldWandPL2, &States[S_GOLDWANDATK2+2]),
S_NORMAL1 (GWND, 'D', 3, NULL , &States[S_GOLDWANDATK2+3]),
S_NORMAL1 (GWND, 'D', 0, A_ReFire , &States[S_GOLDWANDREADY])
};
FWeaponInfo AGoldWand::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_goldwand,
USE_GWND_AMMO_1,
25,
&States[S_GOLDWANDUP],
&States[S_GOLDWANDDOWN],
&States[S_GOLDWANDREADY],
&States[S_GOLDWANDATK1],
&States[S_GOLDWANDATK1],
NULL,
ZDRUNTIME_CLASS(AGoldWandAmmo),
150,
5*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(AGoldWand),
-1
};
FWeaponInfo AGoldWand::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_goldwand,
USE_GWND_AMMO_2,
25,
&States[S_GOLDWANDUP],
&States[S_GOLDWANDDOWN],
&States[S_GOLDWANDREADY],
&States[S_GOLDWANDATK2],
&States[S_GOLDWANDATK2],
NULL,
ZDRUNTIME_CLASS(AGoldWandHefty),
150,
5*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(AGoldWand),
-1
};
------------------------------------------------------------------------
//========== While this actor is not normally used by the elvenwand, it serves as a base class for its powered-up projectile and puff.
IMPLEMENT_ACTOR (AGoldWandFX1, Heretic, -1, 151)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_SpeedFixed (22)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_GWANDFX1)
PROP_DeathState (S_GWANDFXI1)
PROP_DeathSound ("weapons/wandhit")
END_DEFAULTS
FState AGoldWandFX1::States[] =
{
#define S_GWANDFX1 0
S_BRIGHT (FX01, 'A', 6, NULL, &States[S_GWANDFX1+1]),
S_BRIGHT (FX01, 'B', 6, NULL, &States[S_GWANDFX1+0]),
#define S_GWANDFXI1 (S_GWANDFX1+2)
S_BRIGHT (FX01, 'E', 3, NULL, &States[S_GWANDFXI1+1]),
S_BRIGHT (FX01, 'F', 3, NULL, &States[S_GWANDFXI1+2]),
S_BRIGHT (FX01, 'G', 3, NULL, &States[S_GWANDFXI1+3]),
S_BRIGHT (FX01, 'H', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== A projectile from the tomed elvenwand.
IMPLEMENT_ACTOR (AGoldWandFX2, Heretic, -1, 152)
PROP_SpeedFixed (18)
PROP_Damage (1)
PROP_SpawnState (0)
PROP_DeathSound ("")
END_DEFAULTS
FState AGoldWandFX2::States[] =
{
S_BRIGHT (FX01, 'C', 6, NULL, &States[1]),
S_BRIGHT (FX01, 'D', 6, NULL, &States[0])
};
------------------------------------------------------------------------
//========== A hitscan puff from the elvenwand. It appears even on bleeding actors.
IMPLEMENT_ACTOR (AGoldWandPuff1, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_SpawnState (0)
END_DEFAULTS
FState AGoldWandPuff1::States[] =
{
S_BRIGHT (PUF2, 'A', 3, NULL, &States[1]),
S_BRIGHT (PUF2, 'B', 3, NULL, &States[2]),
S_BRIGHT (PUF2, 'C', 3, NULL, &States[3]),
S_BRIGHT (PUF2, 'D', 3, NULL, &States[4]),
S_BRIGHT (PUF2, 'E', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== A hitscan puff from the tomed elvenwand.
IMPLEMENT_STATELESS_ACTOR (AGoldWandPuff2, Heretic, -1, 0)
PROP_SpawnState (S_GWANDFXI1)
END_DEFAULTS
------------------------------------------------------------------------
//========== Small bundle of five arrows for the ethereal crossbow.
IMPLEMENT_ACTOR (ACrossbowAmmo, Heretic, 18, 33)
PROP_SpawnHealth (AMMO_CBOW_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ACrossbowAmmo::States[] =
{
S_NORMAL1 (AMC1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Quiver of twenty arrows for the ethereal crossbow.
IMPLEMENT_ACTOR (ACrossbowHefty, Heretic, 19, 34)
PROP_SpawnHealth (AMMO_CBOW_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ACrossbowHefty::States[] =
{
S_NORMAL1 (AMC2, 'A', 5, NULL, &States[1]),
S_NORMAL1 (AMC2, 'B', 5, NULL, &States[2]),
S_NORMAL1 (AMC2, 'C', 5, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Ethereal crossbow
IMPLEMENT_ACTOR (ACrossbow, Heretic, 2001, 27)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_WBOW)
END_DEFAULTS
FState ACrossbow::States[] =
{
#define S_WBOW 0
S_NORMAL1 (WBOW, 'A', -1, NULL , NULL),
#define S_CRBOW (S_WBOW+1)
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+1]),
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+2]),
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+3]),
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+4]),
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+5]),
S_NORMAL1 (CRBW, 'A', 1, A_WeaponReady , &States[S_CRBOW+6]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+7]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+8]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+9]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+10]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+11]),
S_NORMAL1 (CRBW, 'B', 1, A_WeaponReady , &States[S_CRBOW+12]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+13]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+14]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+15]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+16]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+17]),
S_NORMAL1 (CRBW, 'C', 1, A_WeaponReady , &States[S_CRBOW+0]),
#define S_CRBOWDOWN (S_CRBOW+18)
S_NORMAL1 (CRBW, 'A', 1, A_Lower , &States[S_CRBOWDOWN]),
#define S_CRBOWUP (S_CRBOWDOWN+1)
S_NORMAL1 (CRBW, 'A', 1, A_Raise , &States[S_CRBOWUP]),
#define S_CRBOWATK1 (S_CRBOWUP+1)
S_NORMAL1 (CRBW, 'D', 6, A_FireCrossbowPL1, &States[S_CRBOWATK1+1]),
S_NORMAL1 (CRBW, 'E', 3, NULL , &States[S_CRBOWATK1+2]),
S_NORMAL1 (CRBW, 'F', 3, NULL , &States[S_CRBOWATK1+3]),
S_NORMAL1 (CRBW, 'G', 3, NULL , &States[S_CRBOWATK1+4]),
S_NORMAL1 (CRBW, 'H', 3, NULL , &States[S_CRBOWATK1+5]),
S_NORMAL1 (CRBW, 'A', 4, NULL , &States[S_CRBOWATK1+6]),
S_NORMAL1 (CRBW, 'B', 4, NULL , &States[S_CRBOWATK1+7]),
S_NORMAL1 (CRBW, 'C', 5, A_ReFire , &States[S_CRBOW+0]),
#define S_CRBOWATK2 (S_CRBOWATK1+8)
S_NORMAL1 (CRBW, 'D', 5, A_FireCrossbowPL2, &States[S_CRBOWATK2+1]),
S_NORMAL1 (CRBW, 'E', 3, NULL , &States[S_CRBOWATK2+2]),
S_NORMAL1 (CRBW, 'F', 2, NULL , &States[S_CRBOWATK2+3]),
S_NORMAL1 (CRBW, 'G', 3, NULL , &States[S_CRBOWATK2+4]),
S_NORMAL1 (CRBW, 'H', 2, NULL , &States[S_CRBOWATK2+5]),
S_NORMAL1 (CRBW, 'A', 3, NULL , &States[S_CRBOWATK2+6]),
S_NORMAL1 (CRBW, 'B', 3, NULL , &States[S_CRBOWATK2+7]),
S_NORMAL1 (CRBW, 'C', 4, A_ReFire , &States[S_CRBOW+0])
};
FWeaponInfo ACrossbow::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_crossbow,
USE_CBOW_AMMO_1,
10,
&States[S_CRBOWUP],
&States[S_CRBOWDOWN],
&States[S_CRBOW],
&States[S_CRBOWATK1],
&States[S_CRBOWATK1],
NULL,
ZDRUNTIME_CLASS(ACrossbow),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ACrossbow),
-1
};
FWeaponInfo ACrossbow::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_crossbow,
USE_CBOW_AMMO_2,
10,
&States[S_CRBOWUP],
&States[S_CRBOWDOWN],
&States[S_CRBOW],
&States[S_CRBOWATK2],
&States[S_CRBOWATK2],
NULL,
ZDRUNTIME_CLASS(ACrossbow),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ACrossbow),
-1
};
------------------------------------------------------------------------
//========== The main projectile fired by the ethereal crossbow.
IMPLEMENT_ACTOR (ACrossbowFX1, Heretic, -1, 147)
PROP_RadiusFixed (11)
PROP_HeightFixed (8)
PROP_SpeedFixed (30)
PROP_Damage (10)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_CRBOWFX1)
PROP_DeathState (S_CRBOWFXI1)
PROP_SeeSound ("weapons/bowshoot")
PROP_DeathSound ("weapons/bowhit")
END_DEFAULTS
FState ACrossbowFX1::States[] =
{
#define S_CRBOWFX1 0
S_BRIGHT (FX03, 'B', 1, NULL, &States[S_CRBOWFX1]),
#define S_CRBOWFXI1 (S_CRBOWFX1+1)
S_BRIGHT (FX03, 'H', 8, NULL, &States[S_CRBOWFXI1+1]),
S_BRIGHT (FX03, 'I', 8, NULL, &States[S_CRBOWFXI1+2]),
S_BRIGHT (FX03, 'J', 8, NULL, NULL)
};
------------------------------------------------------------------------
//========== The projectiles fired by the tomed ethereal crossbow. They spawn trails of magic sparks behind them.
IMPLEMENT_ACTOR (ACrossbowFX2, Heretic, -1, 148)
PROP_SpeedFixed (32)
PROP_Damage (6)
PROP_SpawnState (S_CRBOWFX2)
END_DEFAULTS
FState ACrossbowFX2::States[] =
{
#define S_CRBOWFX2 0
S_BRIGHT (FX03, 'B', 1, A_BoltSpark, &States[S_CRBOWFX2])
};
------------------------------------------------------------------------
//========== The secondary projectiles fired by the ethereal crossbow.
IMPLEMENT_ACTOR (ACrossbowFX3, Heretic, -1, 149)
PROP_SpeedFixed (20)
PROP_Damage (2)
PROP_Flags2 (MF2_WINDTHRUST|MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_SpawnState (S_CRBOWFX3)
PROP_DeathState (S_CRBOWFXI3)
PROP_SeeSound ("")
END_DEFAULTS
FState ACrossbowFX3::States[] =
{
#define S_CRBOWFX3 0
S_BRIGHT (FX03, 'A', 1, NULL, &States[S_CRBOWFX3]),
#define S_CRBOWFXI3 (S_CRBOWFX3+1)
S_BRIGHT (FX03, 'C', 8, NULL, &States[S_CRBOWFXI3+1]),
S_BRIGHT (FX03, 'D', 8, NULL, &States[S_CRBOWFXI3+2]),
S_BRIGHT (FX03, 'E', 8, NULL, NULL)
};
------------------------------------------------------------------------
//========== The sparks spawned behind tomed ethereal crossbow shots.
IMPLEMENT_ACTOR (ACrossbowFX4, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP)
PROP_Flags2 (MF2_LOGRAV)
PROP_SpawnState (S_CRBOWFX4)
END_DEFAULTS
FState ACrossbowFX4::States[] =
{
#define S_CRBOWFX4 0
S_BRIGHT (FX03, 'F', 8, NULL, &States[S_CRBOWFX4+1]),
S_BRIGHT (FX03, 'G', 8, NULL, NULL)
};
------------------------------------------------------------------------
//========== Small pile of twenty mace spheres for the firemace.
IMPLEMENT_ACTOR (AMaceAmmo, Heretic, 13, 35)
PROP_SpawnHealth (AMMO_MACE_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AMaceAmmo::States[] =
{
S_NORMAL1 (AMM1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Big pile of one hundred mace spheres for the firemace.
IMPLEMENT_ACTOR (AMaceHefty, Heretic, 16, 36)
PROP_SpawnHealth (AMMO_MACE_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AMaceHefty::States[] =
{
S_NORMAL1 (AMM2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Firemace
BEGIN_DEFAULTS (AMace, Heretic, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState AMace::States[] =
{
#define S_WMCE 0
S_NORMAL1 (WMCE, 'A', -1, NULL , NULL),
#define S_MACEREADY (S_WMCE+1)
S_NORMAL1 (MACE, 'A', 1, A_WeaponReady, &States[S_MACEREADY]),
#define S_MACEDOWN (S_MACEREADY+1)
S_NORMAL1 (MACE, 'A', 1, A_Lower , &States[S_MACEDOWN]),
#define S_MACEUP (S_MACEDOWN+1)
S_NORMAL1 (MACE, 'A', 1, A_Raise , &States[S_MACEUP]),
#define S_MACEATK1 (S_MACEUP+1)
S_NORMAL1 (MACE, 'B', 4, NULL , &States[S_MACEATK1+1]),
S_NORMAL1 (MACE, 'C', 3, A_FireMacePL1, &States[S_MACEATK1+2]),
S_NORMAL1 (MACE, 'D', 3, A_FireMacePL1, &States[S_MACEATK1+3]),
S_NORMAL1 (MACE, 'E', 3, A_FireMacePL1, &States[S_MACEATK1+4]),
S_NORMAL1 (MACE, 'F', 3, A_FireMacePL1, &States[S_MACEATK1+5]),
S_NORMAL1 (MACE, 'C', 4, A_ReFire , &States[S_MACEATK1+6]),
S_NORMAL1 (MACE, 'D', 4, NULL , &States[S_MACEATK1+7]),
S_NORMAL1 (MACE, 'E', 4, NULL , &States[S_MACEATK1+8]),
S_NORMAL1 (MACE, 'F', 4, NULL , &States[S_MACEATK1+9]),
S_NORMAL1 (MACE, 'B', 4, NULL , &States[S_MACEREADY]),
#define S_MACEATK2 (S_MACEATK1+10)
S_NORMAL1 (MACE, 'B', 4, NULL , &States[S_MACEATK2+1]),
S_NORMAL1 (MACE, 'D', 4, A_FireMacePL2, &States[S_MACEATK2+2]),
S_NORMAL1 (MACE, 'B', 4, NULL , &States[S_MACEATK2+3]),
S_NORMAL1 (MACE, 'A', 8, A_ReFire , &States[S_MACEREADY])
};
FWeaponInfo AMace::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_mace,
USE_MACE_AMMO_1,
50,
&States[S_MACEUP],
&States[S_MACEDOWN],
&States[S_MACEREADY],
&States[S_MACEATK1],
&States[S_MACEATK1+1],
NULL,
ZDRUNTIME_CLASS(AMace),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(AMace),
-1
};
FWeaponInfo AMace::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_mace,
USE_MACE_AMMO_2,
50,
&States[S_MACEUP],
&States[S_MACEDOWN],
&States[S_MACEREADY],
&States[S_MACEATK2],
&States[S_MACEATK2],
NULL,
ZDRUNTIME_CLASS(AMace),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(AMace),
-1
};
------------------------------------------------------------------------
//========== The most common of the firemace's projectiles, it also serves as a base class for its large and small spheres.
IMPLEMENT_ACTOR (AMaceFX1, Heretic, -1, 154)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (20)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_HERETICBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER|MF4_NOSPEEDCHECK)
PROP_SpawnState (S_MACEFX1)
PROP_DeathState (S_MACEFXI1)
PROP_SeeSound ("weapons/maceshoot")
END_DEFAULTS
FState AMaceFX1::States[] =
{
#define S_MACEFX1 0
S_NORMAL1 (FX02, 'A', 4, A_MacePL1Check , &States[S_MACEFX1+1]),
S_NORMAL1 (FX02, 'B', 4, A_MacePL1Check , &States[S_MACEFX1+0]),
#define S_MACEFXI1 (S_MACEFX1+2)
S_BRIGHT (FX02, 'F', 4, A_MaceBallImpact, &States[S_MACEFXI1+1]),
S_BRIGHT (FX02, 'G', 4, NULL , &States[S_MACEFXI1+2]),
S_BRIGHT (FX02, 'H', 4, NULL , &States[S_MACEFXI1+3]),
S_BRIGHT (FX02, 'I', 4, NULL , &States[S_MACEFXI1+4]),
S_BRIGHT (FX02, 'J', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== The firemace's secondary projectile, this mace sphere bounces a few times, spawning two small spheres on each bounce.
IMPLEMENT_ACTOR (AMaceFX2, Heretic, -1, 156)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (10)
PROP_Damage (6)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_HERETICBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER|MF4_NOSPEEDCHECK)
PROP_SpawnState (S_MACEFX2)
PROP_DeathState (S_MACEFXI2)
END_DEFAULTS
FState AMaceFX2::States[] =
{
#define S_MACEFX2 0
S_NORMAL1 (FX02, 'C', 4, NULL , &States[S_MACEFX2+1]),
S_NORMAL1 (FX02, 'D', 4, NULL , &States[S_MACEFX2+0]),
#define S_MACEFXI2 (S_MACEFX2+2)
S_BRIGHT (FX02, 'F', 4, A_MaceBallImpact2, &AMaceFX1::States[S_MACEFXI1+1])
};
------------------------------------------------------------------------
//========== The firemace's secondary projectiles, spawned when a large mace sphere bounces.
IMPLEMENT_ACTOR (AMaceFX3, Heretic, -1, 155)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (7)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_HERETICBOUNCE|MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER|MF4_NOSPEEDCHECK)
PROP_SpawnState (S_MACEFX3)
PROP_STATE_BASE (AMaceFX1)
PROP_DeathState (S_MACEFXI1)
END_DEFAULTS
FState AMaceFX3::States[] =
{
#define S_MACEFX3 0
S_NORMAL1 (FX02, 'A', 4, NULL, &States[S_MACEFX3+1]),
S_NORMAL1 (FX02, 'B', 4, NULL, &States[S_MACEFX3+0])
};
------------------------------------------------------------------------
//========== The slow and enormous projectile from the powered-up firemace.
IMPLEMENT_ACTOR (AMaceFX4, Heretic, -1, 153)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (7)
PROP_Damage (18)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF)
PROP_Flags2 (MF2_LOGRAV|MF2_HERETICBOUNCE|MF2_THRUGHOST|MF2_TELESTOMP|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER|MF4_SYNCMOVEMENT)
PROP_SpawnState (S_MACEFX4)
PROP_DeathState (S_MACEFXI4)
END_DEFAULTS
FState AMaceFX4::States[] =
{
#define S_MACEFX4 0
S_NORMAL1 (FX02, 'E', 99, NULL , &States[S_MACEFX4+0]),
#define S_MACEFXI4 (S_MACEFX4+1)
S_BRIGHT (FX02, 'C', 4, A_DeathBallImpact, &AMaceFX1::States[S_MACEFXI1+1])
};
------------------------------------------------------------------------
//========== Firemace spawn spot
IMPLEMENT_ACTOR (AMaceSpawner, Heretic, 2002, 0)
PROP_Flags (MF_NOSECTOR|MF_NOBLOCKMAP)
PROP_SpawnState (0)
END_DEFAULTS
FState AMaceSpawner::States[] =
{
S_NORMAL1 (TNT1, 'A', 1, NULL, &States[1]),
S_NORMAL1 (TNT1, 'A', -1, A_SpawnMace, NULL)
};
------------------------------------------------------------------------
//========== Gauntlets of the necromancer
IMPLEMENT_ACTOR (AGauntlets, Heretic, 2005, 32)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_WGNT)
END_DEFAULTS
FState AGauntlets::States[] =
{
#define S_WGNT 0
S_NORMAL1 (WGNT, 'A', -1, NULL , NULL),
#define S_GAUNTLETREADY (S_WGNT+1)
S_NORMAL1 (GAUN, 'A', 1, A_WeaponReady , &States[S_GAUNTLETREADY]),
#define S_GAUNTLETDOWN (S_GAUNTLETREADY+1)
S_NORMAL1 (GAUN, 'A', 1, A_Lower , &States[S_GAUNTLETDOWN]),
#define S_GAUNTLETUP (S_GAUNTLETDOWN+1)
S_NORMAL1 (GAUN, 'A', 1, A_Raise , &States[S_GAUNTLETUP]),
#define S_GAUNTLETREADY2 (S_GAUNTLETUP+1)
S_NORMAL1 (GAUN, 'G', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+1]),
S_NORMAL1 (GAUN, 'H', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+2]),
S_NORMAL1 (GAUN, 'I', 4, A_WeaponReady , &States[S_GAUNTLETREADY2+0]),
#define S_GAUNTLETDOWN2 (S_GAUNTLETREADY2+3)
S_NORMAL1 (GAUN, 'G', 1, A_Lower , &States[S_GAUNTLETDOWN2]),
#define S_GAUNTLETUP2 (S_GAUNTLETDOWN2+1)
S_NORMAL1 (GAUN, 'G', 1, A_Raise , &States[S_GAUNTLETUP2]),
#define S_GAUNTLETATK1 (S_GAUNTLETUP2+1)
S_NORMAL1 (GAUN, 'B', 4, NULL , &States[S_GAUNTLETATK1+1]),
S_NORMAL1 (GAUN, 'C', 4, NULL , &States[S_GAUNTLETATK1+2]),
S_BRIGHT (GAUN, 'D', 4, A_GauntletAttack, &States[S_GAUNTLETATK1+3]),
S_BRIGHT (GAUN, 'E', 4, A_GauntletAttack, &States[S_GAUNTLETATK1+4]),
S_BRIGHT (GAUN, 'F', 4, A_GauntletAttack, &States[S_GAUNTLETATK1+5]),
S_NORMAL1 (GAUN, 'C', 4, A_ReFire , &States[S_GAUNTLETATK1+6]),
S_NORMAL1 (GAUN, 'B', 4, A_Light0 , &States[S_GAUNTLETREADY]),
#define S_GAUNTLETATK2 (S_GAUNTLETATK1+7)
S_NORMAL1 (GAUN, 'J', 4, NULL , &States[S_GAUNTLETATK2+1]),
S_NORMAL1 (GAUN, 'K', 4, NULL , &States[S_GAUNTLETATK2+2]),
S_BRIGHT (GAUN, 'L', 4, A_GauntletAttack, &States[S_GAUNTLETATK2+3]),
S_BRIGHT (GAUN, 'M', 4, A_GauntletAttack, &States[S_GAUNTLETATK2+4]),
S_BRIGHT (GAUN, 'N', 4, A_GauntletAttack, &States[S_GAUNTLETATK2+5]),
S_NORMAL1 (GAUN, 'K', 4, A_ReFire , &States[S_GAUNTLETATK2+6]),
S_NORMAL1 (GAUN, 'J', 4, A_Light0 , &States[S_GAUNTLETREADY2+0])
};
FWeaponInfo AGauntlets::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_GAUNTLETUP],
&States[S_GAUNTLETDOWN],
&States[S_GAUNTLETREADY],
&States[S_GAUNTLETATK1],
&States[S_GAUNTLETATK1+2],
NULL,
ZDRUNTIME_CLASS(AGauntlets),
0,
15*FRACUNIT,
"weapons/gauntletsactivate",
NULL,
ZDRUNTIME_CLASS(AGauntlets),
-1
};
FWeaponInfo AGauntlets::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_noammo,
0,
0,
&States[S_GAUNTLETUP2],
&States[S_GAUNTLETDOWN2],
&States[S_GAUNTLETREADY2],
&States[S_GAUNTLETATK2],
&States[S_GAUNTLETATK2+2],
NULL,
ZDRUNTIME_CLASS(AGauntlets),
0,
15*FRACUNIT,
"weapons/gauntletsactivate",
NULL,
ZDRUNTIME_CLASS(AGauntlets),
-1
};
------------------------------------------------------------------------
//========== The puffs spawned when the gauntlets of the necromancer hit something.
IMPLEMENT_ACTOR (AGauntletPuff1, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (S_GAUNTLETPUFF1)
END_DEFAULTS
FState AGauntletPuff1::States[] =
{
#define S_GAUNTLETPUFF1 0
S_BRIGHT (PUF1, 'A', 4, NULL, &States[S_GAUNTLETPUFF1+1]),
S_BRIGHT (PUF1, 'B', 4, NULL, &States[S_GAUNTLETPUFF1+2]),
S_BRIGHT (PUF1, 'C', 4, NULL, &States[S_GAUNTLETPUFF1+3]),
S_BRIGHT (PUF1, 'D', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== The puffs spawned when the tomed gauntlets of the necromancer hit something.
IMPLEMENT_ACTOR (AGauntletPuff2, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (S_GAUNTLETPUFF2)
END_DEFAULTS
FState AGauntletPuff2::States[] =
{
#define S_GAUNTLETPUFF2 0
S_BRIGHT (PUF1, 'E', 4, NULL, &States[S_GAUNTLETPUFF2+1]),
S_BRIGHT (PUF1, 'F', 4, NULL, &States[S_GAUNTLETPUFF2+2]),
S_BRIGHT (PUF1, 'G', 4, NULL, &States[S_GAUNTLETPUFF2+3]),
S_BRIGHT (PUF1, 'H', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Small orb of ten charges for the dragon claw.
IMPLEMENT_ACTOR (ABlasterAmmo, Heretic, 54, 37)
PROP_SpawnHealth (AMMO_BLSR_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ABlasterAmmo::States[] =
{
S_NORMAL1 (AMB1, 'A', 4, NULL, &States[1]),
S_NORMAL1 (AMB1, 'B', 4, NULL, &States[2]),
S_NORMAL1 (AMB1, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Large orb of 25 charges for the dragon claw.
IMPLEMENT_ACTOR (ABlasterHefty, Heretic, 55, 38)
PROP_SpawnHealth (AMMO_BLSR_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ABlasterHefty::States[] =
{
S_NORMAL1 (AMB2, 'A', 4, NULL, &States[1]),
S_NORMAL1 (AMB2, 'B', 4, NULL, &States[2]),
S_NORMAL1 (AMB2, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Blaster (Dragon claw)
IMPLEMENT_ACTOR (ABlaster, Heretic, 53, 28)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_BLSR)
END_DEFAULTS
FState ABlaster::States[] =
{
#define S_BLSR 0
S_NORMAL1 (WBLS, 'A', -1, NULL , NULL),
#define S_BLASTERREADY (S_BLSR+1)
S_NORMAL1 (BLSR, 'A', 1, A_WeaponReady , &States[S_BLASTERREADY]),
#define S_BLASTERDOWN (S_BLASTERREADY+1)
S_NORMAL1 (BLSR, 'A', 1, A_Lower , &States[S_BLASTERDOWN]),
#define S_BLASTERUP (S_BLASTERDOWN+1)
S_NORMAL1 (BLSR, 'A', 1, A_Raise , &States[S_BLASTERUP]),
#define S_BLASTERATK1 (S_BLASTERUP+1)
S_NORMAL1 (BLSR, 'B', 3, NULL , &States[S_BLASTERATK1+1]),
S_NORMAL1 (BLSR, 'C', 3, NULL , &States[S_BLASTERATK1+2]),
S_NORMAL1 (BLSR, 'D', 2, A_FireBlasterPL1, &States[S_BLASTERATK1+3]),
S_NORMAL1 (BLSR, 'C', 2, NULL , &States[S_BLASTERATK1+4]),
S_NORMAL1 (BLSR, 'B', 2, NULL , &States[S_BLASTERATK1+5]),
S_NORMAL1 (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY]),
#define S_BLASTERATK2 (S_BLASTERATK1+6)
S_NORMAL1 (BLSR, 'B', 0, NULL , &States[S_BLASTERATK2+1]),
S_NORMAL1 (BLSR, 'C', 0, NULL , &States[S_BLASTERATK2+2]),
S_NORMAL1 (BLSR, 'D', 3, A_FireBlasterPL2, &States[S_BLASTERATK2+3]),
S_NORMAL1 (BLSR, 'C', 4, NULL , &States[S_BLASTERATK2+4]),
S_NORMAL1 (BLSR, 'B', 4, NULL , &States[S_BLASTERATK2+5]),
S_NORMAL1 (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY])
};
FWeaponInfo ABlaster::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_blaster,
USE_BLSR_AMMO_1,
30,
&States[S_BLASTERUP],
&States[S_BLASTERDOWN],
&States[S_BLASTERREADY],
&States[S_BLASTERATK1],
&States[S_BLASTERATK1+2],
NULL,
ZDRUNTIME_CLASS(ABlaster),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ABlaster),
-1
};
FWeaponInfo ABlaster::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_blaster,
USE_BLSR_AMMO_2,
30,
&States[S_BLASTERUP],
&States[S_BLASTERDOWN],
&States[S_BLASTERREADY],
&States[S_BLASTERATK2],
&States[S_BLASTERATK2+2],
NULL,
ZDRUNTIME_CLASS(ABlaster),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ABlaster),
-1
};
------------------------------------------------------------------------
//========== The ultra-fast projectiles from the powered-up dragon claw. They spawn four rippers on impact.
IMPLEMENT_ACTOR (ABlasterFX1, Heretic, -1, 0)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_SpeedFixed (184)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_BLASTERFX1)
PROP_DeathState (S_BLASTERFXI1)
PROP_DeathSound ("weapons/blasterhit")
END_DEFAULTS
FState ABlasterFX1::States[] =
{
#define S_BLASTERFX1 0
S_NORMAL1 (ACLO, 'E', 200, NULL , &States[S_BLASTERFX1+0]),
#define S_BLASTERFXI1 (S_BLASTERFX1+1)
S_BRIGHT (FX18, 'A', 3, A_SpawnRippers, &States[S_BLASTERFXI1+1]),
S_BRIGHT (FX18, 'B', 3, NULL , &States[S_BLASTERFXI1+2]),
S_BRIGHT (FX18, 'C', 4, NULL , &States[S_BLASTERFXI1+3]),
S_BRIGHT (FX18, 'D', 4, NULL , &States[S_BLASTERFXI1+4]),
S_BRIGHT (FX18, 'E', 4, NULL , &States[S_BLASTERFXI1+5]),
S_BRIGHT (FX18, 'F', 4, NULL , &States[S_BLASTERFXI1+6]),
S_BRIGHT (FX18, 'G', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== The trail spawned behind a powered-up dragon claw shot as it travels.
IMPLEMENT_ACTOR (ABlasterSmoke, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (S_BLASTERSMOKE)
END_DEFAULTS
FState ABlasterSmoke::States[] =
{
#define S_BLASTERSMOKE 0
S_NORMAL1 (FX18, 'H', 4, NULL, &States[S_BLASTERSMOKE+1]),
S_NORMAL1 (FX18, 'I', 4, NULL, &States[S_BLASTERSMOKE+2]),
S_NORMAL1 (FX18, 'J', 4, NULL, &States[S_BLASTERSMOKE+3]),
S_NORMAL1 (FX18, 'K', 4, NULL, &States[S_BLASTERSMOKE+4]),
S_NORMAL1 (FX18, 'L', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== The spiked balls spawned when a powered-up Dragon Claw shot impacts a surface.
IMPLEMENT_ACTOR (ARipper, Heretic, -1, 157)
PROP_RadiusFixed (8)
PROP_HeightFixed (6)
PROP_SpeedFixed (14)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_RIPPER)
PROP_DeathSound ("weapons/blasterpowhit")
END_DEFAULTS
FState ARipper::States[] =
{
#define S_RIPPER 0
S_NORMAL1(FX18, 'M', 4, NULL, &States[S_RIPPER+1]),
S_NORMAL1(FX18, 'N', 5, NULL, &States[S_RIPPER+0]),
#define S_RIPPERX (S_RIPPER+2)
S_BRIGHT (FX18, 'O', 4, NULL, &States[S_RIPPERX+1]),
S_BRIGHT (FX18, 'P', 4, NULL, &States[S_RIPPERX+2]),
S_BRIGHT (FX18, 'Q', 4, NULL, &States[S_RIPPERX+3]),
S_BRIGHT (FX18, 'R', 4, NULL, &States[S_RIPPERX+4]),
S_BRIGHT (FX18, 'S', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Blaster puff 1
IMPLEMENT_ACTOR (ABlasterPuff1, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_SpawnState (S_BLASTERPUFF)
PROP_CrashState (S_BLASTERPUFF_CRASH)
END_DEFAULTS
FState ABlasterPuff1::States[] =
{
#define S_BLASTERPUFF_CRASH 0
S_BRIGHT (FX17, 'A', 4, NULL, &States[S_BLASTERPUFF_CRASH+1]),
S_BRIGHT (FX17, 'B', 4, NULL, &States[S_BLASTERPUFF_CRASH+2]),
S_BRIGHT (FX17, 'C', 4, NULL, &States[S_BLASTERPUFF_CRASH+3]),
S_BRIGHT (FX17, 'D', 4, NULL, &States[S_BLASTERPUFF_CRASH+4]),
S_BRIGHT (FX17, 'E', 4, NULL, NULL),
#define S_BLASTERPUFF (S_BLASTERPUFF_CRASH+5)
S_BRIGHT (FX17, 'F', 3, NULL, &States[S_BLASTERPUFF+1]),
S_BRIGHT (FX17, 'G', 3, NULL, &States[S_BLASTERPUFF+2]),
S_BRIGHT (FX17, 'H', 4, NULL, &States[S_BLASTERPUFF+3]),
S_BRIGHT (FX17, 'I', 4, NULL, &States[S_BLASTERPUFF+4]),
S_BRIGHT (FX17, 'J', 4, NULL, &States[S_BLASTERPUFF+5]),
S_BRIGHT (FX17, 'K', 4, NULL, &States[S_BLASTERPUFF+6]),
S_BRIGHT (FX17, 'L', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Blaster puff 2
IMPLEMENT_ACTOR (ABlasterPuff2, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_SpawnState (S_BLASTERPUFF2)
END_DEFAULTS
FState ABlasterPuff2::States[] =
{
#define S_BLASTERPUFF2 0
S_BRIGHT (FX17, 'F', 3, NULL, &States[S_BLASTERPUFF2+1]),
S_BRIGHT (FX17, 'G', 3, NULL, &States[S_BLASTERPUFF2+2]),
S_BRIGHT (FX17, 'H', 4, NULL, &States[S_BLASTERPUFF2+3]),
S_BRIGHT (FX17, 'I', 4, NULL, &States[S_BLASTERPUFF2+4]),
S_BRIGHT (FX17, 'J', 4, NULL, &States[S_BLASTERPUFF2+5]),
S_BRIGHT (FX17, 'K', 4, NULL, &States[S_BLASTERPUFF2+6]),
S_BRIGHT (FX17, 'L', 4, NULL, NULL)
};
------------------------------------------------------------------------
//========== Small rune holding twenty charges for the hellstaff.
IMPLEMENT_ACTOR (ASkullRodAmmo, Heretic, 20, 158)
PROP_SpawnHealth (AMMO_SKRD_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ASkullRodAmmo::States[] =
{
S_NORMAL1 (AMS1, 'A', 5, NULL, &States[1]),
S_NORMAL1 (AMS1, 'B', 5, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Big rune holding one hundred charges for the hellstaff.
IMPLEMENT_ACTOR (ASkullRodHefty, Heretic, 21, 159)
PROP_SpawnHealth (AMMO_SKRD_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState ASkullRodHefty::States[] =
{
S_NORMAL1 (AMS2, 'A', 5, NULL, &States[1]),
S_NORMAL1 (AMS2, 'B', 5, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Skull Rod (Hellstaff or Horn Rod); it's a rapid-fire weapon throwing a stream of red projectiles.
IMPLEMENT_ACTOR (ASkullRod, Heretic, 2004, 30)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_WSKL)
END_DEFAULTS
FState ASkullRod::States[] =
{
#define S_WSKL 0
S_NORMAL1 (WSKL, 'A', -1, NULL , NULL),
#define S_HORNRODREADY (S_WSKL+1)
S_NORMAL1 (HROD, 'A', 1, A_WeaponReady , &States[S_HORNRODREADY]),
#define S_HORNRODDOWN (S_HORNRODREADY+1)
S_NORMAL1 (HROD, 'A', 1, A_Lower , &States[S_HORNRODDOWN]),
#define S_HORNRODUP (S_HORNRODDOWN+1)
S_NORMAL1 (HROD, 'A', 1, A_Raise , &States[S_HORNRODUP]),
#define S_HORNRODATK1 (S_HORNRODUP+1)
S_NORMAL1 (HROD, 'A', 4, A_FireSkullRodPL1, &States[S_HORNRODATK1+1]),
S_NORMAL1 (HROD, 'B', 4, A_FireSkullRodPL1, &States[S_HORNRODATK1+2]),
S_NORMAL1 (HROD, 'B', 0, A_ReFire , &States[S_HORNRODREADY]),
#define S_HORNRODATK2 (S_HORNRODATK1+3)
S_NORMAL1 (HROD, 'C', 2, NULL , &States[S_HORNRODATK2+1]),
S_NORMAL1 (HROD, 'D', 3, NULL , &States[S_HORNRODATK2+2]),
S_NORMAL1 (HROD, 'E', 2, NULL , &States[S_HORNRODATK2+3]),
S_NORMAL1 (HROD, 'F', 3, NULL , &States[S_HORNRODATK2+4]),
S_NORMAL1 (HROD, 'G', 4, A_FireSkullRodPL2, &States[S_HORNRODATK2+5]),
S_NORMAL1 (HROD, 'F', 2, NULL , &States[S_HORNRODATK2+6]),
S_NORMAL1 (HROD, 'E', 3, NULL , &States[S_HORNRODATK2+7]),
S_NORMAL1 (HROD, 'D', 2, NULL , &States[S_HORNRODATK2+8]),
S_NORMAL1 (HROD, 'C', 2, A_ReFire , &States[S_HORNRODREADY])
};
FWeaponInfo ASkullRod::WeaponInfo1 =
{
WIF_BLOODSPLATTER,
am_skullrod,
USE_SKRD_AMMO_1,
50,
&States[S_HORNRODUP],
&States[S_HORNRODDOWN],
&States[S_HORNRODREADY],
&States[S_HORNRODATK1],
&States[S_HORNRODATK1],
NULL,
ZDRUNTIME_CLASS(ASkullRod),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ASkullRod),
-1
};
FWeaponInfo ASkullRod::WeaponInfo2 =
{
WIF_BLOODSPLATTER,
am_skullrod,
USE_SKRD_AMMO_2,
50,
&States[S_HORNRODUP],
&States[S_HORNRODDOWN],
&States[S_HORNRODREADY],
&States[S_HORNRODATK2],
&States[S_HORNRODATK2],
NULL,
ZDRUNTIME_CLASS(ASkullRod),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(ASkullRod),
-1
};
------------------------------------------------------------------------
//========== The projectile from the hellstaff.
IMPLEMENT_ACTOR (AHornRodFX1, Heretic, -1, 160)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_SpeedFixed (22)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_HRODFX1)
PROP_DeathState (S_HRODFXI1)
PROP_SeeSound ("weapons/hornrodshoot")
PROP_DeathSound ("weapons/hornrodhit")
END_DEFAULTS
FState AHornRodFX1::States[] =
{
#define S_HRODFX1 0
S_BRIGHT (FX00, 'A', 6, NULL, &States[S_HRODFX1+1]),
S_BRIGHT (FX00, 'B', 6, NULL, &States[S_HRODFX1+0]),
#define S_HRODFXI1 (S_HRODFX1+2)
S_BRIGHT (FX00, 'H', 5, NULL, &States[S_HRODFXI1+1]),
S_BRIGHT (FX00, 'I', 5, NULL, &States[S_HRODFXI1+2]),
S_BRIGHT (FX00, 'J', 4, NULL, &States[S_HRODFXI1+3]),
S_BRIGHT (FX00, 'K', 4, NULL, &States[S_HRODFXI1+4]),
S_BRIGHT (FX00, 'L', 3, NULL, &States[S_HRODFXI1+5]),
S_BRIGHT (FX00, 'M', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== The large, rain-creating projectile from the powered-up hellstaff.
IMPLEMENT_ACTOR (AHornRodFX2, Heretic, -1, 0)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_SpeedFixed (22)
PROP_Damage (10)
PROP_SpawnHealth (4*35)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_HRODFX2)
PROP_DeathState (S_HRODFXI2)
END_DEFAULTS
FState AHornRodFX2::States[] =
{
#define S_HRODFX2 0
S_BRIGHT (FX00, 'C', 3, NULL , &States[S_HRODFX2+1]),
S_BRIGHT (FX00, 'D', 3, A_SkullRodPL2Seek, &States[S_HRODFX2+2]),
S_BRIGHT (FX00, 'E', 3, NULL , &States[S_HRODFX2+3]),
S_BRIGHT (FX00, 'F', 3, A_SkullRodPL2Seek, &States[S_HRODFX2+0]),
#define S_HRODFXI2 (S_HRODFX2+4)
S_BRIGHT (FX00, 'H', 5, A_AddPlayerRain , &States[S_HRODFXI2+1]),
S_BRIGHT (FX00, 'I', 5, NULL , &States[S_HRODFXI2+2]),
S_BRIGHT (FX00, 'J', 4, NULL , &States[S_HRODFXI2+3]),
S_BRIGHT (FX00, 'K', 3, NULL , &States[S_HRODFXI2+4]),
S_BRIGHT (FX00, 'L', 3, NULL , &States[S_HRODFXI2+5]),
S_BRIGHT (FX00, 'M', 3, NULL , &States[S_HRODFXI2+6]),
S_NORMAL1(FX00, 'G', 1, A_HideInCeiling , &States[S_HRODFXI2+7]),
S_NORMAL1(FX00, 'G', 1, A_SkullRodStorm , &States[S_HRODFXI2+7])
};
------------------------------------------------------------------------
//========== A rain drop from the powered-up hellstaff.
IMPLEMENT_ACTOR (ARainPillar, Heretic, -1, 0)
PROP_RadiusFixed (5)
PROP_HeightFixed (12)
PROP_SpeedFixed (12)
PROP_Damage (5)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER|MF4_NONETSPAWN)
PROP_SpawnState (S_RAINPLR)
PROP_DeathState (S_RAINPLRX)
END_DEFAULTS
FState ARainPillar::States[] =
{
#define S_RAINPLR 0
S_BRIGHT (FX22, 'A', -1, NULL , NULL),
#define S_RAINPLRX (S_RAINPLR+1)
S_BRIGHT (FX22, 'B', 4, A_RainImpact, &States[S_RAINPLRX+1]),
S_BRIGHT (FX22, 'C', 4, NULL , &States[S_RAINPLRX+2]),
S_BRIGHT (FX22, 'D', 4, NULL , &States[S_RAINPLRX+3]),
S_BRIGHT (FX22, 'E', 4, NULL , &States[S_RAINPLRX+4]),
S_BRIGHT (FX22, 'F', 4, NULL , NULL),
#define S_RAINAIRXPLR (S_RAINPLRX+5)
S_BRIGHT (FX22, 'G', 4, NULL , &States[S_RAINAIRXPLR+1]),
S_BRIGHT (FX22, 'H', 4, NULL , &States[S_RAINAIRXPLR+2]),
S_BRIGHT (FX22, 'I', 4, NULL , NULL),
};
------------------------------------------------------------------------
//========== Small orb containing a single charge for the phoenix rod.
IMPLEMENT_ACTOR (APhoenixRodAmmo, Heretic, 22, 161)
PROP_SpawnHealth (AMMO_PHRD_WIMPY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState APhoenixRodAmmo::States[] =
{
S_NORMAL1 (AMP1, 'A', 4, NULL, &States[1]),
S_NORMAL1 (AMP1, 'B', 4, NULL, &States[2]),
S_NORMAL1 (AMP1, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Large orb containing ten charges for the phoenix rod.
IMPLEMENT_ACTOR (APhoenixRodHefty, Heretic, 23, 162)
PROP_SpawnHealth (AMMO_PHRD_HEFTY)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
END_DEFAULTS
FState APhoenixRodHefty::States[] =
{
S_NORMAL1 (AMP2, 'A', 4, NULL, &States[1]),
S_NORMAL1 (AMP2, 'B', 4, NULL, &States[2]),
S_NORMAL1 (AMP2, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Phoenix Rod
IMPLEMENT_ACTOR (APhoenixRod, Heretic, 2003, 29)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_WPHX)
END_DEFAULTS
FState APhoenixRod::States[] =
{
#define S_WPHX 0
S_NORMAL1 (WPHX, 'A', -1, NULL , NULL),
#define S_PHOENIXREADY (S_WPHX+1)
S_NORMAL1 (PHNX, 'A', 1, A_WeaponReady , &States[S_PHOENIXREADY]),
#define S_PHOENIXDOWN (S_PHOENIXREADY+1)
S_NORMAL1 (PHNX, 'A', 1, A_Lower , &States[S_PHOENIXDOWN]),
#define S_PHOENIXUP (S_PHOENIXDOWN+1)
S_NORMAL1 (PHNX, 'A', 1, A_Raise , &States[S_PHOENIXUP]),
#define S_PHOENIXATK1 (S_PHOENIXUP+1)
S_NORMAL1 (PHNX, 'B', 5, NULL , &States[S_PHOENIXATK1+1]),
S_NORMAL1 (PHNX, 'C', 7, A_FirePhoenixPL1 , &States[S_PHOENIXATK1+2]),
S_NORMAL1 (PHNX, 'D', 4, NULL , &States[S_PHOENIXATK1+3]),
S_NORMAL1 (PHNX, 'B', 4, NULL , &States[S_PHOENIXATK1+4]),
S_NORMAL1 (PHNX, 'B', 0, A_ReFire , &States[S_PHOENIXREADY]),
#define S_PHOENIXATK2 (S_PHOENIXATK1+5)
S_NORMAL1 (PHNX, 'B', 3, A_InitPhoenixPL2 , &States[S_PHOENIXATK2+1]),
S_BRIGHT (PHNX, 'C', 1, A_FirePhoenixPL2 , &States[S_PHOENIXATK2+2]),
S_NORMAL1 (PHNX, 'B', 4, A_ReFire , &States[S_PHOENIXATK2+3]),
S_NORMAL1 (PHNX, 'B', 4, A_ShutdownPhoenixPL2, &States[S_PHOENIXREADY])
};
FWeaponInfo APhoenixRod::WeaponInfo1 =
{
WIF_NOAUTOFIRE|WIF_BLOODSPLATTER,
am_phoenixrod,
USE_PHRD_AMMO_1,
2,
&States[S_PHOENIXUP],
&States[S_PHOENIXDOWN],
&States[S_PHOENIXREADY],
&States[S_PHOENIXATK1],
&States[S_PHOENIXATK1],
NULL,
ZDRUNTIME_CLASS(APhoenixRod),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(APhoenixRod),
-1
};
FWeaponInfo APhoenixRod::WeaponInfo2 =
{
WIF_NOAUTOFIRE|WIF_BLOODSPLATTER,
am_phoenixrod,
USE_PHRD_AMMO_2,
2,
&States[S_PHOENIXUP],
&States[S_PHOENIXDOWN],
&States[S_PHOENIXREADY],
&States[S_PHOENIXATK2],
&States[S_PHOENIXATK2+1],
NULL,
ZDRUNTIME_CLASS(APhoenixRod),
150,
15*FRACUNIT,
NULL,
NULL,
ZDRUNTIME_CLASS(APhoenixRod),
-1
};
------------------------------------------------------------------------
//========== The exploding projectile from the phoenix rod.
IMPLEMENT_ACTOR (APhoenixFX1, Heretic, -1, 163)
PROP_RadiusFixed (11)
PROP_HeightFixed (8)
PROP_SpeedFixed (20)
PROP_Damage (20)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_THRUGHOST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_PHOENIXFX1)
PROP_DeathState (S_PHOENIXFXI1)
PROP_SeeSound ("weapons/phoenixshoot")
PROP_DeathSound ("weapons/phoenixhit")
END_DEFAULTS
FState APhoenixFX1::States[] =
{
#define S_PHOENIXFX1 0
S_BRIGHT (FX04, 'A', 4, A_PhoenixPuff, &States[S_PHOENIXFX1+0]),
#define S_PHOENIXFXI1 (S_PHOENIXFX1+1)
S_BRIGHT (FX08, 'A', 6, A_Explode, &States[S_PHOENIXFXI1+1]),
S_BRIGHT (FX08, 'B', 5, NULL , &States[S_PHOENIXFXI1+2]),
S_BRIGHT (FX08, 'C', 5, NULL , &States[S_PHOENIXFXI1+3]),
S_BRIGHT (FX08, 'D', 4, NULL , &States[S_PHOENIXFXI1+4]),
S_BRIGHT (FX08, 'E', 4, NULL , &States[S_PHOENIXFXI1+5]),
S_BRIGHT (FX08, 'F', 4, NULL , &States[S_PHOENIXFXI1+6]),
S_BRIGHT (FX08, 'G', 4, NULL , &States[S_PHOENIXFXI1+7]),
S_BRIGHT (FX08, 'H', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== The smoke puffs left in the slipstream of a phoenix rod shot.
IMPLEMENT_ACTOR (APhoenixPuff, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
FState APhoenixPuff::States[] =
{
S_NORMAL1 (FX04, 'B', 4, NULL, &States[1]),
S_NORMAL1 (FX04, 'C', 4, NULL, &States[2]),
S_NORMAL1 (FX04, 'D', 4, NULL, &States[3]),
S_NORMAL1 (FX04, 'E', 4, NULL, &States[4]),
S_NORMAL1 (FX04, 'F', 4, NULL, NULL),
};
------------------------------------------------------------------------
//========== The fire thrown by a powered-up phoenix rod.
IMPLEMENT_ACTOR (APhoenixFX2, Heretic, -1, 0)
PROP_RadiusFixed (6)
PROP_HeightFixed (8)
PROP_SpeedFixed (10)
PROP_Damage (2)
PROP_DamageType (MOD_FIRE)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_PHOENIXFX2)
PROP_DeathState (S_PHOENIXFXI2)
END_DEFAULTS
FState APhoenixFX2::States[] =
{
#define S_PHOENIXFX2 0
S_BRIGHT (FX09, 'A', 2, NULL , &States[S_PHOENIXFX2+1]),
S_BRIGHT (FX09, 'B', 2, NULL , &States[S_PHOENIXFX2+2]),
S_BRIGHT (FX09, 'A', 2, NULL , &States[S_PHOENIXFX2+3]),
S_BRIGHT (FX09, 'B', 2, NULL , &States[S_PHOENIXFX2+4]),
S_BRIGHT (FX09, 'A', 2, NULL , &States[S_PHOENIXFX2+5]),
S_BRIGHT (FX09, 'B', 2, A_FlameEnd , &States[S_PHOENIXFX2+6]),
S_BRIGHT (FX09, 'C', 2, NULL , &States[S_PHOENIXFX2+7]),
S_BRIGHT (FX09, 'D', 2, NULL , &States[S_PHOENIXFX2+8]),
S_BRIGHT (FX09, 'E', 2, NULL , &States[S_PHOENIXFX2+9]),
S_BRIGHT (FX09, 'F', 2, NULL , NULL),
#define S_PHOENIXFXI2 (S_PHOENIXFX2+10)
S_BRIGHT (FX09, 'G', 3, NULL , &States[S_PHOENIXFXI2+1]),
S_BRIGHT (FX09, 'H', 3, A_FloatPuff, &States[S_PHOENIXFXI2+2]),
S_BRIGHT (FX09, 'I', 4, NULL , &States[S_PHOENIXFXI2+3]),
S_BRIGHT (FX09, 'J', 5, NULL , &States[S_PHOENIXFXI2+4]),
S_BRIGHT (FX09, 'K', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== The bag of holding contains a sample of each ammunition type and extends the carrying capacity of each type.
IMPLEMENT_ACTOR (ABagOfHolding, Heretic, 8, 136)
PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
FState ABagOfHolding::States[] =
{
S_NORMAL1 (BAGH, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Ironlich
IMPLEMENT_ACTOR (AIronlich, Heretic, 6, 20)
PROP_SpawnHealth (700)
PROP_RadiusFixed (40)
PROP_HeightFixed (72)
PROP_Mass (325)
PROP_SpeedFixed (6)
PROP_PainChance (32)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_NOBLOOD)
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_Flags3 (MF3_DONTMORPH|MF3_DONTSQUASH)
PROP_Flags4 (MF4_BOSSDEATH)
PROP_SpawnState (S_HEAD_LOOK)
PROP_SeeState (S_HEAD_FLOAT)
PROP_PainState (S_HEAD_PAIN)
PROP_MissileState (S_HEAD_ATK)
PROP_DeathState (S_HEAD_DIE)
PROP_SeeSound ("ironlich/sight")
PROP_AttackSound ("ironlich/attack")
PROP_PainSound ("ironlich/pain")
PROP_DeathSound ("ironlich/death")
PROP_ActiveSound ("ironlich/active")
END_DEFAULTS
FState AIronlich::States[] =
{
#define S_HEAD_LOOK 0
S_NORMAL1 (HEAD, 'A', 10, A_Look , &States[S_HEAD_LOOK]),
#define S_HEAD_FLOAT (S_HEAD_LOOK+1)
S_NORMAL1 (HEAD, 'A', 4, A_Chase , &States[S_HEAD_FLOAT]),
#define S_HEAD_ATK (S_HEAD_FLOAT+1)
S_NORMAL1 (HEAD, 'A', 5, A_FaceTarget, &States[S_HEAD_ATK+1]),
S_NORMAL1 (HEAD, 'B', 20, A_LichAttack, &States[S_HEAD_FLOAT]),
#define S_HEAD_PAIN (S_HEAD_ATK+2)
S_NORMAL1 (HEAD, 'A', 4, NULL , &States[S_HEAD_PAIN+1]),
S_NORMAL1 (HEAD, 'A', 4, A_Pain , &States[S_HEAD_FLOAT]),
#define S_HEAD_DIE (S_HEAD_PAIN+2)
S_NORMAL1 (HEAD, 'C', 7, NULL , &States[S_HEAD_DIE+1]),
S_NORMAL1 (HEAD, 'D', 7, A_Scream , &States[S_HEAD_DIE+2]),
S_NORMAL1 (HEAD, 'E', 7, NULL , &States[S_HEAD_DIE+3]),
S_NORMAL1 (HEAD, 'F', 7, NULL , &States[S_HEAD_DIE+4]),
S_NORMAL1 (HEAD, 'G', 7, A_NoBlocking, &States[S_HEAD_DIE+5]),
S_NORMAL1 (HEAD, 'H', 7, NULL , &States[S_HEAD_DIE+6]),
S_NORMAL1 (HEAD, 'I', -1, A_BossDeath , NULL)
};
------------------------------------------------------------------------
//========== The large ball of ice hurled by one of the iron lich's attacks.
IMPLEMENT_ACTOR (AHeadFX1, Heretic, -1, 164)
PROP_RadiusFixed (12)
PROP_HeightFixed (6)
PROP_SpeedFixed (13)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT|MF2_THRUGHOST)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_HEADFX1)
PROP_DeathState (S_HEADFXI1)
END_DEFAULTS
FState AHeadFX1::States[] =
{
#define S_HEADFX1 0
S_NORMAL1 (FX05, 'A', 6, NULL , &States[S_HEADFX1+1]),
S_NORMAL1 (FX05, 'B', 6, NULL , &States[S_HEADFX1+2]),
S_NORMAL1 (FX05, 'C', 6, NULL , &States[S_HEADFX1+0]),
#define S_HEADFXI1 (S_HEADFX1+3)
S_NORMAL1 (FX05, 'D', 5, A_LichIceImpact, &States[S_HEADFXI1+1]),
S_NORMAL1 (FX05, 'E', 5, NULL , &States[S_HEADFXI1+2]),
S_NORMAL1 (FX05, 'F', 5, NULL , &States[S_HEADFXI1+3]),
S_NORMAL1 (FX05, 'G', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== The ice shards created when an iron lich's ice ball explodes on impact.
IMPLEMENT_ACTOR (AHeadFX2, Heretic, -1, 0)
PROP_RadiusFixed (12)
PROP_HeightFixed (6)
PROP_SpeedFixed (8)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_HEADFX2)
PROP_DeathState (S_HEADFXI2)
END_DEFAULTS
FState AHeadFX2::States[] =
{
#define S_HEADFX2 0
S_NORMAL1 (FX05, 'H', 6, NULL, &States[S_HEADFX2+1]),
S_NORMAL1 (FX05, 'I', 6, NULL, &States[S_HEADFX2+2]),
S_NORMAL1 (FX05, 'J', 6, NULL, &States[S_HEADFX2+0]),
#define S_HEADFXI2 (S_HEADFX2+3)
S_NORMAL1 (FX05, 'D', 5, NULL, &States[S_HEADFXI2+1]),
S_NORMAL1 (FX05, 'E', 5, NULL, &States[S_HEADFXI2+2]),
S_NORMAL1 (FX05, 'F', 5, NULL, &States[S_HEADFXI2+3]),
S_NORMAL1 (FX05, 'G', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== A fireball thrown by one of the iron lich's attacks (the lich actually spits six of them at once).
IMPLEMENT_ACTOR (AHeadFX3, Heretic, -1, 0)
PROP_RadiusFixed (14)
PROP_HeightFixed (12)
PROP_SpeedFixed (10)
PROP_Damage (5)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_HEADFX3)
PROP_DeathState (S_HEADFXI3)
END_DEFAULTS
FState AHeadFX3::States[] =
{
#define S_HEADFX3 0
S_NORMAL1 (FX06, 'A', 4, A_LichFireGrow, &States[S_HEADFX3+1]),
S_NORMAL1 (FX06, 'B', 4, A_LichFireGrow, &States[S_HEADFX3+2]),
S_NORMAL1 (FX06, 'C', 4, A_LichFireGrow, &States[S_HEADFX3+0]),
S_NORMAL1 (FX06, 'A', 5, NULL , &States[S_HEADFX3+4]),
S_NORMAL1 (FX06, 'B', 5, NULL , &States[S_HEADFX3+5]),
S_NORMAL1 (FX06, 'C', 5, NULL , &States[S_HEADFX3+3]),
#define S_HEADFXI3 (S_HEADFX3+6)
S_NORMAL1 (FX06, 'D', 5, NULL , &States[S_HEADFXI3+1]),
S_NORMAL1 (FX06, 'E', 5, NULL , &States[S_HEADFXI3+2]),
S_NORMAL1 (FX06, 'F', 5, NULL , &States[S_HEADFXI3+3]),
S_NORMAL1 (FX06, 'G', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== The tornado summoned by one of the iron lich's attacks.
IMPLEMENT_ACTOR (AWhirlwind, Heretic, -1, 165)
PROP_RadiusFixed (16)
PROP_HeightFixed (74)
PROP_SpeedFixed (10)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags3 (MF3_EXPLOCOUNT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
PROP_SpawnState (S_HEADFX4)
PROP_DeathState (S_HEADFXI4)
END_DEFAULTS
FState AWhirlwind::States[] =
{
#define S_HEADFX4 0
S_NORMAL1 (FX07, 'D', 3, NULL , &States[S_HEADFX4+1]),
S_NORMAL1 (FX07, 'E', 3, NULL , &States[S_HEADFX4+2]),
S_NORMAL1 (FX07, 'F', 3, NULL , &States[S_HEADFX4+3]),
S_NORMAL1 (FX07, 'G', 3, NULL , &States[S_HEADFX4+4]),
S_NORMAL1 (FX07, 'A', 3, A_WhirlwindSeek, &States[S_HEADFX4+5]),
S_NORMAL1 (FX07, 'B', 3, A_WhirlwindSeek, &States[S_HEADFX4+6]),
S_NORMAL1 (FX07, 'C', 3, A_WhirlwindSeek, &States[S_HEADFX4+4]),
#define S_HEADFXI4 (S_HEADFX4+7)
S_NORMAL1 (FX07, 'G', 4, NULL , &States[S_HEADFXI4+1]),
S_NORMAL1 (FX07, 'F', 4, NULL , &States[S_HEADFXI4+2]),
S_NORMAL1 (FX07, 'E', 4, NULL , &States[S_HEADFXI4+3]),
S_NORMAL1 (FX07, 'D', 4, NULL , NULL)
};
------------------------------------------------------------------------
//========== Knight (Undead warrior)
IMPLEMENT_ACTOR (AKnight, Heretic, 64, 6)
PROP_SpawnHealth (200)
PROP_RadiusFixed (24)
PROP_HeightFixed (78)
PROP_Mass (150)
PROP_SpeedFixed (12)
PROP_PainChance (100)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_SpawnState (S_KNIGHT_STND)
PROP_SeeState (S_KNIGHT_WALK)
PROP_PainState (S_KNIGHT_PAIN)
PROP_MeleeState (S_KNIGHT_ATK)
PROP_MissileState (S_KNIGHT_ATK)
PROP_DeathState (S_KNIGHT_DIE)
PROP_SeeSound ("hknight/sight")
PROP_AttackSound ("hknight/attack")
PROP_PainSound ("hknight/pain")
PROP_DeathSound ("hknight/death")
PROP_ActiveSound ("hknight/active")
END_DEFAULTS
FState AKnight::States[] =
{
#define S_KNIGHT_STND 0
S_NORMAL1 (KNIG, 'A', 10, A_Look , &States[S_KNIGHT_STND+1]),
S_NORMAL1 (KNIG, 'B', 10, A_Look , &States[S_KNIGHT_STND+0]),
#define S_KNIGHT_WALK (S_KNIGHT_STND+2)
S_NORMAL1 (KNIG, 'A', 4, A_Chase , &States[S_KNIGHT_WALK+1]),
S_NORMAL1 (KNIG, 'B', 4, A_Chase , &States[S_KNIGHT_WALK+2]),
S_NORMAL1 (KNIG, 'C', 4, A_Chase , &States[S_KNIGHT_WALK+3]),
S_NORMAL1 (KNIG, 'D', 4, A_Chase , &States[S_KNIGHT_WALK+0]),
#define S_KNIGHT_ATK (S_KNIGHT_WALK+4)
S_NORMAL1 (KNIG, 'E', 10, A_FaceTarget , &States[S_KNIGHT_ATK+1]),
S_NORMAL1 (KNIG, 'F', 8, A_FaceTarget , &States[S_KNIGHT_ATK+2]),
S_NORMAL1 (KNIG, 'G', 8, A_KnightAttack, &States[S_KNIGHT_ATK+3]),
S_NORMAL1 (KNIG, 'E', 10, A_FaceTarget , &States[S_KNIGHT_ATK+4]),
S_NORMAL1 (KNIG, 'F', 8, A_FaceTarget , &States[S_KNIGHT_ATK+5]),
S_NORMAL1 (KNIG, 'G', 8, A_KnightAttack, &States[S_KNIGHT_WALK+0]),
#define S_KNIGHT_PAIN (S_KNIGHT_ATK+6)
S_NORMAL1 (KNIG, 'H', 3, NULL , &States[S_KNIGHT_PAIN+1]),
S_NORMAL1 (KNIG, 'H', 3, A_Pain , &States[S_KNIGHT_WALK+0]),
#define S_KNIGHT_DIE (S_KNIGHT_PAIN+2)
S_NORMAL1 (KNIG, 'I', 6, NULL , &States[S_KNIGHT_DIE+1]),
S_NORMAL1 (KNIG, 'J', 6, A_Scream , &States[S_KNIGHT_DIE+2]),
S_NORMAL1 (KNIG, 'K', 6, NULL , &States[S_KNIGHT_DIE+3]),
S_NORMAL1 (KNIG, 'L', 6, A_NoBlocking , &States[S_KNIGHT_DIE+4]),
S_NORMAL1 (KNIG, 'M', 6, NULL , &States[S_KNIGHT_DIE+5]),
S_NORMAL1 (KNIG, 'N', 6, NULL , &States[S_KNIGHT_DIE+6]),
S_NORMAL1 (KNIG, 'O', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== The ghost version of the undead warrior.
IMPLEMENT_STATELESS_ACTOR (AKnightGhost, Heretic, 65, 129)
PROP_FlagsSet (MF_SHADOW)
PROP_Flags3 (MF3_GHOST)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
END_DEFAULTS
------------------------------------------------------------------------
//========== A spinning axe, glowing with green light, tossed by undead warriors.
IMPLEMENT_ACTOR (AKnightAxe, Heretic, -1, 127)
PROP_RadiusFixed (10)
PROP_HeightFixed (8)
PROP_SpeedFixed (9)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_THRUGHOST)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_SPINAXE)
PROP_DeathState (S_SPINAXEX)
PROP_DeathSound ("knight/hit")
END_DEFAULTS
FState AKnightAxe::States[] =
{
#define S_SPINAXE 0
S_BRIGHT (SPAX, 'A', 3, A_AxeSound, &States[S_SPINAXE+1]),
S_BRIGHT (SPAX, 'B', 3, NULL , &States[S_SPINAXE+2]),
S_BRIGHT (SPAX, 'C', 3, NULL , &States[S_SPINAXE+0]),
#define S_SPINAXEX (S_SPINAXE+3)
S_BRIGHT (SPAX, 'D', 6, NULL , &States[S_SPINAXEX+1]),
S_BRIGHT (SPAX, 'E', 6, NULL , &States[S_SPINAXEX+2]),
S_BRIGHT (SPAX, 'F', 6, NULL , NULL)
};
------------------------------------------------------------------------
//========== A spinning axe, dripping with blood, tossed by ghost warriors and sometimes by undead warriors.
IMPLEMENT_ACTOR (ARedAxe, Heretic, -1, 128)
PROP_Damage (7)
PROP_Flags2Clear (MF2_WINDTHRUST)
PROP_SpawnState (S_REDAXE)
PROP_DeathState (S_REDAXEX)
END_DEFAULTS
FState ARedAxe::States[] =
{
#define S_REDAXE 0
S_BRIGHT (RAXE, 'A', 5, A_DripBlood, &States[S_REDAXE+1]),
S_BRIGHT (RAXE, 'B', 5, A_DripBlood, &States[S_REDAXE+0]),
#define S_REDAXEX (S_REDAXE+2)
S_BRIGHT (RAXE, 'C', 6, NULL , &States[S_REDAXEX+1]),
S_BRIGHT (RAXE, 'D', 6, NULL , &States[S_REDAXEX+2]),
S_BRIGHT (RAXE, 'E', 6, NULL , NULL)
};
------------------------------------------------------------------------
//========== Mummy (Golem)
IMPLEMENT_ACTOR (AMummy, Heretic, 68, 4)
PROP_SpawnHealth (80)
PROP_RadiusFixed (22)
PROP_HeightFixed (62)
PROP_Mass (75)
PROP_SpeedFixed (12)
PROP_PainChance (128)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_SpawnState (S_MUMMY_LOOK)
PROP_SeeState (S_MUMMY_WALK)
PROP_PainState (S_MUMMY_PAIN)
PROP_MeleeState (S_MUMMY_ATK)
PROP_DeathState (S_MUMMY_DIE)
PROP_SeeSound ("mummy/sight")
PROP_AttackSound ("mummy/attack1")
PROP_PainSound ("mummy/pain")
PROP_DeathSound ("mummy/death")
PROP_ActiveSound ("mummy/active")
END_DEFAULTS
FState AMummy::States[] =
{
#define S_MUMMY_LOOK 0
S_NORMAL1 (MUMM, 'A', 10, A_Look , &States[S_MUMMY_LOOK+1]),
S_NORMAL1 (MUMM, 'B', 10, A_Look , &States[S_MUMMY_LOOK+0]),
#define S_MUMMY_WALK (S_MUMMY_LOOK+2)
S_NORMAL1 (MUMM, 'A', 4, A_Chase , &States[S_MUMMY_WALK+1]),
S_NORMAL1 (MUMM, 'B', 4, A_Chase , &States[S_MUMMY_WALK+2]),
S_NORMAL1 (MUMM, 'C', 4, A_Chase , &States[S_MUMMY_WALK+3]),
S_NORMAL1 (MUMM, 'D', 4, A_Chase , &States[S_MUMMY_WALK+0]),
#define S_MUMMY_ATK (S_MUMMY_WALK+4)
S_NORMAL1 (MUMM, 'E', 6, A_FaceTarget , &States[S_MUMMY_ATK+1]),
S_NORMAL1 (MUMM, 'F', 6, A_MummyAttack, &States[S_MUMMY_ATK+2]),
S_NORMAL1 (MUMM, 'G', 6, A_FaceTarget , &States[S_MUMMY_WALK+0]),
#define S_MUMMY_PAIN (S_MUMMY_ATK+3)
S_NORMAL1 (MUMM, 'H', 4, NULL , &States[S_MUMMY_PAIN+1]),
S_NORMAL1 (MUMM, 'H', 4, A_Pain , &States[S_MUMMY_WALK+0]),
#define S_MUMMY_DIE (S_MUMMY_PAIN+2)
S_NORMAL1 (MUMM, 'I', 5, NULL , &States[S_MUMMY_DIE+1]),
S_NORMAL1 (MUMM, 'J', 5, A_Scream , &States[S_MUMMY_DIE+2]),
S_NORMAL1 (MUMM, 'K', 5, A_MummySoul , &States[S_MUMMY_DIE+3]),
S_NORMAL1 (MUMM, 'L', 5, NULL , &States[S_MUMMY_DIE+4]),
S_NORMAL1 (MUMM, 'M', 5, A_NoBlocking , &States[S_MUMMY_DIE+5]),
S_NORMAL1 (MUMM, 'N', 5, NULL , &States[S_MUMMY_DIE+6]),
S_NORMAL1 (MUMM, 'O', 5, NULL , &States[S_MUMMY_DIE+7]),
S_NORMAL1 (MUMM, 'P', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Mummy leader (Nitrogolem)
IMPLEMENT_ACTOR (AMummyLeader, Heretic, 45, 2)
PROP_SpawnHealth (100)
PROP_PainChance (64)
PROP_MissileState (S_MUMMYL_ATK)
END_DEFAULTS
FState AMummyLeader::States[] =
{
#define S_MUMMYL_ATK 0
S_NORMAL1(MUMM, 'X', 5, A_FaceTarget , &States[S_MUMMYL_ATK+1]),
S_BRIGHT (MUMM, 'Y', 5, A_FaceTarget , &States[S_MUMMYL_ATK+2]),
S_NORMAL1(MUMM, 'X', 5, A_FaceTarget , &States[S_MUMMYL_ATK+3]),
S_BRIGHT (MUMM, 'Y', 5, A_FaceTarget , &States[S_MUMMYL_ATK+4]),
S_NORMAL1(MUMM, 'X', 5, A_FaceTarget , &States[S_MUMMYL_ATK+5]),
S_BRIGHT (MUMM, 'Y', 15, A_MummyAttack2, &AMummy::States[S_MUMMY_WALK+0]),
};
------------------------------------------------------------------------
//========== Mummy ghost (Ghost golem)
IMPLEMENT_STATELESS_ACTOR (AMummyGhost, Heretic, 69, 8)
PROP_FlagsSet (MF_SHADOW)
PROP_Flags3 (MF3_GHOST)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
END_DEFAULTS
------------------------------------------------------------------------
//========== Mummy leader ghost (Ghost nitrogolem)
IMPLEMENT_STATELESS_ACTOR (AMummyLeaderGhost, Heretic, 46, 9)
PROP_FlagsSet (MF_SHADOW)
PROP_Flags3 (MF3_GHOST)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HR_SHADOW)
END_DEFAULTS
------------------------------------------------------------------------
//========== When a golem is killed this ghost leaves its body.
IMPLEMENT_ACTOR (AMummySoul, Heretic, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_Flags4 (MF4_NONETSPAWN)
PROP_SpawnState (S_MUMMY_SOUL)
END_DEFAULTS
FState AMummySoul::States[] =
{
#define S_MUMMY_SOUL 0
S_NORMAL1 (MUMM, 'Q', 5, NULL, &States[S_MUMMY_SOUL+1]),
S_NORMAL1 (MUMM, 'R', 5, NULL, &States[S_MUMMY_SOUL+2]),
S_NORMAL1 (MUMM, 'S', 5, NULL, &States[S_MUMMY_SOUL+3]),
S_NORMAL1 (MUMM, 'T', 9, NULL, &States[S_MUMMY_SOUL+4]),
S_NORMAL1 (MUMM, 'U', 5, NULL, &States[S_MUMMY_SOUL+5]),
S_NORMAL1 (MUMM, 'V', 5, NULL, &States[S_MUMMY_SOUL+6]),
S_NORMAL1 (MUMM, 'W', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== The screaming, flying, flaming skulls launched by nitrogolems.
IMPLEMENT_ACTOR (AMummyFX1, Heretic, -1, 131)
PROP_RadiusFixed (8)
PROP_HeightFixed (14)
PROP_SpeedFixed (9)
PROP_Damage (4)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_MUMMYFX1)
PROP_DeathState (S_MUMMYFXI1)
END_DEFAULTS
FState AMummyFX1::States[] =
{
#define S_MUMMYFX1 0
// [RH] Make the mummy scream right away
S_BRIGHT (FX15, 'A', 1, NULL , &States[S_MUMMYFX1+1]),
S_BRIGHT (FX15, 'A', 5, A_MummyFXSound, &States[S_MUMMYFX1+2]),
S_BRIGHT (FX15, 'B', 5, A_MummyFX1Seek, &States[S_MUMMYFX1+3]),
S_BRIGHT (FX15, 'C', 5, NULL , &States[S_MUMMYFX1+4]),
S_BRIGHT (FX15, 'B', 5, A_MummyFX1Seek, &States[S_MUMMYFX1+1]),
#define S_MUMMYFXI1 (S_MUMMYFX1+5)
S_BRIGHT (FX15, 'D', 5, NULL , &States[S_MUMMYFXI1+1]),
S_BRIGHT (FX15, 'E', 5, NULL , &States[S_MUMMYFXI1+2]),
S_BRIGHT (FX15, 'F', 5, NULL , &States[S_MUMMYFXI1+3]),
S_BRIGHT (FX15, 'G', 5, NULL , NULL)
};
------------------------------------------------------------------------
//========== Ophidian: a serpentine enemy wielding a magic trident able to throw projectiles of ice and fire.
IMPLEMENT_ACTOR (ASnake, Heretic, 92, 132)
PROP_SpawnHealth (280)
PROP_RadiusFixed (22)
PROP_HeightFixed (70)
PROP_SpeedFixed (10)
PROP_PainChance (48)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_SpawnState (S_SNAKE_LOOK)
PROP_SeeState (S_SNAKE_WALK)
PROP_PainState (S_SNAKE_PAIN)
PROP_MissileState (S_SNAKE_ATK)
PROP_DeathState (S_SNAKE_DIE)
PROP_AttackSound ("snake/attack")
PROP_SeeSound ("snake/sight")
PROP_PainSound ("snake/pain")
PROP_DeathSound ("snake/death")
PROP_ActiveSound ("snake/active")
END_DEFAULTS
FState ASnake::States[] =
{
#define S_SNAKE_LOOK 0
S_NORMAL1 (SNKE, 'A', 10, A_Look , &States[S_SNAKE_LOOK+1]),
S_NORMAL1 (SNKE, 'B', 10, A_Look , &States[S_SNAKE_LOOK+0]),
#define S_SNAKE_WALK (S_SNAKE_LOOK+2)
S_NORMAL1 (SNKE, 'A', 4, A_Chase , &States[S_SNAKE_WALK+1]),
S_NORMAL1 (SNKE, 'B', 4, A_Chase , &States[S_SNAKE_WALK+2]),
S_NORMAL1 (SNKE, 'C', 4, A_Chase , &States[S_SNAKE_WALK+3]),
S_NORMAL1 (SNKE, 'D', 4, A_Chase , &States[S_SNAKE_WALK+0]),
#define S_SNAKE_ATK (S_SNAKE_WALK+4)
S_NORMAL1 (SNKE, 'F', 5, A_FaceTarget , &States[S_SNAKE_ATK+1]),
S_NORMAL1 (SNKE, 'F', 5, A_FaceTarget , &States[S_SNAKE_ATK+2]),
S_NORMAL1 (SNKE, 'F', 4, A_SnakeAttack , &States[S_SNAKE_ATK+3]),
S_NORMAL1 (SNKE, 'F', 4, A_SnakeAttack , &States[S_SNAKE_ATK+4]),
S_NORMAL1 (SNKE, 'F', 4, A_SnakeAttack , &States[S_SNAKE_ATK+5]),
S_NORMAL1 (SNKE, 'F', 5, A_FaceTarget , &States[S_SNAKE_ATK+6]),
S_NORMAL1 (SNKE, 'F', 5, A_FaceTarget , &States[S_SNAKE_ATK+7]),
S_NORMAL1 (SNKE, 'F', 5, A_FaceTarget , &States[S_SNAKE_ATK+8]),
S_NORMAL1 (SNKE, 'F', 4, A_SnakeAttack2, &States[S_SNAKE_WALK+0]),
#define S_SNAKE_PAIN (S_SNAKE_ATK+9)
S_NORMAL1 (SNKE, 'E', 3, NULL , &States[S_SNAKE_PAIN+1]),
S_NORMAL1 (SNKE, 'E', 3, A_Pain , &States[S_SNAKE_WALK+0]),
#define S_SNAKE_DIE (S_SNAKE_PAIN+2)
S_NORMAL1 (SNKE, 'G', 5, NULL , &States[S_SNAKE_DIE+1]),
S_NORMAL1 (SNKE, 'H', 5, A_Scream , &States[S_SNAKE_DIE+2]),
S_NORMAL1 (SNKE, 'I', 5, NULL , &States[S_SNAKE_DIE+3]),
S_NORMAL1 (SNKE, 'J', 5, NULL , &States[S_SNAKE_DIE+4]),
S_NORMAL1 (SNKE, 'K', 5, NULL , &States[S_SNAKE_DIE+5]),
S_NORMAL1 (SNKE, 'L', 5, NULL , &States[S_SNAKE_DIE+6]),
S_NORMAL1 (SNKE, 'M', 5, A_NoBlocking , &States[S_SNAKE_DIE+7]),
S_NORMAL1 (SNKE, 'N', 5, NULL , &States[S_SNAKE_DIE+8]),
S_NORMAL1 (SNKE, 'O', 5, NULL , &States[S_SNAKE_DIE+9]),
S_NORMAL1 (SNKE, 'P', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Ophidian ice ball: ophidians throw a volley of three of these projectiles, quickly followed by one of a more dangerous type.
IMPLEMENT_ACTOR (ASnakeProjA, Heretic, -1, 138)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_SpeedFixed (14)
PROP_Damage (1)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_SNAKEPRO_A)
PROP_DeathState (S_SNAKEPRO_AX)
END_DEFAULTS
FState ASnakeProjA::States[] =
{
#define S_SNAKEPRO_A 0
S_BRIGHT (SNFX, 'A', 5, NULL, &States[S_SNAKEPRO_A+1]),
S_BRIGHT (SNFX, 'B', 5, NULL, &States[S_SNAKEPRO_A+2]),
S_BRIGHT (SNFX, 'C', 5, NULL, &States[S_SNAKEPRO_A+3]),
S_BRIGHT (SNFX, 'D', 5, NULL, &States[S_SNAKEPRO_A+0]),
#define S_SNAKEPRO_AX (S_SNAKEPRO_A+4)
S_BRIGHT (SNFX, 'E', 5, NULL, &States[S_SNAKEPRO_AX+1]),
S_BRIGHT (SNFX, 'F', 5, NULL, &States[S_SNAKEPRO_AX+2]),
S_BRIGHT (SNFX, 'G', 4, NULL, &States[S_SNAKEPRO_AX+3]),
S_BRIGHT (SNFX, 'H', 3, NULL, &States[S_SNAKEPRO_AX+4]),
S_BRIGHT (SNFX, 'I', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== The last and most powerful projectile thrown by an ophidian's attack, after a volley of three less dangerous ones.
IMPLEMENT_ACTOR (ASnakeProjB, Heretic, -1, 139)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (S_SNAKEPRO_B)
PROP_DeathState (S_SNAKEPRO_BX)
END_DEFAULTS
FState ASnakeProjB::States[] =
{
#define S_SNAKEPRO_B 0
S_BRIGHT (SNFX, 'J', 6, NULL, &States[S_SNAKEPRO_B+1]),
S_BRIGHT (SNFX, 'K', 6, NULL, &States[S_SNAKEPRO_B+0]),
#define S_SNAKEPRO_BX (S_SNAKEPRO_B+2)
S_BRIGHT (SNFX, 'L', 5, NULL, &States[S_SNAKEPRO_BX+1]),
S_BRIGHT (SNFX, 'M', 5, NULL, &States[S_SNAKEPRO_BX+2]),
S_BRIGHT (SNFX, 'N', 4, NULL, &States[S_SNAKEPRO_BX+3]),
S_BRIGHT (SNFX, 'O', 3, NULL, NULL)
};
------------------------------------------------------------------------
//========== The Disciples of D'Sparil are sinister wizards wearing a dark hooded robe, probably undead.
IMPLEMENT_ACTOR (AWizard, Heretic, 15, 19)
PROP_SpawnHealth (180)
PROP_RadiusFixed (16)
PROP_HeightFixed (68)
PROP_Mass (100)
PROP_SpeedFixed (12)
PROP_PainChance (64)
PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_FLOAT|MF_NOGRAVITY)
PROP_Flags2 (MF2_PASSMOBJ|MF2_PUSHWALL)
PROP_Flags3 (MF3_DONTOVERLAP)
PROP_SpawnState (S_WIZARD_LOOK)
PROP_SeeState (S_WIZARD_WALK)
PROP_PainState (S_WIZARD_PAIN)
PROP_MissileState (S_WIZARD_ATK)
PROP_DeathState (S_WIZARD_DIE)
PROP_SeeSound ("wizard/sight")
PROP_AttackSound ("wizard/attack")
PROP_PainSound ("wizard/pain")
PROP_DeathSound ("wizard/death")
PROP_ActiveSound ("wizard/active")
END_DEFAULTS
FState AWizard::States[] =
{
#define S_WIZARD_LOOK 0
S_NORMAL1 (WZRD, 'A', 10, A_Look , &States[S_WIZARD_LOOK+1]),
S_NORMAL1 (WZRD, 'B', 10, A_Look , &States[S_WIZARD_LOOK+0]),
#define S_WIZARD_WALK (S_WIZARD_LOOK+2)
S_NORMAL1 (WZRD, 'A', 3, A_Chase , &States[S_WIZARD_WALK+1]),
S_NORMAL1 (WZRD, 'A', 4, A_Chase , &States[S_WIZARD_WALK+2]),
S_NORMAL1 (WZRD, 'A', 3, A_Chase , &States[S_WIZARD_WALK+3]),
S_NORMAL1 (WZRD, 'A', 4, A_Chase , &States[S_WIZARD_WALK+4]),
S_NORMAL1 (WZRD, 'B', 3, A_Chase , &States[S_WIZARD_WALK+5]),
S_NORMAL1 (WZRD, 'B', 4, A_Chase , &States[S_WIZARD_WALK+6]),
S_NORMAL1 (WZRD, 'B', 3, A_Chase , &States[S_WIZARD_WALK+7]),
S_NORMAL1 (WZRD, 'B', 4, A_Chase , &States[S_WIZARD_WALK+0]),
#define S_WIZARD_ATK (S_WIZARD_WALK+8)
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+1]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+2]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+3]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+4]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+5]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+6]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk1 , &States[S_WIZARD_ATK+7]),
S_NORMAL1 (WZRD, 'C', 4, A_WizAtk2 , &States[S_WIZARD_ATK+8]),
S_NORMAL1 (WZRD, 'D', 12, A_WizAtk3 , &States[S_WIZARD_WALK+0]),
#define S_WIZARD_PAIN (S_WIZARD_ATK+9)
S_NORMAL1 (WZRD, 'E', 3, A_GhostOff , &States[S_WIZARD_PAIN+1]),
S_NORMAL1 (WZRD, 'E', 3, A_Pain , &States[S_WIZARD_WALK+0]),
#define S_WIZARD_DIE (S_WIZARD_PAIN+2)
S_NORMAL1 (WZRD, 'F', 6, A_GhostOff , &States[S_WIZARD_DIE+1]),
S_NORMAL1 (WZRD, 'G', 6, A_Scream , &States[S_WIZARD_DIE+2]),
S_NORMAL1 (WZRD, 'H', 6, NULL , &States[S_WIZARD_DIE+3]),
S_NORMAL1 (WZRD, 'I', 6, NULL , &States[S_WIZARD_DIE+4]),
S_NORMAL1 (WZRD, 'J', 6, A_NoBlocking, &States[S_WIZARD_DIE+5]),
S_NORMAL1 (WZRD, 'K', 6, NULL , &States[S_WIZARD_DIE+6]),
S_NORMAL1 (WZRD, 'L', 6, NULL , &States[S_WIZARD_DIE+7]),
S_NORMAL1 (WZRD, 'M', -1, NULL , NULL)
};
------------------------------------------------------------------------
//========== Disciples of D'Sparil fire three of these purple projectiles at a time, in large spread.
IMPLEMENT_ACTOR (AWizardFX1, Heretic, -1, 140)
PROP_RadiusFixed (10)
PROP_HeightFixed (6)
PROP_SpeedFixed (18)
PROP_Damage (3)
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_Flags4 (MF4_BLOODSPLATTER)
PROP_SpawnState (S_WIZFX1)
PROP_DeathState (S_WIZFXI1)
END_DEFAULTS
FState AWizardFX1::States[] =
{
#define S_WIZFX1 0
S_BRIGHT (FX11, 'A', 6, NULL, &States[S_WIZFX1+1]),
S_BRIGHT (FX11, 'B', 6, NULL, &States[S_WIZFX1+0]),
#define S_WIZFXI1 (S_WIZFX1+2)
S_BRIGHT (FX11, 'C', 5, NULL, &States[S_WIZFXI1+1]),
S_BRIGHT (FX11, 'D', 5, NULL, &States[S_WIZFXI1+2]),
S_BRIGHT (FX11, 'E', 5, NULL, &States[S_WIZFXI1+3]),
S_BRIGHT (FX11, 'F', 5, NULL, &States[S_WIZFXI1+4]),
S_BRIGHT (FX11, 'G', 5, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: just a skull on a quite long rope.
IMPLEMENT_ACTOR (ASkullHang70, Heretic, 17, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(70)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState ASkullHang70::States[1] =
{
S_NORMAL1 (SKH1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: just a skull on a long rope.
IMPLEMENT_ACTOR (ASkullHang60, Heretic, 24, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(60)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState ASkullHang60::States[1] =
{
S_NORMAL1 (SKH2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: just a skull on a rope.
IMPLEMENT_ACTOR (ASkullHang45, Heretic, 25, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(45)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState ASkullHang45::States[1] =
{
S_NORMAL1 (SKH3, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: just a skull on a short rope.
IMPLEMENT_ACTOR (ASkullHang35, Heretic, 26, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(35)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState ASkullHang35::States[1] =
{
S_NORMAL1 (SKH4, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: a heavy iron chandelier carrying eight brown candles.
IMPLEMENT_ACTOR (AChandelier, Heretic, 28, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(60)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AChandelier::States[3] =
{
S_NORMAL1 (CHDL, 'A', 4, NULL, &States[1]),
S_NORMAL1 (CHDL, 'B', 4, NULL, &States[2]),
S_NORMAL1 (CHDL, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Heretic Decoration: a tall iron torch with a green serpent coiled around it, topped by a silver-crowned goldskull.
IMPLEMENT_ACTOR (ASerpentTorch, Heretic, 27, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(54)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState ASerpentTorch::States[3] =
{
S_NORMAL1 (SRTC, 'A', 4, NULL, &States[1]),
S_NORMAL1 (SRTC, 'B', 4, NULL, &States[2]),
S_NORMAL1 (SRTC, 'C', 4, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Heretic Decoration: a small stone pillar with four sculpted demon faces (only one of which faces the player on the sprite).
IMPLEMENT_ACTOR (ASmallPillar, Heretic, 29, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(16)
PROP_HeightFixed(34)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState ASmallPillar::States[1] =
{
S_NORMAL1 (SMPL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: small stalagmite
IMPLEMENT_ACTOR (AStalagmiteSmall, Heretic, 37, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(32)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AStalagmiteSmall::States[1] =
{
S_NORMAL1 (STGS, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: large stalagmite
IMPLEMENT_ACTOR (AStalagmiteLarge, Heretic, 38, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(64)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AStalagmiteLarge::States[1] =
{
S_NORMAL1 (STGL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: small stalactite
IMPLEMENT_ACTOR (AStalactiteSmall, Heretic, 39, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(36)
PROP_Flags(MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AStalactiteSmall::States[1] =
{
S_NORMAL1 (STCS, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: large stalactite
IMPLEMENT_ACTOR (AStalactiteLarge, Heretic, 40, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(68)
PROP_Flags(MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AStalactiteLarge::States[1] =
{
S_NORMAL1 (STCL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: Fire Brazier
IMPLEMENT_ACTOR (AFireBrazier, Heretic, 76, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(16)
PROP_HeightFixed(44)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState AFireBrazier::States[8] =
{
S_BRIGHT (KFR1, 'A', 3, NULL, &States[1]),
S_BRIGHT (KFR1, 'B', 3, NULL, &States[2]),
S_BRIGHT (KFR1, 'C', 3, NULL, &States[3]),
S_BRIGHT (KFR1, 'D', 3, NULL, &States[4]),
S_BRIGHT (KFR1, 'E', 3, NULL, &States[5]),
S_BRIGHT (KFR1, 'F', 3, NULL, &States[6]),
S_BRIGHT (KFR1, 'G', 3, NULL, &States[7]),
S_BRIGHT (KFR1, 'H', 3, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Heretic Decoration: a wooden barrel from Heretic, slightly more massive-looking than Hexen's own wooden barrel.
IMPLEMENT_ACTOR (ABarrel, Heretic, 44, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(12)
PROP_HeightFixed(32)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState ABarrel::States[1] =
{
S_NORMAL1 (BARL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: Brown pillar
IMPLEMENT_ACTOR (ABrownPillar, Heretic, 47, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(14)
PROP_HeightFixed(128)
PROP_Flags(MF_SOLID)
END_DEFAULTS
FState ABrownPillar::States[1] =
{
S_NORMAL1 (BRPL, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: Moss
IMPLEMENT_ACTOR (AMoss1, Heretic, 48, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(23)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AMoss1::States[1] =
{
S_NORMAL1 (MOS1, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: Moss
IMPLEMENT_ACTOR (AMoss2, Heretic, 49, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(20)
PROP_HeightFixed(27)
PROP_Flags(MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AMoss2::States[1] =
{
S_NORMAL1 (MOS2, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Heretic Decoration: Wall-mounted torch
IMPLEMENT_ACTOR (AWallTorch, Heretic, 50, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(6)
PROP_HeightFixed(16)
PROP_Flags(MF_NOGRAVITY)
PROP_Flags4(MF4_FIXMAPTHINGPOS)
END_DEFAULTS
FState AWallTorch::States[3] =
{
S_BRIGHT (WTRH, 'A', 6, NULL, &States[1]),
S_BRIGHT (WTRH, 'B', 6, NULL, &States[2]),
S_BRIGHT (WTRH, 'C', 6, NULL, &States[0])
};
------------------------------------------------------------------------
//========== Heretic Decoration: Hanging corpse
IMPLEMENT_ACTOR (AHangingCorpse, Heretic, 51, 0)
PROP_SpawnState(0)
PROP_RadiusFixed(8)
PROP_HeightFixed(104)
PROP_Flags(MF_SOLID|MF_SPAWNCEILING|MF_NOGRAVITY)
END_DEFAULTS
FState AHangingCorpse::States[1] =
{
S_NORMAL1 (HCOR, 'A', -1, NULL, NULL)
};
------------------------------------------------------------------------
//========== Egg
IMPLEMENT_ACTOR(AEggFX, Heretic, -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_EGGFXI1)
END_DEFAULTS
FState AEggFX::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_EGGFXI1 (S_EGGFX+5)
S_BRIGHT (FX01, 'E', 3, NULL, &States[S_EGGFXI1+1]),
S_BRIGHT (FX01, 'F', 3, NULL, &States[S_EGGFXI1+2]),
S_BRIGHT (FX01, 'G', 3, NULL, &States[S_EGGFXI1+3]),
S_BRIGHT (FX01, 'H', 3, NULL, NULL),
};
------------------------------------------------------------------------
//========== Morph Ovum
IMPLEMENT_ACTOR (AArtiEgg, Heretic, 30, 14)
PROP_Flags(MF_SPECIAL|MF_COUNTITEM)
PROP_Flags2(MF2_FLOATBOB)
PROP_SpawnState(0)
PROP_PickupSound("misc/p_pkup")
END_DEFAULTS
FState AArtiEgg::States[] =
{
S_NORMAL1(EGGC, 'A', 6, NULL, &States[1]),
S_NORMAL1(EGGC, 'B', 6, NULL, &States[2]),
S_NORMAL1(EGGC, 'C', 6, NULL, &States[3]),
S_NORMAL1(EGGC, 'B', 6, NULL, &States[0]),
};
------------------------------------------------------------------------