
// Spawnable Bodies
class CarryableCorpse: Actor {
	String Carry;
	property Carry: Carry;
	
	// TODO: COnfigure to not require 6 body states
	action void spawnCorpse() {
		int seed = random(1,6);
		if(seed == 1){
			invoker.SetState(ResolveState("Body1"));
		};
		if(seed == 2){
			invoker.SetState(ResolveState("Body2"));
		};
		if(seed == 3){
			invoker.SetState(ResolveState("Body3"));
		};
		if(seed == 4){
			invoker.SetState(ResolveState("Body4"));
		};

		if(seed == 5){
			invoker.SetState(ResolveState("Body5"));
		};
		if(seed == 6){
			invoker.SetState(ResolveState("Body6"));
		}
	}
}

class OfficeCorpse: CarryableCorpse
{

	Default{
		Height 0;
		Radius 0;
		YScale 0.06;
		XScale 0.06;
		CarryableCorpse.Carry "OfficeCarry";
		+CORPSE;
		+SOLID;
	}
	
	override void BeginPlay(){

		Super.BeginPlay();
	}
	States
	{
		Raise: 
			OFCL H 0 spawnCorpse();
			Loop;
		Spawn:
			OFCL H 0 spawnCorpse();
			Loop;

		Body1:
			ZKDE A -1;
			Stop;
		Body2:
			ZKDE B -1;
			Stop;
		Body3:
			ZKDE C -1;
			Stop;
		Body4:
			ZKDE D -1;
			Stop;
		Body5:
			ZKDE E -1;
			Stop;
		Body6:
			ZKDE F -1;
			Stop;
	}


}



class BeachCorpse: CarryableCorpse
{

	Default{
		Height 0;
		Radius 0;
		YScale 0.06;
		XScale 0.06;
		CarryableCorpse.Carry "BeachCarry";
		+CORPSE;
		+SOLID;

	}
	States
	{
		Raise:
			BBDE H 0 spawnCorpse();
			Loop;
		Spawn:
			BBDE H 0 spawnCorpse();
			Loop;

		Body1:
			BBDE G -1;
			Stop;
		Body2:
			BBDE G -1;
			Stop;
		Body3:
			BBDE G -1;
			Stop;
		Body4:
			BBDE G -1;
			Stop;
		Body5:
			BBDE G -1;
			Stop;
		Body6:
			BBDE G -1;
			Stop;
	}
}

class MilitaryCorpse: CarryableCorpse
{

	Default{
		Height 0;
		Radius 0;
		YScale 0.06;
		XScale 0.06;
		CarryableCorpse.Carry "MilitaryCarry";
		+CORPSE;
		+SOLID;

	}
	States
	{
		Raise:
			MOFC E 0 spawnCorpse();
			Loop;
		Spawn:
			MOFC E 0 spawnCorpse();
			Loop;

		Body1:
			MOFC E -1;
			Stop;
		Body2:
			MOFC E -1;
			Stop;
		Body3:
			MOFC E -1;
			Stop;
		Body4:
			MOFC D -1;
			Stop;
		Body5:
			MOFC D -1;
			Stop;
		Body6:
			MOFC D -1;
			Stop;
	}
}

class PoliceCorpse: CarryableCorpse
{

	Default{
		Height 0;
		Radius 0;
		YScale 0.06;
		XScale 0.06;
		CarryableCorpse.Carry "PoliceCarry";
		+CORPSE;
		+SOLID;

	}
	States
	{
		Raise:
			COPW I 0 spawnCorpse();
			Loop;
		Spawn:
			COPW I 0 spawnCorpse();
			Loop;

		Body1:
			COPW I -1;
			Stop;
		Body2:
			COPW I -1;
			Stop;
		Body3:
			COPW I -1;
			Stop;
		Body4:
			COPW J -1;
			Stop;
		Body5:
			COPW J -1;
			Stop;
		Body6:
			COPW J -1;
			Stop;
	}
}



// OTS Carry 'Weapons'
class Carry: Weapon{
	String Corpse;
	property Corpse: Corpse;
}

class OfficeCarry: Carry  
{
 	Default
	{
		Weapon.SelectionOrder 28;
		Weapon.SlotNumber 4;
		Weapon.AmmoType "Cell";
		Carry.Corpse "OfficeCorpse";
		Inventory.Pickupmessage "picked up Dead woman";
		Tag "Body";
	}
	States
	{
	Ready:
		OTSC A 1;
		Loop;
	Deselect:
		OTSC A 1 A_Lower;
		Loop;
	Select:
		OTSC A 1 A_Raise;
		Loop;
	Fire:
		OTSC A 1;
		Goto Ready;
 	Spawn:
		AKIC A -1;
		Stop;
	}
}

class BeachCarry : Carry
{
 	Default
	{
		Weapon.SelectionOrder 28;
		Weapon.SlotNumber 4;
		Weapon.AmmoType "Cell";
		Carry.Corpse "BeachCorpse";
		Inventory.Pickupmessage "picked up Dead woman";
		Tag "Body";
	}
	States
	{
	Ready:
		OTSB A 1;
		Loop;
	Deselect:
		OTSB A 1 A_Lower;
		Loop;
	Select:
		OTSB A 1 A_Raise;
		Loop;
	Fire:
		OTSB A 1;
		Goto Ready;
 	Spawn:
		AKIB A -1;
		Stop;
	}
}


class MilitaryCarry : Carry
{
 	Default
	{
		Weapon.SelectionOrder 28;
		Weapon.SlotNumber 4;
		Weapon.AmmoType "Cell";
		Carry.Corpse "MilitaryCorpse";
		Inventory.Pickupmessage "picked up Dead woman";
		Tag "Body";
	}
	States
	{
	Ready:
		OTSM A 1;
		Loop;
	Deselect:
		OTSM A 1 A_Lower;
		Loop;
	Select:
		OTSM A 1 A_Raise;
		Loop;
	Fire:
		OTSM A 1;
		Goto Ready;
 	Spawn:
		AKIB A -1;
		Stop;
	}
}

class PoliceCarry : Carry
{
 	Default
	{
		Weapon.SelectionOrder 28;
		Weapon.SlotNumber 4;
		Weapon.AmmoType "Cell";
		Carry.Corpse "PoliceCorpse";
		Inventory.Pickupmessage "picked up Dead woman";
		Tag "Body";
	}
	States
	{
	Ready:
		OTSP A 1;
		Loop;
	Deselect:
		OTSP A 1 A_Lower;
		Loop;
	Select:
		OTSP A 1 A_Raise;
		Loop;
	Fire:
		OTSP A 1;
		Goto Ready;
 	Spawn:
		AKIB A -1;
		Stop;
	}
}

