ACTOR BarrelRotator : Inventory { Inventory.MaxAmount 3 }
ACTOR HasPrepared : Boolean {}

ACTOR MinigunPrimary : Ammo
{
  Inventory.Amount 0
  Inventory.MaxAmount 500
  Ammo.BackpackAmount 100
  Ammo.BackpackMaxAmount 500
  +IGNORESKILL
  Inventory.Icon "CLIPA0"
}

ACTOR MinigunDeselect : Boolean {}

ACTOR HugeMinigun : Weapon
{
   Weapon.SelectionOrder 700
   Weapon.AmmoUse 0
   Weapon.AmmoGive 250
   Weapon.AmmoType "MinigunPrimary"
   Inventory.PickupMessage "$GOTCHAINGUN" // "You got the chaingun"
   Obituary "$OB_MPCHAINGUN" // "%o was mowed down by %k's chaingun."
   Tag "Virulent Bastard"
   Weapon.BobStyle Smooth
  Weapon.BobSpeed 2.5
  Weapon.BobRangeX 0.5
  Weapon.BobRangeY 0.3
  Scale 0.33
   States
   {
   Ready:
     MNGI A 1 A_WeaponReady
     Loop
   Deselect:
	 MNGS G 0 A_JumpIfInventory("LoopingSound",1,"DeselectStop")
	 MNGS G 0 A_TakeInventory("MinigunDeselect",1)
	 MNGS G 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 MNGS G 0 A_PlaySoundEx("minigun/open","SoundSlot5")
	 MNGS FEDCBA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Deselecting
   Deselecting:
	 TNT1 AAAAAAAAAAAAAAA 0 A_Lower
     TNT1 A 1 A_Lower
     Loop
   DeselectStop:
	 TNT1 A 0 A_GiveInventory("MinigunDeselect",1)
	 Goto FireEndEmpty
   Select:
	 TNT1 A 0 A_Raise
	 TNT1 A 1 A_WeaponReady
     Goto SelectAnim
   SelectAnim:
	 MNGS ABCD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_PlaySoundEx("minigun/close","SoundSlot5")
	 MNGS EFGH 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Ready
   Fire:
	 PPFI A 0 A_JumpIfInventory("MinigunPrimary",1,1)
	 Goto Ready
	 MNGP A 0 A_JumpIfInventory("HasPrepared",1,"StartFiring")
	 MNGP ABCDEF 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_PlaySoundEx("minigun/open","SoundSlot5")
	 MNGP GHIJK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_PlaySoundEx("minigun/extend","SoundSlot6")
	 MNGP LMNOPQR 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 MNGP A 0 A_GiveInventory("HasPrepared",1)
	 MNGP A 0 A_ReFire("StartFiring")
	 Goto FireEnd
   StartFiring:
	 TNT1 A 0 A_PlaySoundEx("minigun/fire","Weapon",true)
	 TNT1 A 0 A_PlaySoundEx("minigun/windloop","SoundSlot6",true)
	 M10I A 0 A_GiveInventory("LoopingSound",1)
	 Goto FireFX
   FireFX:
	 PPFI A 0 A_JumpIfInventory("MinigunPrimary",1,1)
	 Goto FireEndEmpty
	 PPFI A 0 A_FireCustomMissile("MuzzleSmokeFX",0,0,4,0)
	 PPFI A 0 A_FireCustomMissile("ShakeYourAssDouble",0,0,4,0)
	 TNT1 A 0 A_TakeInventory("MinigunPrimary",1)
	 BPSS A 0 A_FireCustomMissile("LongRifleCaseSpawn",5,0,20,-3)
	 BPSS A 0 A_FireCustomMissile("LongRifleCaseSpawn",5,0,-20,-3)
	 TNT1 A 0 A_FireBullets(5.6, 5.6, 1, 30, "BulletPuff2")
	 EXP1 A 0 A_Recoil(0.5)
	 TNT1 A 0 A_SetPitch(Pitch-1.0)
	 TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	 // Pick a barrel frame to jump to
	 //TNT1 A 0 A_JumpIfInventory("BarrelRotator",3,"MF4Check")
	 TNT1 A 0 A_JumpIfInventory("BarrelRotator",1,"MF3Check")
	 //TNT1 A 0 A_JumpIfInventory("BarrelRotator",1,"MF2Check")
	 Goto MF1Check
	 
   // -- BARREL ROTATION 1 --
   MF1Check:
	 TNT1 A 0 A_Jump(255,"MF1_1","MF1_2")
	 Goto MF1_1
   MF1_1:
	 MNGF A 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire2Post
   MF1_2:
	 MNGF B 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire2Post
   Fire1Post:
	 MNGF C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_GiveInventory("BarrelRotator",1)
	 TNT1 A 0 A_ReFire("FireFX")
	 Goto FireEnd
	 
   // -- BARREL ROTATION 2 --
   MF2Check:
	 TNT1 A 0 A_Jump(255,"MF2_1","MF2_2")
	 Goto MF2_1
   MF2_1:
	 MNGF D 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire2Post
   MF2_2:
	 MNGF E 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire2Post
   Fire2Post:
	 MNGF F 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_GiveInventory("BarrelRotator",1)
	 TNT1 A 0 A_ReFire("FireFX")
	 Goto FireEnd
	 
   // -- BARREL ROTATION 3 --
   MF3Check:
	 TNT1 A 0 A_Jump(255,"MF3_1","MF3_2")
	 Goto MF3_1
   MF3_1:
	 MNGF G 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire4Post
   MF3_2:
	 MNGF H 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire4Post
   Fire3Post:
	 MNGF I 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_GiveInventory("BarrelRotator",1)
	 TNT1 A 0 A_ReFire("FireFX")
	 Goto FireEnd
	 
   // -- BARREL ROTATION 4 --
   MF4Check:
	 TNT1 A 0 A_Jump(255,"MF4_1","MF4_2")
	 Goto MF4_1
   MF4_1:
	 MNGF J 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire4Post
   MF4_2:
	 MNGF K 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 Goto Fire4Post
   Fire4Post:
	 MNGF L 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 TNT1 A 0 A_TakeInventory("BarrelRotator",4)
	 TNT1 A 0 A_ReFire("FireFX")
	 Goto FireEnd
	 
   FireEnd:
	M10I A 0 A_TakeInventory("LoopingSound",1)
	 MNGF A 0 A_StopSoundEx("Weapon")
	 MNGF A 0 A_StopSoundEx("SoundSlot6")
	 TNT1 A 0 A_PlaySoundEx("minigun/firestop","Weapon")
	 TNT1 A 0 A_PlaySoundEx("minigun/winddown","SoundSlot6")
	 MNGF CFILCF 1 A_WeaponReady(WRF_NOSWITCH)
	 MNGF IL 2 A_WeaponReady(WRF_NOSWITCH)
	 MNGF CF 3 A_WeaponReady(WRF_NOSWITCH)
	 MNGF IL 4 A_WeaponReady(WRF_NOSWITCH)
	 Goto CloseUp
   FireEndEmpty:
	 M10I A 0 A_TakeInventory("LoopingSound",1)
	 MNGF A 0 A_StopSoundEx("Weapon")
	 MNGF A 0 A_StopSoundEx("SoundSlot6")
	 TNT1 A 0 A_PlaySoundEx("minigun/firestop","Weapon")
	 TNT1 A 0 A_PlaySoundEx("minigun/winddown","SoundSlot6")
	 MNGF CF 1 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	 MNGF IL 2 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	 MNGF CF 3 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	 MNGF IL 4 A_WeaponReady(WRF_NOSWITCH|WRF_NOFIRE)
	 MNGF A 0 A_JumpIfInventory("MinigunDeselect",1,"Deselect")
	 Goto CloseUp
	 
   CloseUp:
	MNGP A 0 A_PlaySoundEx("minigun/extend","SoundSlot6")
	 MNGP RQPONMLK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 MNGP A 0 A_PlaySoundEx("minigun/close","SoundSlot5")
	 MNGP JIHGFEDCB 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 MNGP A 0 A_TakeInventory("HasPrepared",1)
	 Goto Ready
   Spawn:
     MGUN A -1
     Stop
   }
}