actor ChaingunAmmo : Ammo replaces ClipBox 19310
{
  inventory.pickupmessage "$D3D_CHAINGUNAMMO"
  inventory.amount 50
  inventory.maxamount 300
  inventory.icon "TNT1A0"
  ammo.backpackamount 50
  ammo.backpackmaxamount 600
  scale 0.65
  +INVENTORY.IGNORESKILL
  states
  {
  Spawn:
    CHGP B -1
    stop
  }
}

actor "Chaingun Cannon" : DefaultDukeWeapon replaces Chaingun 19311
{
  Weapon.SelectionOrder 18
  Weapon.AmmoUse 1
  Weapon.AmmoGive 50
  Weapon.AmmoType "ChaingunAmmo"
  Obituary "%o was riddled with bullets by %k's chaingun cannon."
  Inventory.Pickupmessage "$D3D_CHAINGUN"
  Inventory.PickupSound "misc/backpack"
  weapon.upsound "chaingun/select"
  scale 0.65
  decal bulletchip
  +NOALERT
  Tag " "
  States
  {
  Spawn:
    CHGP A -1
    Stop
  RReady2:
    CHGN A 1 A_WeaponReady
    goto RReady
  NoAmmo:
    CHGN A 5 A_WeaponReady(WRF_NOFIRE)
    CHGN A 5 A_WeaponReady
    TNT1 A 0 A_JumpIfInventory("ChaingunAmmo",1,"RReady")
    loop
  Deselect:
    CHGN A 0
    goto Super::Deselect
  Select:
    CHGN A 0
    goto Super::Select

  Fire:
    TNT1 A 0 A_JumpIfInventory("ChaingunAmmo", 1, 2)
    CHGN A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    TNT1 A 0 A_SetInventory("FireChaingun",0)
    goto FFire
  AltFire:
    TNT1 A 0 A_JumpIfInventory("ChaingunAmmo", 2, 2)
    CHGN A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    TNT1 A 0 A_SetInventory("FireChaingun",1)
    goto FFire
  Hold:
    TNT1 A 0 A_JumpIfInventory("ChaingunAmmo", 1, 2)
    CHGN A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    TNT1 A 0 A_SetInventory("FireChaingun",0)
    goto HHold
  AltHold:
    TNT1 A 0 A_JumpIfInventory("ChaingunAmmo", 2, 2)
    CHGN A 10 A_PlaySound("DRYFIRE", 1)
    Goto NoAmmo
    TNT1 A 0 A_SetInventory("FireChaingun",1)
    goto HHold

  FFire:
    TNT1 A 0 A_TakeInventory("Waiting",10)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 4, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 16, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN B 1 BRIGHT offset (-1, 32) A_FireCustomMissile("MonsterAlert",0,0,0)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN B 1 BRIGHT offset (-1, 32) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 A 0 A_ForceReFire
    CHGN C 2
    CHGN K 2
    Goto RReady
  HHold:
    CHGN C 1 BRIGHT offset (0, 31) A_JumpIfInventory("StillFiring",1,"HoldMore")
    TNT1 A 0 A_TakeInventory("Waiting",10)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 2, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 10, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN D 1 BRIGHT offset (-1, 30)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN D 1 BRIGHT offset (-1, 30) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 4, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 16, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN E 1 BRIGHT offset (-1, 31)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN F 1 BRIGHT offset (-1, 31) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 6, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 22, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN G 1 BRIGHT offset (0, 32) A_FireCustomMissile("MonsterAlert",0,0,0)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN G 1 BRIGHT offset (0, 32) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 A 0 A_GiveInventory("StillFiring",1)
    TNT1 A 0 A_ForceReFire
    CHGN HIJ 2 BRIGHT offset (2, 33)
    TNT1 A 0 A_TakeInventory("StillFiring",1)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    goto RReady
  HoldMore:
    CHGN C 1 BRIGHT offset (0, 31) A_TakeInventory("StillFiring",1)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 4, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 16, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN E 1 BRIGHT offset (0, 32)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN F 1 BRIGHT offset (0, 32) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 AA 0 A_FireCustomMissile("GunFireSmoke", 0, 0, 2, -2, 0, 0)
    TNT1 A 0 A_FireCustomMissile("MuzzleFlashSmall",0,0,random[RIDFX](-2,2))
    TNT1 A 0 A_JumpIfInventory("FireChaingun", 1, 4)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "Chaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 1)
    TNT1 A 0 A_Jump(256,3)
    TNT1 A 0 A_FireBullets (3.5, 3.0, -1, 7, "FireChaingunpuff",0)
    TNT1 A 0 A_TakeInventory("ChaingunAmmo", 2)
    TNT1 A 0 BRIGHT A_FireCustomMissile("DecorativeTracer", random[RIDFX](-2,2), 0, 22, -12, 0, random[RIDFX](-2,2))
    TNT1 A 0 A_PlayWeaponSound("chaingun/shoot")
    TNT1 A 0 A_SetPitchD3D ("d3d_rchaingun",-1.2)
    CHGN G 1 BRIGHT offset (2, 34) A_FireCustomMissile("MonsterAlert",0,0,0)
    TNT1 A 0 A_ZoomFactorD3D("d3d_rchaingun",0.98)
    CHGN G 1 BRIGHT offset (2, 34) A_SetPitchD3D ("d3d_rchaingun",1.2)
    TNT1 A 0 A_ZoomFactor(1.0)
    TNT1 A 0 A_Firecustommissile("50CaseSpawnLeft",0,0,16,-16)

    TNT1 A 0 A_ForceReFire
    CHGN HIJ 2 BRIGHT offset (1, 32)
    TNT1 A 0 A_TakeInventory("Waiting",10)
    Goto RReady
  }
}

actor StillFiring : Inventory
{
  inventory.amount 0
  inventory.maxamount 1
}

actor FireChaingun : Inventory
{
  inventory.amount 0
  inventory.maxamount 1
}