ACTOR HQLMG : HQWeapon
{
   +Ammo_CheckBoth
   Inventory.PickupMessage "\c[White][ \c[DarkRed]LN-52 \"Piggy\" Light Machine Gun\c- \c[White]]"
   Tag "LN-52 \"Piggy\""
   Weapon.SelectionOrder 1900
   Weapon.AmmoUse1 1
   Weapon.AmmoUse2 1
   Weapon.AmmoGive2 50
   Weapon.Kickback 4
   weapon.ammotype1 "LMGLoaded"
   weapon.ammotype2 "LMGAmmo"
   Weapon.SlotNumber 6
   Weapon.UpSound "LMGSEL"
   Inventory.PickupSound "LMGPKP"
   Scale 0.3
   +NOALERT
   +NOAUTOFIRE
   obituary "%o was gorged on by %k's Piggy."
   States
   {
  Spawn:
    LMGT A -1
    Stop
   Ready: 
     LMGO A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3)
      Loop
   Deselect:
      NULL A 0 A_JumpIf(CountInv("HQGrabbedBarrel") == 1,"ZeroFucksGiven")
      LMGO A 1 A_Lower(20)
      Loop
   Select:
      TNT1 A 1
      TNT1 A 0 A_JumpIfInventory("HQLMGToken",1,"SelectNormal") 
      TNT1 A 0 A_Giveinventory("HarleyTalk",1)
	  TNT1 A 0 A_Giveinventory("HQLMGToken",1)
      TNT1 A 0 A_Playsound("HQVLMG",CHAN_VOICE)
      Goto SelectNormal
  SelectNormal:
      LMGO A 1 A_Raise(20)
      LOOP
   Fire:
    LMGO A 0 A_JumpIf(CountInv("LMGLoaded") == 0,"Reload")
	LMGO A 0 A_AlertMonsters
    UZLF B 0 
 	    {
	    If (CountInv("LMGAlt") && CountInv("LMGAmmo2") > 0)
	    {
	    A_PlayWeaponSound("LMGALT");
        A_FireBullets(4.5,4.5,1,90*1,"DisasterFragmentPuff",1,8999,"FragShotParticle",3,5);
    	A_TakeInventory("LMGAmmo2",1);
    	}
	    Else
	    {
    	A_PlayWeaponSound("LMGFIR");
        A_FireBullets(4.5,4.5,1,90,"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,8,-5,0)
	UZRF C 0 A_Jump(256,"Fire1", "Fire2", "Fire3")
	Fire1:
	LMGF A 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	Fire2:
    LMGF B 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	Fire3:
	LMGF C 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	Goto FireRest
	FireRest:
	MGNF B 0 A_Quake(4, 8, 0, 48576, "None")
	NULL A 0 A_SetPitch(Pitch -1.7)
    LMGO C 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    LMGO D 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	LMGO D 0 A_Refire
    LMGO E 1 A_WeaponReady(WRF_NOSWITCH)
    Goto Ready
   AltFire:
    LMGO A 0 A_JumpIf(CountInv("GLLoaded") == 0,"AltReload")
	LMGO A 0 A_PlayWeaponSound("LMGGLF")
	LMGO A 0 A_AlertMonsters
	BTKF B 0 A_TakeInventory("GLLoaded",1)
    BTKF B 0 A_FireCustomMissile("LaunchedGrenade",frandom(0.0,0.0),0,4,3,FPF_NOAUTOAIM,frandom(-0.0,0.0))
	BTKF A 0 A_FireCustomMissile("ShotSpawn",0,0,6,12,0,0)
    LMGA ABC 1 BRIGHT
	LMGA C 1 
	LMGA D 2
	LMGA EF 1
    Goto Ready
	AltReload:
    LMGO A 0 A_JumpIf(CountInv("ThumperAmmo") == 0,"Ready")
	LMGA GHIJ 2
	LMGA KL 3
	LMGA L 3
	LMGA MNO 2
	BTKF B 0 A_GiveInventory("GLLoaded",1)
	BTKF B 0 A_TakeInventory("ThumperAmmo",1)
    LMGR C 0 A_PlaySoundEX("LMGGLR",CHAN_7)
	LMGA P 2
	LMGA Q 1
	LMGA RST 2
	LMGA L 5
	LMGA KJIHG 2
	Goto Ready
     Reload:
  LMGO A 0 A_JumpIfInventory("LMGLoaded", 100, 2)
  LMGO A 0 A_JumpIfInventory("LMGAmmo", 1, "ReloadWork")
  LMGO A 1 A_WeaponReady
  Goto Inspect
	ReloadWork:
  TNT1 A 0 A_GiveInventory("SheReloads",1)
  LMGR AB 1
  LMGR C 0 A_PlaySoundEX("LMGREL",CHAN_7)
  LMGR C 1
  LMGR DEF 2
  LMGR F 4
  LMGR GHIJ 2
  AKCR B 0 A_FireCustomMissile("EmptyLMGClip",60,0,0,-2)
  LMGR C 0 A_PlaySoundEX("LMGOUT",CHAN_7)
  LMGR JKLMN 1
  LMGR N 5
  LMGR OPQ 2
  LMGR C 0 A_PlaySoundEX("LMGOPN",CHAN_7)
  LMGR RSTU 2
  LMGR U 10
  LMGR C 0 A_PlaySoundEX("LMGINS",CHAN_7)
  LMGL AGBGHGIGAGB 1
  LMGL G 7
  LMGR C 0 A_PlaySoundEX("LMGLOA",CHAN_7)
  LMGL CDEF 2
  LMGL G 8
  ReloadLoop:
  SOCR H 0 A_TakeInventory("LMGAmmo", 1)
  SOCR H 0 A_GiveInventory("LMGLoaded", 1)
  SOCR H 0 A_JumpIfInventory("LMGLoaded", 100, "ReloadFinish")
  SOCR H 0 A_JumpIfInventory("LMGAmmo", 1, "ReloadLoop")
  Goto ReloadFinish
  ReloadFinish:
  LMGR VW 2
  LMGR C 0 A_PlaySoundEX("LMGCLS",CHAN_7)
  LMGR WX 1
  LMGR YZ 2
  LMGU AB 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:
   LMGZ AC 1
   TNT1 A 0 A_Overlay (-3, "QuickMelee")
   LMGZ D 8
   LMGZ CBA 2
   Goto Ready
  User1:
   MELE A 0 A_JumpIfInventory("ThrowableAmmo",1,1)
   Goto GrenadeDry
   LMGZ AC 1
   TNT1 A 0 A_Overlay (-3, "ThrowNao")
   LMGZ D 8
   LMGZ 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
   LMGZ AC 1
   TNT1 A 0 A_Overlay (-3, "InjectorPlunge")
   LMGZ D 30
   LMGZ CBA 2
   Goto Ready
   GrenadeDry:
   LMGO A 1 ACS_NamedExecute("NoGrenades", 0)
   Goto Ready
   HealthFull:
   LMGO A 1 ACS_NamedExecute("FullHealth", 0)
   Goto Ready
   StimDry:
   LMGO A 1 ACS_NamedExecute("NoStims", 0)
   Goto Ready
   Inspect:
   TNT1 A 0 A_GiveInventory("SheReloads",1)
   LMGI AB 1
   FUNO A 0 A_PlaySoundEX("BTRBAK",CHAN_7)
   LMGI CD 1
   Goto InspectHold
  InspectHold:
   LMGI 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)
   LMGI FG 1
   TNT1 A 0 A_TakeInventory("SheReloads",99)
   Goto Ready
  User3:
  SOCO A 0 A_JumpIfInventory("LMGAlt", 1, "AmmoToggle2")
  SOCO A 0 A_JumpIfInventory("LMGAmmo2", 1, "AmmoToggle1")
  Goto AmmoToggle3
  AmmoToggle1:
  LMGO A 1 A_GiveInventory("LMGAlt", 1)
  Goto AmmoSwapAnim
  AmmoToggle2:
  LMGO A 1 A_TakeInventory("LMGAlt", 99)
  Goto AmmoSwapAnim
  AmmoToggle3:
  LMGO A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3)
  Goto Ready
  AmmoSwapAnim:
  TNT1 A 0 A_GiveInventory("SheReloads",1)
  LMGU BA 2
  LMGR C 0 A_PlaySoundEX("LMGOPN",CHAN_7)
  LMGR STU 2
  LMGR U 5
  LMGR C 0 A_PlaySoundEX("LMGINS",CHAN_7)
  LMGL AGBGHGIGAGB 1
  LMGL G 7
  LMGR VW 2
  LMGR C 0 A_PlaySoundEX("LMGCLS",CHAN_7)
  LMGR WX 1
  LMGR YZ 2
  LMGU AB 2
  TNT1 A 0 A_TakeInventory("SheReloads",99)
  Goto Ready
  }
}

ACTOR LMGLoaded : Ammo
{
   +IGNORESKILL
   Inventory.Amount 0
   Inventory.MaxAmount 100
   Ammo.BackpackAmount 0
   Ammo.BackpackMaxAmount 100
}

ACTOR GLLoaded : Ammo
{
   +IGNORESKILL
   Inventory.Amount 0
   Inventory.MaxAmount 1
   Ammo.BackpackAmount 0
   Ammo.BackpackMaxAmount 1
}

ACTOR LaunchedGrenade
{
  Radius 5
  Height 5
  Speed 50
  Damage 3
  Projectile
  +RANDOMIZE
  -NOGRAVITY
  Scale 0.25
  Gravity 0.8
  Alpha 0.90
  Obituary "%k passed %o a hot potato."
  States
  {
  Spawn:
    MGGL A 1 A_SpawnItemEx("GLFlare",0,0.2*random(-10,10),0.2*random(-10,10),0,0,0,0,0,0)
    loop
	Death:
	FX08 B 0 A_PlaySoundEX("GRNDXPL",CHAN_7)
    FLCR A 0 A_ChangeFlag("NOCLIP",0)
	TNT1 A 0 A_Scream
    FLCR A 0 A_ChangeFlag("NOBLOCKMAP",0)
    TNT1 A 0 A_SetScale(0.5)
	FLCR A 0 A_AlertMonsters
	FLCR A 0 A_Explode(250,160)
	PTNT I 0 A_RadiusThrust(150, 100, RTF_AFFECTSOURCE|RTF_THRUSTZ)
	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_SpawnItemEx("BaseFlash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE)
	TNT1 A 0 A_ChangeFlag("NOTIMEFREEZE",0)
    FLFR M 0 bright A_SpawnItemEx("BaseBlast")
    TNT1 A 0 A_CustomMissile("DBEffect2",22,0,(random(0,360)),CMF_AIMDIRECTION)
    TNT1 A 0 A_CustomMissile("DBEffect3",22,0,(random(0,360)),CMF_AIMDIRECTION)
    TNT1 A 0 A_CheckFloor("FloorKlutz")
	FLFR M 0 A_ChangeFlag("NOGRAVITY",1)
    TNT1 AAA 0 A_SpawnItemEx ("MGExplode2",0,0,0,2,0,random(-2,2),random(0,359),SXF_CLIENTSIDE)
    TNT1 AAAA 0 A_SpawnItemEx ("MGExplode",0,0,0,2,0,random(-3,3),random(0,359),SXF_CLIENTSIDE)
    TNT1 AAA 0 A_SpawnItemEx ("MGExplode3",0,0,0,2,0,random(-4,4),random(0,359),SXF_CLIENTSIDE)
	TNT1 A 0
 	{
    A_SpawnItemEx ("DBEffect2",0,0,0,2,0,random(-2,2),random(0,359),SXF_CLIENTSIDE);
    A_SpawnItemEx ("DBEffect2",0,0,0,2,0,random(-3,3),random(0,359),SXF_CLIENTSIDE);
	A_SpawnItemEx ("DBEffect3",0,0,0,2,0,random(-4,4),random(0,359),SXF_CLIENTSIDE);
	A_SpawnItemEx ("DBEffect3",0,0,0,2,0,random(-4,4),random(0,359),SXF_CLIENTSIDE);
	}
	TNT1 AAAAAAAAAAAAAA 1 bright  
	{
	A_Quake(8, 6, 0, 48576, "None");
	A_SpawnItemEx("GLFire1", Random(-30, 30), Random(-30, 30), Random(20, -20), 0, 1, 2, 0, 128); 
	A_SpawnItemEx("GLFire1", random (-20, 20), random (-20, 20), Random(20, -20), 0, 1, 2, 0, 128);
    A_SpawnItemEx("DBFlare2", random (-10, 10), random (-10, 10), Random(10, -10), 0, 1, 2, 0, 128);
	}
    Stop
 	FloorKlutz:
    TNT1 AAA 0 A_SpawnItemEx ("MGExplode2",0,0,0,2,0,random(1,2),random(0,359),SXF_CLIENTSIDE)
    TNT1 AAAA 0 A_SpawnItemEx ("MGExplode",0,0,0,2,0,random(1,3),random(0,359),SXF_CLIENTSIDE)
    TNT1 AAA 0 A_SpawnItemEx ("MGExplode3",0,0,0,2,0,random(2,4),random(0,359),SXF_CLIENTSIDE)
	TNT1 AAAAAAAAAAAAAA 1 bright  
	{
	A_Quake(8, 6, 0, 48576, "None");
	A_SpawnItemEx("GLFire1", Random(-30, 30), Random(-30, 30), Random(20, -20), 0, 1, 2, 0, 128); 
	A_SpawnItemEx("GLFire1", random (-20, 20), random (-20, 20), Random(20, -20), 0, 1, 2, 0, 128);
    A_SpawnItemEx("DBFlare2", random (-10, 10), random (-10, 10), Random(10, -10), 0, 1, 2, 0, 128);
	}
    Stop
	}
}

Actor LMGAlt : QuinnBoolean { Inventory.MaxAmount 1 }