Actor CratesParent : CustomInventory
{
 Scale 1.2
 Inventory.PickupSound "RandomCrate/pickup"
 +INVENTORY.INVBAR
 +INVENTORY.BIGPOWERUP
 +FLOORCLIP
 +NOTIMEFREEZE
 States
 {
  Spawn:
	TNT1 A 1
	Goto SpawnLoop
  SpawnLoop:
	"####" A 6 Bright
	"####" B 8 Bright
	Loop
  Remove:
	TNT1 A 0 A_SpawnItemEx("Berserk",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION)
	TNT1 A 0
	Stop
 }
}

ACTOR WeaponCrate : CratesParent
{
 Inventory.PickupMessage "Random Weapon Crate"
 Tag "Random Weapon Crate"
 Inventory.Icon "WPC1C0"
 States
 {
  Spawn:
 	WPC1 A 0 NoDelay A_JumpIf(ACS_NamedExecuteWithResult("TTKGetCVar",55,2) != 0,"Remove")
	WPC1 A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,124)
	Goto Spawnloop
  Use:
	TNT1 A 1 ACS_NamedExecutealways("WeaponCrateUse",0)
	Stop  
 }
}

ACTOR HealthCrate : CratesParent
{
 Scale 1.15
 Inventory.PickupMessage "Random Health Crate"
 Tag "Random Health Crate"
 Inventory.Icon "HLCTC0"
 States
 {
  Spawn:
 	HLCT A 0 NoDelay A_JumpIf(ACS_NamedExecuteWithResult("TTKGetCVar",55,2) != 0,"Remove")
	HLCT A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,4,125)
	Goto Spawnloop
  Use:
	TNT1 A 1 ACS_NamedExecutealways("HealthCrateUse",0)
	Stop 
 }
}

ACTOR UtilityCrate : CratesParent
{
 Inventory.PickupMessage "Random Utility Crate"
 Tag "Random Utility Crate"
 Inventory.Icon "UYCTC0"
 States
 {
  Spawn:
 	UYCT A 0 NoDelay A_JumpIf(ACS_NamedExecuteWithResult("TTKGetCVar",55,2) != 0,"Remove")
	UYCT A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,125)
	Goto Spawnloop
  Use:
	TNT1 A 1 ACS_NamedExecutealways("UtilityCrateUse",0)
	Stop 
 }
}

ACTOR SuperCrate : CratesParent
{
 Inventory.UseSound "SuperCrate/use"
 Inventory.PickupMessage "Super Crate. Spawns rare items, Lucky you!"
 Tag "Super Crate"
 Inventory.Icon "SHCTP0"
 States
 {
  Spawn:
 	SHCT A 0 NoDelay A_JumpIf(ACS_NamedExecuteWithResult("TTKGetCVar",55,2) != 0,"Remove")
	TNT1 A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,3,4)
	TNT1 A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,3,126)
	TNT1 A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,127,128)
	TNT1 A 0 ACS_NamedExecuteAlways("SpawnEffectsOnItem",0,129,130)
	Goto Spawnloop
  Spawnloop:
	SHCT ABCDEFGHIJK 12 Bright
	Loop
  Use:
	TNT1 A 0 A_Jump(256,"RandomPack","2XRandomPack","2XRandomPack","RandomPack","3XRandomPack","4XRandomPack","RandomPack","RandomPack","RandomPack","Jackpot","3XRandomPack","RandomPack","RandomPack","3XRandomPack","3XRandomPack","RandomPack","2XRandomPack","2XRandomPack","2XRandomPack","4XRandomPack","RandomPack","RandomPack")
 RandomPack:
	TNT1 A 1 A_SpawnItemEx("SuperCrateActive1",0,0,16,8,0,4,0)
	Stop
 2XRandomPack:
	TNT1 A 0 A_Jump(10,"4XRandomPack")
	TNT1 A 1 A_SpawnItemEx("SuperCrateActive2",0,0,16,8,0,4,0)
	Stop
 3XRandomPack:
	TNT1 A 0 A_Jump(10,"Jackpot")
	TNT1 A 1 A_SpawnItemEx("SuperCrateActive3",0,0,16,8,0,4,0)
	Stop
 4XRandomPack:
	TNT1 A 0 A_Jump(10,"Jackpot")
	TNT1 A 1 A_SpawnItemEx("SuperCrateActive4",0,0,16,8,0,4,0)
	Stop
 Jackpot:
	TNT1 A 1 A_SpawnItemEx("SuperCrateActiveJackpot",0,0,16,8,0,4,0)
	TNT1 A 1 A_PlaySound("jackpot/other",7)
	Stop
 }
}

Actor SuperCrateActiveParent
{
 Scale 1.2
 +FLOORCLIP
 +NOBLOCKMAP
 +FRIENDLY
 +NOTELEPORT
 +THRUSPECIES
 +DONTHURTSPECIES
 +DONTHARMSPECIES
 +DONTHARMCLASS
 +FORCERADIUSDMG
 -COUNTKILL
 -SOLID
 -SHOOTABLE
 Species "Player"
 Damagetype "Normal"
 Obituary "%o got too close to %k's Super Crate."
 var int user_tics;
 var int user_loop;
 var int user_loopend;
 States
 {
  SpawnCont:
	SHCT ABCDEFGHIJK 1 Bright A_SetTics(user_tics)
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359)) 
	SHCT A 0 A_SetUserVar("user_loop",user_loop+1)
	SHCT A 0 A_JumpIf(user_loop > user_loopend,"PreDeath")
	Loop
  PreDeath:
	SHCT ABCDEFGHIJKABCDEFGHIJK 3 Bright
	SHCT ABCDEFGHIJKABCDEFGHIJK 2 Bright
	SHCT ABCDEFGHIJKABCDEFGHIJKABCDEFGHIJK 1 Bright
	SHCT A 5 A_Jump(256,"Death")
	Wait
  DeathCont:
	TNT1 AAA 0 A_SpawnItemEx("OrangeParticleSpawner",0,0,0,0,0,0,0,128)  
	TNT1 AAA 0 A_CustomMissile("SmokeFX3",0,0,random(0,360),2,random(0,360))
	TNT1 AAAAAA 0 A_CustomMissile("CFKaboom",0,0,random(0,360),2,random(0,360))
	TNT1 AAAA 0 A_SpawnItemEx("Debris",0,0,0,Random(4,-4),Random(4,-4),Random(4,8),0,128)
	TNT1 AA 0 A_SpawnItemEx("SmokeFX3",Random(-48,48),Random(-48,48),Random(8,96))
	TNT1 AAAAAA 2 A_SpawnItemEx("CFKaboom",Random(-48,48),Random(-48,48),Random(8,64))
	Stop
 }
}

Actor SuperCrateActive1: SuperCrateActiveParent
{
  States
  {
  Spawn:
	SHCT ABCDEFGHIJK 5
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359))
	SHCT A 0 A_SetUserVar("user_tics",5)
	SHCT A 0 A_SetUserVar("user_loop",0)
	SHCT A 0 A_SetUserVar("user_loopend",2)
	Goto SpawnCont
  Death:
  XDeath:
	TNT1 A 1 A_SpawnItemEx("SuperCrateExplosive1",0,0,18) 
	Goto DeathCont
  }
}

Actor SuperCrateExplosiveParent
{
 Projectile
 Speed 0
 Damage 0
 +FRIENDLY
 +NOTELEPORT
 +THRUSPECIES
 +DONTHURTSPECIES
 +DONTHARMSPECIES
 +DONTHARMCLASS
 +FORCERADIUSDMG
 Species "Player"
 DamageType "Explosion"
}

Actor SuperCrateExplosive1: SuperCrateExplosiveParent
{
 States
 {
  Spawn:
	TNT1 A 0
	TNT1 A 0 A_Stop
	TNT1 A 0 A_PlaySound("Weapons/RockLX")
	TNT1 A 0 A_NoGravity
	TNT1 A 0 A_SetTranslucent(0.75,1)	
	TNT1 A 0 A_ChangeFlag(OLDRADIUSDMG,1)
	TNT1 A 0 A_Explode(600,100,1,0,20)
	TNT1 A 0 Radius_Quake(2,24,0,15,0)
	TNT1 A 0 A_PlaySound("weapons/mineexplode",CHAN_BODY)
	TNT1 A 0 A_SpawnItemEx("OrangeParticleSpawner",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
	TNT1 AAAA 0 A_CustomMissile("Kaboom3",0,0,random(0,360),2,random(20,160))
	TNT1 AAAA 0 A_CustomMissile("SmokeFX2",0,0,random(0,360),2,random(20,160))
	TNT1 AAAA 0 A_SpawnItemEx("Debris",0,0,0,Random(4,-4),Random(4,-4),Random(4,8),0,SXF_CLIENTSIDE)
	TNT1 A 0 A_ChangeFlag(OLDRADIUSDMG,0)
	TNT1 A 1 A_SpawnItem("RocketEx")
	TNT1 A 0 A_Explode(200,162,1,0,10)
	TNT1 A 0 A_PlaySound("Explosion",CHAN_WEAPON)
	TNT1 A 0 A_PlaySound("FAREXPL",CHAN_VOICE)
	PRXD AABB 1 Bright A_SpawnItemEx("RocketEx",0,0,0,Random(4,-4),Random(4,-4),Random(4,8),0,SXF_CLIENTSIDE,0)
	PRXD CDEFGHIJKLMNOPQRSTU 2 Bright
	Stop
  }
}

Actor SuperCrateActive2: SuperCrateActiveParent
{
  States
  {
  Spawn:
	SHCT ABCDEFGHIJK 4
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359))
	SHCT A 0 A_SetUserVar("user_tics",4)
	SHCT A 0 A_SetUserVar("user_loop",0)
	SHCT A 0 A_SetUserVar("user_loopend",3)
	Goto SpawnCont
  Death:
  XDeath:
	TNT1 A 1 A_SpawnItemEx("SuperCrateExplosive2",0,0,18)
	Goto DeathCont
  }
}

Actor SuperCrateExplosive2: SuperCrateExplosiveParent
{
 States
 {
  Spawn:
	TNT1 A 0 A_PlaySound("BFlan/LightningExp",6)
	TNT1 AAAAAA 0 A_SpawnItemEx("GreenParticleSpawner", 0, 0, random(15,35), 0, 0, 0, 0, 128)  
	TNT1 AAAAAA 0 A_CustomMissile("SmokeFX", random(15,35), 0, random(0,360), 2, random(0,360))
	TNT1 AAAAAAAAA 0 A_CustomMissile("Kaboom11",random(15,35),0,random(0,360),2,random(0,360))
	TNT1 A 0 A_SpawnItem("PlayerDTBFGEx",0,-10)
	TNT1 A 0 Radius_Quake(20,8,0,12,0)
	BFE3 A 4 Bright A_Explode(400,400,1,0,200)
	TNT1 A 0 A_ChangeFlag("FORCERADIUSDMG",0)
	BFE3 B 4 Bright A_Explode(400,400,1,0,200)
	BFE3 CDEF 5 Bright A_Explode(100,800,0,0,200)
	Stop
 }
}

Actor SuperCrateActive3: SuperCrateActiveParent
{
  States
  {
  Spawn:
	SHCT ABCDEFGHIJK 3
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359))
	SHCT A 0 A_SetUserVar("user_tics",3)
	SHCT A 0 A_SetUserVar("user_loop",0)
	SHCT A 0 A_SetUserVar("user_loopend",4)
	Goto SpawnCont
  Death:
  XDeath:
	TNT1 A 0 A_Scream
	TNT1 A 0 A_Explode(128,1024,0)
	TNT1 A 0 A_Explode(460,640,0)
	TNT1 A 0 A_Explode(618,256,0)
	TNT1 A 1 A_SpawnItemEx("SuperCrateExplosive3",0,0,18)
	Goto DeathCont
 }
}

Actor SuperCrateExplosive3: SuperCrateExplosiveParent
{
 +EXTREMEDEATH
 +SPAWNSOUNDSOURCE
 DamageType "PlayerDevBall"
 var int user_loop;
 States
 {
  Spawn:
	TNT1 A 0 NoDelay A_SetTranslucent(0.75,1)
	TNT1 AAA 0 A_StopSoundEx("Voice")
	TNT1 A 0 Radius_Quake(20,12,0,12,0)
	TNT1 A 0 A_PlaySound("weapons/dtech10kexplode",6)
	TNT1 A 0 A_SpawnItemEx("DevastatorShockWave2",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,0,0)
	TNT1 A 0 A_SpawnItem("RedDTBFGEx",0,-10)
	TNT1 A 0 A_SetUserVar("user_loop",0)
  SpawnLoop:
	CRE9 D 0 A_CustomMissile("PlayerDevastatorBall2",0,0,18*user_loop,CMF_AIMDIRECTION|CMF_TRACKOWNER)
	TNT1 A 0 A_SetUserVar("user_loop",user_loop+1)
	TNT1 A 0 A_JumpIf(user_loop < 20,"SpawnLoop")
	CRE9 AAAAAABBBBBBCCCCCCDDDDDD 1 A_CustomMissile("KaboomDevastator22",0,0,random(0,360),CMF_AIMDIRECTION,random(0,360))
	CRE9 EF 6 Bright
	TNT1 A 35
	Stop
 }
}

Actor SuperCrateActive4: SuperCrateActiveParent
{
  DeathSound "BFG9K/Explode"
  States
  {
  Spawn:
	SHCT ABCDEFGHIJK 2
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359))
	SHCT A 0 A_SetUserVar("user_tics",2)
	SHCT A 0 A_SetUserVar("user_loop",0)
	SHCT A 0 A_SetUserVar("user_loopend",5)
	Goto SpawnCont
  Death:
  XDeath:
	TNT1 A 1 A_SpawnItemEx("SuperCrateExplosive4",0,0,18)
	Goto DeathCont
 }
}

Actor SuperCrateExplosive4: SuperCrateExplosiveParent
{
  var int user_loop;
  var int user_loop2;
 States
 {
  Spawn:
	TNT1 A 0
	TNT1 A 0 A_PlaySound("BFG9K/Explode",6)
	TNT1 A 0 Radius_Quake(15,20,0,20,0)
	TNT1 A 0 A_SpawnItemEx("BFG2704Ex",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_SpawnItemEx("PlayerDTBFGEx",0,0,-10,0,0,0,0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 AA 0 A_Explode(176,176,0,0)
  SpawnLoop:
	TNT1 A 6
	TNT1 A 0 A_SetUserVar("user_loop2",0)
  SpawnLoop2:
	TNT1 A 0 A_CustomMissile("2704Ball",0,0,(user_loop2 * 36) + user_loop,CMF_AIMDIRECTION|CMF_TRACKOWNER,frandom(-90,90))
	TNT1 A 0 A_CustomMissile("2704Ball2",0,0,(user_loop2 * 36) + user_loop+1,CMF_AIMDIRECTION|CMF_TRACKOWNER,frandom(-90,90))
	TNT1 A 0 A_SetUserVar("user_loop2", user_loop2 + 1)
	TNT1 A 0 A_JumpIf(user_loop2 == 10,2)
	TNT1 A 0 A_Jump(256,"SpawnLoop2")
	TNT1 A 0 A_SetUserVar("user_loop", user_loop + 2)
	TNT1 A 0 A_JumpIf(user_loop < 5,"SpawnLoop")
	TNT1 A 6
	TNT1 A 0 A_SetUserVar("user_loop",0)
  SpawnLoop3:
	TNT1 A 0 A_CustomMissile("2704Ball",0,0,(user_loop * 36) + random(-10,10),CMF_AIMDIRECTION|CMF_TRACKOWNER,frandom(-90,90))
	TNT1 A 0 A_CustomMissile("2704Ball2",0,0,(user_loop * 36) + random(-10,10),CMF_AIMDIRECTION|CMF_TRACKOWNER,random(-90,90))
	TNT1 A 0 A_SetUserVar("user_loop", user_loop + 1)
	TNT1 A 0 A_JumpIf(user_loop >= 10,2)
	TNT1 A 0 A_Jump(256,"SpawnLoop3")
	TNT1 AA 6
	Stop
 }
}

Actor SuperCrateActiveJackpot: SuperCrateActiveParent
{
  Obituary "%o got too close to %k's Super Crate."
  DeathSound "weapons/hellex"
  States
  {
  Spawn:
	SHCT ABCDEFGHIJK 1
	SHCT A 0 A_PlaySound("Weapons/ProxFire")
	SHCT A 0 A_SpawnItemEx ("DoRandom",0,0,24,random(3,14),0,random(2,12),random(0,359))
	SHCT A 0 A_SetUserVar("user_tics",1)
	SHCT A 0 A_SetUserVar("user_loop",0)
	SHCT A 0 A_SetUserVar("user_loopend",9)
	Goto SpawnCont
  Death:
  XDeath:
	TNT1 A 1 A_SpawnItemEx("SuperCrateExplosiveJackpot",0,0,18)
	Goto DeathCont
 }
}

Actor SuperCrateExplosiveJackpot: SuperCrateExplosiveParent
{
 States
 {
  Spawn:
	TNT1 A 0 NoDelay Radius_Quake(15,20,0,20,0)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,0,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,45,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,90,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,135,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,180,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,225,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,270,6)
	HFBA D 0 A_CustomMissile("PFuelExplosion01",0,0,315,6)
	HFBA D 0 A_Mushroom("PlayerMushroomFireballs",8)
	TNT1 A 0 A_Explode(5000,486)
	HFBA DEFGHIJKLMN 1 BRIGHT 
	TNT1 A 0 A_SpawnItemEx("PyroShotEx",0,0,0,0,0,0,0)
	Stop
 }
}

Actor DoRandom
{
 Radius 20
 Height 32
 Scale 0.3
 -SOLID
 States
 {
  Spawn:
	SUPC AABBCC 1 Bright A_CheckFloor("Done")
	Loop
  Done:
	SUPC Z 2 ACS_NamedExecuteAlways("CrateDoRandom")
	Stop
  }
}