ZDaemon Actors particular to either Heretic or Hexen

------------------------------------------------------------------------

//========== Wind sound

IMPLEMENT_ACTOR (ASoundWind, Raven, -1, 110)
	PROP_SpawnState (0)
	PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR)
END_DEFAULTS

FState ASoundWind::States[] =
{
	S_NORMAL1 (TNT1, 'A',   2, A_WindSound, &States[0])
};

------------------------------------------------------------------------

//========== Waterfall sound

IMPLEMENT_ACTOR (ASoundWaterfall, Raven, 41, 111)
	PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR)
	PROP_SpawnState (0)
END_DEFAULTS

FState ASoundWaterfall::States[] =
{
	S_NORMAL1 (TNT1, 'A',   2, A_WaterfallSound, &States[0])
};

------------------------------------------------------------------------

//========== Maulotaur

IMPLEMENT_ACTOR (AMinotaur, Raven, -1, 0)
	PROP_SpawnHealth(3000)
	PROP_RadiusFixed(28)
	PROP_HeightFixed(100)
	PROP_Mass(800)
	PROP_SpeedFixed(16)
	PROP_Damage(7)
	PROP_PainChance(25)
	PROP_Flags(MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL|MF_DROPOFF)
	PROP_Flags2(MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_BOSS|MF2_PUSHWALL)
	PROP_Flags3(MF3_NORADIUSDMG|MF3_DONTMORPH|MF3_NOTARGET)
	PROP_SpawnState(S_MNTR_LOOK)
	PROP_SeeState(S_MNTR_WALK)
	PROP_PainState(S_MNTR_PAIN)
	PROP_MeleeState(S_MNTR_ATK1)
	PROP_MissileState(S_MNTR_ATK2)
	PROP_DeathState(S_MNTR_DIE)
	PROP_SeeSound("minotaur/sight")
	PROP_AttackSound("minotaur/attack1")
	PROP_PainSound("minotaur/pain")
	PROP_DeathSound("minotaur/death")
	PROP_ActiveSound("minotaur/active")
END_DEFAULTS

FState AMinotaur::States[] =
{
#define S_MNTR_LOOK 0
	S_NORMAL1 (MNTR, 'A',   10, A_MinotaurLook  , &States[S_MNTR_LOOK+1]),
	S_NORMAL1 (MNTR, 'B',   10, A_MinotaurLook  , &States[S_MNTR_LOOK+0]),

#define S_MNTR_ROAM (S_MNTR_LOOK+2)
	S_NORMAL1 (MNTR, 'A',    5, A_MinotaurRoam  , &States[S_MNTR_ROAM+1]),
	S_NORMAL1 (MNTR, 'B',    5, A_MinotaurRoam  , &States[S_MNTR_ROAM+2]),
	S_NORMAL1 (MNTR, 'C',    5, A_MinotaurRoam  , &States[S_MNTR_ROAM+3]),
	S_NORMAL1 (MNTR, 'D',    5, A_MinotaurRoam  , &States[S_MNTR_ROAM]),

#define S_MNTR_WALK (S_MNTR_ROAM+4)
	S_NORMAL1 (MNTR, 'A',    5, A_MinotaurChase , &States[S_MNTR_WALK+1]),
	S_NORMAL1 (MNTR, 'B',    5, A_MinotaurChase , &States[S_MNTR_WALK+2]),
	S_NORMAL1 (MNTR, 'C',    5, A_MinotaurChase , &States[S_MNTR_WALK+3]),
	S_NORMAL1 (MNTR, 'D',    5, A_MinotaurChase , &States[S_MNTR_WALK+0]),

#define S_MNTR_ATK1 (S_MNTR_WALK+4)
	S_NORMAL1 (MNTR, 'V',   10, A_FaceTarget    , &States[S_MNTR_ATK1+1]),
	S_NORMAL1 (MNTR, 'W',    7, A_FaceTarget    , &States[S_MNTR_ATK1+2]),
	S_NORMAL1 (MNTR, 'X',   12, A_MinotaurAtk1  , &States[S_MNTR_WALK+0]),

#define S_MNTR_ATK2 (S_MNTR_ATK1+3)
	S_NORMAL1 (MNTR, 'V',   10, A_MinotaurDecide, &States[S_MNTR_ATK2+1]),
	S_NORMAL1 (MNTR, 'Y',    4, A_FaceTarget    , &States[S_MNTR_ATK2+2]),
	S_NORMAL1 (MNTR, 'Z',    9, A_MinotaurAtk2  , &States[S_MNTR_WALK+0]),

#define S_MNTR_ATK3 (S_MNTR_ATK2+3)
	S_NORMAL1 (MNTR, 'V',   10, A_FaceTarget    , &States[S_MNTR_ATK3+1]),
	S_NORMAL1 (MNTR, 'W',    7, A_FaceTarget    , &States[S_MNTR_ATK3+2]),
	S_NORMAL1 (MNTR, 'X',   12, A_MinotaurAtk3  , &States[S_MNTR_WALK+0]),
	S_NORMAL1 (MNTR, 'X',   12, NULL            , &States[S_MNTR_ATK3+0]),

#define S_MNTR_ATK4 (S_MNTR_ATK3+4)
	S_NORMAL1 (MNTR, 'U',    2, A_MinotaurCharge, &States[S_MNTR_ATK4+0]),

#define S_MNTR_PAIN (S_MNTR_ATK4+1)
	S_NORMAL1 (MNTR, 'E',    3, NULL            , &States[S_MNTR_PAIN+1]),
	S_NORMAL1 (MNTR, 'E',    6, A_Pain          , &States[S_MNTR_WALK+0]),

#define S_MNTR_DIE (S_MNTR_PAIN+2)
	S_NORMAL1 (MNTR, 'F',    6, NULL            , &States[S_MNTR_DIE+1]),
	S_NORMAL1 (MNTR, 'G',    5, NULL            , &States[S_MNTR_DIE+2]),
	S_NORMAL1 (MNTR, 'H',    6, A_Scream        , &States[S_MNTR_DIE+3]),
	S_NORMAL1 (MNTR, 'I',    5, NULL            , &States[S_MNTR_DIE+4]),
	S_NORMAL1 (MNTR, 'J',    6, NULL            , &States[S_MNTR_DIE+5]),
	S_NORMAL1 (MNTR, 'K',    5, NULL            , &States[S_MNTR_DIE+6]),
	S_NORMAL1 (MNTR, 'L',    6, NULL            , &States[S_MNTR_DIE+7]),
	S_NORMAL1 (MNTR, 'M',    5, A_NoBlocking    , &States[S_MNTR_DIE+8]),
	S_NORMAL1 (MNTR, 'N',    6, NULL            , &States[S_MNTR_DIE+9]),
	S_NORMAL1 (MNTR, 'O',    5, NULL            , &States[S_MNTR_DIE+10]),
	S_NORMAL1 (MNTR, 'P',    6, NULL            , &States[S_MNTR_DIE+11]),
	S_NORMAL1 (MNTR, 'Q',    5, NULL            , &States[S_MNTR_DIE+12]),
	S_NORMAL1 (MNTR, 'R',    6, NULL            , &States[S_MNTR_DIE+13]),
	S_NORMAL1 (MNTR, 'S',    5, NULL            , &States[S_MNTR_DIE+14]),
	S_NORMAL1 (MNTR, 'T',   -1, A_BossDeath     , NULL),

#define S_MNTR_FADEIN (S_MNTR_DIE+15)
	S_NORMAL1 (MNTR, 'A',   15, NULL            , &States[S_MNTR_FADEIN+1]),
	S_NORMAL1 (MNTR, 'A',   15, A_MinotaurFade1 , &States[S_MNTR_FADEIN+2]),
	S_NORMAL1 (MNTR, 'A',    3, A_MinotaurFade2 , &States[S_MNTR_LOOK]),

#define S_MNTR_FADEOUT (S_MNTR_FADEIN+3)
	S_NORMAL1 (MNTR, 'E',    6, NULL            , &States[S_MNTR_FADEOUT+1]),
	S_NORMAL1 (MNTR, 'E',    2, A_Scream        , &States[S_MNTR_FADEOUT+2]),
	S_NORMAL1 (MNTR, 'E',    5, A_SmokePuffExit , &States[S_MNTR_FADEOUT+3]),
	S_NORMAL1 (MNTR, 'E',    5, NULL            , &States[S_MNTR_FADEOUT+4]),
	S_NORMAL1 (MNTR, 'E',    5, A_NoBlocking    , &States[S_MNTR_FADEOUT+5]),
	S_NORMAL1 (MNTR, 'E',    5, NULL            , &States[S_MNTR_FADEOUT+6]),
	S_NORMAL1 (MNTR, 'E',    5, A_MinotaurFade1 , &States[S_MNTR_FADEOUT+7]),
	S_NORMAL1 (MNTR, 'E',    5, A_MinotaurFade0 , &States[S_MNTR_FADEOUT+8]),
	S_NORMAL1 (MNTR, 'E',   10, NULL            , NULL),
};

------------------------------------------------------------------------

//========== The fireballs created by a swing from a maulotaur's maul.

IMPLEMENT_ACTOR (AMinotaurFX1, Raven, -1, 0)
	PROP_RadiusFixed (10)
	PROP_HeightFixed (6)
	PROP_SpeedFixed (20)
	PROP_Damage (3)
	PROP_DamageType (MOD_FIRE)
	PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
	PROP_Flags2 (MF2_NOTELEPORT)
	PROP_Flags4 (MF4_BLOODSPLATTER)
	PROP_SpawnState (S_MNTRFX1)
	PROP_DeathState (S_MNTRFXI1)
END_DEFAULTS

FState AMinotaurFX1::States[] =
{
#define S_MNTRFX1 0
	S_BRIGHT (FX12, 'A',    6, NULL, &States[S_MNTRFX1+1]),
	S_BRIGHT (FX12, 'B',    6, NULL, &States[S_MNTRFX1+0]),

#define S_MNTRFXI1 (S_MNTRFX1+2)
	S_BRIGHT (FX12, 'C',    5, NULL, &States[S_MNTRFXI1+1]),
	S_BRIGHT (FX12, 'D',    5, NULL, &States[S_MNTRFXI1+2]),
	S_BRIGHT (FX12, 'E',    5, NULL, &States[S_MNTRFXI1+3]),
	S_BRIGHT (FX12, 'F',    5, NULL, &States[S_MNTRFXI1+4]),
	S_BRIGHT (FX12, 'G',    5, NULL, &States[S_MNTRFXI1+5]),
	S_BRIGHT (FX12, 'H',    5, NULL, NULL)
};

------------------------------------------------------------------------

//========== The running flame created by an impact on the ground from a maulotaur's maul.

IMPLEMENT_ACTOR (AMinotaurFX2, Raven, -1, 0)
	PROP_RadiusFixed (5)
	PROP_HeightFixed (12)
	PROP_SpeedFixed (14)
	PROP_Damage (4)
	PROP_Flags3 (MF3_FLOORHUGGER)
	PROP_SpawnState (S_MNTRFX2)
	PROP_DeathState (S_MNTRFXI2)
	PROP_DeathSound ("minotaur/fx2hit")
END_DEFAULTS

FState AMinotaurFX2::States[] =
{
#define S_MNTRFX2 0
	S_NORMAL1 (FX13, 'A',    2, A_MntrFloorFire, &States[S_MNTRFX2+0]),

#define S_MNTRFXI2 (S_MNTRFX2+1)
	S_BRIGHT (FX13, 'I',    4, A_Explode       , &States[S_MNTRFXI2+1]),
	S_BRIGHT (FX13, 'J',    4, NULL            , &States[S_MNTRFXI2+2]),
	S_BRIGHT (FX13, 'K',    4, NULL            , &States[S_MNTRFXI2+3]),
	S_BRIGHT (FX13, 'L',    4, NULL            , &States[S_MNTRFXI2+4]),
	S_BRIGHT (FX13, 'M',    4, NULL            , NULL)
};

------------------------------------------------------------------------

//========== The flame trail left behind the running flame from an impact on the ground from a maulotaur's maul.

IMPLEMENT_ACTOR (AMinotaurFX3, Raven, -1, 0)
	PROP_RadiusFixed (8)
	PROP_HeightFixed (16)
	PROP_SpeedFixed (0)
	PROP_Flags3 (0)
	PROP_SpawnState (S_MNTRFX3)
	PROP_DeathSound ("minotaur/fx3hit")
END_DEFAULTS

FState AMinotaurFX3::States[] =
{
#define S_MNTRFX3 0
	S_BRIGHT (FX13, 'D',    4, NULL, &States[S_MNTRFX3+1]),
	S_BRIGHT (FX13, 'C',    4, NULL, &States[S_MNTRFX3+2]),
	S_BRIGHT (FX13, 'B',    5, NULL, &States[S_MNTRFX3+3]),
	S_BRIGHT (FX13, 'C',    5, NULL, &States[S_MNTRFX3+4]),
	S_BRIGHT (FX13, 'D',    5, NULL, &States[S_MNTRFX3+5]),
	S_BRIGHT (FX13, 'E',    5, NULL, &States[S_MNTRFX3+6]),
	S_BRIGHT (FX13, 'F',    4, NULL, &States[S_MNTRFX3+7]),
	S_BRIGHT (FX13, 'G',    4, NULL, &States[S_MNTRFX3+8]),
	S_BRIGHT (FX13, 'H',    4, NULL, NULL)
};

------------------------------------------------------------------------

//========== Teleport (self) artifact

IMPLEMENT_ACTOR (AArtiTeleport, Raven, 36, 18)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiTeleport::States[] =
{
	S_NORMAL1 (ATLP, 'A',    4, NULL, &States[1]),
	S_NORMAL1 (ATLP, 'B',    4, NULL, &States[2]),
	S_NORMAL1 (ATLP, 'C',    4, NULL, &States[3]),
	S_NORMAL1 (ATLP, 'B',    4, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Health artifact

IMPLEMENT_ACTOR (AArtiHealth, Raven, 82, 24)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiHealth::States[] =
{
	S_NORMAL1 (PTN2, 'A',    4, NULL, &States[1]),
	S_NORMAL1 (PTN2, 'B',    4, NULL, &States[2]),
	S_NORMAL1 (PTN2, 'C',    4, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Super health artifact

IMPLEMENT_ACTOR (AArtiSuperHealth, Raven, 32, 25)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiSuperHealth::States[] =
{
	S_NORMAL1 (SPHL, 'A',  350, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Flight artifact

IMPLEMENT_ACTOR (AArtiFly, Raven, 83, 15)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiFly::States[] =
{
	S_NORMAL1 (SOAR, 'A',    5, NULL, &States[1]),
	S_NORMAL1 (SOAR, 'B',    5, NULL, &States[2]),
	S_NORMAL1 (SOAR, 'C',    5, NULL, &States[3]),
	S_NORMAL1 (SOAR, 'B',    5, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Invulnerability artifact

IMPLEMENT_ACTOR (AArtiInvulnerability, Raven, 84, 133)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiInvulnerability::States[] =
{
	S_NORMAL1 (INVU, 'A',    3, NULL, &States[1]),
	S_NORMAL1 (INVU, 'B',    3, NULL, &States[2]),
	S_NORMAL1 (INVU, 'C',    3, NULL, &States[3]),
	S_NORMAL1 (INVU, 'D',    3, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Torch artifact

IMPLEMENT_ACTOR (AArtiTorch, Raven, 33, 73)
	PROP_Flags (MF_SPECIAL|MF_COUNTITEM)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState AArtiTorch::States[] =
{
	S_BRIGHT (TRCH, 'A',    3, NULL, &States[1]),
	S_BRIGHT (TRCH, 'B',    3, NULL, &States[2]),
	S_BRIGHT (TRCH, 'C',    3, NULL, &States[0])
};

------------------------------------------------------------------------

//========== Crystal vial

IMPLEMENT_ACTOR (ACrystalVial, Raven, 81, 23)
	PROP_Flags (MF_SPECIAL)
	PROP_Flags2 (MF2_FLOATBOB)
	PROP_SpawnState (0)
END_DEFAULTS

FState ACrystalVial::States[] =
{
	S_NORMAL1 (PTN1, 'A',    3, NULL, &States[1]),
	S_NORMAL1 (PTN1, 'B',    3, NULL, &States[2]),
	S_NORMAL1 (PTN1, 'C',    3, NULL, &States[0])
};

------------------------------------------------------------------------