ACTOR HQGrabbedBarrel : HQWeapon
{ 
    +NOAUTOAIM
    +INVENTORY.UNDROPPABLE
    +CHEATNOTWEAPON
	+WEAPON.NOALERT
	Weapon.SelectionOrder 15000
    Weapon.SlotNumber 1
	Scale 0.35
    Tag "Explosive Barrel"
	Obituary "%o caught a faceful of non-descript combustives."
	States 
	{  
	Ready: 
		PTTH ABCDEFGHI 1
		PTTH I 4
		PTTH HG 2
		PTTH F 3
		Goto TrueReady
	TrueReady: 
		PTTH E 1 A_WeaponReady(WRF_DisableSwitch|WRF_NoSwitch|WRF_ALLOWZOOM|WRF_ALLOWRELOAD)
		Loop 
	Deselect: 
        NULL A 0 A_JumpIf(health <= 0, "DyingExplode")
		TNT1 A 0 A_TakeInventory("HQGrabbedBarrel")	
		Stop
	DyingExplode:
	    TNT1 A 1
		Loop
	Select: 
		PTTH A 0 A_Raise
		Loop 
	Fire: 
        PTTH EFGHIJKL 1
		PTTH L 4
        PTTH A 0 A_CustomPunch (15,0,0,"SpaceCheck",65)
		PTTH H 2
		PTTH A 0 A_JumpIfInventory("NoFuckingSpaceJackass",1,"FireFailure")
		PTTH M 2
	    BATT G 0 A_Jump(128,2)
	    PTTH G 0 A_PlaySound("HQLEAP",CHAN_VOICE,0.9)
		PTTH N 1 A_PlayWeaponSound("SMTTHW")
        PTTH O 1 A_FireCustomMissile("FlyingBarrel",0,0,6,6) 
	    PTTH A 0 A_SetSpeed(1.8)
		PTTH P 1 A_TakeInventory("HQHasBarrel",99)
		PTTH Q 1
		TNT1 A 4
		TNT1 A 1 ACS_NamedExecute("BarrelStuff1",0)
		goto TrueReady
	FireFailure:
        PTTH E 1 A_TakeInventory("NoFuckingSpaceJackass",99)
		PTTH F 1 A_Recoil(5)
        PTTH GHI 1
		PTTH I 4
		PTTH IHGF 2
		Goto TrueReady
   AltFire:
        PTTH DCB 1
        PTTH A 0 A_CustomPunch (15,0,0,"SpaceCheck",65)
		PTTH A 1
		PTTH A 0 A_JumpIfInventory("NoFuckingSpaceJackass",1,"AltFailure")
	    PTTH A 0 A_SetSpeed(1.8)
		TNT1 A 1 A_PlaySound("AKBARPN", CHAN_7)
        TNT1 A 1 A_SpawnItemEX("DisasterBarrel",40,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0) 
		TNT1 A 1 A_TakeInventory("HQHasBarrel",99)
		TNT1 A 3
		TNT1 A 1 ACS_NamedExecute("BarrelStuff1",0)
		goto TrueReady
  AltFailure:	
        PTTH A 1 A_TakeInventory("NoFuckingSpaceJackass",99)
		PTTH A 1 A_Recoil(5)
        PTTH BCDEFGH 1
		PTTH GF 2
		Goto TrueReady
   Reload:
 	    TNT1 A 0 A_JumpIf(momZ > 0, "NOPE")
	    TNT1 A 0 A_JumpIf(momZ < 0, "NOPE")
        BTRO A 0 A_JumpIf(CountInv("ThrowableAmmo") < 2,"GrenadeDry")
        PTTH DCB 2
		PTTH A 1
        PTTH A 0 A_CustomPunch (0,0,0,"SpaceCheck",65)
		PTTH A 1
		PTTH A 0 A_JumpIfInventory("NoFuckingSpaceJackass",1,"AltFailure")
	    PTTJ A 0 ACS_NamedExecute("BarrelFreeze",0)
	    PTTH AA 1 A_SetPitch(Pitch +5.2)
		PTTH A 5
		PTTH U 1 A_PlaySound("AKBARBOM", CHAN_7)
		PTTH ARASATAUARASATAU 2
		PTTH RASATAUARASATAUA 2
		PTTH ARASATAUARASATAU 2
		PTTH RASATAUARASATAUA 2
		PTTH ARASATAUARASATAU 2
		PTTH RASATAUARASATAUA 2
		PTTH A 10
	    PTTH G 0 A_PlaySound("HQLEAP",CHAN_VOICE,0.9)
		TNT1 A 0 A_PlaySound("AKBARPN", CHAN_WEAPON)
        TNT1 A 1 A_SpawnItemEX("DisasterBarrelBomb",25,0,0,2,0,0) 
    	TNT1 AAAA 1 A_SetPitch(Pitch -3.2)
     	TNT1 A 0 ACS_NamedExecute("BarrelUnfreeze",0)
		TNT1 A 1 A_TakeInventory("HQHasBarrel",99)
		TNT1 A 0 A_TakeInventory("ThrowableAmmo",2,TIF_NOTAKEINFINITE)
		TNT1 A 3
		TNT1 A 1 ACS_NamedExecute("BarrelStuff1",0)
		goto TrueReady
   GrenadeDry:
        PTTH E 1 ACS_NamedExecute("NoGrenades", 0)
        Goto TrueReady
   NOPE:
	   PTTH E 1 A_WeaponReady(WRF_ALLOWZOOM|WRF_NOSECONDARY)
	   Goto TrueReady
		Zoom:
        PTTH EFGH 1
		TNT1 A 0 A_Overlay (-3, "QuickMelee")
        PTTH I 5
        PTTH HGFE 1
		Goto TrueReady
	Spawn:
		BXRL A 1 
		BXRL A 0 A_SpawnItem("DisasterBarrel")
		Stop
    }
}


ACTOR SpaceCheck
{
  +CLIENTSIDEONLY
  +NOEXTREMEDEATH
  +PUFFGETSOWNER
  +HITTRACER
  +PUFFONACTORS
  +THRUACTORS
  +FORCEPAIN
  RenderStyle Add
  ProjectileKickback 400
  Alpha 1
  Radius 1
  Height 1
  Scale 0.55
  Mass 5
  DamageType "Melee"
  States
  {
  Spawn:
    TNT1 A 0
	Stop
  Death:
   XDeath:
    TNT1 A 0 A_CheckFlag("OLDRADIUSDMG","Crash",AAPTR_TRACER)
 	TNT1 A 0 A_CheckFlag("NOBLOOD","Crash",AAPTR_TRACER)
    TNT1 A 0 A_Playsound ("AKBARPN",CHAN_AUTO,1.0)
	TNT1 A 0 A_GiveInventory("NoFuckingSpaceJackass", 1, AAPTR_TARGET)
	TNT1 A 0 A_GiveInventory ("KickThrust", 1, AAPTR_TRACER)
	Stop
  Crash:
    TNT1 A 0 A_CheckFloor("CrashFloor")
    TNT1 A 0 A_Playsound ("AKBARPN",CHAN_AUTO,1.0)
	TNT1 A 0 A_GiveInventory("NoFuckingSpaceJackass", 1, AAPTR_TARGET)
    TNT1 AAAAA 0 A_SpawnItemEx("DisasterShotSmoke",0,0,0,frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),0,160)
	Stop
	CrashFloor:
    TNT1 A 0 A_Playsound ("AKBARPN",CHAN_AUTO,1.0)
	TNT1 A 0 A_GiveInventory("NoFuckingSpaceJackass", 1, AAPTR_TARGET)
    TNT1 AAAAA 0 A_SpawnItemEx("DisasterShotSmoke",0,0,0,frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),0,160)
	Stop
  }
}


ACTOR BarrelGib : CustomInventory
{
	+INVENTORY.ALWAYSPICKUP
	States
	{
	Spawn:
		TNT1 A 0
		Stop
	Pickup:
	    TNT1 A 0 ACS_NamedExecute("BarrelStuff2")
        stop
	}
}

Actor HQHasBarrel : Inventory
{
Inventory.Maxamount 1
}

ACTOR FlyingBarrel
{
  Radius 10
  Height 24
  Speed 25
  Damage 35
  DamageType "BarrelPunch"
  Projectile
  +RANDOMIZE
  +DEHEXPLOSION
  +BOUNCEONWALLS
  +BOUNCEONFLOORS
  +CANBOUNCEWATER
  +BOUNCEONCEILINGS
  +BOUNCEONACTORS
  +USEBOUNCESTATE
  +NOEXTREMEDEATH
  +FORCEPAIN
  -NOGRAVITY
  BounceFactor 0.33
  BounceType "Doom"
  BounceCount 3
  Gravity 0.6
  Scale 0.36
  Obituary "%k booped %o."
  States
  {
  Spawn:
    PRPT AAAAA 2
	PRPT A 0 A_ChangeFlag("BOUNCEONACTORS",0)
    PRPT AAAAAAA 2
	PRPT A 0 A_ChangeFlag("BOUNCEONWALLS",0)
	PRPT A 0 A_ChangeFlag("BOUNCEONFLOORS",0)
	PRPT A 0 A_ChangeFlag("BOUNCEONCEILINGS",0)
	PRPT A 0 A_ChangeFlag("USEBOUNCESTATE",0)
	Goto Spawn2
  Spawn2:
	PRPT A 2   
    loop
Death:
Crash:
	TNT1 A 0 A_CheckFlag("UseBounceState","Bounce3")
    Goto XDeath
XDeath:
	TNT1 A 0 A_CheckFlag("BounceOnActors","Bounce3")
    ACEB A 0 A_ChangeFlag("NOGRAVITY",1)
	PTNT I 0 A_AlertMonsters
	PTNT I 0 A_PlaySound("SMTXPL",CHAN_7)
	TNT1 A 0 A_SpawnItemEx("BaseFlash", 0, 0, 0, 0, 0, 0, 0, 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_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")
    TNT1 AAAAAAAAAAAA 1 A_Quake(15,18,0,3200,"none")
    Stop
Bounce:
	TNT1 A 0 A_PlaySound("AKBARBNC")
    BXRL A 2 A_Stop
    TNT1 A 0 A_SpawnItemEx("DisasterShotSmoke")
	Goto Bounce2
Bounce2:
    TNT1 A 0 A_CustomMissile("FlyingBarrel2",0,0,5,CMF_AIMDIRECTION,0)
	Stop
Bounce3:
	TNT1 A 0 A_PlaySound("AKBARPN")
    BXRL A 2 A_Stop
    TNT1 A 0 A_SpawnItemEx("DisasterShotSmoke")
    TNT1 A 0 A_CustomMissile("FlyingBarrel2",0,0,5,CMF_AIMDIRECTION,0)
	Stop
    }
}

ACTOR FlyingBarrel2
{
  Radius 10
  Height 34
  Speed 5
  Damage 0
  Projectile
  Gravity 0.6
  DamageType "Melee"
  Scale 0.34
  BounceType "Doom"
  BounceCount 3
  BounceFactor 0.33
  -NOGRAVITY
  +BOUNCEONACTORS
  +BOUNCEONWALLS
  +CANBOUNCEWATER
  BounceSound "AKBARPN"
  States
  {
  Spawn:
  	PRPT B 4 NoDelay ThrustThingZ(0,10,0,1)
    PRPT CDEF 4
    Loop
  Death:
    TNT1 A 0 A_PlaySound("AKBARPN")
    TNT1 A 0 A_SpawnItemEx("DisasterBarrel",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS|SXF_ORIGINATOR)
	Stop
    }
}

ACTOR DisasterBarrelBomb
{
  Health 20
  Radius 10
  Height 42
  DeathHeight 42
  Mass 50
  Scale 0.36
  DeathHeight 0
  Painchance "Melee", 256
  Painchance "Bat", 156
  Painchance "Kick", 256
  DamageFactor "Melee", 0.1
  DamageFactor "Bat", 0.1
  DamageFactor "Kick", 0.1
  DamageFactor "Bullet", 0.5
  DamageFactor "Explosion", 2.5
  MaxTargetRange 48
  +SOLID
  +CANPASS
  -PUSHABLE
  +SHOOTABLE
  +NOBLOOD 
  +BLOODLESSIMPACT
  +DONTRIP
  +ACTIVATEMCROSS
  +DONTGIB
  +NOICEDEATH
  +OLDRADIUSDMG
  +FRIENDLY
  Tag "Barrel I.E.D."
  DamageType Explosive
  DeathSound "SMTXPL"
  Obituary "%o didn't know which wire to cut."
  States
  {
  Spawn:
	BXRL C 1 A_SetAngle(Angle+15)
	Goto Spawn2
  Spawn2:
 	BXRL C 0 A_SpawnItemEx("STXGlow3",0,-10,15)
    BXRL C 30 A_LookEx(LOF_NOSOUNDCHECK, 0, 70, 0, 360)
    Loop
  See:
   BXRL C 1 A_Chase ("Melee", 0, CHF_DONTMOVE)
  Loop
  Pain.Melee:
  Pain.Kick:
  Pain.Bat:
	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)
	Goto Spawn2
  Melee:
  TNT1 A 0 A_Jump(256,"Death")
  Stop
  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_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_CLIENTSIDE)
    TNT1 AAAAAAAAAAA 0 A_CustomMissile("DarkSmoke",0,0,Random(0,360),2,Random(0,360))
	TNT1 A 0 A_CustomBulletAttack(180,100,FRandom(58,84),FRandom(2,10),"DisasterKnockbackPuff")
    FLFR MMM 0 bright { A_CustomMissile ("BarrelBombExplode3", 0, 0, random (0, 360), 2, random (20, 60));}
    FLFR MMMM 0 bright { A_CustomMissile ("BarrelBombExplode1", 0, 0, random (0, 360), 2, random (60, 90));}
    FLFR MM 0 bright { A_CustomMissile ("BarrelBombExplode2", 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
  }
}

Actor NoFuckingSpaceJackass : QuinnBoolean { Inventory.MaxAmount 1 }