ACTOR _Heresiarch 
{ 
	Health 10000
	Speed 20
	Radius 40 
	Height 110 
	Mass 0x7FFFFFFF
	MONSTER
	+FLOORCLIP
	+BOSS
	+DONTMORPH
	+NOTARGET
	+NOICEDEATH
	+NOPAIN
	+NOFEAR
	+NOBLOODDECALS
	Bloodtype "EtherealBloodPurple"
	Obituary "%o had %p bones rolled by the Heresiarch."
	SeeSound "SorcererSight"
	PainSound "SorcererPain"
	DeathSound "SorcererDeathScream"
	ActiveSound "SorcererActive"
	var int user_count;
	States 
	{ 
	Spawn:
		SORC A 0
		SORC A 0 ACS_ExecuteAlways(WOC_MONSTERSCRIPT,0,10000,110,WOC_STAT|WOC_SUBBOSS|WOC_MAXLEVEL)
		SORC A 0 ACS_ExecuteAlways(973, 0, 0)
		SORC A 0 
		SORC A 0 ACS_ExecuteAlways(968, 0, 0)
		SORC A 0
		SORC A 0 A_GiveInventory("HersheyBallSet", 1)
	SpawnLoop:
	Idle:
		SORC AB 10 A_Look 
		Loop 
	See:
		SORC A 4 A_Chase
		SORC B 5 A_Chase
		SORC C 4 A_Chase
		SORC D 5 A_Chase
		Loop
	Missile:
		SORC F 0 ACS_ExecuteAlways(967, 0, 0)
		SORC F 0 A_SetUserVar("user_count", 0)
	Decide:
		SORC F 0 A_JumpIf(user_count == 7, "FinishDecide")
		SORC FF 5 Bright A_FaceTarget
		SORC F 0 A_PlaySound("SorcererBallWoosh", CHAN_AUTO)
		SORC F 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	FinishDecide:
		SORC F 0 A_SetUserVar("user_count", 0)
		SORC F 0 A_PlaySound("SorcererSpellCast")
		SORC F 0 A_JumpIfInventory("HersheyGotShield", 1, "HasShield")
		SORC F 0 A_JumpIf(ACS_ExecuteWithResult(971), "Reconsider2")
		// no shield => make shield 80% of time, otherwise whiplash 80% of the time
		SORC F 0 A_Jump(204, "MakeShield")
		SORC F 0 A_Jump(256, "Whiplash", "RedHead")
		Goto RedHead
	HasShield:
		SORC F 0 A_JumpIf(ACS_ExecuteWithResult(971), "Reconsider1")
		SORC F 0 A_Jump(204, "Whiplash")
		Goto RedHead
	Reconsider1:
		// has shield, health is low
		SORC F 0 A_Jump(204, "MakeBishop")
		SORC F 0 A_Jump(128, "Whiplash")
		Goto RedHead
	Reconsider2:
		// no shield, health is low
		SORC F 0 A_Jump(160, "MakeBishop")
		SORC F 0 A_Jump(160, "MakeShield")
		SORC F 0 A_Jump(128, "Whiplash")
		Goto RedHead
	MakeShield:
		SORC E 0 A_PlaySound("SorcererSpellCast", CHAN_AUTO)
		SORC E 0 A_GiveInventory("HersheyGotShield", 1)
		SORC E 0 A_SetReflectiveInvulnerable
		SORC E 0 ACS_ExecuteAlways(968, 0, 1)
		SORC E 0 ACS_ExecuteAlways(972)
		SORC E 0 ACS_ExecuteAlways(967, 0, 1)
		SORC EEEE 6 Bright A_FaceTarget
		SORC E 0 ACS_ExecuteAlways(967, 0, 2)
		Goto See
	RedHead:
		SORC E 0 ACS_ExecuteAlways(967, 0, 1)
		SORC E 0 A_CustomMissile("ZSorcFX1", 48, 0, 26, CMF_AIMDIRECTION, 10)
		SORC E 0 A_CustomMissile("ZSorcFX1", 48, 0, -26, CMF_AIMDIRECTION, 10)
		SORC EEEE 6 Bright A_FaceTarget
		SORC E 0 ACS_ExecuteAlways(967, 0, 2)
		Goto See
	Whiplash:
		SORC E 0 ACS_ExecuteAlways(967, 0, 1)
	WhiplashLoop:
		SORC E 0 A_JumpIf(user_count == 18, "WhiplashFinish")
		SORC E 0 A_PlaySound("SorcererSpellCast", CHAN_AUTO)
		SORC E 0 A_SpawnItem("ZSorcSpark1", 5, 72)
		SORC E 3 Bright A_CustomMissile ("ZSorcFX4", 36, 0, 25 * sin(20 * user_count))
		SORC E 0 A_FaceTarget
		SORC E 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	WhiplashFinish:
		SORC E 0 ACS_ExecuteAlways(967, 0, 2)
		Goto See
	MakeBishop:
		SORC E 0 ACS_ExecuteAlways(967, 0, 1)
		SORC E 0 A_CustomMissile("ZSorcFX3", 48, 0, Random(-90, 90), CMF_AIMDIRECTION, -5)
		SORC E 0 A_PlaySound("SorcererSpellCast")
		SORC EEEE 6 Bright A_FaceTarget
		SORC E 0 ACS_ExecuteAlways(967, 0, 2)
		Goto See
	Death:
		SORC H 0 ACS_ExecuteAlways(967, 0, 3)
		SORC H 0 ACS_ExecuteAlways(WOC_MONSTERXPSCRIPT,0,2000)
		SORC H 0 A_CustomMissile("SorcBall1Projectile", 100, 0, 0 + random(-30, 30), CMF_AIMDIRECTION)
		SORC H 0 A_CustomMissile("SorcBall2Projectile", 100, 0, 120 + random(-30, 30), CMF_AIMDIRECTION)
		SORC H 0 A_CustomMissile("SorcBall3Projectile", 100, 0, 240 + random(-30, 30), CMF_AIMDIRECTION)
		SORC H 5
		SORC I 5 Bright A_FaceTarget
		SORC I 5 A_Scream
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaZap", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaBoom", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC I 1 A_SpawnItemEx ("KaGas", 0, 0,0,random(-9,9),random(-9,9),random(5,9), 48, 128)
		SORC J 5 //A_Scream
		SORC KLMNOPQRST 5
		SORC U 5 A_NoBlocking
		SORC VWXY 5
		SORC Z -1 A_KillMaster
		Stop
	} 
}

Actor HersheyBallSet : Inventory {
	inventory.maxamount 1
}

Actor HersheyDead : Inventory {
	inventory.maxamount 1
}

Actor HersheyAttack : Inventory {
	inventory.maxamount 1
}

Actor HersheyOnAttack : Inventory {
	inventory.maxamount 1
}

Actor HersheyGotShield : Inventory {
	inventory.maxamount 1
}

Actor RevertStates : CustomInventory {
	inventory.maxamount 1
	+ALWAYSPICKUP
	+AUTOACTIVATE
	States {
		Pickup:
			TNT1 A 0 A_UnsetReflectiveInvulnerable
			TNT1 A 0 A_TakeInventory("HersheyGotShield", 1)
		Stop
	}
}

Actor ZSorcBallBase {
    +NOGRAVITY
    +NOCLIP
    Radius 2
    Height 2
	Speed 16
}

Actor SorcBall1New : ZSorcBallBase {
	+CLIENTSIDEONLY
	var int user_angle;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 0)
			TNT1 A 0 ACS_ExecuteAlways(970, 0, 0, 1, 32)
		SpawnLoop:
			SBMP A 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMP A 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP B 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP B 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP C 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP C 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMP D 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMP D 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMP E 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP E 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMP F 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP F 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMP G 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP G 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP H 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP H 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP I 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP I 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP J 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP J 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP K 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP K 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP L 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP L 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP M 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP M 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP N 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP N 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP O 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMP O 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMP P 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMP P 1 ACS_ExecuteAlways(970, 0, 1, 1, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor SorcBall2New : ZSorcBallBase {
	+CLIENTSIDEONLY
	var int user_angle;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 60)
			TNT1 A 0 ACS_ExecuteAlways(970, 0, 0, 2, 32)
		SpawnLoop:
			SBMB A 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMB A 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB B 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB B 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB C 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB C 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMB D 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMB D 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMB E 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB E 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMB F 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB F 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMB G 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB G 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB H 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB H 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB I 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB I 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB J 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB J 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB K 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB K 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB L 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB L 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB M 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB M 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB N 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB N 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB O 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMB O 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMB P 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMB P 1 ACS_ExecuteAlways(970, 0, 1, 2, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor SorcBall3New : ZSorcBallBase {
	+CLIENTSIDEONLY
	var int user_angle;
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_SetUserVar("user_angle", 120)
			TNT1 A 0 ACS_ExecuteAlways(970, 0, 0, 3, 32)
		SpawnLoop:
			SBMG A 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMG A 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG B 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG B 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG C 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG C 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMG D 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))
			SBMG D 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))					
			SBMG E 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG E 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMG F 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG F 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))				
			SBMG G 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG G 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG H 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG H 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG I 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG I 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG J 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG J 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG K 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG K 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG L 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG L 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG M 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG M 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG N 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG N 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG O 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))			
			SBMG O 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
			SBMG P 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))		
			SBMG P 1 ACS_ExecuteAlways(970, 0, 1, 3, 32)
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(969) == -2, "Death")
			TNT1 A 0 A_SetUserVar("user_angle", user_angle + 4 * ACS_ExecuteWithResult(969))	
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor SorcBallProjectileBase {
	PROJECTILE
	Speed 6
	Height 10
	Radius 5
	//+FULLVOLDEATH
	+CANBOUNCEWATER
	+NOWALLBOUNCESND
	-NOGRAVITY
    -ACTIVATEIMPACT
    -ACTIVATEPCROSS
	+HEXENBOUNCE
	Gravity 0.075
	BounceCount 5
	SeeSound "SorcererBallBounce"
    DeathSound "SorcererBigBallExplode"
}

Actor SorcBall1Projectile : SorcBallProjectileBase {
	SeeSound "SorcererBallBounce"
    DeathSound "SorcererBigBallExplode"
	States {
		Spawn:
			SBMP ABCDEFGHIJKLMNOP 2 Bright
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOBOUNCESOUND", 1)
			SBS4 D 5 Bright A_Explode(255+(ACS_ExecuteWithResult(WOC_MONSTERSCALE,56,TARGET,0)), 255, 0)
			SBS4 E 5 Bright
			SBS4 FGH 6 Bright
		Stop
	}
}

Actor SorcBall2Projectile : SorcBallProjectileBase {
	SeeSound "SorcererBallBounce"
    DeathSound "SorcererBigBallExplode"
	States {
		Spawn:
			SBMB ABCDEFGHIJKLMNOP 2 Bright
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOBOUNCESOUND", 1)
			SBS5 D 5 Bright A_Explode(255+(ACS_ExecuteWithResult(WOC_MONSTERSCALE,56,TARGET,0)), 255, 0)
			SBS5 E 5 Bright
			SBS5 FGH 6 Bright
		Stop
	}
}

Actor SorcBall3Projectile : SorcBallProjectileBase {
	SeeSound "SorcererBallBounce"
    DeathSound "SorcererBigBallExplode"
	States {
		Spawn:
			SBMG ABCDEFGHIJKLMNOP 2 Bright
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOBOUNCESOUND", 1)
			SBS3 D 5 Bright A_Explode(255+(ACS_ExecuteWithResult(WOC_MONSTERSCALE,56,TARGET,0)), 255, 0)
			SBS3 E 5 Bright
			SBS3 FGH 6 Bright
		Stop
	}
}

Actor ZSorcFX3 
{
	Speed 15
	Radius 22
	Height 65
	+NOBLOCKMAP
	+MISSILE
	+NOTELEPORT
	+DONTBLAST
	SeeSound "Hershey/Bishop"

	States
	{
	Spawn:
		SBS3 ABC 2 Bright
		Loop
	Death:
		SBS3 A 0 Bright A_Stop
		SBS3 A 2 Bright A_SetTranslucent(1,1)
		SBS3 A 0 Bright A_SpawnItemEx("HeresiarchNewBishop",0,0,0,0,0,0,SXF_SETMASTER)
		SBS3 DEFGH 2 Bright
		Stop
	}
}

Actor ZSorcFX4
{
	Speed 12
	Radius 10
	Height 10
	Projectile
	+NODAMAGETHRUST
	Damagetype "Arcane"
	DeathSound "SorcererBallExplode"
	ReactionTime 60 // play at will, this is 120 tics around 3.5 seconds

	States 
	{
	Spawn:
		SBS4 ABC 2 Bright A_CountDown
		Loop
	Death:
		SBS4 D 0 Bright A_SetTranslucent(1,1)
		SBS4 D 2 Bright A_Explode(40+(ACS_ExecuteWithResult(WOC_MONSTERSCALE,9,TARGET,0)), 128, 0)
		SBS4 EFGH 2 Bright
		Stop
	}
}

Actor ZSorcSpark1 : SorcSpark1 {
	VSpeed 2
	+CLIENTSIDEONLY
}

Actor ZSorcFX1 {
	Speed 10
	Radius 5
	Height 5
	Projectile
	-NOGRAVITY
	+FULLVOLDEATH
	+CANBOUNCEWATER
	+NOWALLBOUNCESND
	+SEEKERMISSILE
	BounceFactor 1.0
	+HEXENBOUNCE
	+NODAMAGETHRUST
	Renderstyle Add
	SeeSound "SorcererBallBounce"
	DeathSound "SorcererHeadScream"
	var int user_count;
	Damagetype "Fire"
	States {
		Spawn:
			SBS1 A 2 Bright
			TNT1 A 0 A_SetUserVar("user_count", 20) // base is 17
		SpawnLoop:
			TNT1 A 0 A_JumpIf(user_count < 1, "Death")
			SBS1 B 3 Bright A_SeekerMissile(2, 6)
			SBS1 C 3 Bright A_SeekerMissile(2, 6)
			SBS1 D 3 Bright A_SeekerMissile(2, 6)
			TNT1 A 0 A_SetUserVar("user_count", user_count - 1)
		Loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_PlaySound("SorcererHeadScream")
			FX13 I 2 Bright A_Explode(60+(ACS_ExecuteWithResult(WOC_MONSTERSCALE,13,TARGET,0)), 128, 0)
			FX13 JKLM 2 Bright
			Stop
	}
}

Actor OrbiterClockwise {
	Speed 15
	Radius 5
	Height 5
	+NOBLOCKMAP
	+NOGRAVITY
	+NOTELEPORT
	+NOCLIP
	+CLIENTSIDEONLY
	var int user_angle;
	var int user_count;
	States {
		Spawn:
			SBS2 A 3 Bright
		Orbit:
			SBS2 A 2 Bright A_SetUserVar("user_angle", 0)
			SBS2 A 2 Bright A_SetUserVar("user_count", 0)
		OrbitLoop:
			// these values aren't arbitrary. In the source, shield lasts 255 (+1) units. Each unit is consumed in 2 tics. There are 16 2 tic frames here. 16 x 16 = 256.
			TNT1 A 0 A_JumpIf(user_count > 15, "Death")
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 BB 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 CC 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 DD 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 EE 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 FF 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 GG 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 HH 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 II 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 JJ 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 KK 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 LL 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 MM 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 NN 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 OO 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 PP 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 AA 1 Bright ACS_ExecuteAlways(970, 0, 2, 0, 48)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Death:
			SBS2 AAAAAAAAAA 1 A_FadeOut(0.1)
		Stop
	}
}

Actor OrbiterCounterClockwise : OrbiterClockwise {
	//var int user_angle;
	//var int user_count;
	States {
		Spawn:
			SBS2 A 3 Bright
		Orbit:
			SBS2 A 2 Bright A_SetUserVar("user_angle", 0)
			SBS2 A 2 Bright A_SetUserVar("user_count", 0)
		OrbitLoop:
			TNT1 A 0 A_JumpIf(user_count > 15, "Death")
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 BB 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 CC 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 DD 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 EE 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 FF 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 GG 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 HH 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 II 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 JJ 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 KK 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 LL 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 MM 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 NN 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 OO 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 PP 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SpawnItem("OrbiterTrail")
			SBS2 AA 1 Bright ACS_ExecuteAlways(970, 0, 2, 1, 48)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	}
}

Actor OrbiterTrail : OrbiterClockwise
{
	RenderStyle Add
	Alpha 0.4
	States {
		Spawn:
			SBS2 A 4
		Goto Death
	}
}