
/*

CRATES

*/

ACTOR openpass : Inventory{}

ACTOR Cratekey : CustomInventory 30005
{
  Inventory.PickupSound "weapons/casing"
  Inventory.PickupMessage ""
  Inventory.Icon "KEYCB0"
  +Inventory.Invbar
  +CANNOTPUSH
  +FloorClip
  Inventory.Amount 1
  Inventory.MaxAmount 100
  Inventory.Interhubamount 100
  Scale 0.2
  States
  {
  Spawn:
	TNT1 A 0
	
	
	Stay:
    KEYC A -1
	
	Pickup:
	TNT1 A 0 A_print("$GOTCRATEKEY")
	Stop
	
  Use:
	TNT1 A 0 A_CheckProximity("Open","closedcrate",90,1,CPXF_CHECKSIGHT)
	TNT1 A 0 A_print("See anything with a lock on it somewhere?")
	fail

  Open:
	TNT1 A 0
	TNT1 A 0 A_radiusgive("openpass",120, RGF_OBJECTS | RGF_MONSTERS,1,"ClosedCrate","none", 0,1)
	fail
  }
}


ACTOR ClosedCrate : switchabledecoration 30006
{
	height 19
	radius 20
  +noblood
  +shootable
  +ismonster
  +NEVERTARGET
  +LOOKALLAROUND
  -thruactors
  +solid
  +slidesonwalls
  +FloorClip
  +usespecial
  mass 1000
  Painchance "kick", 255
  Health 700
  DamageFactor "Stealth", 0.0 DamageFactor "Use", 0.0
  damagefactor "headkick", 0.0 DamageFactor "bleedingarmor", 0.0 DamageFactor "bleeding", 0.0
  damagefactor "CrushedBodies", 0.0
  damagefactor "Melee", 0.2
  damagefactor "Kick", 0.2
  damagefactor "Extremepunches", 0.6
  damagefactor "Chainsaw", 1.5
  damagefactor "Chaincut", 1.5
  damagefactor "Saw", 1.5
  damagefactor "Cut", 1.5
  damagefactor "shotgun", 2.5
  damagefactor "ssg", 2.5
  damagefactor "bullet", 2.0
  damagefactor "ExplosiveImpact", 4.0
  Activation THINGSPEC_switch | THINGSPEC_NoDeathSpecial 
  Scale 0.6
  TAG "Supply Crate"
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 A 1 A_SetAngle(random(180,-180))
	
	Stay:
    CHCL A 1 A_look
	"####" "#" 0 A_JumpifInventory("openpass",1,"Open")
	loop
  See:
	CHCL A 1 A_JumpifInventory("openpass",1,"Open")
	loop
	
	Pain.kick:
	CHCL A 1 A_FaceTarget
	"####" "#" 0 ThrustThing(angle*256/360+128, 2, 0, 0)
	goto stay
	
   Inactive:
  Active:
	CHCL A 1 A_JumpifINTARGETinventory("cratekey",1,"Open")
	"####" "#" 0 A_print("you need a key to open it",1)
	Goto Stay
	
Open:
    CHCL A 1 
	"####" "#" 0 A_takefromtarget("cratekey",1)
	"####" "#" 0 A_FaceTarget
	"####" "#" 0 A_SpawnItem("OpenCrate", 0)
	Stop
	
	Death:
	"####" "#" 0 A_SpawnItem("BustedCrate", 0)
	Stop
	
	DEATH.EXPLOSIVEIMPACT:
	"####" "#" 0
	"####" "#" 0 A_JUMP(100,2)
	"####" "#" 0 A_SpawnItem("BustedCrate", 0)
	Stop
	
	death.stomp:
	death.trample:
	death.crush:
	death.crushedbodies:
	"####" "#" 0 A_print("\cM The crate was completely destroyed along with its content!")
	"####" "#" 0 A_SpawnItem("DestroyedCrate", 0)
	"####" "#" 0
	Stop	
  }
}
	
ACTOR OpenCrate
{
  +FloorClip
  +LOOKALLAROUND
  +slidesonwalls
  +thruactors
  +pushable
  height 17
  radius 30
  Scale 0.6
  States
  {

  Spawn:
	CHCL AA 10
    CHCL AAAAAAA 1 A_look
	loop
	
  See:
	CHCL A 1 A_Playsound("lootbox/open")
	CHCL A 1 A_FaceTarget
	CHOP A 1 A_Jump(255,"Survivalbox","SoldierBox","BattleBox","AmmoBox","MedBox","ScoutBox","RampageBox","TankBox","StalkerBox","SapperBox","SupportBox", "ScienceBox", "Sciencebox")
	loop

  Survivalbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cGSURVIVAL \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Armorloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("repairdevice",0,0,0,1,0,7,0,0,100)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0)
	goto rest
  Soldierbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG SOLDIER \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Armorloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Weaponloot",0,0,0,1,0,7,0)
	goto rest
  Battlebox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG BATTLE \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Weaponloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0)
	goto rest
  Ammobox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG AMMUNITIONS \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0)
	goto rest  
  Medbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG MEDICAL SUPPLIES \cU crate was opened!")
 	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,2,2,7,0)
	goto rest 
  Scoutbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG SCOUT \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Inventoryloot",0,0,0,1,0,7)
	CHOP A 1 A_SpawnItemEx("Staminastim",0,0,0,1,0,7)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0)
	
	goto rest  
  Rampagebox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG RAMPAGE \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Armorloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("rampagestim",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0)
	goto rest
  Tankbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG JUGGERNAUGHT \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Armorloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,2,2,7,0)
	goto rest
  Stalkerbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG STALKER \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Armorhelmet",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("VODKA",0,0,0,3,0,7,0)
	CHOP A 1 A_SpawnItemEx("hevsuit",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("infrared2",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("flarebox",0,0,0,2,2,7,0)
	CHOP A 1 A_SpawnItemEx("ShotgunSpawner",0,0,0,2,2,7,0)
	PLAY M 0 A_SpawnItemEx ("ARTIFACT_CONTAINER",0,0,0,3,0,7,0)
	goto rest
  Sapperbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG SAPPER \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("proxbomb",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("proxbomb",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("repairdevice",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("survivalkitpickup",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("sentrybox",0,0,0,2,2,7,0)
	goto rest
  Supportbox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG SUPPORT \cU crate was opened!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Inventoryloot",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Inventoryloot",0,0,0,1,0,7,0)
	CHOP A 1 A_SpawnItemEx("Inventoryloot",0,0,0,2,2,7,0)
	goto rest
  Sciencebox:
	CHOP A 1
	CHOP A 1 A_printbold("\cUThe \cG SCIENCE \cU crate was opened!")
	CHOP A 5
	CHOP AAA 1 A_SpawnItemEx("chemspawner",0,0,0,2,-2,7,0)
	CHOP AAAAA 1 A_SpawnItemEx("emptyvial",0,0,0,random(1,2),0,7,0)
	CHOP AAA 1 A_SpawnItemEx("electronicparts",0,0,0,random(1,2),0,7,0)
	CHOP A 1 A_SpawnItemEx("drugspawner",0,0,0,2,2,7,0)
	goto rest
  Rest:
   CHOP A 1
   loop
  }
}

ACTOR OPENCrate2 : OPENCRATE
{SCALE 0.5 }

ACTOR BustedCrate
{
  +FloorClip
  +LOOKALLAROUND
  +pushable
  Scale 0.6
  States
  {

  Spawn:
	CHCL A 1
    CHCL AAAAAAA 1 A_look
	TNT1 A 1 A_JUMP(80,"DESTROY")
	loop
	
  See:
	CHCL A 1 A_Playsound("lootbox/open")
	CHCL A 1 A_FaceTarget
	TNT1 A 1 A_JUMP(80,"DESTROY")
	CHOP A 1 A_Jump(255,"MaybeAmmo", "Maybehealth", "Maybemix")
	loop
	
	DESTROY:
	TNT1 A 0 A_FaceTarget
	TNT1 A 0 A_print("\cM The crate was completely destroyed along with its content!")
	TNT1 A 0 A_SpawnItem("DESTROYEDCrate", 0)
	TNT1 A 1
	STOP
	

  Maybeammo:
	CHOP A 1 A_print("\cM Its original content was damaged!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("PoorAmmo",0,0,0,2,-2,7,0)
	CHOP A 1 A_SpawnItemEx("Ammoloot",0,0,0,2,2,7,0,0,210)
	CHOP A 1 A_SpawnItemEx("PoorAmmo",0,0,0,2,4,7,0)
	goto rest
  Maybehealth:
	CHOP A 1  A_print("\cM Its original content was damaged!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("healthplus",0,0,0,2,-2,7,0,0, 90)
	CHOP A 1 A_SpawnItemEx("healthplus",0,0,0,2,4,7,0,0, 90)
	CHOP A 1 A_SpawnItemEx("Healloot",0,0,0,1,0,7,0,0,215)
	CHOP A 1 A_SpawnItemEx("bandages",0,0,0,2,2,7,0,0,130)
	goto rest
  Maybemix:
	CHOP A 1  A_print("\cM Its original content was damaged!")
	CHOP A 5
	CHOP A 1 A_SpawnItemEx("Armorloot",0,0,0,2,-2,7,0,0,180)
	CHOP A 1 A_SpawnItemEx("Weaponloot",0,0,0,1,0,7,0,0,200)
	CHOP A 1 A_SpawnItemEx("Inventoryloot",0,0,0,2,2,7,0,0,180)
	goto rest
	
  Rest:
   CHOP A 1
   loop
}}

ACTOR DestroyedCrate
{
  +FloorClip
  +pushable
  Scale 0.85
  States
  {

  Spawn:
	CHCL A 1
	CHDD ABCDEF 4
	goto rest
    
	Rest:
	CHDD F 0
	CHDD F 1 A_print("\cM The crate was completely destroyed along with its content!")
	CHDD F -1
	stop
}}

ACTOR Cratekill : CustomInventory // REWARD CRATE
{
  Inventory.PickupSound "weapons/casing2"
  Inventory.PickupMessage ""
  Inventory.Icon CHCLB0
  +Inventory.Invbar
  +CANNOTPUSH
  +FloorClip
  +undroppable
  SCALE 0.5
  Inventory.Amount 1
  Inventory.MaxAmount 2
  Inventory.Interhubamount 1
   States
   {
   Spawn:
    CHCL A 1
	Stop
	
   Use:
    CHOP A 1
	TNT1 A 0 A_FaceTarget
	TNT1 A 0 A_SpawnItemex("OpenCrate2", 80, 0, 0, 0, 0,0,0)
	Stop
  }
}
  
  

/*

ALTARS

*/

ACTOR daggerpass : Inventory
{
}

ACTOR Dagger : CustomInventory
{
  Inventory.PickupSound "weapons/casing2"
  Inventory.PickupMessage "You picked up a Ritual Dagger"
  Inventory.Icon DAGGB0
  +Inventory.Invbar
  +CANNOTPUSH
  +FloorClip
  Inventory.Amount 1
  Inventory.MaxAmount 2
  Inventory.Interhubamount 2
  Scale 0.1
  States
  {
  Spawn:
    DAGG A -1
	loop
  Use:
	TNT1 A 0
	TNT1 A 0 A_CheckProximity("daggerpass","heartaltar",100,1,CPXF_CHECKSIGHT)
	TNT1 A 0 A_print("Looks like something that should be used on a sacrifical altar.")
	Goto giveitback
  Giveitback:
	TNT1 A 0
	TNT1 A 0 A_GiveInventory("dagger",1)
	Stop
  daggerpass:
	TNT1 A 0
	TNT1 A 0 A_GiveInventory("daggerpass",1)
	Stop
  }
}

ACTOR AltarColumn Replaces ShortGreenColumn
{
	Game Doom
	Radius 16
	Height 40
	ProjectilePassHeight -16
	+SOLID
	+USESPECIAL
	+SHOOTABLE
	+NOBLOOD
	+NOTARGET
	+INVULNERABLE
	Mass 999999
	States
	{
	Spawn:
		COL2 A 0
		TNT1 A 0 A_checkproximity("Ritual", "demonheart", 30, 1)
		COL2 A 0
		TNT1 A 0 A_JumpIfInventory("MarkForDeletion", 1, "Disappear")
		COL2 A 1
		loop

 Ritual:
    COL2 A 1 
	TNT1 A 0 A_FaceTarget
	COL2 AA 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,2,0,5,0)
	COL2 AA 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,-2,0,5,0)
	TNT1 A 1 A_SpawnItem("HeartAltar",0)
	Stop
	
	Disappear:
		TNT1 A 0
		TNT1 A 0 A_NoBlocking
		Stop	
	}
}

ACTOR HeartAltar Replaces HeartColumn  
{
	Game Doom
	Radius 16
	Height 45
	ProjectilePassHeight -16
	+SOLID
	+USESPECIAL
	+SHOOTABLE
	+NOBLOOD
	+NOTARGET
	+INVULNERABLE
	Mass 999999
	States
	{
	Spawn:
		COL5 AB 14
		TNT1 A 0 A_JumpIfInventory("MarkForDeletion", 1, "Disappear")
	Live:
		COL5 AB 14
		COL5 AB 1 A_look
		Loop
		
 See:
	COL5 AB 2 A_JumpifCloser(40,"Needdagger")
	COL5 AB 14 A_JumpifCloser(100,"daggercheck")
	loop
	
  Needdagger:
	COL5 AB 5 A_print("This heart is calling you...", 1)
	COL5 ABABABABABAB 3
	Goto See
  
  daggercheck:
	COL5 A 0 
	COL5 A 1 A_JumpifintargetInventory("daggerpass",1,"sacrifice")
	Goto See

  Sacrifice:
    COL5 A 1 
	COL5 A 1 A_takefromtarget("daggerpass",1)
	TNT1 A 0 A_FaceTarget
	COL5 CC 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,2,0,5,0)
	COL5 CC 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,-2,0,5,0)
	TNT1 A 1 A_SpawnItem("DaggerAltar",0)
	Stop

	Disappear:
		TNT1 A 0
		TNT1 A 0 A_NoBlocking
		Stop
	}
}

ACTOR DaggerAltar
{
	Game Doom
	Radius 16
	Height 40
	ProjectilePassHeight -16
	+SOLID
	+USESPECIAL
	+SHOOTABLE
	+NOBLOOD
	+NOTARGET
	+INVULNERABLE
	Mass 999999
  States
  {
  Spawn:
    COL5 C 1
	COL5 CC 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,0,1,5,0)
	COL5 CC 5 A_SpawnItemex("Brutal_LiquidBlood3",0,0,30,0,-1,5,0)
    COL5 C 1 A_Jump(125,"Unmaker","Time","Berserk","Demon")
	COL5 C 1 A_Jump(255,"Vampire","Regen")
	Stop

  Unmaker:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("Unmaker",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Time:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("Timesphere",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Doom:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("allsphere",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Vampire:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("vampiresphere",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Berserk:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("Summonrune",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Regen:
	COL5 C 1
	COL5 C 1 A_printbold("\cGA Sacrifice has been made!")
	COL5 C 5
	COL5 C 1 A_SpawnItemEx("Regensphere",0,0,50,0,0,0)
	COL5 C 20
	COL5 C 1 A_SpawnItemEx("SacrificeSpawn",50,0,50,0,0,0,0)
	goto rest
	
  Rest:
   COL5 C 1
   loop
   }
}

/// MONSTERSPAWNERS

actor SacrificeSpawn
{
    States
    {

	 Spawn:
		TNT1 A 1
		TNT1 A 1 A_jump(255, "Arch", "Cacos", "Baron", "Spider", "Mancubus", "Belphegor")
		TNT1 A 1
		Stop
		
	Arch:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("TehArchvile",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait
		
	Cacos:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("Cacodemon_",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait
		
	Baron:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("Baronofhell2",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait

	Spider:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("Cacodemon_",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait

	Mancubus:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("Mancubus",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait
		
	Belphegor:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("Belphegor2",-50,30,0,0,0,0,180,SXF_NOCHECKPOSITION)
		TNT1 A 1
		Wait
	}
}