ACTOR HQPistols : HQWeapon
{
   +Ammo_CheckBoth
   Inventory.PickupMessage "\c[White][ \c[Red].45 Custom \"Howlin' Hyenas\"\c- \c[White]]"
   Tag ".45 \"Howlin' Hyenas\""
   Weapon.SelectionOrder 1900
   Weapon.AmmoUse1 1
   Weapon.AmmoUse2 1
   Weapon.AmmoGive2 15
   Weapon.Kickback 4
   weapon.ammotype1 "HyenasLoaded"
   weapon.ammotype2 "PistolAmmo"
   Weapon.UpSound "PISSEL"
   Inventory.PickupSound "PISPKP"
   Weapon.SlotNumber 2
   Scale 0.3
   +NOALERT
   +NOAUTOFIRE
   obituary "%o's 'Howlin' Hyenas' gnashed %k's face."
   States
   {
  Spawn:
    SOCT A -1
    Stop
   Ready: 
     SOCO 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")
      SOCO A 1 A_Lower(20)
      Loop
   Select:
      TNT1 A 1
      TNT1 A 0 A_JumpIfInventory("HQPistolsToken",1,"SelectNormal") 
      TNT1 A 0 A_Giveinventory("HarleyTalk",1)
	  TNT1 A 0 A_Giveinventory("HQPistolsToken",1)
      TNT1 A 0 A_Playsound("HQVPIS",CHAN_VOICE)
      Goto SelectNormal
  SelectNormal:
      SOCO A 1 A_Raise(20)
      LOOP
   Fire:
    SOCO A 0 A_JumpIf(CountInv("HyenasLoaded") == 0,"Reload")
	SOCO A 0 A_AlertMonsters
	SOCO A 0 A_JumpIfInventory("PistolSwap",1,"Fire2")
	Goto Fire1
   Fire1:
     SOCO A 0 A_GiveInventory("PistolSwap",1)
    SOLF B 0 
 	{
	If (CountInv("PistolAlt") && CountInv("PistolAmmo2") > 0)
	{
	A_PlayWeaponSound("PISSALT");
	A_FireBullets(1.5,1.5,1,9,"DisasterShockPuff",1);
	A_TakeInventory("PistolAmmo2",1);
	}
	Else
	{
	A_PlayWeaponSound("PISSFIR");
	A_FireBullets(1.5,1.5,1,9,"DisasterGiblessPuff",1);
	}
	}
	LUGK A 0 A_FireCustomMissile("ShotSpawn",0,0,-6,8,0,0)
	LUGE B 0 A_FireCustomMissile("45ACPCaseSpawn2",345+FRandom(-8.0,8.0),0,-18,-2,0)
	SOLF B 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	MGNF B 0 A_Quake(1, 2, 0, 48576, "None")
	NULL A 0 A_SetPitch(Pitch -1.2)
    SOLF C 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SOLF D 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SOLF E 1 A_WeaponReady
	SOCO A 1 A_WeaponReady
	SOCO A 0 A_Refire
    Goto Ready
   Fire2:
    SOCO A 0 A_TakeInventory("PistolSwap",99)
    SORF B 0
 	{
	If (CountInv("PistolAlt") && CountInv("PistolAmmo2") > 0)
	{
	A_PlayWeaponSound("PISSALT");
	A_FireBullets(1.5,1.5,1,9,"DisasterShockPuff",1);
	A_TakeInventory("PistolAmmo2",1);
	}
	Else
	{
	A_PlayWeaponSound("PISSFIR");
	A_FireBullets(1.5,1.5,1,9,"DisasterGiblessPuff",1);
	}
	}
	LUGK A 0 A_FireCustomMissile("ShotSpawn",0,0,6,8,0,0)
	LUGE B 0 A_FireCustomMissile("45ACPCaseSpawn",345+FRandom(-8.0,8.0),0,-8,-2,0)
	SORF B 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	MGNF B 0 A_Quake(1, 2, 0, 48576, "None")
	NULL A 0 A_SetPitch(Pitch -1.2)
    SORF C 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SORF D 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SORF E 1 A_WeaponReady
	SOCO A 1 A_WeaponReady
	SOCO A 0 A_Refire
    Goto Ready
   AltFire:
    SOCO A 0 A_JumpIf(CountInv("HyenasLoaded") < 2,"Reload")
	SOCO A 0 A_AlertMonsters
    SOCF A 0 A_TakeInventory("PistolSwap",99)
	SOCF A 0 A_TakeInventory("HyenasLoaded",2)
    SOCF B 0
 	{
	If (CountInv("PistolAlt") && CountInv("PistolAmmo2") > 0)
	{
	A_PlayWeaponSound("PISSAL2");
	A_FireBullets(3.5,3.5,1,9,"DisasterShockPuff",0);
	A_FireBullets(3.5,3.5,1,9,"DisasterShockPuff",0);
	A_TakeInventory("PistolAmmo2",2);
	}
	Else
	{
	A_PlayWeaponSound("PISSFI2");
	A_FireBullets(3.5,3.5,1,9,"DisasterGiblessPuff",0);
	A_FireBullets(3.5,3.5,1,9,"DisasterGiblessPuff",0);
	}
 }
	SOCF A 0 A_FireCustomMissile("ShotSpawn",0,0,-6,8,0,0)
	SOCF B 0 A_FireCustomMissile("45ACPCaseSpawn2",345+FRandom(-8.0,8.0),0,-18,-2,0)
	SOCF A 0 A_FireCustomMissile("ShotSpawn",0,0,6,8,0,0)
	SOCF B 0 A_FireCustomMissile("45ACPCaseSpawn",345+FRandom(-8.0,8.0),0,-8,-2,0)
	SOCF B 1 BRIGHT A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
	SOCF B 0 A_Quake(4, 2, 0, 48576, "None")
	NULL A 0 A_SetPitch(Pitch -1.6)
    SOCF C 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SOCF D 2 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY|WRF_NOSWITCH)
    SOCF E 1 A_WeaponReady
	SOCO A 2 A_WeaponReady
	SOCO A 0 A_Refire
    Goto Ready
     Reload:
  SOCO A 0 A_JumpIfInventory("HyenasLoaded", 20, 2)
  SOCO A 0 A_JumpIfInventory("PistolAmmo", 1, "ReloadWork")
  SOCO A 1 A_WeaponReady
  Goto ReloadTwirl
  ReloadWork:
  TNT1 A 0 A_GiveInventory("SheReloads",1)
  SOCR B 1
  SOCO A 0 A_PlaySoundEX("PISSUNL",CHAN_7)
  AKCR B 0 A_FireCustomMissile("EmptyHyenaClip1",60,0,8,-5)
  AKCR B 0 A_FireCustomMissile("EmptyHyenaClip2",-60,0,-8,-5)
  SOCR CDEFG 1
  TNT1 A 5
  SOLR AB 1
  SOLR CD 2
  SOCO A 0 A_PlayWeaponSound("PISSREL")
  SOLR EFG 1
  SOLR HIJ 1
  TNT1 A 2
  ReloadLoop:
  SOCR H 0 A_TakeInventory("PistolAmmo", 1)
  SOCR H 0 A_GiveInventory("HyenasLoaded", 1)
  SOCR H 0 A_JumpIfInventory("HyenasLoaded", 20, "ReloadFinish")
  SOCR H 0 A_JumpIfInventory("PistolAmmo", 1, "ReloadLoop")
  Goto ReloadFinish
  ReloadFinish:
  TNT1 A 5
  SOCO A 0 A_PlaySoundEX("PISSDRW",CHAN_7)
  SOCR HIDC 1
  SOCR 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:
   SOCZ AC 1
   TNT1 A 0 A_Overlay (-3, "QuickMelee")
   SOCZ D 8
   SOCZ CBA 2
   Goto Ready
  User1:
   MELE A 0 A_JumpIfInventory("ThrowableAmmo",1,1)
   Goto GrenadeDry
   SOCO A 0 A_PlaySoundEX("PISSHOLS",CHAN_6)
   SOCH ABC 1
   SOCH D 3
   TNT1 A 0 A_Overlay (-3, "ThrowNao2")
   SOCH D 15
   SOCO A 0 A_PlaySoundEX("PISSUHOL",CHAN_6)
   SOCH 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
   SOCO A 0 A_PlaySoundEX("PISSHOLS",CHAN_6)
   SOCH ABC 1
   SOCH D 2
   TNT1 A 0 A_Overlay (-3, "InjectorPlunge")
   SOCH D 30
   SOCO A 0 A_PlaySoundEX("PISSUHOL",CHAN_6)
   SOCH CBA 2
   Goto Ready
   GrenadeDry:
   SOCO A 1 ACS_NamedExecute("NoGrenades", 0)
   Goto Ready
   HealthFull:
   SOCO A 1 ACS_NamedExecute("FullHealth", 0)
   Goto Ready
   StimDry:
   SOCO A 1 ACS_NamedExecute("NoStims", 0)
   Goto Ready
   ReloadTwirl:
   SOCR A 0 A_PlayWeaponSound("MAGNSTR")
  TNT1 A 0 A_GiveInventory("SheReloads",1)
   SOCR ABC 1
   SOCS AB 1
   Goto ReloadTwirlHold
   ReloadTwirlHold:
   SOCS C 0 A_PlaySound("MAGNSPN",CHAN_7)
   SOCS CDE 1
   SOCS E 0 A_PlaySound("MAGNSPN",CHAN_6)
   SOCS FG 1
   NULL A 0 A_JumpIf(GetPlayerInput(INPUT_BUTTONS) & BT_RELOAD, "ReloadTwirlHold")
   Goto ReloadTwirlFinish
   ReloadTwirlFinish:
   SOCS A 0 A_PlayWeaponSound("MAGNSTP")
   SOCS DEH 1
   SOCS HHHII 1 A_WeaponReady(WRF_NOSWITCH)
   SOCZ BBA 1 A_WeaponReady(WRF_NOSWITCH)
   TNT1 A 0 A_TakeInventory("SheReloads",99)
   Goto Ready
  User3:
  SOCO A 0 A_JumpIfInventory("PistolAlt", 1, "AmmoToggle2")
  SOCO A 0 A_JumpIfInventory("PistolAmmo2", 1, "AmmoToggle1")
  Goto AmmoToggle3
  AmmoToggle1:
  SOCR A 1 A_GiveInventory("PistolAlt", 1)
  Goto AmmoSwapAnim
  AmmoToggle2:
  SOCR A 1 A_TakeInventory("PistolAlt", 99)
  Goto AmmoSwapAnim
  AmmoToggle3:
  SOCO A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWUSER2|WRF_ALLOWUSER3)
  Goto Ready
  AmmoSwapAnim:
  TNT1 A 0 A_GiveInventory("SheReloads",1)
  SOCO A 0 A_PlaySoundEX("PISSUNL",CHAN_7)
  SOCR B 1
  SOCR CDEFG 1
  TNT1 A 5
  SOLR AB 1
  SOLR CD 2
  SOCO A 0 A_PlayWeaponSound("PISSREL")
  SOLR EFG 1
  SOLR HIJ 1
  TNT1 A 5
  SOCO A 0 A_PlaySoundEX("PISSDRW",CHAN_7)
  SOCR HIDC 1
  SOCR BA 2
  TNT1 A 0 A_TakeInventory("SheReloads",99)
  Goto Ready
  }
}

ACTOR HyenasLoaded : Ammo
{
   +IGNORESKILL
   Inventory.Amount 0
   Inventory.MaxAmount 20
   Ammo.BackpackAmount 0
   Ammo.BackpackMaxAmount 20
}

Actor PistolSwap : QuinnBoolean { Inventory.MaxAmount 1 }
Actor PistolAlt : QuinnBoolean { Inventory.MaxAmount 1 }

ACTOR DisasterShockPuff: DisasterPuff
{
    +NOEXTREMEDEATH
    DamageType "Electro"
	States
	{
	Spawn:
		TNT1 A 0
	Death:
	XDeath:
		TNT1 A 0 A_CheckFlag("NOBLOOD","ObjectTarget",AAPTR_TRACER)
		TNT1 A 0 A_Jump(256,"EnemyTarget")
		Goto EnemyTarget
	Crash:
		TNT1 A 0
		TNT1 A 0 A_Jump(256,"ObjectTarget")
		Goto ObjectTarget
	EnemyTarget:
		TNT1 A 0
		TNT1 A 0 A_SpawnItem("DisasterShotSmoke")
		TNT1 A 0 A_SpawnItem("HQTaserSparks")
		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)
	    FLFR A 0 A_SpawnItemEX("TaserShotPuff")
        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
	ObjectTarget:
		TNT1 A 0 A_SpawnItem("HQTaserSparks")
		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)
		TNT1 A 0 A_PlaySound("Casing/Ricochet",CHAN_AUTO,0.75)
		Goto Puff
	Puff:
		PING A 0
		PING A 0 A_Jump(156,2)
		PING A 0 A_PlaySound("Casing/Ricochet",CHAN_BODY,0.5)
        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)
        TNT1 AAAAA 1 A_SpawnItemEx("TaserDebris",frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),frandom(-0.5,0.5),random(-3,3),random(0,1))
		stop
	}
}