/* I apologize in advance for the fugly code, at the time
this seemed to be the best way to do this.*/


actor weaponcrate : custominventory replaces BFG9000
{
	radius 14
	height 14
	+notimefreeze
	+DONTGIB
	+quiet
	scale 1
	inventory.pickupflash "SmashedCrate"
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A 0 a_spawnitemex ("BigCratePack",0,0,4,random(-5,5),random(-5,5),random(-3,3))
		CRTE A 1
		Goto SpawnLoop
	SpawnLoop:
		CRTE A 10
		CRTE A 10 bright
		loop
	PickUp:
		TNT1 A 0
		
    //You got a crate weapon already?
    //Well let's see what you got
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") >= 1, "SpecificWeaponChecks")
        TNT1 A 0 a_jumpifinventory ("TSBrick",1,"BrickRoll")
        TNT1 A 0 a_jumpifinventory ("ParticleSmasher",1,"SmasherRoll")
        TNT1 A 0 a_jumpifinventory ("SKPistol",1,"PistolRoll")
        TNT1 A 0 a_jumpifinventory ("IcarusLauncher",1,"IcarusRoll")
        TNT1 A 0 a_jumpifinventory ("RevenantBox",1,"BonerRoll")
        Goto RandomChoice
    
    SpecificWeaponChecks:
        TNT1 A 0 a_jumpifinventory ("TSBrick",1,2)
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") == 1, "GivePlakanomicon")
        TNT1 A 0 a_jumpifinventory ("ParticleSmasher",1,2)
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") == 2, "GiveParticleSmasher")
        TNT1 A 0 a_jumpifinventory ("SKPistol",1,2)
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") == 3, "GiveTacticalPistol")
        TNT1 A 0 a_jumpifinventory ("IcarusLauncher",1,2)
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") == 4, "GiveIcarusLauncher")
        TNT1 A 0 a_jumpifinventory ("RevenantBox",1,2)
        TNT1 A 0 A_JumpIf(CallACS("CratePicker") == 5, "GivePocketBoner")
		TNT1 A 0
        Goto IgnoreCrate
        
    //This line is if you don't have a crate weapon
    //at all
    RandomChoice:
        TNT1 A 0 a_jump (256,"GivePlakanomicon", "GiveParticleSmasher","GiveTacticalPistol","GiveIcarusLauncher","GivePocketBoner")

	//If you're here you probably already have a crate weapon
	//So let's roll
	//Plakanomicon
	BrickRoll:
		TNT1 A 0
		TNT1 A 1 a_jump (256,"GiveParticleSmasher","GiveTacticalPistol","GiveIcarusLauncher","GivePocketBoner")
		loop
	//Particle Smasher
	SmasherRoll:
		TNT1 A 0
		TNT1 A 1 a_jump (256,"GivePlakanomicon","GiveTacticalPistol","GiveIcarusLauncher","GivePocketBoner")
		loop
	//.100% Tactical Pistol
	PistolRoll:
		TNT1 A 0
		TNT1 A 1 a_jump (256,"GivePlakanomicon", "GiveParticleSmasher","GiveIcarusLauncher","GivePocketBoner")
		loop
	//Icarus Launcher
	IcarusRoll:
		TNT1 A 0
		TNT1 A 1 a_jump (256,"GivePlakanomicon", "GiveParticleSmasher","GiveTacticalPistol","GivePocketBoner")
		loop
	//Pocket Revenants
	BonerRoll:
		TNT1 A 0
		TNT1 A 1 a_jump (256,"GivePlakanomicon", "GiveParticleSmasher","GiveTacticalPistol","GiveIcarusLauncher")
		loop
		
	
	//Actually give the player
	//A crate weapon!
	GivePlakanomicon:
		TNT1 A 0
		TNT1 A 0 A_Recoil (-0.0001)
		TNT1 A 0 a_playsound ("crate/break",0,0.70)
		TNT1 A 1 a_spawnitemex ("BrickToken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	GiveParticleSmasher:
		TNT1 A 0
		TNT1 A 0 A_Recoil (-0.0001)
		TNT1 A 0 a_playsound ("crate/break",0,0.70)
		TNT1 A 1 a_spawnitemex ("SmasherToken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	GiveTacticalPistol:
		TNT1 A 0
		TNT1 A 0 A_Recoil (-0.0001)
		TNT1 A 0 a_playsound ("crate/break",0,0.70)
		TNT1 A 1 a_spawnitemex ("PistolToken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	GiveIcarusLauncher:
		TNT1 A 0
		TNT1 A 0 A_Recoil (-0.0001)
		TNT1 A 0 a_playsound ("crate/break",0,0.70)
		TNT1 A 1 a_spawnitemex ("IcarusToken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	GivePocketBoner:
		TNT1 A 0
		TNT1 A 0 A_Recoil (-0.0001)
		TNT1 A 0 a_playsound ("crate/break",0,0.70)
		TNT1 A 1 a_spawnitemex ("BonerToken",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
		stop
	
	
	IgnoreCrate:
		TNT1 A 0
		CRTE A 1
		fail
	}
}


Actor SmashedCrate
{
	+cannotpush
	+movewithsector
	+dontsplash
	+noblockmap
	+thruactors	
	+missile
	+thruactors
	+bounceonwalls
	-solid
	gravity 1.20
	states
	{
	Spawn:
		TNT1 A 0
		TNT1 AA 0 a_spawnitemex ("cratedebris",0,0,0,random (-4,4),random (-4,4),random (6,10))
		TNT1 AAAAAAAAAA 0 a_spawnitemex ("cratesplinter",0,0,0,random (-8,8),random (-8,8),random (8,16))
		CRTE B 1 thrustthingz (0,random(40,65),0,0)
        CRTE B 1 thrustthing (random(160,224),random(6,10),0)
	Flight:
		CRTE B 1
		loop
	Death:
		CRTE B random (120,270)
		goto FadeOut
	FadeOut:
		CRTE B 2
		CRTE B 20 a_fadeout (0.08)
		wait
	}
}
		
		

actor cratedebris
{
	+cannotpush
	+movewithsector
	+dontsplash
	+noblockmap
	+thruactors	
	+missile
	Gravity 1 
	states
	{
	spawn:	
		CRDB ABCDEFGHI 4
		goto death
	death:
		CRDB I 60
		CRDB I 10 a_fadeout (0.08)
		wait
	}
}

actor cratesplinter
{
	+cannotpush
	+movewithsector
	+dontsplash
	+noblockmap
	+thruactors	
	+doombounce
	+missile
	bouncecount 3
	Gravity 1 
	states
	{
	spawn:
		TNT1 A 0
		TNT1 A 0
		TNT1 A 0 a_jump(60,"splinter2")
		TNT1 A 0 a_jump(60,"splinter3")
		TNT1 A 0 a_jump(60,"Splinter4")
		goto splinter1
	Splinter1:
		CRSP ABCD 2
		CRSP ABCD 2
		CRSP ABCD 2
		CRSP ABCD 2
		CRSP ABCD 2
		goto death
	Splinter2:
		CRSP EF 3
		CRSP EF 3
		CRSP EF 3
		CRSP EF 3
		goto death
	Splinter3:
		CRSP GHIJ 2
		CRSP GHIJ 2
		CRSP GHIJ 2
		CRSP GHIJ 2
		CRSP GHIJ 2
		goto death
	Splinter4:
		CRSP KL 3
		CRSP KL 3
		CRSP KL 3
		CRSP KL 3
		CRSP KL 3
		goto death
	death:	
		TNT1 A 2
		stop
	}
}

actor SmasherOnlyPlz : inventory
{inventory.maxamount 1}
