ACTOR DisasterBarrel : SwitchingDecoration replaces ExplosiveBarrel
{
  Health 20
  Radius 10
  Height 42
  DeathHeight 42
  Mass 50
  Scale 0.36
  +SOLID
  +SHOOTABLE
  +NOBLOOD
  -PUSHABLE
  +ACTIVATEMCROSS
  +DONTGIB
  +NOICEDEATH
  +OLDRADIUSDMG
  +DONTTHRUST
  Activation THINGSPEC_Activate | THINGSPEC_Switch | THINGSPEC_Default | THINGSPEC_ThingTargets
  +USESPECIAL 
  Painchance "BarrelPunch", 256
  Painchance "Melee", 256
  Painchance "Bat", 156
  Painchance "Kick", 256
  Painchance "ExtremePunches", 256
  DamageFactor "Melee", 0.1
  DamageFactor "BarrelPunch", 0.0
  DamageFactor "Bat", 0.1
  DamageFactor "Kick", 0.1
  DamageFactor "Bullet", 0.5
  DamageFactor "ExtremePunches", 0.1
  DamageFactor "Explosion", 2.5
  DamageType "Explosion"
  Obituary "%o was sliced up by shrapnel and hellfire." 
  DeathSound "SMTXPL"
  Var Int User_BarrelCountdown;
  Tag "Explosive Barrel"
  States
  {
	NoPickup:
	   	BXRL A 1 ThrustThingZ(0,10,0,1)
	    BXRL G 0 A_PlaySound("AKBARPN")
		Goto Spawn
  Spawn:
    BXRL A 0 A_JumpIfHealthLower(15,"Wounded")
    BXRL A 6
    Loop
  Pain.Melee:
  Pain.Kick:
  Pain.Bat:
  Pain.BarrelPunch:
  Pain.ExtremePunches:
	TNT1 A 0 A_PlaySound("AKBARPN")
    TNT1 A 0 A_FaceTarget
	TNT1 A 0 HealThing(100)
	TNT1 A 0 ThrustThing(angle*256/360+128, 5, 0, 0)
	TNT1 A 0 ThrustThingZ(0,10,0,1)
    BXRL A 0 A_JumpIfInventory("BarrelWounded4",1,"Wounded4")
    BXRL A 0 A_JumpIfInventory("BarrelWounded3",1,"Wounded3")
    BXRL A 0 A_JumpIfInventory("BarrelWounded2",1,"Wounded2")
    BXRL A 0 A_JumpIfInventory("BarrelWounded1",1,"Wounded1")
    Goto Spawn
   Wounded:
    TNT1 A 0 A_ChangeFlag("USESPECIAL",0)
 	TNT1 A 0 A_PlaySound("AKBARWD")
    TNT1 A 0 A_Jump(256,"Wounded1","Wounded2","Wounded3","Wounded4")
	Goto Wounded1
   Wounded1:
     BXRL A 0 A_GiveInventory("BarrelWounded1",1)
     BXRL A 1 { A_SpawnItemEx("OilBarrelSmoke",random(-8,-3),random(-3,3),random(35,40),0,1,2,0,0,0); A_SetUserVar("User_BarrelCountdown",User_BarrelCountdown+1); }
     BXRL A 1 
	{ A_SpawnItemEx("OilBarrelSmoke",random(-8,-3),random(-3,3),random(35,40),0,1,2,0,0,0);
    If(User_BarrelCountdown >= 100)
    { A_Die("Explosive"); Return A_Jump(256,"Death"); }
	Return State(""); }
    Loop
   Wounded2:
    BXRL A 0 A_GiveInventory("BarrelWounded2",1)
    BXRL A 1 { A_SpawnItemEx("OilLiquidSmoke",random(-8,-3),random(-3,3),random(25,30),-7,0,0,0,0,0); A_SetUserVar("User_BarrelCountdown",User_BarrelCountdown+1); }
    BXRL A 1 
	{ A_SpawnItemEx("OilLiquidSmoke",random(-8,-3),random(-3,3),random(25,30),-7,0,0,0,0,0);
    If(User_BarrelCountdown >= 100)
    { A_Die("Explosive"); Return A_Jump(256,"Death"); }
	Return State(""); }
    Loop
   Wounded3:
    BXRL A 0 A_GiveInventory("BarrelWounded3",1)
    BXRL A 1 { A_SpawnItemEx("OilLiquidSmoke",random(8,3),random(-3,3),random(15,20),7,0,0,0,0,0); A_SetUserVar("User_BarrelCountdown",User_BarrelCountdown+1); }
    BXRL A 1 
	{ A_SpawnItemEx("OilLiquidSmoke",random(8,3),random(-3,3),random(15,20),7,0,0,0,0,0);
    If(User_BarrelCountdown >= 100)
    { A_Die("Explosive"); Return A_Jump(256,"Death"); }
	Return State(""); }
    Loop
   Wounded4:
    BXRL A 0 A_GiveInventory("BarrelWounded4",1)
    BXRL A 1 { A_SpawnItemEx("OilLiquidSmoke",random(-8,-3),random(-3,3),random(35,40),0,1,2,0,0,0); A_SetUserVar("User_BarrelCountdown",User_BarrelCountdown+1); }
    BXRL A 1 
	{ A_SpawnItemEx("OilLiquidSmoke",random(-8,-3),random(-3,3),random(35,40),0,1,2,0,0,0);
    If(User_BarrelCountdown >= 100)
    { A_Die("Explosive"); Return A_Jump(256,"Death"); }
	Return State(""); }
    Loop
  Death:
    TNT1 A 0 A_ChangeFlag("USESPECIAL",0)
    TNT1 A 0 A_ChangeFlag("SHOOTABLE",0)
	TNT1 A 0 A_ChangeFlag("SOLID",0)
	PTNT I 0 A_AlertMonsters
	PTNT I 0 A_Scream
	TNT1 A 0 A_SpawnItemEx("BaseFlash", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
 	TNT1 A 0 A_SpawnItemEx ("BarrelBoom",0,0,13,0,0,0,0,SXF_NOCHECKPOSITION,0)
	FLFR M 0 bright A_SpawnItemEx("BaseBlast", 0, 0, 0, 0, 0, 2, 0, SXF_NOCHECKPOSITION|SXF_CLIENTSIDE)
    TNT1 AAAAAAAAAAA 0 A_CustomMissile("DarkSmoke",0,0,Random(0,360),2,Random(0,360))
    FLFR MMM 0 bright { A_CustomMissile ("STXExplode3", 0, 0, random (0, 360), 2, random (20, 60));}
    FLFR MMMM 0 bright { A_CustomMissile ("STXExplode1", 0, 0, random (0, 360), 2, random (60, 90));}
    FLFR MM 0 bright { A_CustomMissile ("STXExplode2", 0, 0, random (0, 360), 2, random (80, 90));}
    TNT1 EEEEEEEEEEE 1 A_Quake(15,18,0,3200,"none")
    BXRL BBBBBBBBBBBB 1 A_Quake(15,18,0,3200,"none")
	BXRL B -1
    Stop
Death.Quietly:
	FX08 B 0
	Stop
	Active: 	
	Inactive:
	    BXRL A 0 A_JumpIfInTargetInventory("SheKick",1,"NoPickup")
	    BXRL A 0 A_JumpIfInTargetInventory("ScopeOn",1,"NoPickup")
	    BXRL A 0 A_JumpIfInTargetInventory("ReloadingShotty",1,"NoPickup")
        BXRL A 0 A_JumpIfInTargetInventory("SheReloads",1,"NoPickup")
        BXRL A 0 A_JumpIfInTargetInventory("HQIntro",1,"NoPickup")
		BXRL A 0 A_JumpIfInTargetInventory("HQGrabbedBarrel",1,"NoPickup")
		BXRL A 0 A_JumpIfInTargetInventory("RageMode",1,"NoPickup")
		BXRL A 3 ThrustThingZ(0,10,0,1)
		BXRL A 0 A_FaceTarget
	    BXRL A 0 A_PlaySound("AKBARPN")
		BXRL A 1 A_GiveToTarget("BarrelGib")
		TNT1 A 35 A_ChangeFlag("NOINTERACTION", true)
		TNT1 A 0 A_Die("Quietly")
		Stop
  }
}
 


Actor BarrelBoom
{
   Radius 2
   Height 2
  +MISSILE
  +NOCLIP
  States
  {
  Spawn:
    TNT1 A 0
	TNT1 D 0 BRIGHT A_Explode(150,150)
	PTNT I 0 A_RadiusThrust(300, 160, RTF_AFFECTSOURCE|RTF_THRUSTZ)
    Stop
  }
}
 
ACTOR OilBarrelSmoke : DisasterShotSmoke
{
	Scale  0.700
	States
	{
    Spawn:
		NULL A 1 A_SetTranslucent(0.30)
        TNT1 A 1 A_ChangeFlag("SPRITEFLIP", random(0,1))
		SWME ABCDEFGHIJ 2 BRIGHT { A_FadeOut(0.05,1); A_SetRoll(Roll+frandom(8,25),SPF_INTERPOLATE); }
		TNT1 A 0
		Stop
    }
}

ACTOR OilLiquidSmoke
{
    Radius 3
    Height 3
    Speed 2
	Mass 1
    +NOBLOCKMAP
	+MISSILE
    +NOTELEPORT
    +MOVEWITHSECTOR
    +CLIENTSIDEONLY
    +BLOODLESSIMPACT 
	+DONTSPLASH
	+FLOORCLIP
	+FORCEXYBILLBOARD
	-SPRITEFLIP
	+ROLLSPRITE
	+INTERPOLATEANGLES
	RenderStyle Add
	Scale  0.300
	Gravity 0.9
    States
    {
    Spawn:
		TNT1 A 1 A_ChangeFlag("SPRITEFLIP", random(0,1))
		FLFR ABCDEFGHI 1 BRIGHT { A_FadeOut(0.05,1); A_SetRoll(Roll+frandom(8,25),SPF_INTERPOLATE); }
		stop
    }
}

Actor BarrelWounded1 : Inventory { Inventory.MaxAmount 1 }
Actor BarrelWounded2 : Inventory { Inventory.MaxAmount 1 }
Actor BarrelWounded3 : Inventory { Inventory.MaxAmount 1 }
Actor BarrelWounded4 : Inventory { Inventory.MaxAmount 1 }