ACTOR "Chaingun Cannon" : Weapon Replaces Chaingun 31007
{
    //$Category DN3D Weapons
	Weapon.SelectionOrder 28
	Weapon.BobStyle Normal
    Weapon.BobSpeed 1.4
    Weapon.BobRangeX 0.85
    Weapon.BobRangeY 0.6
    Weapon.AmmoUse 1
    Weapon.AmmoGive 50
    Weapon.AmmoType "Chaingun Ammo"
    Obituary "%o was riddled with bullets by %k's chaingun cannon."
    Inventory.PickupMessage "\cnChaingun Cannon!"
    Inventory.PickupSound "DukeNukem/PickWeapon"
    Scale 0.675
    +WEAPON.AMMO_OPTIONAL
	+WEAPON.ALT_AMMO_OPTIONAL
	+WEAPON.NOALERT
    States
    {
    Spawn:
		TNT1 A 0		
		TNT1 A 1 A_Jump(256,"Spawn1","Spawn2")
		Stop
	Spawn1:	
        CHGP A -1
        Stop
	Spawn2:	
        CHG2 A -1
        Stop
    Ready:
	    CDGN A 1 A_WeaponReady
        CDGN A 0 A_JumpIfInventory("Waiting",15,"Knuckles")
		CDGN AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_WeaponReady
		CDGN A 0 A_GiveInventory("Waiting",1)
        Loop
	Knuckles:
        CDGN AAAAA 1 A_Lower
        CDGN A 0 A_Lower
		KNUK A 0 A_PlaySound("DukeNukem/Waiting",8)
        KNUK A 0 A_TakeInventory("Waiting",15)
        KNUK A 1 Offset(0,120) 
		KNUK A 1 Offset(0,110)
		KNUK A 1 Offset(0,100)
		KNUK A 1 Offset(0,90)
		KNUK A 1 Offset(0,80)
		KNUK A 1 Offset(0,70)
		KNUK A 1 Offset(0,60)
		KNUK A 1 Offset(0,50)
		KNUK A 1 Offset(0,40)
		KNUK AAABBB 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		KNUK C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
        KNUK C 0 A_PlaySound("Duke/KNuckles",5)
		KNUK C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		KNUK C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
        KNUK DDDCCCBBBAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
        KNUK A 1 Offset(0,40)
		KNUK A 1 Offset(0,50)
		KNUK A 1 Offset(0,60)
		KNUK A 1 Offset(0,70)
		KNUK A 1 Offset(0,80)
		KNUK A 1 Offset(0,90)
		KNUK A 1 Offset(0,100)
		KNUK A 1 Offset(0,110)
		KNUK A 1 Offset(0,120)
        Goto Select
    Deselect:
        CDGN AAAAA 1 A_Lower
		CDGN A 0 A_TakeInventory("Waiting",15)
        CDGN A 0 A_Lower
        Goto Deselect+4
    Select:
        CDGN A 1 A_Raise
		TNT1 A 0 A_TakeInventory("CheckWeaponMightyFoot",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponPistol",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponDualPistol",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponBlackTail",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponDualBlackTail",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponDesertEagle",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponShotgun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponSuperShotgun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponAssaultShotgun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponExplosiveShotgun",1)
        TNT1 A 0 A_GiveInventory("CheckWeaponChaingun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponLMG2028",1)
		TNT1 A 0 A_TakeInventory("CheckWeaponMinigun",1)
		TNT1 A 0 A_TakeInventory("CheckWeaponExplosiveChaingun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponRPG",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponShockCannon",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponPipeBomb",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponLaserTripBomb",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponShrinker",1)
		TNT1 A 0 A_TakeInventory("CheckWeaponShrinker2",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponExpander",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponExecutor",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponDevastator",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponLaserChaingun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponRailgun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponFreezethrower",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponIncinerator",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponPulsethrower",1)
		CDGN A 0 A_PlaySound("Weapons/Up",6)
        CDGN A 0 A_Raise
        CDGN A 1 A_Raise
        CDGN A 0 A_Raise
        CDGN A 1 A_Raise
        CDGN A 0 A_Raise
        CDGN A 1 A_Raise
        CDGN A 0 A_Raise
        CDGN A 1 A_Raise
        CDGN A 0 A_Raise
        CDGN AAAAA 1 A_Raise
        CDGN AAAAAAAAAA 2 A_Raise
        Loop
    Fire:
		CDGN A 0 A_JumpIfNoAmmo("FireFail")
		CDGN A 0 A_JumpIfInventory("CoopModeMiddle",1,"FireMiddle")
		CDGN A 0 A_GiveInventory("CoopModeMiddle",1)
        CDGN A 0 A_FireBullets(Random(5,4),0,-1,Random(17,16),"BulletChaingunCannon",FBF_NORANDOM)
		CDGN A 0 A_TakeInventory("Chaingun Ammo",1)
        CDGN A 0 A_TakeInventory("Waiting",15)
        CDGN A 0 A_PlaySound("ChaingunCannon/Shoot",5)
        CDGN A 0 A_FireCustomMissile("ChaingunCasingSpawner",0,0,0,-1)
		CDGN B 0 A_GunFlash
        CDGN B 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		CDGN C 0 A_AlertMonsters
		CDGN C 0 A_GiveInventory("NewFlash1",1)
		CDGN C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		CDGN D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
        CDGN K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
        Goto Ready
    FireMiddle:
        CDGN E 0 A_JumpIfInventory("CoopModeRight",1,"FireRight")
		CDGN E 0 A_GiveInventory("CoopModeRight",1)
        CDGN E 0 A_FireBullets(Random(5,4),0,-1,Random(17,16),"BulletChaingunCannon",FBF_NORANDOM)
		CDGN E 0 A_TakeInventory("Chaingun Ammo",1)
        CDGN E 0 A_TakeInventory("Waiting",15)
        CDGN E 0 A_PlaySound("ChaingunCannon/Shoot",5)
        CDGN E 0 A_FireCustomMissile("ChaingunCasingSpawner",0,0,0,-1)
		CDGN E 0 A_GunFlash
        CDGN E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGN F 0 A_AlertMonsters
		CDGN F 0 A_GiveInventory("NewFlash2",1)
		CDGN F 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		CDGN G 0 A_TakeInventory("NewFlash1",1)
		CDGN G 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
        CDGN K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
        Goto Ready
    FireRight:
        CDGN H 0 A_TakeInventory("CoopModeMiddle",1)
		CDGN H 0 A_TakeInventory("CoopModeRight",1)
        CDGN H 0 A_FireBullets(Random(5,4),0,-1,Random(17,16),"BulletChaingunCannon",FBF_NORANDOM)
		CDGN H 0 A_TakeInventory("Chaingun Ammo",1)
        CDGN H 0 A_TakeInventory("Waiting",15)
        CDGN H 0 A_PlaySound("ChaingunCannon/Shoot",5)
        CDGN H 0 A_FireCustomMissile("ChaingunCasingSpawner",0,0,0,-1)
		CDGN H 0 A_GunFlash 
        CDGN H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		CDGN I 0 A_AlertMonsters
		CDGN I 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		CDGN J 0 A_TakeInventory("NewFlash2",1) 
		CDGN J 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
        CDGN K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
        Goto Ready
	Flash:
	   	CDGF B 0 A_JumpIfInventory("NewFlash2",1,26)
	    CDGF B 0 A_JumpIfInventory("NewFlash1",1,13)
		CDGF B 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF B 0 A_Light2
		CDGF B 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF C 0 
		CDGF C 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF C 0 A_Light2
		CDGF C 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF D 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF D 0 A_Light1
		CDGF D 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF K 0 A_Light0
		CDGF K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		Goto LightDone
		CDGF E 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF E 0 A_Light2
		CDGF E 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF F 0 
		CDGF F 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF F 0 A_Light2
		CDGF F 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF G 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF G 0 A_Light1
		CDGF G 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF K 0 A_Light0
		CDGF K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		Goto LightDone
		CDGF H 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF H 0 A_Light2
		CDGF H 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF I 0 
		CDGF I 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF I 0 A_Light2
		CDGF I 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF J 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		CDGF J 0 A_Light1
		CDGF J 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		CDGF K 0 A_Light0
		CDGF K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		Goto LightDone
	AltFire:
        BOOT C 0 A_JumpIfInventory("PowerStrength",1,22)
		BOOT C 0 A_GunFlash
		BOOT C 0 ACS_ExecuteAlways(500,0,FAS_ActorKick)
		BOOT CCCCCC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		BOOT C 0 A_CustomPunch(Random(26,30),0,0,"MightyBootPuff")
		BOOT C 0 A_TakeInventory("Waiting",15)
        BOOT DDDDD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        BOOT CCCCC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        BOOT C 0 A_Refire
        Goto Ready  
		BOOT C 0 ACS_ExecuteAlways(500,0,FAS_ActorKick)
		BOOT C 0 A_GunFlash
		BOOT CCCCCC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		BOOT C 0 A_CustomPunch(10*Random(26,30),0,0,"MightyBootPuff")
		BOOT C 0 A_TakeInventory("Waiting",15)
        BOOT DDDDD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        BOOT CCCCC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        BOOT C 0 A_Refire
        Goto Ready	
	AltFlash:  
        CDGN AAAAAAAAAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Stop
	FireFail:
	    CDGN A 0 A_PlaySound("Chaingun/Fail",6)
		CDGN A 0 A_TakeInventory("Waiting",15)
		CDGN AAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready	
        }
}

ACTOR NewFlash1 : Inventory
{
    Inventory.Amount 0
    Inventory.MaxAmount 1
}

ACTOR NewFlash2 : Inventory
{
    Inventory.Amount 0
    Inventory.MaxAmount 1
}

ACTOR CoopModeMiddle : Inventory
{
    Inventory.Amount 0
    Inventory.MaxAmount 1
}

ACTOR CoopModeRight : Inventory
{
    Inventory.Amount 0
    Inventory.MaxAmount 1
}

ACTOR DukeFlashChaingunCannon
{
    Speed 1
    Radius 1
    Height 1
    Damage 0
    Projectile
    +NOCLIP
	+NOTIMEFREEZE
    States
    {
    Spawn:
        TNT1 A 0 
		TNT1 A 1
        Stop
    }
}