//Punch stuff
ACTOR PowerPunchPuff : BulletPuff
{
	Radius 12
	Height 16
	VSpeed 0
	+NOBLOCKMAP
	+NOGRAVITY
	-ALLOWPARTICLES
	+RANDOMIZE
	+PUFFGETSOWNER
	+PUFFONACTORS
	+FORCERADIUSDMG
	ProjectileKickback 350
	DamageType SuperShoelaces
	States
	{
	Spawn:
	Melee:
		TNT1 A 0 NoDelay A_SpawnItemEx("PunchImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_QuakeEx(4,4,4,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(150,128,0)
		TNT1 A 0 A_AlertMonsters(768)
		//TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_DEFAULT,AAPTR_DEFAULT)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35
		Stop
	}
}

//Regular punches
ACTOR PowerStraightRight : PowerPunchPuff
{
   Decal SuperPunchFade
}

ACTOR PowerStraightLeft : PowerPunchPuff
{
   Decal SuperPunchFadeLeft
}

ACTOR PowerUppercutRight : PowerPunchPuff
{
   Decal SuperPunchFade2
}

ACTOR PowerUppercutLeft : PowerPunchPuff
{
   Decal SuperPunchFadeLeft2
}

//Midas punches
ACTOR PowerMidasPunchPuff : PowerPunchPuff
{
	DamageType SuperMidasCloseCombat
	States
	{
	Spawn:
	Melee:
		TNT1 A 0 NoDelay A_SpawnItemEx("PunchImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_QuakeEx(4,4,4,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(150,128,0)
		TNT1 A 0 A_AlertMonsters(768)
		//TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_DEFAULT,AAPTR_DEFAULT)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("MidasPunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("MidasPunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35
		Stop
	}
}

ACTOR PowerMidasStraightRight : PowerMidasPunchPuff
{
   Decal SuperPunchFade
}

ACTOR PowerMidasStraightLeft : PowerMidasPunchPuff
{
   Decal SuperPunchFadeLeft
}

ACTOR PowerMidasUppercutRight : PowerMidasPunchPuff
{
   Decal SuperPunchFade2
}

ACTOR PowerMidasUppercutLeft : PowerMidasPunchPuff
{
   Decal SuperPunchFadeLeft2
}

//Zerked punches
ACTOR SuperPowerPunchPuff : PowerPunchPuff
{
	States
	{
	Spawn:
	Melee:
		TNT1 A 0 NoDelay A_SpawnItemEx("PunchImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_QuakeEx(4,4,4,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_PlaySound("SuperPunch/Hit",5,0.8)
		TNT1 A 0 A_Explode(150,128,0)
		TNT1 A 0 A_AlertMonsters(768)
		//TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_DEFAULT,AAPTR_DEFAULT)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("SuperPunchPuff_Shock",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperPunchPuff_Impact",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperPunchPuff_Wave",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		
		TNT1 A 0 A_SpawnItemEx("SuperPunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("SuperPunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 1
		TNT1 A 0 A_Explode(150,128,0) //This weird setup is so the puff's damage gets applied before the explosion for the lifedrain effect to kick in.
		TNT1 A 24
		Stop
	}
}

ACTOR SuperPowerStraightRight : SuperPowerPunchPuff
{
   Decal SuperPunchStamp
}

ACTOR SuperPowerStraightLeft : SuperPowerPunchPuff
{
   Decal SuperPunchStampLeft
}

ACTOR SuperPowerUppercutRight : SuperPowerPunchPuff
{
   Decal SuperPunchStamp2
}

ACTOR SuperPowerUppercutLeft : SuperPowerPunchPuff
{
   Decal SuperPunchStampLeft2
}

//Zerked midas punches... Christ on a pogostick, I am never gonna pull off such thing ever again.
ACTOR SuperPowerMidasPunchPuff : PowerPunchPuff
{
	DamageType SuperMidasCloseCombat
	States
	{
	Spawn:
	Melee:
		TNT1 A 0 NoDelay A_SpawnItemEx("PunchImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_QuakeEx(4,4,4,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_PlaySound("SuperPunch/Hit",5,0.8)
		TNT1 A 0 A_Explode(150,128,0)
		TNT1 A 0 A_AlertMonsters(768)
		//TNT1 A 0 A_RearrangePointers(AAPTR_MASTER,AAPTR_DEFAULT,AAPTR_DEFAULT)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("SuperMidasPunchPuff_Shock",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperMidasPunchPuff_Impact",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperMidasPunchPuff_Wave",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		
		TNT1 A 0 A_SpawnItemEx("MidasPunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("MidasPunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 1
		TNT1 A 0 A_Explode(150,128,0) //This weird setup is so the puff's damage gets applied before the explosion for the lifedrain effect to kick in.
		TNT1 A 24
		Stop
	}
}

ACTOR SuperMidasPowerStraightRight : SuperPowerMidasPunchPuff
{
   Decal SuperMidasPunchStamp
}

ACTOR SuperMidasPowerStraightLeft : SuperPowerMidasPunchPuff
{
   Decal SuperMidasPunchStampLeft
}

ACTOR SuperMidasPowerUppercutRight : SuperPowerMidasPunchPuff
{
   Decal SuperMidasPunchStamp2
}

ACTOR SuperMidasPowerUppercutLeft : SuperPowerMidasPunchPuff
{
   Decal SuperMidasPunchStampLeft2
}

ACTOR BishopBlock
{
	height 56
	radius 48
	Speed 0
	PainChance 255
	+SHOOTABLE
	+NOGRAVITY
	+NOBLOOD
    +REFLECTIVE
	States
	{
	Spawn: 
		TNT1 AAAAAAAAAA 1 A_Warp(AAPTR_MASTER,10,0,25,0,WARPF_NOCHECKPOSITION|WARPF_COPYPITCH)
		Stop
	Pain:
		TNT1 A 0 A_PlaySound("Bishop/Pain",4,0.7)
		Stop
	}
}

ACTOR CentrifiedBishopBlock : BishopBlock
{
	States
	{
	Spawn: 
		TNT1 AAAAAAAAAA 1 A_Warp(AAPTR_MASTER,0,0,25,0,WARPF_NOCHECKPOSITION|WARPF_COPYPITCH)
		Stop
	}
}

//Particles
ACTOR ParticleShared
{
	+NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
	Alpha 0.99
}

//Regular punch shock
ACTOR PunchImpactShock : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK G 0 NoDelay A_FadeOut(0.1)
		SHCK G 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

ACTOR PunchImpactShock2 : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK F 0 NoDelay A_FadeOut(0.1)
		SHCK F 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

//Zerk punch shock
ACTOR SuperPunchImpactShock : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK D 0 NoDelay A_FadeOut(0.1)
		SHCK D 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

ACTOR SuperPunchImpactShock2 : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK H 0 NoDelay A_FadeOut(0.1)
		SHCK H 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

//Midas punch shock
ACTOR MidasPunchImpactShock : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK C 0 NoDelay A_FadeOut(0.1)
		SHCK C 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

ACTOR MidasPunchImpactShock2 : ParticleShared
{
	Scale 0.2
	States
	{
	Spawn:
		SHCK I 0 NoDelay A_FadeOut(0.1)
		SHCK I 1 A_SetScale(ScaleX + 0.3)
		Loop
	}
}

//Punch dust
ACTOR PunchFlightDust
{
	Radius 10
	Height 12
	Speed 20
	BounceFactor 0.6
	WallBounceFactor 0.6
	+BOUNCEONWALLS
	+THRUACTORS
	+FORCEXYBILLBOARD
	-ACTIVATEMCROSS
	-ACTIVATEIMPACT
	Scale 0.0
	Alpha 0.0
	Renderstyle Translucent
	Projectile
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_ScaleVelocity(frandom(0.8,1.2))
		TNT1 A 0 A_FadeIn(frandom(0.1,0.2))
		TNT1 A 0 A_SetScale(frandom(0.1,0.15))
	FrameSetup:
		TNT1 A 0 A_Jump(256,"FrameA","FrameB","FrameC","FrameD")
	FrameA:
		DUST A 0
	FrameB:
		DUST B 0
	FrameC:
		DUST C 0
	FrameD:
		DUST D 0
	Main:
		"####" "#" 0 A_SetScale(ScaleX + frandom(0.002,0.005))
		"####" "#" 1 A_FadeOut(frandom(0.004,0.007))
		Loop
	}
}

ACTOR PunchDust : PunchFlightDust
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_ScaleVelocity(frandom(0.8,1.2))
		TNT1 A 0 A_FadeIn(frandom(0.1,0.2))
		TNT1 A 0 A_SetScale(frandom(0.1,0.2))
	FrameSetup:
		TNT1 A 0 A_Jump(256,"FrameA","FrameB","FrameC","FrameD")
	FrameA:
		DUST A 0
	FrameB:
		DUST B 0
	FrameC:
		DUST C 0
	FrameD:
		DUST D 0
	Main:
		"####" "#" 0 A_SetScale(ScaleX + frandom(0.05,0.075))
		"####" "#" 1 A_FadeOut(frandom(0.002,0.005))
		Loop
	}
}

ACTOR PunchDustSpawner
{
	+NOINTERACTION
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(5,10))
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("PunchFlightDust",0,0,30,frandom(10.0,5.0),0,random(frandom(-2.0,-0.5),frandom(2.0,0.5)),frandom(25.0,-25.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("PunchFlightDust",0,0,30,frandom(10.0,5.0),0,random(frandom(-2.0,-0.5),frandom(2.0,0.5)),frandom(25.0,-25.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

ACTOR PunchImpactDustSpawner : PunchDustSpawner
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(15,20))
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("PunchDust",0,0,0,frandom(10.0,1.0),frandom(10.0,1.0),random(frandom(-10.0,-1.0),frandom(10.0,1.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("PunchDust",0,0,0,frandom(10.0,1.0),frandom(10.0,1.0),random(frandom(-10.0,-1.0),frandom(10.0,1.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

//Kick stuff
ACTOR PowerKickProjectile : KickProjectile
{
	Damage (300)
	DamageType SuperShoelaces
	Decal MechStamp
	States
	{
	Spawn:
		TNT1 A 1
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("KickImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_SpawnItemEx("KickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("KickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(150,192,0)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 35 A_Quake(5,45,0,768,"none")
		Stop
	}
}

ACTOR PowerKickProjectileLeft : KickProjectileLeft
{
	Damage (400)
	DamageType SuperShoelaces
	Decal LeftMechStamp
	States
	{
	Spawn:
		TNT1 A 1
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("KickImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_SpawnItemEx("KickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("KickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(200,224,0)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 35 A_Quake(5,35,0,768,"none")
		Stop
	}
}

ACTOR PowerKickProjectileRight : PowerKickProjectileLeft
{
	Decal RightMechStamp
}

//Midas Boot
ACTOR PowerMidasKickProjectile : KickProjectile
{
	Damage (300)
	DamageType SuperMidasShoelaces
	Decal MechStamp
	States
	{
	Spawn:
		TNT1 A 1
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("KickImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(150,192,0)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 35 A_Quake(5,45,0,768,"none")
		Stop
	}
}

ACTOR PowerMidasKickProjectileLeft : KickProjectileLeft
{
	Damage (400)
	DamageType SuperMidasShoelaces
	Decal LeftMechStamp
	States
	{
	Spawn:
		TNT1 A 1
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("KickImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	XDeath:
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_Explode(200,224,0)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 35 A_Quake(5,35,0,768,"none")
		Stop
	}
}

ACTOR PowerMidasKickProjectileRight : PowerMidasKickProjectileLeft
{
	Decal RightMechStamp
}

//Zerked Boot
ACTOR SuperPowerKickProjectile : SuperKickProjectile
{
	Damage (400)
	Decal SuperMechStamp
	States
	{
	Spawn:
		TNT1 A 1 
		Stop
	Death:
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_PlaySound("SuperKick/Hit",7,0.9)
		
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_Explode(250,256,0)
		
		TNT1 A 0 A_SpawnItemEx("SuperKick_Shock",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperKick_Impact",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperKick_Wave",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperKick_Gldef",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		
		TNT1 A 0 A_SpawnItemEx("SuperKickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("SuperKickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35 A_Quake(7,35,0,1024,"none")
		Stop
	}
}

ACTOR SuperPowerKickProjectileLeft : SuperPowerKickProjectile
{
	Damage (500)
	Decal SuperLeftMechStamp
}

ACTOR SuperPowerKickProjectileRight : SuperPowerKickProjectileLeft
{
	Decal SuperRightMechStamp
}

//Zerked midas boot
ACTOR SuperPowerMidasKickProjectile : SuperMidasKickProjectile
{
	Damage (400)
	DamageType SuperMidasShoelaces
	Decal SuperMidasMechStamp
	States
	{
	Spawn:
		TNT1 A 1 
		Stop
	Death:
		TNT1 A 0 A_PlaySound("Stomp/Impact",5,0.9)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.7)
		TNT1 A 0 A_PlaySound("SuperKick/Hit",7,0.9)
		
		TNT1 A 0 A_GiveToTarget("KickethThyHappend",1)
		TNT1 A 0 A_AlertMonsters(768)
		TNT1 A 0 A_Explode(250,256,0)
		
		TNT1 A 0 A_SpawnItemEx("SuperMidasKick_Shock",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKick_Impact",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKick_Wave",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKick_Gldef",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("SuperMidasKickImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35 A_Quake(7,35,0,1024,"none")
		Stop
	}
}

//Those names are getting... hella lenghty.
ACTOR SuperPowerMidasKickProjectileLeft : SuperPowerMidasKickProjectile
{
	Damage (500)
	Decal SuperMidasLeftMechStamp
}

ACTOR SuperPowerMidasKickProjectileRight : SuperPowerMidasKickProjectileLeft
{
	Decal SuperMidasRightMechStamp
}

//Particle stuff
ACTOR KickDustSpawner
{
	+NOINTERACTION
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(15,20))
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("PunchFlightDust",0,0,30,frandom(15.0,5.0),0,random(frandom(-2.0,-0.5),frandom(2.0,0.5)),frandom(25.0,-25.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("PunchFlightDust",0,0,30,frandom(15.0,5.0),0,random(frandom(-2.0,-0.5),frandom(2.0,0.5)),frandom(25.0,-25.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

ACTOR KickImpactDustSpawner : PunchDustSpawner
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(15,20))
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("PunchDust",0,0,0,frandom(20.0,2.0),frandom(20.0,2.0),random(frandom(-20.0,-2.0),frandom(20.0,2.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("PunchDust",0,0,0,frandom(20.0,2.0),frandom(20.0,2.0),random(frandom(-20.0,-2.0),frandom(20.0,2.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

ACTOR RoundhouseKickoutSpawner : PunchDustSpawner
{
	DamageType SuperShoelaces
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(50,65))
		//TNT1 A 0 A_Explode(5,384,0)
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("PunchDust",0,0,0,frandom(20.0,12.0),frandom(20.0,12.0),random(frandom(-4.0,-2.0),frandom(4.0,2.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("PunchDust",0,0,0,frandom(20.0,12.0),frandom(20.0,12.0),random(frandom(-4.0,-2.0),frandom(4.0,2.0)),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

ACTOR KickImpactShock : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK G 0 NoDelay A_FadeOut(0.07)
		SHCK G 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

ACTOR KickImpactShock2 : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK F 0 NoDelay A_FadeOut(0.07)
		SHCK F 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

ACTOR SuperKickImpactShock : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK D 0 NoDelay A_FadeOut(0.07)
		SHCK D 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

ACTOR SuperKickImpactShock2 : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK H 0 NoDelay A_FadeOut(0.07)
		SHCK H 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

ACTOR SuperMidasKickImpactShock : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK C 0 NoDelay A_FadeOut(0.07)
		SHCK C 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

ACTOR SuperMidasKickImpactShock2 : ParticleShared
{
	Scale 0.3
	States
	{
	Spawn:
		SHCK I 0 NoDelay A_FadeOut(0.07)
		SHCK I 1 A_SetScale(ScaleX + 0.4)
		Loop
	}
}

//Armcannon
actor BishArmcanProjectile : FastProjectile
{
  Radius 16
  Height 20
  Speed 30
  Damage (random(0,0))
  Projectile
  ProjectileKickback 20
  +NOGRAVITY
  -THRUGHOST
  +DONTSPLASH
  +EXPLODEONWATER
  +RIPPER
  +BLOODLESSIMPACT
  +FORCERADIUSDMG
  +DONTREFLECT
  +DONTBLAST
  +FOILINVUL
  DamageType Tiberium
  MissileHeight 20
  MissileType "BishArmcanTrailSpawner"
  Decal "ArmcannonScorch"
  States
  {
  Spawn:
    TNT1 A 0
  Looplet:
    TNT1 A 0 A_SpawnItemEx("BishArmcanFlightSmoke",random(10,-10),random(10,-10),random(10,-10),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("BishArmcanParticle",random(20,-20),random(20,-20),random(20,-20),frandom(0.1,1.0),frandom(0.1,1.0),frandom(-1.0,1.0),random(0,359),SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("BishArmcanParticle2",random(20,-20),random(20,-20),random(20,-20),0,0,0,0,SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("BishArmcanShockwaveTrail",random(10,-10),random(10,-10),random(10,-10),0,0,0,0,SXF_CLIENTSIDE,20)
    TNT1 A 0 A_Quake (4, 1, 0, 256, none)
    TNT1 A 0 A_PlaySound("Dreadful/Fly",5,0.6,1)
    TNT1 A 1 A_Explode((18*random(2,3)),64,0,0)
	TNT1 A 0 A_Jump(36,"LightningPatch")
    Loop
  LightningPatch:
    TNT1 A 0 A_SpawnItemEx("BishArmcanLightning",random(10,-10),random(10,-10),random(10,-10),0,0,0,0,SXF_CLIENTSIDE,0)
    Goto Looplet
  Death:
    TNT1 A 0 A_QuakeEx(6, 4, 4, 60, 0, 512, none, QF_SCALEDOWN)
    TNT1 A 0 A_PlaySound("Bishop/Explode",5,1.0,0)
    TNT1 A 0 A_Explode((100*random(2,3)),256,0)
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_SpawnItemEx("BishArmcanSmokeSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanShockwaver",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanImpactShockwave",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanBlast",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanParticleBlastSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanLightningSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanFX",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("BishArmcanDamager",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
    stop
  }
}

//Flight

ACTOR BishArmcanTrailSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 1 A_SpawnItemEx("BishArmcanTrail",frandom(2.0,-2.0),frandom(2.0,-2.0),frandom(2.0,-2.0),0,0,0,0,SXF_CLIENTSIDE,0)
      Stop
    }
}


ACTOR BishArmcanTrail
{ 
    Scale 0.15
	Alpha 0.98
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(ScaleX <= 0, "Null")
	  TNT1 A 0 A_SetScale(ScaleX-0.015,ScaleY-0.015)
	  GRNB A 1 Bright A_FadeOut(0.125)
	  Loop
    }
}

ACTOR BishArmcanImpactShockwave
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 1.5
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.05)
      TNT1 A 0 A_SetScale(ScaleX+0.15,ScaleY+0.15)
      GRNR A 1 Bright
      Loop
    }
}

ACTOR BishArmcanShockwaveTrail
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 0.33
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.025)
      TNT1 A 0 A_SetScale(ScaleX+0.015,ScaleY+0.015)
      GRNR A 1 Bright
      Loop
    }
}

ACTOR BishArmcanFlightSmoke
{ 
    Scale 0.07
    Alpha 0.79
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0
	  TNT1 A 0 A_Jump(255,"SmokeA","SmokeB","SmokeC","SmokeD")
	SmokeA:
	  GRNS A 0
	  Goto RandomScale
	SmokeB:
	  GRNS B 0
	  Goto RandomScale
	SmokeC:
	  GRNS A 0
	  Goto RandomScale
	SmokeD:
	  GRNS B 0
	  Goto RandomScale
	RandomScale:
	  "####" "#" 0 A_SetScale(ScaleX+random(0.05,0.25))
	Looplo:
	  "####" "#" 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  "####" "#" 1 A_FadeOut(0.01)
	  Loop
    }
}

ACTOR BishArmcanParticle
{ 
    Scale 0.1
	Alpha 0.99
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(GetCvar("GC_ParticleChoke") == true,"NULL")
	  TNT1 AA 0 A_ChangeVelocity (frandom(-0.6, 0.6), frandom(-0.6, 0.6), frandom(-0.1, 0.3), 0)
	  TNT1 A 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  GRNP A 1 Bright A_FadeOut(0.02)
	  Loop
    }
}

ACTOR BishArmcanParticle2 : BishArmcanParticle
{ 
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(GetCvar("GC_ParticleChoke") == true,"NULL")
	  TNT1 AA 0 A_ChangeVelocity (frandom(-0.2, 0.2), frandom(-0.2, 0.2), frandom(-0.2, 0.2), 0)
	  TNT1 A 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  GRNP A 1 Bright A_FadeOut(0.0125)
	  Loop
    }
}

ACTOR BishArmcanParticleBlast
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 40
    States
    {
    Spawn:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("BishArmcanParticle2",random(30,-30),random(30,-30),random(30,-30),frandom(10.0,5.0),frandom(10.0,5.0),frandom(-10.0,10.0),frandom(0.0,359.0))
    TNT1 A 0 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR BishArmcanParticleBlastSpawner
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 5
    States
    {
    Spawn:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("BishArmcanParticleBlast")
    TNT1 A 3 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR BishArmcanLightning
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	Renderstyle Add
	Alpha 0.99
	Scale 0.33
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Jump(255,"Spawn1A","Spawn1B","Spawn1C","Spawn1D","Spawn2A","Spawn2B","Spawn2C","Spawn2D")
	Spawn1A:
	1LIT A 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1B:
	1LIT B 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1C:
	1LIT C 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1D:
	1LIT D 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2A:
	2LIT A 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2B:
	2LIT B 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2C:
	2LIT C 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2D:
	2LIT D 1 Bright A_FadeOut(0.03)
	Wait
	}
}

//Impact

ACTOR BishArmcanFX //For GLDEF
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 40
      Stop
    }
}

ACTOR BishArmcanBlast
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_SpawnItemEx("BishArmcanBlast1")
      TNT1 A 0 A_SpawnItemEx("BishArmcanBlast2")
      TNT1 A 0 A_SpawnItemEx("BishArmcanBlast3")
      TNT1 A 0 A_SpawnItemEx("BishArmcanBlast4")
      Stop
    }
}

ACTOR BishArmcanBlast1 : BishArmcanBlast
{ 
    Scale 0.25
	Alpha 0.9
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.03)
      TNT1 A 0 A_SetScale(ScaleX+0.05,ScaleY+0.05)
      GRNF A 1 Bright
      Loop
    }
}

ACTOR BishArmcanBlast2 : BishArmcanBlast
{ 
    Scale 0.35
	Alpha 0.8
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.02)
      TNT1 A 0 A_SetScale(ScaleX+0.04,ScaleY+0.04)
      GRNF A 1 Bright
      Loop
    }
}

ACTOR BishArmcanBlast3 : BishArmcanBlast
{ 
    Scale 0.45
	Alpha 0.7
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.015)
      TNT1 A 0 A_SetScale(ScaleX+0.03,ScaleY+0.03)
      GRNF A 1 Bright
      Loop
    }
}

ACTOR BishArmcanBlast4 : BishArmcanBlast
{ 
    Scale 0.65
	Alpha 0.6
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.015)
      TNT1 A 0 A_SetScale(ScaleX+0.03,ScaleY+0.03)
      GRNF A 1 Bright
      Loop
    }
}

ACTOR BishArmcanShockwaver
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 20
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 3 A_SpawnItemEx("BishArmcanShockwave")
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR BishArmcanShockwave
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 1.25
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.035)
      TNT1 A 0 A_SetScale(ScaleX+0.1,ScaleY+0.1)
      GRNR A 1 Bright
      Loop
    }
}

ACTOR BishArmcanLightningSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 35
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 2 A_SpawnItemEx("BishArmcanLightning",random(90,-90),random(90,-90),random(90,-90))
	  TNT1 A 0 A_Countdown
      Loop
	Death:
      TNT1 A 0
	  Stop
    }
}

ACTOR BishArmcanSmokeSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 10
    States
    {
    Spawn:
	  TNT1 A 0
	Looplet:
      TNT1 A 0
      TNT1 A 3 A_SpawnItemEx("BishArmcanSmoker")
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR BishArmcanSmoker
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 2
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_SpawnItemEx("BishArmcanSmoke",random(90,-90),random(90,-90),random(90,-90),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.0,360.0))
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR BishArmcanSmoke : BishArmcanFlightSmoke
{ 
    Scale 0.25
    Alpha 0.89
}

ACTOR BishArmcanParticleSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 15
    States
    {
    Spawn:
      TNT1 A 3 NoDelay A_SpawnItemEx("BishArmcanParticler",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR BishArmcanParticler
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 7
    States
    {
    Spawn:
    TNT1 A 0 NoDelay A_SpawnItemEx("BishArmcanParticle2",random(30,-30),random(30,-30),random(30,-30),frandom(2.0,2.0),frandom(2.0,-2.0),frandom(-2.0,2.0),frandom(0.0,360.0))
    TNT1 A 0 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR BishArmcanDamager
{ 
    Radius 1
    Height 1
    +NOGRAVITY
    +NOINTERACTION
    +DONTSPLASH
    +FORCERADIUSDMG
    Projectile
	ProjectileKickback 400
    ReactionTime 17
	DamageType Tiberium
    ProjectileKickBack 0
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_Explode(10*random(2,3),128,0)
      TNT1 A 4 A_Countdown
      Loop
    Death:
      Stop
    }
}

//Cored Armcannon
actor CoreBishArmcanProjectile : BishArmcanProjectile
{
  DamageType BlueTiberium
  MissileType "CoreBishArmcanTrailSpawner"
  States
  {
  Spawn:
    TNT1 A 0
  Looplet:
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanFlightSmoke",random(10,-10),random(10,-10),random(10,-10),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticle",random(20,-20),random(20,-20),random(20,-20),frandom(0.1,1.0),frandom(0.1,1.0),frandom(-1.0,1.0),random(0,359),SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticle2",random(20,-20),random(20,-20),random(20,-20),0,0,0,0,SXF_CLIENTSIDE,20)
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanShockwaveTrail",random(10,-10),random(10,-10),random(10,-10),0,0,0,0,SXF_CLIENTSIDE,20)
    TNT1 A 0 A_Quake (4, 1, 0, 256, none)
    TNT1 A 0 A_PlaySound("Dreadful/Fly",5,0.6,1)
    TNT1 A 1 A_Explode((24*random(2,3)),64,0,0)
	TNT1 A 0 A_Jump(36,"LightningPatch")
    Loop
  LightningPatch:
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanLightning",random(10,-10),random(10,-10),random(10,-10),0,0,0,0,SXF_CLIENTSIDE,0)
    Goto Looplet
  Death:
    TNT1 A 0 A_QuakeEx(6, 4, 4, 60, 0, 512, none, QF_SCALEDOWN)
    TNT1 A 0 A_PlaySound("Bishop/Explode",5,1.0,0)
    TNT1 A 0 A_Explode((100*random(2,3)),256,0)
    TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanSmokeSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanShockwaver",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanImpactShockwave",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanBlast",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticleBlastSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanLightningSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticleSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanFX",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CoreBishArmcanDamager",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
    stop
  }
}

//Flight

ACTOR CoreBishArmcanTrailSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 1 A_SpawnItemEx("CoreBishArmcanTrail",frandom(2.0,-2.0),frandom(2.0,-2.0),frandom(2.0,-2.0),0,0,0,0,SXF_CLIENTSIDE,0)
      Stop
    }
}


ACTOR CoreBishArmcanTrail
{ 
    Scale 0.15
	Alpha 0.98
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(ScaleX <= 0, "Null")
	  TNT1 A 0 A_SetScale(ScaleX-0.015,ScaleY-0.015)
	  PRNB A 1 Bright A_FadeOut(0.125)
	  Loop
    }
}

ACTOR CoreBishArmcanImpactShockwave
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 1.5
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.05)
      TNT1 A 0 A_SetScale(ScaleX+0.15,ScaleY+0.15)
      PRNR A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanShockwaveTrail
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 0.33
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.025)
      TNT1 A 0 A_SetScale(ScaleX+0.015,ScaleY+0.015)
      PRNR A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanFlightSmoke
{ 
    Scale 0.07
    Alpha 0.79
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0
	  TNT1 A 0 A_Jump(255,"SmokeA","SmokeB","SmokeC","SmokeD")
	SmokeA:
	  PRNS A 0
	  Goto RandomScale
	SmokeB:
	  PRNS B 0
	  Goto RandomScale
	SmokeC:
	  PRNS C 0
	  Goto RandomScale
	SmokeD:
	  PRNS D 0
	  Goto RandomScale
	RandomScale:
	  "####" "#" 0 A_SetScale(ScaleX+random(0.05,0.25))
	Looplo:
	  "####" "#" 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  "####" "#" 1 A_FadeOut(0.01)
	  Loop
    }
}

ACTOR CoreBishArmcanParticle
{ 
    Scale 0.1
	Alpha 0.99
    Renderstyle Add
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(GetCvar("GC_ParticleChoke") == true,"NULL")
	  TNT1 AA 0 A_ChangeVelocity (frandom(-0.6, 0.6), frandom(-0.6, 0.6), frandom(-0.1, 0.3), 0)
	  TNT1 A 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  PRNP A 1 Bright A_FadeOut(0.02)
	  Loop
    }
}

ACTOR CoreBishArmcanParticle2 : CoreBishArmcanParticle
{ 
    States
    {
    Spawn:
	  TNT1 A 0 NoDelay A_JumpIf(GetCvar("GC_ParticleChoke") == true,"NULL")
	  TNT1 AA 0 A_ChangeVelocity (frandom(-0.2, 0.2), frandom(-0.2, 0.2), frandom(-0.2, 0.2), 0)
	  TNT1 A 0 A_SetScale(ScaleX+0.005,ScaleY+0.005)
	  PRNP A 1 Bright A_FadeOut(0.0125)
	  Loop
    }
}

ACTOR CoreBishArmcanParticleBlast
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 40
    States
    {
    Spawn:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticle2",random(30,-30),random(30,-30),random(30,-30),frandom(10.0,5.0),frandom(10.0,5.0),frandom(-10.0,10.0),frandom(0.0,359.0))
    TNT1 A 0 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR CoreBishArmcanParticleBlastSpawner
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 5
    States
    {
    Spawn:
    TNT1 A 0
    TNT1 A 0 A_SpawnItemEx("CoreBishArmcanParticleBlast")
    TNT1 A 3 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR CoreBishArmcanLightning
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	Renderstyle Add
	Alpha 0.99
	Scale 0.33
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_Jump(255,"Spawn1A","Spawn1B","Spawn1C","Spawn1D","Spawn2A","Spawn2B","Spawn2C","Spawn2D")
	Spawn1A:
	3LIT A 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1B:
	3LIT B 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1C:
	3LIT C 1 Bright A_FadeOut(0.03)
	Wait
	Spawn1D:
	3LIT D 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2A:
	4LIT A 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2B:
	4LIT B 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2C:
	4LIT C 1 Bright A_FadeOut(0.03)
	Wait
	Spawn2D:
	4LIT D 1 Bright A_FadeOut(0.03)
	Wait
	}
}

//Impact

ACTOR CoreBishArmcanFX //For GLDEF
{ 
    +NOGRAVITY
    +NOINTERACTION
    States
    {
    Spawn:
      TNT1 A 40
      Stop
    }
}

ACTOR CoreBishArmcanBlast
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_SpawnItemEx("CoreBishArmcanBlast1")
      TNT1 A 0 A_SpawnItemEx("CoreBishArmcanBlast2")
      TNT1 A 0 A_SpawnItemEx("CoreBishArmcanBlast3")
      TNT1 A 0 A_SpawnItemEx("CoreBishArmcanBlast4")
      Stop
    }
}

ACTOR CoreBishArmcanBlast1 : CoreBishArmcanBlast
{ 
    Scale 0.25
	Alpha 0.9
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.03)
      TNT1 A 0 A_SetScale(ScaleX+0.05,ScaleY+0.05)
      PRNF A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanBlast2 : CoreBishArmcanBlast
{ 
    Scale 0.35
	Alpha 0.8
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.02)
      TNT1 A 0 A_SetScale(ScaleX+0.04,ScaleY+0.04)
      PRNF A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanBlast3 : CoreBishArmcanBlast
{ 
    Scale 0.45
	Alpha 0.7
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.015)
      TNT1 A 0 A_SetScale(ScaleX+0.03,ScaleY+0.03)
      PRNF A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanBlast4 : CoreBishArmcanBlast
{ 
    Scale 0.65
	Alpha 0.6
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.015)
      TNT1 A 0 A_SetScale(ScaleX+0.03,ScaleY+0.03)
      PRNF A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanShockwaver
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 20
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 3 A_SpawnItemEx("CoreBishArmcanShockwave")
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR CoreBishArmcanShockwave
{ 
    +NOGRAVITY
    +NOINTERACTION
	+FORCEXYBILLBOARD
	Renderstyle Add
    Scale 1.25
	Alpha 0.99
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_FadeOut(0.035)
      TNT1 A 0 A_SetScale(ScaleX+0.1,ScaleY+0.1)
      PRNR A 1 Bright
      Loop
    }
}

ACTOR CoreBishArmcanLightningSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 35
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 2 A_SpawnItemEx("CoreBishArmcanLightning",random(90,-90),random(90,-90),random(90,-90))
	  TNT1 A 0 A_Countdown
      Loop
	Death:
      TNT1 A 0
	  Stop
    }
}

ACTOR CoreBishArmcanSmokeSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 10
    States
    {
    Spawn:
	  TNT1 A 0
	Looplet:
      TNT1 A 0
      TNT1 A 3 A_SpawnItemEx("CoreBishArmcanSmoker")
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR CoreBishArmcanSmoker
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 2
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_SpawnItemEx("CoreBishArmcanSmoke",random(90,-90),random(90,-90),random(90,-90),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.05,-0.05),frandom(0.0,360.0))
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR CoreBishArmcanSmoke : CoreBishArmcanFlightSmoke
{ 
    Scale 0.25
    Alpha 0.89
}

ACTOR CoreBishArmcanParticleSpawner
{ 
    +NOGRAVITY
    +NOINTERACTION
	ReactionTime 15
    States
    {
    Spawn:
      TNT1 A 3 NoDelay A_SpawnItemEx("CoreBishArmcanParticler",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	  TNT1 A 0 A_Countdown
      Loop
	Death:
	  Stop
    }
}

ACTOR CoreBishArmcanParticler
{
    +NOINTERACTION
    +NOGRAVITY
    ReactionTime 7
    States
    {
    Spawn:
    TNT1 A 0 NoDelay A_SpawnItemEx("CoreBishArmcanParticle2",random(30,-30),random(30,-30),random(30,-30),frandom(2.0,2.0),frandom(2.0,-2.0),frandom(-2.0,2.0),frandom(0.0,360.0))
    TNT1 A 0 A_Countdown
    Loop
    Death:
    Stop
    }
}

ACTOR CoreBishArmcanDamager : BishArmcanDamager
{ 
	DamageType BlueTiberium
    States
    {
    Spawn:
      TNT1 A 0
      TNT1 A 0 A_Explode(10*random(4,6),128,0)
      TNT1 A 4 A_Countdown
      Loop
    Death:
      Stop
    }
}

//Sleeve rockets
ACTOR AirstrikeUpwardSpawner
{
	+NOINTERACTION
	ReactionTime 14
	States
	{
	Spawn:
		TNT1 A random(1,2) A_SpawnItemEx("AirstrikeMissileUpward",frandom(25.0,-25.0)-10,frandom(15.0,-15.0),35+frandom(10.0,-10.0),frandom(-0.1,0.1),frandom(-0.1,0.1),100,frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_Countdown
		Loop
	Death:
		TNT1 A 0
		Stop
	}
}

ACTOR AirstrikeMissileUpward : FastProjectile
{
	Radius 6
	Height 8
 	Speed 100
  	Damage (20*random(2,3))
	MissileType "MatriarchTrailSpawner"
	MissileHeight 8
	DamageType Matriarch
	Projectile
	ProjectileKickback 125
	Obituary "%o was obliterated by %k's death from above."
	Gravity 12
	Scale 0.8
	+NOGRAVITY
	+DONTREFLECT
	+FORCERADIUSDMG
	+THRUACTORS
	States
	{
	Spawn:
		CRSM B 1
		Loop
	Death:
		TNT1 A 1
		Stop
	Crash:
	XDeath:
    	TNT1 A 0 A_Quake (6, 25, 0, 256, none)
    	TNT1 A 0 A_Quake (2, 25, 0, 384, none)
    	TNT1 A 0 A_PlaySound("Matriarch/Hit",5,0.8)
    	TNT1 A 0 A_PlaySound("Matriarch/Exp",6,1.0)
    	TNT1 A 0 A_Explode((100*random(1,3)),192,1)
    	TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SpawnItemEx("Matriarch_Main",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("MatriarchFX",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    	TNT1 A 15 A_Quake(3,12,0,512,"none")
    	Stop
	}
}

ACTOR AirstrikeSpawner : FastProjectile
{
	Radius 12
	Height 18
	Projectile
	Damage 0
	Speed 300
	+EXPLODEONWATER
	+NOGRAVITY
	//+THRUACTORS
	+SKYEXPLODE
	+DONTREFLECT
	States
	{
	Spawn:
		TNT1 A 1
		Loop
	Death:
		TNT1 A 70 A_SpawnItemEx("AirstrikeLockdown",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 A_CustomMissile("AistrikeBombardment",0,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		Stop
	}
}

ACTOR AirstrikeCarpetBombSpawner : FastProjectile //Unused...
{
	Radius 12
	Height 18
	Projectile
	Damage 0
	Speed 0
	+EXPLODEONWATER
	+NOGRAVITY
	//+THRUACTORS
	+SKYEXPLODE
	+DONTREFLECT
	States
	{
	Spawn:
		TNT1 A 35
		TNT1 A 0 A_CustomMissile("AirstrikeCarpetBomber",16,0,0,CMF_AIMDIRECTION|CMF_TRACKOWNER)
		Stop
	}
}


ACTOR AirstrikeLockdown
{
	ReactionTime 70
	Renderstyle Add
	Alpha 0.9
	+NOINTERACTION
	+NOCLIP
	States
	{
	Spawn:
		PNTR A 0 NoDelay A_Warp(AAPTR_DEFAULT,0,0,0,0,WARPF_ABSOLUTEOFFSET|WARPF_TOFLOOR)
		PNTR A 0 A_Countdown
		PNTR A 0 A_SetScale(ScaleX - 0.05)
		PNTR A 0 A_JumpIf(Alpha < 0.3, "Reverse")
		PNTR A 1 Bright A_FadeOut(0.1)
		PNTR A 0 A_Stop
		Loop
	Reverse:
		PNTR A 0 A_Countdown
		PNTR A 0 A_SetScale(ScaleX + 0.05)
		PNTR A 0 A_JumpIf(Alpha > 0.9, "Spawn")
		PNTR A 1 Bright A_FadeIn(0.1)
		Loop
	Death:
		PNTR A 0 A_JumpIf(ScaleX <= 0, "Null")
		PNTR A 0 A_SetScale(ScaleX - 0.05)
		PNTR A 1 Bright A_FadeOut(0.05)
		Loop
	}
}

ACTOR AistrikeBombardment
{
	Radius 12
	Height 18
	Projectile
	Damage 0
	Speed 0
	+SPAWNCEILING
	+CEILINGHUGGER //Just in case.
	+NOINTERACTION
	+NOCLIP
	ReactionTime 14
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_Countdown
		TNT1 A 0 A_SetAngle(Angle + frandom(0.0,360.0))
		TNT1 A random(1,2) A_CustomMissile("AirstrikeMissile",0,frandom(260.0,5.0),0,CMF_AIMDIRECTION|CMF_TRACKOWNER,frandom(-85.0,-75.0)) //I'd use spawnitemex here, but I don't trust the transferpointers in concjuction with custommissiles...
		Loop
	Death:
		TNT1 A 0
		Stop
	}
}

ACTOR AirstrikeCarpetBomber //Unused
{
	Radius 8
	Height 8
	Speed 16
	ReactionTime 14
	+THRUACTORS
	+FLOORHUGGER
	//+NOINTERACTION
	//+NOCLIP
	Projectile
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_Countdown
		TNT1 A 3 A_SetAngle(Angle + frandom(0.0,360.0))
		TNT1 A random(5,6) A_CustomMissile("AirstrikeMissile",0,frandom(260.0,5.0),0,CMF_AIMDIRECTION|CMF_TRACKOWNER,frandom(-85.0,-75.0)) //I'd use spawnitemex here, but I don't trust the transferpointers in concjuction with custommissiles...
		Loop
	Death:
		TNT1 A 0
		Stop
	}
}


ACTOR AirstrikeMissile : FastProjectile
{
	Radius 6
	Height 8
 	Speed 100
  	Damage (20*random(2,3))
	MissileType "MatriarchTrailSpawner"
	MissileHeight 8
	DamageType Matriarch
	Projectile
	ProjectileKickback 125
	Obituary "%o was obliterated by %k's death from above."
	Gravity 12
	Scale 0.8
	-NOGRAVITY
	+DONTREFLECT
	+FORCERADIUSDMG
	+EXTREMEDEATH
	var int User_Lifespan;
	States
	{
	Spawn:
		CRSM A 1 A_PlaySound("Matriarch/Fly",5,0.6,1)
		Loop
	Death:
		TNT1 A 0 A_Stop
		TNT1 A 0 A_SetUserVar("User_Lifespan",14)
		TNT1 A 0 A_PlaySound("TNT/Explosion",5,0.9)
		TNT1 A 0 A_PlaySound("TNT/Add",7)
		TNT1 A 0 A_PlaySound("TNT/Far",6,0.8)
		TNT1 A 0 A_SpawnItemEx("TNTMain",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_Quake(3,55,0,768,"none")
		TNT1 A 0 A_Quake(7,55,0,384,"none")
		TNT1 A 0 A_Explode(200,364,0,1)
		TNT1 A 0 A_Explode(200,364,1,1)
		TNT1 A 0 A_ChangeFlag("EXTREMEDEATH",0)
	DeathLoop:
		TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
		TNT1 A 4 A_Explode(30,364,1,1)
		TNT1 A 0 A_JumpIf(User_Lifespan <= 0, 1)
		Loop
		TNT1 A 6
		Stop
    	/*TNT1 A 0 A_Quake (6, 25, 0, 256, none)
    	TNT1 A 0 A_Quake (2, 25, 0, 384, none)
    	TNT1 A 0 A_PlaySound("Matriarch/Hit",5,0.8)
    	TNT1 A 0 A_PlaySound("Matriarch/Exp",6,1.0)
    	TNT1 A 0 A_Explode((100*random(1,3)),192,1)
    	TNT1 A 0 A_AlertMonsters
		TNT1 A 0 A_SpawnItemEx("Matriarch_Main",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_SpawnItemEx("MatriarchFX",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
    	TNT1 A 15 A_Quake(3,12,0,512,"none")
    	Stop*/
	}
}
//Unused
ACTOR PowerPunchMissile
{
	Radius 12
	Height 16
	Speed 40
	Damage (300)
	ProjectileKickback 200
	Projectile
	+NOGRAVITY
	+FORCERADIUSDMG
	DamageType SuperShoelaces
	States
	{
	Spawn:
		TNT1 A 3
		Stop
	Death:
		TNT1 A 0 A_QuakeEx(7,7,7,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.8)
		TNT1 A 0 A_Explode(100,128,0)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("PunchImpactDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35
		Stop
	XDeath:
	Crash:
		TNT1 A 0 A_QuakeEx(7,7,7,25,0,256,"none",QF_SCALEDOWN)
		TNT1 A 0 A_PlaySound("Bishop/Hit",6,0.8)
		TNT1 A 0 A_Explode(100,128,0)
		TNT1 A 0 A_GiveToTarget("PunchConnected",1)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEx("PunchImpactShock2",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 35
		Stop
	}
}