// --------------------------------------------------------------------------
//
//	Weapon replacers
//
// --------------------------------------------------------------------------

//Spawn a Chainsaw if player doesn't have one, otherwise spawn a random weapon.
ACTOR U_ChainsawReplacer : CustomInventory Replaces Chainsaw
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicSaw") //Purists always gets the Chainsaw.
		TNT1 A 0 A_SpawnItemEx("EvidenceCheckerChainsaw",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_Chainsaw",1,"SpawnNewWeapon",AAPTR_PLAYER1)								
		TNT1 A 0 A_SpawnItem("U_Chainsaw")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_SpawnItem("RandomWeapon")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_Chainsaw")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

//Spawn a Shotgun if player doesn't have one, otherwise 60% Shotgun, 40% C-4 or SMG.
ACTOR U_ShotgunReplacer : CustomInventory Replaces Shotgun
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3 												//Spawn SSG on Dooms secret maps. Continue otherwise.
		TNT1 A 0 A_JumpIf(x == 1600 && y == 1152,"SpawnSSG")	//Doom E1M9
		TNT1 A 0 A_JumpIf(x == 576 && y == -896,"SpawnSSG")		//Doom E2M9
		TNT1 A 0 A_JumpIf(x == -432 && y == 208,"SpawnSSG")		//Doom E3M9
		TNT1 A 0 A_JumpIf(x == 176 && y == -64,"SpawnSSG")		//Doom E4M9
		TNT1 A 0 A_JumpIf(x == -4400 && y == 1192,"SpawnSSG")	//Freedoom E1M9
		TNT1 A 0 A_JumpIf(x == -480 && y == 64,"SpawnSSG")		//Freedoom E2M9
		TNT1 A 0 A_JumpIf(x == 3848 && y == -2888,"SpawnSSG")	//Freedoom E3M9
		TNT1 A 0 A_JumpIf(x == 280 && y == -152,"SpawnSSG")		//Freedoom E4M9
		TNT1 A 0 A_JumpIf(x == 576 && y == -1168,"SpawnSSG")	//DTWID E1M9
		TNT1 A 0 A_JumpIf(x == 224 && y == 0,"SpawnSSG")		//DTWID E2M9
		TNT1 A 0 A_JumpIf(x == -784 && y == 976,"SpawnSSG")		//DTWID E3M9
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_Shotgun",1,2,AAPTR_PLAYER1)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(103,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_Shotgun")
		TNT1 A 0 A_SpawnItem("U_ClassicShotgun")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_Jump(128,5)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,6)==0,"Singleplayer")	//C-4 enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1049)==2,"Singleplayer")	//Max 2 C4Weapon per level.
		TNT1 A 0 A_SpawnItem("SmartC4AmmoPack")
		TNT1 A 0 A_SpawnItem("U_ClassicShotgun")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==0,"Singleplayer")	//SMG enabled?
		TNT1 A 0 A_SpawnItem("U_SMGSpawner")
		TNT1 A 0 A_SpawnItem("U_ClassicShotgun")
		Stop
	SpawnSSG:
		TNT1 A 0 A_SpawnItem("U_SSG")
		TNT1 A 0 A_SpawnItem("U_ClassicSSG")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_ClassicShotgun")
		//TNT1 A 0 A_Jump(153,2)
		//TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("TE_DMweapons")==1,3)
		TNT1 A 0 A_SpawnItem("U_Shotgun")
		TNT1 A -1
		Stop
		TNT1 A 0 A_SpawnItem("SmartC4AmmoPack")
		TNT1 A -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

//Spawn a SSG if player doesn't have one, otherwise 70% SSG, 30% Automatic Shotgun or Assault Shotgun.
ACTOR U_SSGReplacer : CustomInventory Replaces SuperShotgun
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicSSG")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto Singleplayer		
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_SSG",1,2,AAPTR_PLAYER1)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(77,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_SSG")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_Jump(128,3)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==0,"Singleplayer")	//AutoShotgun enabled?
		TNT1 A 0 A_SpawnItem("AutoShotgun")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,1)==0,"Singleplayer")	//AA12 enabled?
		TNT1 A 0 A_SpawnItem("U_AssaultShotgun")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_SSG")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

//Spawn a Minigun if player doesn't have one, otherwise 70% Minigun, 30% Revolver or Machinegun.
ACTOR U_ChaingunReplacer : CustomInventory Replaces Chaingun
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicChaingun")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_Minigun",1,2,AAPTR_PLAYER1)	
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(77,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_Minigun")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_Jump(128,3)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,2)==0,"Singleplayer")	//Revolver enabled?
		TNT1 A 0 A_SpawnItem("RevolverSpawner")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,2)==0,"Singleplayer")	//Machinegun enabled?
		TNT1 A 0 A_SpawnItem("U_Machinegun")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_Minigun")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("MinigunAmmo",25)
		Stop
	}
}

//Spawn a Rocket Launcher if player doesn't have one, otherwise 70% RL, 30% Sniper Rifle or Grenade Launcher.
ACTOR U_RocketLauncherReplacer : CustomInventory Replaces RocketLauncher
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicRocketLauncher")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_RocketLauncher",1,2,AAPTR_PLAYER1)	
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(77,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_RocketLauncher")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_Jump(128,3)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,3)==0,"Singleplayer")	//GrenadeLauncher enabled?
		TNT1 A 0 A_SpawnItem("U_GrenadeLauncher")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,4)==0,"Singleplayer")	//Sniper enabled?
		TNT1 A 0 A_SpawnItem("SniperRifle")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_RocketLauncher")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

//Spawn a Plasma Rifle if player doesn't have one, otherwise 70% Plasma Rifle, 30% Railgun.
ACTOR U_PlasmaRifleReplacer : CustomInventory Replaces PlasmaRifle
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicPlasmaRifle")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_PlasmaRifle",1,2,AAPTR_PLAYER1)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(77,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_PlasmaRifleSpawner")
		Stop
	SpawnNewWeapon:
		//TNT1 A 0 A_Jump(128,3)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==0,"Singleplayer")	//Railgun enabled?
		TNT1 A 0 A_SpawnItem("U_Railgun")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==0,"Singleplayer")	//??? enabled?
		TNT1 A 0 A_SpawnItem("U_Railgun")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_PlasmaRifleSpawner")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

//Spawn the BFG 9000 if player doesn't have one, otherwise 70% BFG 9000, 29% BFG 10000, 1% Unmaker.
Actor U_BFGReplacer : CustomInventory Replaces BFG9000
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicBFG9000")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 0 A_JumpIf(x == 2368 && y == -1216,"Nazi")
		TNT1 A 0 Thing_ChangeTID(0,736)
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("NaziVerificate1",1,"Nazi")
		Goto Singleplayer
	Singleplayer:
		TNT1 A 0 A_JumpIfInventory("U_BFG9000",1,2,AAPTR_PLAYER1)		
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(77,"SpawnNewWeapon")
		TNT1 A 0 A_SpawnItem("U_BFG9000")
		Stop
	SpawnNewWeapon:
		TNT1 A 0 A_Jump(9,3)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,5)==0,"Singleplayer")
		TNT1 A 0 A_SpawnItem("U_BFG10000")
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,4)==0,"Singleplayer")
		TNT1 A 0 A_SpawnItem("U_Unmaker")
		Stop
	Nazi:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,10)==0,"Singleplayer")
		TNT1 A 0 A_SpawnItem("U_HitlersBuzzsaw")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_BFG9000")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

ACTOR U_UnmakerSpawner : CustomInventory Replaces UnmakerSpawner
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicBFG9000")
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		Goto SpawnUnmaker
	SpawnUnmaker:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,4)==0,"SpawnBFG10k") //Unmaker enabled?
		TNT1 A 0 A_SpawnItem("U_Unmaker")
		Stop
	SpawnBFG10k:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,5)==0,"SpawnBFG9k") //BFG 10000 enabled?
		TNT1 A 0 A_SpawnItem("U_BFG10000")
		Stop
	SpawnBFG9k:
		TNT1 A 0 A_SpawnItem("U_BFG9000") //Seems both Unmaker and BFG 10000 is disabeld. Spawn a BFG 9000.
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("U_Unmaker")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

Actor HellishMissileLauncherReplacer : CustomInventory Replaces HellishMissileLauncher
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"Purist",AAPTR_PLAYER1)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,8)==0,"Purist")
		TNT1 A 0 A_SpawnItem("U_HellishMissileLauncher")
		Stop
	Purist:
		TNT1 A 0 A_CustomMissile("RevenantLauncherDummy",7,0,random (0,360),2,random (30,150))
		Stop
	}
}

Actor FlameCannonReplacer : CustomInventory replaces FlameCannon
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"Purist",AAPTR_PLAYER1)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,7)==0,"Purist")
		TNT1 A 0 A_SpawnItem("U_FlameCannon")
		Stop
	Purist:
		TNT1 A 0 A_CustomMissile("FlameCannonDummy",7,0,random (0,360),2,random (30,150))
		Stop
	}
}


// --------------------------------------------------------------------------
//
//	Weapon spawners
//
// --------------------------------------------------------------------------

ACTOR U_PistolSpawner: CustomInventory replaces PistolSpawner
{
	+FORCEXYBILLBOARD
	Scale 0.6
	Inventory.PickupMessage "You got the Pistol!"
	Inventory.PickupSound "weapons/pistolup"
	States
	{
	Spawn:
		BERT A -1
		Stop
	Pickup:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,4)				//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,1)==1,"Update")	//Pistol enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==1,"Update")	//SMG enabled?
		TNT1 A 0 A_JumpIfInventory("U_MP40",1,"Update")					//Have MP40?
		TNT1 A 0 A_GiveInventory("RifleMagazine",10)
		Stop
	Update:
		TNT1 A 0 A_GiveInventory("Beretta",1)
		TNT1 A 0 A_GiveInventory("TE_Pistols",1)
		Stop
	}
}

ACTOR RevolverSpawner: CustomInventory replaces revolver
{
	+FORCEXYBILLBOARD
	Scale 0.7
	Inventory.Pickupmessage "You got the Revolver!"
	Inventory.PickupSound "revolver/draw"
	States
	{
	Spawn:
		RVIC A -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("TE_Revolver",1)
		TNT1 A 0 A_GiveInventory("TE_Revolvers",1)
		Stop
	}
}

ACTOR U_SMGSpawner: CustomInventory replaces SMGSpawner
{
	+FORCEXYBILLBOARD
	Scale 0.9
	Inventory.Pickupmessage "You got the Sub Machinegun!"
	Inventory.PickupSound "CLIPIN"
	States
	{
	Spawn:
		SMGZ A -1
		Stop
	Pickup:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"Purist")		//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==1,"SMG")		//SMG enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,1)==1,"9mm")		//Pistol enabled?
		TNT1 A 0 A_JumpIfInventory("U_MP40",1,"9mm")					//Have MP40?
		TNT1 A 0 A_GiveInventory("RifleMagazine",10)
		Stop
	Purist:
		TNT1 A 0 A_GiveInventory("U_ClassicSMG",1)
		Stop
	SMG:
		TNT1 A 0 A_GiveInventory("U_SMG",1)
		TNT1 A 0 A_GiveInventory("TE_SMGs",1)
		Stop
	9mm:
		TNT1 A 0 A_GiveInventory("Magazine9mm",10)
		Stop
	}
}

ACTOR U_ShotgunSpawner: CustomInventory Replaces ShotgunSpawnerDroped
{
	States
	{
 	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_Shotgun")
		TNT1 A 0 A_SpawnItem("U_ClassicShotgun")
		Stop
	}
}

ACTOR U_RifleSpawner: CustomInventory Replaces RifleSpawner
{
	+FORCEXYBILLBOARD
	scale 0.8
	Inventory.PickupMessage "$GOTRIFLE"
	Inventory.PickupSound "CLIPIN"
	States
	{
 	Spawn:
		RIFL A -1
		Stop
	Pickup:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,6)==0,"Purist")
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"Purist")
		TNT1 A 0 A_GiveInventory("U_Rifle",1)
		TNT1 A 0 A_GiveInventory("TE_Rifles",1)
		Stop
	Purist:
		TNT1 A 0 A_GiveInventory("RifleMagazine",10)
		Stop
	}
}

ACTOR U_MinigunSpawner: CustomInventory Replaces DropedChaingunSpawner
{
	States
	{
 	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_Minigun")
		TNT1 A 0 A_SpawnItem("U_ClassicChaingun")
		Stop
	}
}

ACTOR U_PlasmaRifleSpawner: CustomInventory
{
	+FORCEXYBILLBOARD
	Inventory.PickupSound "PLSDRAW"
	Inventory.PickupMessage "You got the Plasma Rifle!"
	States
	{
	Spawn:
		PROI A -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("U_PlasmaRifle",1)
		TNT1 A 0 A_GiveInventory("TE_PlasmaRifles",1)
		Stop
	}
}

Actor RandomWeapon : CustomInventory
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(256,"Spawn1","Spawn2","Spawn3","Spawn4","Spawn5","Spawn6","Spawn7","Spawn8","Spawn9","Spawn10")
		Goto Spawn1
	Spawn1:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,2)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("RevolverSpawner")
		Stop
	Spawn2:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("AutoShotgun")
		Stop
	Spawn3:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,4)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("SniperRifle")
		Stop
	Spawn4:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("U_Railgun")
		Stop
	Spawn5:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,6)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("SmartC4AmmoPack")
		Stop
	Spawn6:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("U_SMGSpawner")
		Stop
	Spawn7:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,1)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("U_AssaultShotgun")
		Stop
	Spawn8:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,2)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("U_Machinegun")
		Stop
	Spawn9:
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,3)==0,"Spawn")
		TNT1 A 0 A_SpawnItem("U_GrenadeLauncher")
		Stop
	Spawn10: //To prevent infinite looping,there's also a chance to spawn a Berserk pack - or a Bloodrush sphere if that's enabled.
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2,2)
		TNT1 A 0 A_SpawnItem("BerserkPack")
		Stop
		TNT1 A 0 A_SpawnItem("BloodrushSphere")
		Stop
	}
}


// --------------------------------------------------------------------------
//
//	Ammunition spawners
//
// --------------------------------------------------------------------------

ACTOR Clip_Replacer : CustomInventory Replaces Clip
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,4,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,1)==1,"Randomizer")	//Pistol enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==1,"Randomizer")	//SMG enabled?
		TNT1 A 0 A_JumpIfInventory("U_MP40",1,"Randomizer",AAPTR_PLAYER1)	//Have MP40?
		TNT1 A 0 A_SpawnItem("RifleMagazine")
		Stop
	Randomizer: //50% 9mmMag,50% RifleMag
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 A_SpawnItem("Magazine9mm")
		Stop
		TNT1 A 0 A_SpawnItem("RifleMagazine")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("RifleMagazine")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

ACTOR Shell_Replacer : CustomInventory Replaces Shell
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,3,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==1,"Randomizer")	//Automatic Shotgun enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,1)==1,"Randomizer")	//Assault Shotgun enabled?
		TNT1 A 0 A_SpawnItem("AmmoShell")
		Stop
	Randomizer: //20% GreenShell,80% Shell
		TNT1 A 0 A_Jump(51,2)
		TNT1 A 0 A_SpawnItem("AmmoShell")
		Stop
		TNT1 A 0 A_SpawnItem("GreenShell")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("AmmoShell")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

ACTOR ShellBox_Replacer : CustomInventory Replaces ShellBox
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,3,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==1,"Randomizer")	//Automatic Shotgun enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,1)==1,"Randomizer")	//Assault Shotgun enabled?
		TNT1 A 0 A_SpawnItem("SmartShellBox")
		Stop
	Randomizer: //20% GreenShellBox,80% ShellBox
		TNT1 A 0 A_Jump(51,2)
		TNT1 A 0 A_SpawnItem("SmartShellBox")
		Stop
		TNT1 A 0 A_SpawnItem("SmartGreenShellBox")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("AmmoShellBox2")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

ACTOR ClipBox_Replacer : CustomInventory Replaces ClipBox
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,4,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,2)==1,"Randomizer")	//Revolver enabled?
		TNT1 A 0 A_Jump(77,2)
		TNT1 A 0 A_SpawnItem("SmartMinigunBox")
		Stop
		TNT1 A 0 A_SpawnItem("SmartRifleBox")
		Stop
	Randomizer: //30% RevolverBullets or RifleBox,70% MinigunBox
		TNT1 A 0 A_Jump(77,2,3)
		TNT1 A 0 A_SpawnItem("SmartMinigunBox")
		Stop
		TNT1 A 0 A_SpawnItem("SmartRevolverBox")
		Stop
		TNT1 A 0 A_SpawnItem("SmartRifleBox")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("MinigunBox")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}
/*
ACTOR RocketAmmo_Replacer : CustomInventory Replaces RocketAmmo
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,2,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,6)==1,"Randomizer")	//C-4 enabled?
		TNT1 A 0 A_SpawnItem("AmmoRocket")
		Stop
	Randomizer: //5% C4,95% RocketAmmo
		TNT1 A 0 A_Jump(13,2)
		TNT1 A 0 A_SpawnItem("AmmoRocket")
		Stop
		TNT1 A 0 A_SpawnItem("C4Ammo")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("AmmoRocket")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}
*/
ACTOR Cell_Replacer : CustomInventory Replaces Cell
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,2,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==1,"Randomizer")	//Railgun enabled?
		TNT1 A 0 A_SpawnItem("AmmoCell")
		Stop
	Randomizer: //10% RailCore,90% Cell
		TNT1 A 0 A_Jump(26,2)
		TNT1 A 0 A_SpawnItem("AmmoCell")
		Stop
		TNT1 A 0 A_SpawnItem("RailCore")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("AmmoCell")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}

ACTOR CellPack_Replacer : CustomInventory Replaces CellPack
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("CheckIfDM")
		TNT1 A 3
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,2,AAPTR_PLAYER1)	//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==1,"Randomizer")	//Railgun enabled?
		TNT1 A 0 A_SpawnItem("SmartCellPack")
		Stop
	Randomizer: //10% RailPack,90% CellPack
		TNT1 A 0 A_Jump(26,2)
		TNT1 A 0 A_SpawnItem("SmartCellPack")
		Stop
		TNT1 A 0 A_SpawnItem("SmartRailPack")
		Stop
	DM:
		TNT1 A 0 A_SpawnItem("AmmoCellPack")
		TNT1 A -1
	Pickup:
		TNT1 A 0 A_GiveInventory("DummyToken",1)
		Stop
	}
}


// --------------------------------------------------------------------------
//
//	Dropped stuff from monsters and corpses
//
// --------------------------------------------------------------------------

Actor ShotgunDrop
{
	Radius 0
	Height 0
	+THRUACTORS
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(128,"Spawn2")
		Goto Spawn1
	Spawn1:	
		TNT1 A 0 A_CustomMissile("DropedShotgun",20,0,0,2,random(30,50))
		stop
	Spawn2:	
		TNT1 A 0 A_CustomMissile("DropedShotgun2",20,0,180,2,random(30,50))
		stop		
	}
}

Actor DropedShotgun 
{
	Scale 0.9
	speed 6
	health 1
	radius 16
	height 4
	damage 0
	+THRUACTORS
	+MISSILE
	+NOTELEPORT
	+NOBLOCKMAP
	+BLOODLESSIMPACT 
	+FORCEXYBILLBOARD
	+NODAMAGETHRUST
	+MOVEWITHSECTOR
	+CORPSE
	-DONTSPLASH
	Mass 1
	States
	{
	Spawn:
		SHOD A 4
		TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
		SHOD BCDEFGH 4
		Loop
	Death:
		TNT1 A 0 A_SpawnItem("U_ShotgunSpawner")
		Stop
	}
}

Actor DropedShotgun2: DropedShotgun
{
	Scale 0.9
	States
	{
	Spawn:
		SHOD H 4
		TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
		SHOD GFEDCBA 4
		Loop
	}
}

Actor U_DropedRifle: DropedShotgun replaces DropedRifle
{
	Scale 0.8
	States
	{
	Spawn:
		TRII A 4
		TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
		TRII BCDEFGH 4
		Loop
	Death:
		TNT1 A 0 A_SpawnItem("U_RifleSpawner")
		Stop
	}
}

Actor U_DropedRifle2: U_DropedRifle replaces DropedRifle2
{
	Scale 0.8
	States
	{
	Spawn:
		TRII H 4
		TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
		TRII GFEDCBA 4
		Loop
	}
}

Actor U_DropedMP40: DropedShotgun replaces DropedMP40
{
	Scale 0.5
	States
	{
	Spawn:
		MP40 J 4
		TNT1 A 0 A_ChangeFlag("THRUACTORS",0)
		Loop
	Death:
		TNT1 A 0 A_SpawnItem("U_MP40Spawner")
		Stop
	}
}

Actor U_MP40Spawner: CustomInventory replaces MP40Spawner
{
	Scale 0.4
	Inventory.PickupSound "CLIPIN"
	Inventory.Pickupmessage "You got the MP40!"
	States
	{
	Spawn:
		MP40 J -1
		Stop
	Pickup:
		TNT1 A 0 A_JumpIfInventory("IsPlayingAsPurist",1,"Purist")		//Is purist?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,9)==1,"MP40")		//MP40 enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,0)==1,"9mm")		//SMG enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,1)==1,"9mm")		//Pistol enabled?
		TNT1 A 0 A_GiveInventory("RifleMagazine",10)
		Stop
	Purist:
		TNT1 A 0 A_GiveInventory("U_ClassicSMG",1)
		Stop
	MP40:
		TNT1 A 0 A_GiveInventory("U_MP40",1)
		Stop
	9mm:
		TNT1 A 0 A_GiveInventory("Magazine9mm",10)
		Stop
	}
}

Actor U_MP40SpawnerB: CustomInventory replaces MP40
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_MP40Spawner")
		Stop
	}
}

Actor DroppedAmmo
{
	Radius 0
	Height 0
	+THRUACTORS
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
		TNT1 A 0 A_Jump(26,"CellDrop","BulletDrop")
		TNT1 A 0 A_Jump(92,"ShellDrop")
	MagDrop:
		TNT1 A 0 A_Jump(128,2)
		TNT1 A 0 A_SpawnItemEx("RifleMagazine",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_SpawnItemEx("Magazine9mm",0,0,10,5,0,7,random(0,360))
		Stop
	ShellDrop:
		TNT1 A 0 A_Jump(51,2)
		TNT1 A 0 A_SpawnItemEx("AmmoShell",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,1)==1,3)	//Assaultshotgun enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==1,2)	//Autoshotgun enabled?
		TNT1 A 0 A_SpawnItemEx("AmmoShell",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_SpawnItemEx("GreenShell",0,0,10,5,0,7,random(0,360))
		Stop
	CellDrop:
		TNT1 A 0 A_Jump(38,2)
		TNT1 A 0 A_SpawnItemEx("AmmoCell",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,5)==1,3)	//Railgun enabled?
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,5)==1,2)	//BFG10k enabled?
		TNT1 A 0 A_SpawnItemEx("AmmoCell",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_SpawnItemEx("RailCore",0,0,10,5,0,7,random(0,360))
		Stop
	BulletDrop:
		TNT1 A 0 A_Jump(38,2)
		TNT1 A 0 A_SpawnItemEx("MinigunAmmo",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,2)==1,2)	//Revolver enabled?
		TNT1 A 0 A_SpawnItemEx("MinigunAmmo",0,0,10,5,0,7,random(0,360))
		Stop
		TNT1 A 0 A_SpawnItemEx("RevolverBullets",0,0,10,5,0,7,random(0,360))
		Stop
	}
}

Actor Clips : DroppedAmmo
{
	Radius 0
	Height 0
	+THRUACTORS
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
		Goto MagDrop
	}
}

Actor Shells : DroppedAmmo
{
	Radius 0
	Height 0
	+THRUACTORS
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
		Goto ShellDrop
	}
}

Actor DummyDrop replaces CLIP1Drop
{
	Radius 0
	Height 0
	+THRUACTORS
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1
		stop		
	}
}


// --------------------------------------------------------------------------
//
//	Misc.
//
// --------------------------------------------------------------------------

//Spawn a Backpack if player isn't carrying one, otherwise 10% BloodrushSphere, 90% Backpack
ACTOR Backpack_Replacer : CustomInventory Replaces Backpack
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2,"Randomizer")
		TNT1 A 0 A_SpawnItem("AmmoSuply")
		Stop
	Randomizer:
		TNT1 A 0 A_JumpIfInventory("AmmoSuply",1,2,AAPTR_PLAYER1)
		TNT1 A 0 A_Jump(256,2)
		TNT1 A 0 A_Jump(26,2)
		TNT1 A 0 A_SpawnItem("AmmoSuply")
		Stop
		TNT1 A 0 A_SpawnItem("BloodrushSphere")
		Stop
	}
}

//20% BloodrushSphere, 80% Allmap
ACTOR Allmap_Replacer : CustomInventory Replaces Allmap
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2,"Randomizer")
		TNT1 A 0 A_SpawnItem("U_Allmap")
		Stop
	Randomizer:
		TNT1 A 0 A_Jump(51,2)
		TNT1 A 0 A_SpawnItem("U_Allmap")
		Stop
		TNT1 A 0 A_SpawnItem("BloodrushSphere")
		Stop
	}
}

//10% BloodrushSphere, 90% Berserk
ACTOR Berserk_Replacer : CustomInventory Replaces Berserk
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("EvidenceCheckerBerserk", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1028)==2,"Randomizer")
		TNT1 A 0 A_SpawnItem("BerserkPack")
		Stop
	Randomizer:
		TNT1 A 0 A_Jump(26,2)
		TNT1 A 0 A_SpawnItem("BerserkPack")
		Stop
		TNT1 A 0 A_SpawnItem("BloodrushSphere")
		Stop
	}
}

/*
// --------------------------------------------------------------------------
//
//	Map specific spawners BYHAE
//
// --------------------------------------------------------------------------

//Hellgun
//StockedHellRifle

ACTOR U_RailgunSpawner1: CustomInventory Replaces M2Plasma
{
	States
	{
 	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicPlasmaRifle")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1001,3)==0,"RandomWeapon")
		TNT1 A 0 A_SpawnItem("U_Railgun")
		Stop
	RandomWeapon:
		TNT1 A 0 A_SpawnItem("RandomWeapon")
		Stop
	}
}
ACTOR U_RailgunSpawner2 : U_RailgunSpawner1 Replaces M2PlasmaRifle
{
}

ACTOR U_BFG10kSpawner: CustomInventory Replaces FreezerRifle
{
	States
	{
 	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicBFG9000")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,5)==0,"RandomWeapon")
		TNT1 A 0 A_SpawnItem("U_BFG10000")
		Stop
	RandomWeapon:
		TNT1 A 0 A_SpawnItem("RandomWeapon")
		Stop
	}
}

ACTOR U_GrenadelauncherSpawner1: CustomInventory Replaces GrenLauncher
{
	States
	{
 	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("U_ClassicRocketLauncher")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(1002,3)==0,"RandomWeapon")
		TNT1 A 0 A_SpawnItem("U_GrenadeLauncher")
		Stop
	RandomWeapon:
		TNT1 A 0 A_SpawnItem("RandomWeapon")
		Stop
	}
}
ACTOR U_GrenadelauncherSpawner2 : U_GrenadelauncherSpawner1 Replaces Grenadelauncher
{
}

ACTOR U_StockedShotgun : CustomInventory replaces StockedShotgun
{
	Inventory.PickupSound "weapons/sgpump"
	Inventory.PickupMessage "$GOTSHOTGUN"
	States
	{
	Spawn:
		Z7ST A -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("U_Shotgun")
		Stop
	}
}

ACTOR U_StockedRifle : CustomInventory replaces StockedRifle
{
	Inventory.PickupSound "CLIPIN"
	Inventory.Pickupmessage "$GOTRIFLE"
	States
	{
	Spawn:
		Z7ST B -1
		Stop
	Pickup:
		TNT1 A 0 A_GiveInventory("U_Rifle")
		Stop
	}
}
*/