ACTOR HQARifle : HQWeapon
{
   +Ammo_CheckBoth
   Inventory.PickupMessage "\c[White][ \c[DarkRed]KBR-47 \"Rebel Yell\" Battle Rifle\c- \c[White]]"
   Tag "KBR-47 \"Rebel Yell\""
   Weapon.SelectionOrder 1900
   Weapon.AmmoUse1 1
   Weapon.AmmoUse2 1
   Weapon.AmmoGive2 15
   Weapon.Kickback 4
   weapon.ammotype1 "BattleRifleLoaded"
   weapon.ammotype2 "LMGAmmo"
   Weapon.SlotNumber 4
   Weapon.UpSound "BTRSEL"
   Inventory.PickupSound "BTRPKP"
   Scale 0.3
   +NOALERT
   +NOAUTOFIRE
   obituary "%o was platoon'd by %k's Battle Rifle."
   States
   {
  Spawn:
    BTRT A -1
    Stop
   Ready: 
     BTRO A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3)
      Loop
   Deselect:
  	  BTRO A 0 A_StopSoundEX("WEAPON")
      NULL A 0 A_JumpIf(CountInv("HQGrabbedBarrel") == 1,"ZeroFucksGiven")
      BTRO A 1 A_Lower(20)
      Loop
   Select:
      TNT1 A 1
      TNT1 A 0 A_JumpIfInventory("HQBattleRifleToken",1,"SelectNormal") 
      TNT1 A 0 A_Giveinventory("HarleyTalk",1)
	  TNT1 A 0 A_Giveinventory("HQBattleRifleToken",1)
      TNT1 A 0 A_Playsound("HQVBTR",CHAN_VOICE)
      Goto SelectNormal
  SelectNormal:
      BTRO A 1 A_Raise(20)
      LOOP
   Fire:
    BTRO A 0 A_JumpIf(CountInv("BattleRifleLoaded") == 0,"Reload")
	BTRO A 0 A_AlertMonsters
    UZLF B 0 
 	    {
	    If (CountInv("RifleAlt") && CountInv("LMGAmmo2") > 0)
	    {
	    A_PlayWeaponSound("BTRALT");
        A_FireBullets(2.5,2.5,1,45*1,"DisasterFragmentPuff",1,8999,"FragShotParticle",3,5);
    	A_TakeInventory("LMGAmmo2",1);
    	}
	    Else
	    {
    	A_PlayWeaponSound("BTRFIR");
        A_FireBullets(2.5,2.5,1,45,"DisasterKnockbackPuff",1);
    	}
	    }
	LUGK A 0 A_FireCustomMissile("ShotSpawn",0,0,6,8,0,0)
	LUGE B 0 A_FireCustomMissile("762CaseSpawn",345+random(-8,8),0,5,-5,0)
	UZRF C 0 A_Jump(256,"Fire1", "Fire2", "Fire3")
	Fire1:
	BTRF A 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	Fire2:
    BTRF B 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	Fire3:
	BTRF C 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	FireRest:
	MGNF A 0 A_GiveInventory("ARifleHeat",1)
	MGNF B 0 A_Quake(2, 3, 0, 48576, "None")
	NULL A 0 A_SetPitch(Pitch -1.5)
    BTRO C 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    BTRO D 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    BTRO E 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	BTRO D 0 A_Refire
	BTRO F 1 A_WeaponReady(WRF_NOSWITCH)
	BTRO D 0 A_ClearRefire
    Goto Ready
	AltFire:
	BTRA ABC 1
	BTRA D 0 A_JumpIf(CountInv("ARifleHeat") == 0,"AltBlast")
	BTRA A 0 A_PlayWeaponSound("BTRSTR")
	AltHold:
	BTRA D 0 A_JumpIf(CountInv("ARifleHeat") == 0,"AltBlast")
    BTRA D 0 A_PlaySoundEX("BTRLUP","WEAPON", 1)
	BTRA DCDC 1 { 
	A_FireCustomMissile("ShotSpawn",0,0,Random(7, 10),Random(0, 3),0,0); 
	A_FireCustomMissile("ARifleHeater", frandom(-1.0,1.0), 0, Random(5, 7), Random(0, 3),FPF_NOAUTOAIM,frandom(-1.0,1.0)); 
	}
	BTRA D 0 A_TakeInventory("ARifleHeat",1)
	BTRA D 0 A_Refire
	BTRA D 0 A_StopSoundEX("WEAPON")
	BTRA C 0 A_PlayWeaponSound("BTRSTP")
	Goto AltStop
	AltStop:
	BTRA D 1 A_ClearRefire
	BTRA CBA 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOBOB|WRF_NOSWITCH)
	Goto Ready
	AltBlast:
	BTRA D 0 A_StopSoundEX("WEAPON")
	BTRA C 0 A_PlayWeaponSound("BTRSTP")
	BTRA E 1 A_FireCustomMissile("ARifleBlast", frandom(-2.5,2.5), 0, Random(7, 10), Random(0, 3),FPF_NOAUTOAIM,frandom(-2.5,2.5))
	BTRA D 2
	BTRA C 5
	BTRA D 0 A_TakeInventory("ARifleHeat",1)
	BTRA D 0 A_Refire
	Goto AltStop
     Reload:
  BTRO A 0 A_JumpIfInventory("BattleRifleLoaded", 35, 2)
  BTRO A 0 A_JumpIfInventory("LMGAmmo", 1, "ReloadWork")
  BTRO A 1 A_WeaponReady
  Goto Inspect
	ReloadWork:
  TNT1 A 0 A_GiveInventory("SheReloads",1)
  BTRR ABCD 2
  BTRR D 5
  BTRR EF 1
  AKCR B 0 A_FireCustomMissile("EmptyAKClip",60,0,0,-2)
  LMGR C 0 A_PlaySoundEX("BTROPN",CHAN_7)
  BTRR G 1
  BTRR HIJ 2
  BTRR J 8
  BTRR KLMNO 1
  ReloadLoop:
  SOCR H 0 A_TakeInventory("LMGAmmo", 1)
  SOCR H 0 A_GiveInventory("BattleRifleLoaded", 1)
  SOCR H 0 A_JumpIfInventory("BattleRifleLoaded", 35, "ReloadFinish")
  SOCR H 0 A_JumpIfInventory("LMGAmmo", 1, "ReloadLoop")
  Goto ReloadFinish
  ReloadFinish:
  LMGR C 0 A_PlayWeaponSound("BTRCLS")
  BTRR O 2
  BTRR PQ 2
  BTRR BA 2
  TNT1 A 0 A_TakeInventory("SheReloads",99)
  Goto Ready
  Flash:
    SOCF A 3 Bright A_Light1
    SOCF A 3 Bright A_Light0
    Goto LightDone
  Zoom:
   BTRZ AC 1
   TNT1 A 0 A_Overlay (-3, "QuickMelee")
   BTRZ D 8
   BTRZ CBA 2
   Goto Ready
  User1:
   MELE A 0 A_JumpIfInventory("ThrowableAmmo",1,1)
   Goto GrenadeDry
   BTRZ AC 1
   TNT1 A 0 A_Overlay (-3, "ThrowNao")
   BTRZ D 8
   BTRZ CBA 2
   Goto Ready
   User2:
   SOCH A 0 A_JumpIfInventory("StimAmmo",1,1)
   Goto StimDry
   SOCH A 0 A_JumpIfInventory("SpeedItem",1,2)
   SOCH A 0 A_JumpIfHealthLower(100, 1)
   Goto HealthFull
   BTRZ AC 1
   TNT1 A 0 A_Overlay (-3, "InjectorPlunge")
   BTRZ D 30
   BTRZ CBA 2
   Goto Ready
   GrenadeDry:
   BTRO A 1 ACS_NamedExecute("NoGrenades", 0)
   Goto Ready
   HealthFull:
   BTRO A 1 ACS_NamedExecute("FullHealth", 0)
   Goto Ready
   StimDry:
   BTRO A 1 ACS_NamedExecute("NoStims", 0)
   Goto Ready
   Inspect:
   TNT1 A 0 A_GiveInventory("SheReloads",1)
   BTRI AB 1
   FUNO A 0 A_PlaySoundEX("BTRBAK",CHAN_7)
   BTRI CD 1
   Goto InspectHold
  InspectHold:
   BTRI E 2 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY)
   NULL A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS) & BT_RELOAD, "InspectHold")
  Goto InspectFinish
  InspectFinish:
   FUNO A 0 A_PlaySoundEX("BTRFWD",CHAN_7)
   BTRI FG 1
   TNT1 A 0 A_TakeInventory("SheReloads",99)
   Goto Ready
  User3:
  SOCO A 0 A_JumpIfInventory("RifleAlt", 1, "AmmoToggle2")
  SOCO A 0 A_JumpIfInventory("LMGAmmo2", 1, "AmmoToggle1")
  Goto AmmoToggle3
  AmmoToggle1:
  BTRO A 1 A_GiveInventory("RifleAlt", 1)
  Goto AmmoSwapAnim
  AmmoToggle2:
  BTRO A 1 A_TakeInventory("RifleAlt", 99)
  Goto AmmoSwapAnim
  AmmoToggle3:
  BTRO A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3)
  Goto Ready
  AmmoSwapAnim:
  BTRR ABQP 2
  BTRR ONMLK 1
  LMGR C 0 A_PlaySoundEX("BTROPN",CHAN_7)
  BTRR J 8
  BTRR KLMNO 1
  LMGR C 0 A_PlayWeaponSound("BTRCLS")
  BTRR O 2
  BTRR PQ 2
  BTRR BA 2
  Goto Ready
  }
}

ACTOR BattleRifleLoaded : Ammo
{
   +IGNORESKILL
   Inventory.Amount 0
   Inventory.MaxAmount 35
   Ammo.BackpackAmount 0
   Ammo.BackpackMaxAmount 35
}

Actor ARifleHeat : Ammo
{
   +IGNORESKILL
   Inventory.Amount 0
   Inventory.MaxAmount 50
   Ammo.BackpackAmount 0
   Ammo.BackpackMaxAmount 50
}


Actor ARifleHeater
{
  Speed 40
  Damage (0)
  Projectile
  +RANDOMIZE
  +NOEXTREMEDEATH
  +NODAMAGETHRUST
  -NOBLOCKMAP
  -NOCLIP
  -THRUACTORS
  -SPRITEFLIP
  +ROLLSPRITE
  +BLOODLESSIMPACT
  +INTERPOLATEANGLES
  Radius 3
  Height 3
  ProjectileKickback 0
  Renderstyle Add
  DamageType "Fire"
  Decal "PostalScorch"
  Gravity 0.9
  Scale 0.5
  Obituary "%k torched %o with the Flamethrower."
  States
  {
  Spawn: 
	TNT1 A 1 Bright A_ChangeFlag("SPRITEFLIP", random(0,1))
    FLFR QRABCD 1 bright { A_FadeOut(0.05,1); A_SetScale(ScaleX + 0.003); A_SetRoll(Roll+frandom(5,10),SPF_INTERPOLATE); }
	TNT1 A 0 { A_ScaleVelocity(0.5); ThrustThingZ (0, 20, 0, 0); }
    FLFR EFG 1 bright { A_FadeOut(0.05,1); A_SetScale(ScaleX + 0.005); A_SetRoll(Roll+frandom(5,10),SPF_INTERPOLATE); }
	TNT1 A 0 A_ChangeFlag("THRUACTORS",1)
	TNT1 A 0 { A_ScaleVelocity(0.0); ThrustThingZ (0, 20, 0, 0);}
	TNT1 AAAA 0 A_CustomMissile("AKDarkSmoke",Random(3, -3),Random(3, -3),0,CMF_AIMDIRECTION)
    FLFR HIJK 1 bright { A_FadeOut(0.05,1); A_SetScale(ScaleX + 0.005); A_SetRoll(Roll+frandom(5,10),SPF_INTERPOLATE); }
	TNT1 A 0 { A_ChangeFlag("NOCLIP",1); A_ChangeFlag("NOBLOCKMAP",1);}
	FLFR LMNO 1 bright { A_FadeOut(0.05,1); A_SetScale(ScaleX + 0.005); A_SetRoll(Roll+frandom(5,10),SPF_INTERPOLATE); }
    Stop
  Death:
  Crash:
    FLFR A 0 A_CheckFloor("CrashFloor")
    FLFR A 0 bright A_PlayWeaponSound("FLTHND")
    FLFR AAAAAAA 0 { A_SpawnItemEx("FlamethrowerSmoke", Random(-30, 30), Random(-20, 20), Random(10, -10), 0, 1, 2, 0, 128); A_Explode((1), 25, 0, True, 10, 0);}
    FLFR MNO 1 bright { A_FadeOut(0.05,1); A_SpawnItemEx("FlamethrowerSmoke", Random(-20, 20), Random(-20, 20), Random(10, -10), 0, 0, 0, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 bright { A_SpawnItemEx("SmolDarkSmoke2",random(-8,8),random(-3,3),random(0,46),0,1,0.5,0,0,0); A_SpawnItemEx("FlamethrowerSmoke", Random(-10, 10), Random(-10, 10), Random(10, -10), 0, 1, 2, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 bright { A_SpawnItemEx("SmolDarkSmoke2",random(-8,8),random(-3,3),random(0,46),0,1,0.5,0,0,0); A_SpawnItemEx("FlamethrowerSmoke", Random(-10, 10), Random(-10, 10), Random(10, -10), 0, 1, 2, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	Stop
  CrashFloor:
    FLFR A 0 bright A_PlayWeaponSound("FLTHND")
    FLFR AAAAAAA 0 { A_SpawnItemEx("FlamethrowerSmoke", Random(-30, 30), Random(-20, 20), Random(10, -10), 0, 1, 2, 0, 128); A_Explode((1), 25, 0, True, 10, 0);}
    FLFR MNO 1 bright { A_FadeOut(0.05,1); A_SpawnItemEx("FlamethrowerSmoke", Random(-20, 20), Random(-20, 20), Random(10, -10), 0, 0, 0, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 bright { A_SpawnItemEx("SmolDarkSmoke2",random(-8,8),random(-3,3),random(0,46),0,1,0.5,0,0,0); A_SpawnItemEx("FlamethrowerSmoke", Random(-10, 10), Random(-10, 10), Random(10, -10), 0, 1, 2, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	TNT1 AAAAAAAAAAAAAAAAAAAAAAA 1 bright { A_SpawnItemEx("SmolDarkSmoke2",random(-8,8),random(-3,3),random(0,46),0,1,0.5,0,0,0); A_SpawnItemEx("FlamethrowerSmoke", Random(-10, 10), Random(-10, 10), Random(10, -10), 0, 1, 2, 0, 128); A_Explode(5, 50, 0, True, 10, 0);}
	Stop
  XDeath:
    FLFR A 0 bright A_PlayWeaponSound("FLTHND")
	FLFR A 0 A_SpawnItemEX("FlamethrowerSticky")
    FLFR AAAAAAA 0 { A_FadeOut(0.05,1); A_SpawnItemEx("FlamethrowerSmoke", Random(-20, 20), Random(-20, 20), Random(10, -10), 0, 1, 2, 0, 128);}
    FLFR MNO 1 bright { A_SpawnItemEx("FlamethrowerSmoke", Random(-20, 20), Random(-20, 20), Random(10, -10), 0, 0, 0, 0, 128);}
    Stop
  }
}

ACTOR FlamethrowerSmoke : DisasterShotSmoke
{
	Scale  0.4
	States
	{
    Spawn:
	FLFR E 0
    FLFR E 1 bright A_ChangeFlag("SPRITEFLIP", random(0,1))
	FLFR FGHIJKLMNO 1 bright { A_FadeOut(0.02,1); A_SetScale(ScaleX + 0.01); A_SetRoll(Roll+frandom(8,15),SPF_INTERPOLATE); }
    Stop
    }
}


ACTOR FlamethrowerSmoke2 : FlamethrowerSmoke
{
	Scale  1.3
}

ACTOR FlamethrowerSmoke3 : FlamethrowerSmoke
{
	Scale  1.8
}

ACTOR FlamethrowerSmoke4 : FlamethrowerSmoke
{
	Scale  0.8
}

Actor ARifleBlast
{
  Radius 2
  Height 4
  Speed 20
  Damage 0
  +FORCEPAIN
  +DONTSPLASH
  +DROPOFF
  -NoGravity
  PROJECTILE
  RenderStyle Add
  DamageType "Kick"
  Alpha  0.5
  Scale 0.5
  States
  {
  Spawn:
    NULL A 1
	TNT1 A 1 A_RadiusThrust(350,64,0|RTF_THRUSTZ)
	Goto Death
	Death:
	XDeath:
	Crash:
    TNT1 AAAAA 0 A_SpawnItemEx ("DisasterShotSmoke",0,0,0,1,0,random(-1,1),random(0,359),SXF_CLIENTSIDE)
	TNT1 A 0
	Stop
  }
}

ACTOR DisasterFragmentPuff: bulletpuff
{
    +NOBLOCKMAP
    +NOGRAVITY
    +ALLOWPARTICLES
    +RANDOMIZE
    +HITTRACER
    +FLOORCLIP
    +FORCEXYBILLBOARD
    +PUFFONACTORS
	renderstyle add
	Alpha 0.95
	VSpeed 0
	Mass 0
	Scale 0.55
	Decal "DisasterBulletChip"
    DamageType "Explosive"
	States
	{
	Spawn:
		TNT1 A 0
	Death:
		TNT1 A 0 A_CheckFlag("NOBLOOD","Crash",AAPTR_TRACER)
		TNT1 A 0 A_CheckFlag("NOBLOOD","ObjectTarget",AAPTR_TRACER)
		TNT1 A 0 A_RearrangePointers(AAPTR_TARGET,AAPTR_TARGET,AAPTR_NULL)
		TNT1 A 0 A_ChangeFlag("THRUACTORS",false)
		TNT1 A 0 A_ChangeFlag("NOINTERACTION",false)
		PING A 0 A_PlaySound("FRAGXPL",CHAN_BODY,0.8)
	    TNT1 A 0 A_SpawnItemEx("FRAGXFlash", 15, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
        TNT1 AAAAAA 0 A_SpawnItemEx ("STDarkSmoke",0,0,0,2,0,random(-2,2),random(0,359),SXF_CLIENTSIDE)
	  Goto Explode
	Explode:
        TNT1 A 0 A_CheckFloor("FloorKlutz")
        TNT1 AAA 0 A_SpawnItemEx ("FRAGXExplode2",0,0,0,2,0,random(-1,1),random(0,359),SXF_CLIENTSIDE)
        TNT1 AAAAA 0 A_SpawnItemEx ("FRAGXExplode",0,0,0,2,0,random(-2,2),random(0,359),SXF_CLIENTSIDE)
        TNT1 AAA 0 A_SpawnItemEx ("FRAGXExplode3",0,0,0,2,0,random(-3,3),random(0,359),SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEX("FRAGXBoom",0,0,13,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION,0)
        TNT1 EEEEE 1 A_Quake(15,18,0,500,"none")
        Stop
 	FloorKlutz:
    	TNT1 A 0 bright A_SpawnItemEx("STBlast", 0, 0, 0, 0, 0, 2, 0, SXF_CLIENTSIDE)
        TNT1 AAA 0 A_SpawnItemEx ("FRAGXExplode2",0,0,0,2,0,random(1,2),random(0,359),SXF_CLIENTSIDE)
        TNT1 AAAAA 0 A_SpawnItemEx ("FRAGXExplode",0,0,0,2,0,random(1,2),random(0,359),SXF_CLIENTSIDE)
        TNT1 AAA 0 A_SpawnItemEx ("FRAGXExplode3",0,0,0,2,0,random(1,2),random(0,359),SXF_CLIENTSIDE)
		TNT1 A 0 A_SpawnItemEX("FRAGXBoom",0,0,13,0,0,0,0,SXF_TRANSFERPOINTERS|SXF_NOCHECKPOSITION,0)
        TNT1 EEEEE 1 A_Quake(15,18,0,500,"none")
		stop
	}
}

Actor FRAGXBoom
{
   Radius 2
   Height 2
  +MISSILE
  +NOCLIP
  States
  {
  Spawn:
    TNT1 A 0
	TNT1 A 0 A_Explode(58,50,XF_HURTSOURCE|XF_EXPLICITDAMAGETYPE,1,0,0,0,"None","Explosive")
	TNT1 I 0 A_RadiusThrust(58,50,RTF_AFFECTSOURCE|RTF_THRUSTZ)
    Stop
  }
}

Actor RifleAlt : QuinnBoolean { Inventory.MaxAmount 1 }