// Fancy halo code by yholl


// New halo base actor by that dread thingy known as yholl
// fear me for I am powered by dark decorate shenanigans

ACTOR HaloBase
{
	+CLIENTSIDEONLY
	+NOINTERACTION
	+NOGRAVITY
// 	+FLOATBOB // [AK47]: Zandronum sucks
	
// 	FloatbobStrength -0.1 // [AK47]: Zandronum sucks

	var int user_haloalpha;
	var int user_halofadespeed;
	
	var int user_halophase;
	var int user_haloheight;
	
	var int user_halohealth75;
	var int user_halohealth50;
	var int user_halohealth25;
States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(256, "SpawnSetHealthPercentages") // These jumps are required for inheritance to work nice.
		Goto SpawnSetHealthPercentages // This technically doesn't need to be here, but it looks pretty and complete.
		// Gotos are static jumps, A_Jump is dynamic.
		// What this means is, this Goto will always go to the SpawnSetHealthPercentages that's defined in this actor.
		// If you inherited from this and made a new SpawnSetHealthPercentages, that Goto would still go to the old one.
		// But the A_Jump will always go to the new one, so make sure you've got them all over when doing heavy inheritance!
	SpawnHealthCheck:
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.0, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		HALQ A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		HALQ A 0 A_Jump(256, "HaloDestroyed")
		HALQ B 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.174, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		HALQ B 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		HALQ B 0 A_Jump(256, "HaloDestroyed")
		HALQ C 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.342, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State1:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ D 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.5, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ E 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.643, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ F 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.766, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State2:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ G 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.866, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ H 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.94, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ I 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.985, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State3:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ J 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+1.0, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ K 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.985, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ M 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.94, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State4:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ N 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.866, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ O 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.766, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ P 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.643, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State5:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ Q 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.5, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ R 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.342, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ S 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.174, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State6:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ T 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight+0.0, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.174, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.342, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State7:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.5, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.643, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.766, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State8:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.866, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.94, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.985, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State9:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-1.0, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.985, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.94, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State10:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.866, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.766, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.643, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
	State11:
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.5, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		HALQ A 1 Bright A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.342, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_JumpIfInTargetLOS(2, 0, JLOSF_DEADNOJUMP | JLOSF_NOSIGHT, 0)
		TNT1 A 0 A_Jump(256, "HaloDestroyed")
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck")
	Genki:
		TNT1 A 0
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck")
	Itai:
		TNT1 A 0
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck")
	Kyaaa:
		TNT1 A 0
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck")
	Death:
	Death.Ice: // I don't think you need this for something that can't be hurt, but I'll leave it here just in case you use it.
	HaloDestroyed:
		HALQ AAAAA 1 A_Warp(AAPTR_TARGET, 0, 0, user_haloheight-0.174, 0, WARPF_ABSOLUTEANGLE | WARPF_NOCHECKPOSITION | WARPF_INTERPOLATE | WARPF_COPYINTERPOLATION)
		TNT1 A 0 A_FadeTo (0 , user_halofadespeed/100.0 , 1)
		Loop
	}
}

// Thanks to inheritance, this is all you need to define for each halo!
// Inheritance is very powerful, it will be your friend if you learn it well.

ACTOR CherubHalo : HaloBase
{
	Scale 0.5 // Set the scale of the actor here, no need to spam A_SetScale everywhere.
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 28) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 60) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 40) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 20) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR KissHalo : HaloBase
{
	Scale 0.8 // Set the scale of the actor here, no need to spam A_SetScale everywhere.
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 50) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 225) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 150) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 75) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR AphroditeHalo : HaloBase
{
	Scale 0.8 // Set the scale of the actor here, no need to spam A_SetScale everywhere.
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 50) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 300) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 200) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 100) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR CardinalHalo : HaloBase
{
	Scale 0.5
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 44) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 110) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 75) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 40) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR JayHalo : HaloBase
{
	Scale 0.6
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 46) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 225) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 150) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 75) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}


ACTOR SnowBallHalo : HaloBase
{
	Scale 0.6
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 40) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 45) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 30) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 15) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR IrisHalo : HaloBase
{
	Scale 0.7 // Set the scale of the actor here, no need to spam A_SetScale everywhere.
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 70) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 225) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 150) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 75) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR AuthorityHalo : HaloBase
{
	Scale 0.7
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) 
		TNT1 A 0 A_SetUserVar (user_haloheight, 60) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 300) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 200) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 100)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR VVHalo : HaloBase
{
	Scale 0.7
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) 
		TNT1 A 0 A_SetUserVar (user_haloheight, 60) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 750) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 500) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 250)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR OphanimHalo : HaloBase
{
	Scale 0.8
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) 
		TNT1 A 0 A_SetUserVar (user_haloheight, 60) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 600) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 400) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 200)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR PrincipalityHalo : HaloBase
{
	Scale 0.8
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) 
		TNT1 A 0 A_SetUserVar (user_haloheight, 63) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 450) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 300) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 150)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR DollmaykrHalo : HaloBase
{
	Scale 0.6
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) 
		TNT1 A 0 A_SetUserVar (user_haloheight, 55) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 525) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 350) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 175)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR JoyElementalHalo : HaloBase
{
	Scale 0.6 // Set the scale of the actor here, no need to spam A_SetScale everywhere.
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 5) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 60) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 300) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 200) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 100) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

ACTOR SeraphHalo : HaloBase
{
	Scale 1.0
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 20) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 100) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 2225) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 1500) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 750) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
			}
}

ACTOR GreatSeraphHalo : HaloBase
{
	Scale 1.0
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 100) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 3750) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 2500) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 1250) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
			}
}

ACTOR QofQHalo : HaloBase
{
	Scale 1.0
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 7) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 100) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 5250) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 3500) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 1750) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
			}
}

ACTOR CQueenHalo : HaloBase
{
	Scale 0.8
	
States
	{
	SpawnSetHealthPercentages: // Just overwrite this state in any sub-type of halo for whatever health values it needs.
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 10) // how much the halo changes transparency per tick
		TNT1 A 0 A_SetUserVar (user_haloheight, 90) // height of halo above the angel.
		TNT1 A 0 A_SetUserVar (user_halohealth75, 1875) // 75% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth50, 1250) // 50% health threshold
		TNT1 A 0 A_SetUserVar (user_halohealth25, 625) // 25% health threshold
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
			}
}

ACTOR CQueen2Halo : HaloBase
{
	Scale 0.8
	
States
	{
	SpawnSetHealthPercentages: 
		TNT1 A 0 A_SetUserVar (user_halofadespeed, 10) 
		TNT1 A 0 A_SetUserVar (user_haloheight, -10) 
		TNT1 A 0 A_SetUserVar (user_halohealth75, 750) 
		TNT1 A 0 A_SetUserVar (user_halohealth50, 500) 
		TNT1 A 0 A_SetUserVar (user_halohealth25, 250)
		TNT1 A 0 A_Jump(256, "SpawnHealthCheck", "State1", "State2", "State3", "State4", "State5", "State6", "State7", "State8", "State9", "State10", "State11")
		Goto SpawnHealthCheck
	}
}

