ACTOR ExplosiveBarrelSpawner : RandomSpawner replaces ExplosiveBarrel
{
	DropItem PopBarrel 255 10
	DropItem Propane 255 1
}

//I sell propane and propane accesories.
ACTOR Propane : CustomInventory
{
  Health 40
  Radius 10
  Height 42
  Inventory.Amount 1
  Inventory.MaxAmount 10
  Inventory.InterHubAmount 10
  Inventory.PickupSound "Propane/Pick"
  Inventory.PickupMessage "Obtained a propane tank."
  Inventory.UseSound ""
  Inventory.Icon "ARTIPROP"
  DamageFactor Propane, 0.0
  +INVBAR
  +SOLID
  +SHOOTABLE
  +NOBLOOD
  +ACTIVATEMCROSS
  +DONTGIB
  +PUSHABLE
  +NOICEDEATH
  +FLOORCLIP
  Scale 0.9
  var int user_propanol;
  States
	{
	Spawn:
		PROP A 1
		Loop
	Use:
		TNT1 A 0 A_PlaySound("Flechette/Throw")
		PROP A 0 A_FireCustomMissile("PropaneSpawner",0,0,0,0,0,5)
		Stop
	Death:
		PROP A 0 A_SetUserVar("User_Propanol",random(65,70))
		PROP A 0 A_PlaySound("Propane/Leak")
		PROP A 0 A_SetAngle(frandom(0.0,360.0))
	DeathLoop:
		PROP A 0 A_SetUserVar("User_Propanol", User_Propanol - 1)
		//If it wasn't an inventory item, I'd just use user vars.
		PROP A 1 A_SpawnItemEx("PropaneGas",0,0,10,frandom(1.0,0.5),frandom(1.0,0.5),frandom(1.0,0.5),frandom(-5.0,5.0),SXF_CLIENTSIDE,32)
		PROP A 0 A_JumpIf(User_Propanol > 0, "DeathLoop")
	Death.Matriarch:
	Death.SuperShoelaces:
	Death.SuperCloseCombat:
		TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("BarrelParts",0,0,0,frandom(5.0,8.0),0,frandom(5.0,25.0),frandom(0.0,360.0),SXF_CLIENTSIDE,0) 
		TNT1 A 0 A_NoBlocking
		TNT1 A 0 A_SpawnItemEx("PropaneBlast",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		TNT1 A 1050 A_BarrelDestroy
		TNT1 A 5 A_Respawn
		Wait
	}
}

ACTOR PropaneLeak
{
	var int User_Lifespan;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetAngle(frandom(0.0,360.0))
		TNT1 A 0 A_SetUserVar("User_Lifespan",70)
	Main:
		
		TNT1 A 0 A_JumpIf(User_Lifespan <= 0, "Null")
		TNT1 A 1 A_SetUserVar("User_Lifespan", User_Lifespan - 1)
		Loop
	}
}

ACTOR PropaneGas
{
	+NOINTERACTION
	Renderstyle Add
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_ScaleVelocity(frandom(0.8,1.2))
		TNT1 A 0 A_FadeIn(frandom(0.1,0.2))
		TNT1 A 0 A_SetScale(frandom(0.035,0.025))
	FrameSetup:
		TNT1 A 0 A_Jump(256,"FrameA","FrameB","FrameC","FrameD")
	FrameA:
		DUST A 0
	FrameB:
		DUST B 0
	FrameC:
		DUST C 0
	FrameD:
		DUST D 0
	Main:
		"####" "#" 0 A_SetScale(ScaleX + frandom(0.00025,0.0005))
		"####" "#" 1 A_FadeOut(frandom(0.04,0.02))
		Loop
	}
}

ACTOR PropaneBlast
{
	+NOINTERACTION
	+EXTREMEDEATH
	DamageType Matriarch
	var int User_Lifespan;
	States
	{
	Spawn:
		TNT1 A 0 A_SetUserVar("User_Lifespan",14)
		TNT1 A 0 A_PlaySound("TNT/Explosion",5,0.9)
		TNT1 A 0 A_PlaySound("TNT/Add",7)
		TNT1 A 0 A_PlaySound("TNT/Far",6,0.8)
		TNT1 A 0 A_SpawnItemEx("TNTMain",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
		TNT1 A 0 A_Quake(3,55,0,768,"none")
		TNT1 A 0 A_Quake(7,55,0,384,"none")
		TNT1 A 0 A_Explode(200,364,0,1)
		TNT1 A 0 A_Explode(200,364,1,1)
		TNT1 A 0 A_ChangeFlag("EXTREMEDEATH",0)
	DeathLoop:
		TNT1 A 0 A_SetUserVar("User_Lifespan",User_Lifespan - 1)
		TNT1 A 4 A_Explode(30,364,1,1)
		TNT1 A 0 A_JumpIf(User_Lifespan <= 0, 1)
		Loop
		TNT1 A 6
		Stop
	}
}

ACTOR PropaneSpawner
{
	Radius 10
	Height 16
	Speed 20
	Damage 20
	Projectile
	DamageType Propane
	-NOGRAVITY
	+NOEXTREMEDEATH
	Gravity 0.8
	Scale 0.9
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_JumpIfInTargetInventory("PowerSuitToken",1,"SuperThrow")
		TNT1 A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,"SuperThrow")
		Goto Main
	SuperThrow:
		TNT1 A 0 A_ChangeFlag("NOEXTREMEDEATH",0)
		TNT1 A 0 A_ScaleVelocity(3.0)
	Main:
		PROP A 1
		Loop
	Death:
		PROP A 0 A_JumpIfInTargetInventory("PowerSuitToken",1,3)
		PROP A 0 A_JumpIfInTargetInventory("PowerBerserkDamage",1,2)
		PROP A 0 A_Jump(256,2)
		PROP A 0 A_Explode((200),16,0,0,16)
		PROP A 0 A_PlaySound("Propane/Hit")
		PROP A 0 A_SpawnItemEx("Propane",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

//Ze barrel, shamelessly stolen and modified from Xaser and Prophet's work. God bless 'em both, and curse me for eternity!
ACTOR PopBarrel : ExplosiveBarrel //replaces ExplosiveBarrel
{
  +PUSHABLE
  Translation "168:191=112:127", "16:47=112:127", "208:231=112:127"
  States
  {
  Spawn:
    BAR1 ABCDEFGHIJKLM 1 A_SpawnItemEx("BarrelParticle",frandom(10.0,-10.0),frandom(10.0,-10.0),26+frandom(2.0,-2.0),frandom(0.4,-0.4),frandom(0.4,-0.4),frandom(2.2,0.4),frandom(0.0,360.0),SXF_CLIENTSIDE,164)
    Loop
  Death:
	BEXP AB 5 Bright
	TNT1 A 0 A_PlaySound("Barrel/Exp") 
	TNT1 A 0 A_RadiusGive("GumpopItem",128,RGF_MONSTERS,1)
	TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("BarrelParts",0,0,0,random(2,3),0,random(6,9),random(0,360),160,0) 
    TNT1 A 0 A_SpawnItemEx("Gumpop_Impact",0,0,20,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 0 A_NoBlocking
	//TNT1 A 0 A_SpawnItemEx("Pop_Explosion",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
	BEXP C 5 Bright
	BEXP D 5 Bright A_SpawnItemEx("Pop_Explosion",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS,0)
	BEXP E 5 Bright
	TNT1 A 0 A_SpawnItemEx("BarrelShell",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
	TNT1 A 1050 A_BarrelDestroy
    	TNT1 A 5 A_Respawn
   	Wait
  }
}

ACTOR Pop_Explosion
{
  DamageType Acid
  +NOINTERACTION
  +NOGRAVITY
  +FORCERADIUSDMG
  Obituary "%o shouldn't touch that darned thing."
  States
  {
  Spawn:
  TNT1 A 1 NoDelay A_Explode(100,128)
  Stop
  }
}

ACTOR BarrelParts
{
   Radius 6
   Height 4
   Scale 0.3
   PROJECTILE
   -NOGRAVITY
   +FLOORCLIP
   BounceType Hexen
   BounceCount 6
   Scale 0.75
   States
   {
   Spawn:
      BARF A 0 A_Jump(128,1,2,3,4,5,6,7)
      BARF ABCDEFGHIJ 2
      Loop
   Death:
      TNT1 A 0 A_SpawnItemEx("BarrelShard",0,0,0,0,0,0,0,SXF_CLIENTSIDE,0)
      Stop
   }
}

ACTOR BarrelShard
{
   -NOGRAVITY
   +FLOORCLIP
   States
   {
   Spawn:
      BARF A 0 NoDelay A_Jump(256,"A","B","C","D","E","F","G","H","I","J")
   A:
      BARF A 0
      Goto Borf
   B:
      BARF B 0
      Goto Borf
   C:
      BARF C 0
      Goto Borf
   D:
      BARF D 0
      Goto Borf
   E:
      BARF E 0
      Goto Borf
   F:
      BARF F 0
      Goto Borf
   G:
      BARF G 0
      Goto Borf
   H:
      BARF H 0
      Goto Borf
   I:
      BARF I 0
      Goto Borf
   J:
      BARF J 0
   Borf:
      "####" "#" 210 A_CheckSight("Fadying")
      Loop
   Fadying:
      "####" "#" 1 A_FadeOut(0.1)
	  Wait
   }
}

ACTOR BarrelShell
{
	+FLOORCLIP
	-NOGRAVITY
	States
	{
	Spawn:
      		BARR Y 0
			"####" "#" 210 A_CheckSight("Fadying")
			Loop
	Fadying:
			"####" "#" 1 A_FadeOut(0.1)
			Wait
	}
}