// The Heresiarch him/itself ------------------------------------------------

ACTOR Heresiarch 10080 native
{
	Game Hexen
	Health 5000
	Painchance 10
	Speed 16
	Radius 40
	Height 110
	Mass 500
	Damage 9
	Monster
	+FLOORCLIP
	+BOSS
	+DONTMORPH
	+NOTARGET
	+NOICEDEATH
	+DEFLECT
	SeeSound "SorcererSight"
	PainSound "SorcererPain"
	DeathSound "SorcererDeathScream"
	ActiveSound "SorcererActive"
	Obituary "$OB_HERESIARCH"
	
	action native A_SorcSpinBalls();
	action native A_SpeedBalls();
	action native A_SorcBossAttack();
	action native A_SpawnFizzle();
	
	States
	{
	Spawn:
		SORC A 3
		SORC A 2 A_SorcSpinBalls
	Idle:
		SORC A 10 A_Look
		Wait
	See:
		SORC ABCD 5 A_Chase
		Loop
	Pain:
		SORC G 8
		SORC G 8 A_Pain
		Goto See
	Missile:
		SORC F 6 Bright A_FaceTarget
		SORC F 6 Bright A_SpeedBalls
		SORC F 6 Bright A_FaceTarget
		Wait
	Attack1:
		SORC E 6 Bright
		SORC E 6 Bright A_SpawnFizzle
		SORC E 5 Bright A_FaceTarget
		Goto Attack1+1
	Attack2:
		SORC E 2 Bright
		SORC E 2 Bright A_SorcBossAttack
		Goto See
	Death:
		SORC H 5 Bright
		SORC I 5 Bright A_FaceTarget
		SORC J 5 Bright A_Scream
		SORC KLMNOPQRST 5 Bright
		SORC U 5 Bright A_NoBlocking
		SORC VWXY 5 Bright
		SORC Z -1 Bright
		Stop
	}
}

// Base class for the balls flying around the Heresiarch's head -------------

ACTOR SorcBall native
{
	Speed 10
	Radius 5
	Height 5
	Projectile
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
	+FULLVOLDEATH
	+CANBOUNCEWATER
	+NOWALLBOUNCESND
	BounceType "HexenCompat"
	SeeSound "SorcererBallBounce"
	DeathSound "SorcererBigBallExplode"

	action native A_SorcBallOrbit();
	action native A_SorcBallPop();
	action native A_BounceCheck ();
}

// First ball (purple) - fires projectiles ----------------------------------

ACTOR SorcBall1 : SorcBall native
{
	States
	{
	Spawn:
		SBMP ABCDEFGHIJKLMNOP 2 A_SorcBallOrbit
		Loop
	Pain:
		SBMP A 5 A_SorcBallPop
		SBMP B 2 A_BounceCheck
		Wait
	Death:
		SBS4 D 0 A_ChangeFlag("NOBOUNCESOUND", 1)
		SBS4 D 5 A_Explode(255,255)
		SBS4 E 5
		SBS4 FGH 6
		Stop
	}
}


// Second ball (blue) - generates the shield --------------------------------

ACTOR SorcBall2 : SorcBall native
{
	States
	{
	Spawn:
		SBMB ABCDEFGHIJKLMNOP 2 A_SorcBallOrbit
		Loop
	Pain:
		SBMB A 5 A_SorcBallPop
		SBMB B 2 A_BounceCheck
		Wait
	Death:
		SBS4 D 0 A_ChangeFlag("NOBOUNCESOUND", 1)
		SBS3 D 5 A_Explode(255,255)
		SBS3 E 5
		SBS3 FGH 6
		Stop
	}
}

// Third ball (green) - summons Bishops -------------------------------------

ACTOR SorcBall3 : SorcBall native
{
	States
	{
	Spawn:
		SBMG ABCDEFGHIJKLMNOP 2 A_SorcBallOrbit
		Loop
	Pain:
		SBMG A 5 A_SorcBallPop
		SBMG B 2 A_BounceCheck
		Wait
	Death:
		SBS4 D 0 A_ChangeFlag("NOBOUNCESOUND", 1)
		SBS3 D 5 A_Explode(255,255)
		SBS3 E 5
		SBS3 FGH 6
		Stop
	}
}


// Sorcerer spell 1 (The burning, bouncing head thing) ----------------------

ACTOR SorcFX1
{
	Speed 7
	Radius 5
	Height 5
	Projectile
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
	-NOGRAVITY
	+FULLVOLDEATH
	+CANBOUNCEWATER
	+NOWALLBOUNCESND
	BounceFactor 1.0
	+HEXENBOUNCE
	SeeSound "SorcererBallBounce"
	DeathSound "SorcererHeadScream"

	action native A_SorcFX1Seek();

	States
	{
	Spawn:
		SBS1 A 2 Bright
		SBS1 BCD 3 Bright A_SorcFX1Seek
		Loop
	Death:
		FHFX S 2 Bright A_Explode(30, 128)
		FHFX SS 6 Bright
		Stop
	}
}


// Sorcerer spell 2 (The visible part of the shield) ------------------------

ACTOR SorcFX2
{
	Speed 15
	Radius 5
	Height 5
	+NOBLOCKMAP
	+NOGRAVITY
	+NOTELEPORT

	action native A_SorcFX2Split();
	action native A_SorcFX2Orbit ();

	states
	{
	Spawn:
		SBS2 A 3 Bright A_SorcFX2Split
		Loop
	Orbit:
		SBS2 A 2 Bright
		SBS2 BCDEFGHIJKLMNOPA 2 Bright A_SorcFX2Orbit
		Goto Orbit+1
	Death:
		SBS2 A 10
		Stop
	}
}

// The translucent trail behind SorcFX2 -------------------------------------

ACTOR SorcFX2T1 : SorcFX2
{
	RenderStyle Translucent
	Alpha 0.4
	States
	{
	Spawn:
		Goto Death
	}
}


// Sorcerer spell 3 (The Bishop spawner) ------------------------------------

ACTOR SorcFX3
{
	Speed 15
	Radius 22
	Height 65
	+NOBLOCKMAP
	+MISSILE
	+NOTELEPORT
	SeeSound "SorcererBishopSpawn"

	action native A_SpawnBishop();
	action native A_SorcererBishopEntry();

	States
	{
	Spawn:
		SBS3 ABC 2 Bright
		Loop
	Death:
		SBS3 A 4 Bright
		BISH P 4 A_SorcererBishopEntry
		BISH ON 4
		BISH MLKJIH 3
		BISH G 3 A_SpawnBishop
		Stop
	}
}


// The Bishop spawner's explosion animation ---------------------------------

ACTOR SorcFX3Explosion
{
	+NOBLOCKMAP
	+NOGRAVITY
	+NOTELEPORT
	RenderStyle Translucent
	Alpha 0.4
	States
	{
	Spawn:
		SBS3 DEFGH 3
		Stop
	}
}


// Sorcerer spell 4 (The purple projectile) ---------------------------------

ACTOR SorcFX4
{
	Speed 12
	Radius 10
	Height 10
	Projectile
	-ACTIVATEIMPACT
	-ACTIVATEPCROSS
	DeathSound "SorcererBallExplode"

	action native A_SorcFX4Check();

	States
	{
	Spawn:
		SBS4 ABC 2 Bright A_SorcFX4Check
		Loop
	Death:
		SBS4 D 2 Bright
		SBS4 E 2 Bright A_Explode(20, 128)
		SBS4 FGH 2 Bright
		Stop
	}
}


// Spark that appears when shooting SorcFX4 ---------------------------------

ACTOR SorcSpark1
{
	Radius 5
	Height 5
	Gravity 0.125
	+NOBLOCKMAP
	+DROPOFF
	+NOTELEPORT
	RenderStyle Add
	States
	{
	Spawn:
		SBFX ABCDEFG 4 Bright
		Stop
	}
}