Class GHAGMagicMunitions : Actor
{
	Actor munitions;
	String type;
	
	States
	{
		Spawn:
			TNT1 A 1
			{
				if (!munitions)
				{
					return resolveState("Respawn");
				}
				return resolveState(null);
			}
		Loop;
		Respawn:
			TNT1 A 35;
			TNT1 A 0 {
				if (!munitions)
					{
						let shootybangbangs = Actor(Spawn(type));
						let fog = TeleportFog(Spawn("TeleportFog"));
						shootybangbangs.setOrigin(invoker.pos, false);
						fog.setOrigin(invoker.pos, false);
						munitions = shootybangbangs;
					}
				}
			goto Spawn;
	}
}

Class GHAGMagicBullets : GHAGMagicMunitions
{
	override void BeginPlay()
	{
		type = "ClipBox";
		munitions = ClipBox(Spawn(type));
		munitions.setOrigin(self.pos, false);
	}
}

Class GHAGMagicShells : GHAGMagicMunitions
{
	override void BeginPlay()
	{
		type = "ShellBox";
		munitions = ShellBox(Spawn(type));
		munitions.setOrigin(self.pos, false);
	}
}

Class GHAGMagicRockets : GHAGMagicMunitions
{
	override void BeginPlay()
	{
		type = "GHAGRocketBox";
		munitions = GHAGRocketBox(Spawn(type));
		munitions.setOrigin(self.pos, false);
	}
}

Class GHAGMagicPlasma : GHAGMagicMunitions
{
	override void BeginPlay()
	{
		type = "CellPack";
		munitions = CellPack(Spawn(type));
		munitions.setOrigin(self.pos, false);
	}
}

Class GHAGMagicBerserk : GHAGMagicMunitions
{
	override void BeginPlay()
	{
		type = "GHAGBerserk";
		munitions = GHAGBerserk(Spawn(type));
		munitions.setOrigin(self.pos, false);
	}
}


Class GHAGQuickieBarrel : ExplosiveBarrel
{
	States
	{
		Death:
			BEXP A 5 Bright;
			BEXP B 5 Bright A_Scream();
			BEXP C 5 Bright;
			BEXP D 5 Bright A_Explode();
			BEXP E 10 Bright;
			TNT1 A 0 {
				A_SetRoll(0);
				A_Respawn();
			}
	}
}