class DefibrillatorVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTDEFIBRILLATOR";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		DEFG A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Defibrillator", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsDefibrillator", 1);
		TNT1 A 0 A_GiveInventory("Defibrillator", 1);
		Stop;
	}
}

class PaintGunVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTPAINTGUN";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		PNTP A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("PaintGun", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsPaintgunSingle", 1); // Generic for regular gun
		TNT1 A 0 A_GiveInventory("PaintGun", 1);
		Stop;
	}
}

class PaintGunsVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTPAINTGUN2";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		PNTP B -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("PaintGuns", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("PaintGuns", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("PaintAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsPaintgun", 1);
		TNT1 A 0 A_GiveInventory("PaintGuns", 1);
		Stop;
	}
}

class OoziVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTOOZI";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		OOZP A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Oozi", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("Oozis", 1, "AmmoCheck"); // check for two oozis picked up first
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("OoziAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsOozi", 1);
		TNT1 A 0 A_JumpIfInventory("Oozis", 1, "GiveAmmo");
		TNT1 A 0 A_JumpIfInventory("Oozi", 1, "GiveDual");
		TNT1 A 0 A_GiveInventory("Oozi", 1);
		Stop;
	GiveDual:
		TNT1 A 0 A_GiveInventory("Oozis", 1);
		Stop;
	GiveAmmo:
		TNT1 A 0 A_GiveInventory("OoziAmmo", 40);
		Stop;
	}
}

class OozisVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTOOZIS";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		OOZP B -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Oozis", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("Oozis", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("OoziAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsOozi", 1);
		TNT1 A 0 A_GiveInventory("Oozi", 1);
		TNT1 A 0 A_GiveInventory("Oozis", 1);
		Stop;
	}
}

class ShotbowVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTSHOTBOW";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		SHBW A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Shotbow", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("Shotbow", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("ShotboltAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsShotbow", 1);
		TNT1 A 0 A_GiveInventory("Shotbow", 1);
		Stop;
	}
}

class QuadcannonVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTQUADCANNON";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		QDCN A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Quadcannon", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("Quadcannon", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("ShotboltAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsQuadcannon", 1);
		TNT1 A 0 A_GiveInventory("Quadcannon", 1);
		Stop;
	}
}

class PaintCannonVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTPAINTCANNON";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		PCNN A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("PaintCannon", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("PaintCannon", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("PaintAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsPaintCannon", 1);
		TNT1 A 0 A_GiveInventory("PaintCannon", 1);
		Stop;
	}
}

class HellShellLauncherVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTHELLSHELLGUN";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		HLSL A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("HellShellLauncher", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("HellShellLauncher", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("HellShellAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsHellShell", 1);
		TNT1 A 0 A_GiveInventory("HellShellLauncher", 1);
		Stop;
	}
}

class GoonadesVO : Goonades
{
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		Goto Super::Spawn;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Goonades", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("NumberOfGoonades", 0, "FailState");
		TNT1 A 0 A_GiveInventory("NumberOfGoonades", 3);
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsGoonades", 1);
		// fall through
	NoSelect:
		TNT1 A 0;
		Stop;
	FailState:
		TNT1 A 0;
		Fail;
	}
}

class SceptreVO : CustomInventory
{
	Default
	{
		Inventory.PickupMessage "$GOTSCEPTRE";
		Inventory.PickupSound "misc/w_pkup";
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_JumpIf(CallACS("Map_GameType") >= 1, "MultiSpawn"); // for overloading
		SCPT A -1;
		Stop;
	MultiSpawn:
		TNT1 A 0 A_SpawnItemEx("Sceptre", 0, 0, 0, 0, 0, 0, angle, SXF_TRANSFERTRANSLATION | SXF_NOCHECKPOSITION | SXF_TRANSFERAMBUSHFLAG | SXF_TRANSFERSPECIAL, 0, tid);
		Stop;
	Pickup:
		TNT1 A 0 A_JumpIfInventory("Sceptre", 1, "AmmoCheck");
		Goto Success;
	FailState:
		TNT1 A 0;
		Fail;
	AmmoCheck:
		TNT1 A 0 A_JumpIfInventory("MarbleAmmo", 0, "FailState");
	Success:
		TNT1 A 0 A_GiveInventory("SquareVOWeaponsSceptre", 1);
		TNT1 A 0 A_GiveInventory("Sceptre", 1);
		Stop;
	}
}
