ACTOR "Laser Chaingun" : Weapon 31020
{
    //$Category DN3D Weapons
	Weapon.SelectionOrder 40
	Weapon.BobStyle Normal
    Weapon.BobSpeed 1.4
    Weapon.BobRangeX 0.85
    Weapon.BobRangeY 0.6
    Weapon.AmmoUse 1
    Weapon.AmmoGive 50
    Weapon.AmmoType "Laser Ammo"
    Obituary "%o was incinerated by %k's laser chaingun."
    Inventory.PickupMessage "\cnLaser Chaingun!"
    Inventory.PickupSound "DukeNukem/PickWeapon"
    Scale 0.69
    +WEAPON.AMMO_OPTIONAL
	+WEAPON.ALT_AMMO_OPTIONAL
	+WEAPON.NOALERT
    States
    {
	Spawn:
		TNT1 A 0		
		TNT1 A 1 A_Jump(256,"Spawn1","Spawn2")
		Stop
	Spawn1:	
        LASG A -1
        Stop
	Spawn2:	
        LASG B -1
        Stop
    Ready:
	    LASC A 1 A_WeaponReady
        LASC A 0 A_JumpIfInventory("Waiting",15,"Knuckles")
		LASC AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_WeaponReady
		LASC A 0 A_GiveInventory("Waiting",1)
        Loop
	Knuckles:
        LASC AAAAA 1 A_Lower
        LASC 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:
        LASC AAAAA 1 A_Lower
		LASC A 0 A_TakeInventory("Waiting",15)
        LASC A 0 A_Lower
        Goto Deselect+4
    Select:
	    LASS A 0 A_PlaySound("LaserChaingun/Select",6)
		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_TakeInventory("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_GiveInventory("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)
        LASS ABCDEFGHIJKLMNOP 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSECONDARY|WRF_NOSWITCH) 
        LASC AAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSECONDARY|WRF_NOSWITCH) 
		Goto Ready 
    Fire:
		LASC E 0 A_JumpIfNoAmmo("FireFail")
		LASC E 0 A_JumpIfInventory("CoopModeL2",1,"Fire2")
		LASC E 0 A_GiveInventory("CoopModeL2",1)
        LASC E 0 A_FireCustomMissile("LaserProjectile",0,1,12,0)
        LASC E 0 A_TakeInventory("Waiting",15)
        LASC E 0 A_PlaySound("LaserChaingun/Shoot",5)
		LASC E 0 A_GunFlash
        LASC E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC F 0 A_AlertMonsters
		LASC F 0 A_GiveInventory("NewFlashC1",1)
		LASC F 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC CD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		LASC A 1 A_WeaponReady(WRF_NOSWITCH)  
	    Goto Stop1
	Stop1:
		LASC BCDABCDABBCCDDAABBBCCCDDDAAABBBBCCCCDDDDAAAA 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)  
        Goto Ready
    Fire2:
        LASC F 0 A_JumpIfInventory("CoopModeL3",1,"Fire3")
		LASC F 0 A_GiveInventory("CoopModeL3",1)
        LASC F 0 A_FireCustomMissile("LaserProjectile",0,1,12,0)
        LASC F 0 A_TakeInventory("Waiting",15)
        LASC F 0 A_PlaySound("LaserChaingun/Shoot",5)
		LASC F 0 A_GunFlash
        LASC F 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		LASC G 0 A_AlertMonsters
		LASC G 0 A_GiveInventory("NewFlashC2",1)
		LASC G 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC G 0 A_TakeInventory("NewFlashC1",1)
		LASC DA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASC B 1 A_WeaponReady(WRF_NOSWITCH)  
		Goto Stop2
	Stop2:
		LASC CDABCCDDAABBCCCDDDAAABBBBCCCCDDDDBBBBCCCCDDDD 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)  
        Goto Ready
    Fire3:
        LASC G 0 A_JumpIfInventory("CoopModeL4",1,"Fire4")
		LASC G 0 A_GiveInventory("CoopModeL4",1)
        LASC G 0 A_FireCustomMissile("LaserProjectile",0,1,12,0)
        LASC G 0 A_TakeInventory("Waiting",15)
        LASC G 0 A_PlaySound("LaserChaingun/Shoot",5)
		LASC G 0 A_GunFlash 
        LASC G 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC H 0 A_AlertMonsters
		LASC H 0 A_GiveInventory("NewFlashC3",1)
		LASC H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC H 0 A_TakeInventory("NewFlashC2",1) 
		LASC AB 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		LASC C 1 A_WeaponReady(WRF_NOSWITCH)  
	    Goto Stop3
	Stop3:
		LASC DABCDDAABBCCDDDAAABBBCCCDDDDAAAABBBBCCCCDDDD 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)  
        Goto Ready
	Fire4:
        LASC H 0 A_TakeInventory("CoopModeL2",1)
		LASC H 0 A_TakeInventory("CoopModeL3",1)
		LASC H 0 A_TakeInventory("CoopModeL4",1)
        LASC H 0 A_FireCustomMissile("LaserProjectile",0,1,12,0)
        LASC H 0 A_TakeInventory("Waiting",15)
        LASC H 0 A_PlaySound("LaserChaingun/Shoot",5)
		LASC H 0 A_GunFlash 
        LASC H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC E 0 A_AlertMonsters
		LASC E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		LASC E 0 A_TakeInventory("NewFlashC3",1) 
		LASC BC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)  
		LASC D 1 A_WeaponReady(WRF_NOSWITCH)  
	    Goto Stop3
	Stop4:
		LASC ABCDAABBCCDDAAABBBCCCDDDAAAABBBBCCCCDDDD 1 A_WeaponReady(WRF_NOSECONDARY|WRF_NOSWITCH)  
        Goto Ready
	Flash:
	    LASF E 0 A_JumpIfInventory("NewFlashC3",1,29)
	   	LASF E 0 A_JumpIfInventory("NewFlashC2",1,19)
	    LASF E 0 A_JumpIfInventory("NewFlashC1",1,9)
		LASF E 0 A_FireCustomMissile("DukeFlashShock1",0,0,0)
		LASF E 0 A_Light1
		LASF E 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF F 0 A_FireCustomMissile("DukeFlashShock2",0,0,0)
		LASF F 0 A_Light2
		LASF F 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF F 0 A_Light0  
		Goto LightDone
		LASF F 0 
		LASF F 0 A_FireCustomMissile("DukeFlashShock1",0,0,0)
		LASF F 0 A_Light1
		LASF F 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF G 0 A_FireCustomMissile("DukeFlashShock2",0,0,0)
		LASF G 0 A_Light2
		LASF G 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF G 0 A_Light0 
		Goto LightDone
		LASF G 0 
		LASF G 0 A_FireCustomMissile("DukeFlashShock1",0,0,0)
		LASF G 0 A_Light1
		LASF G 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF H 0 A_FireCustomMissile("DukeFlashShock2",0,0,0)
		LASF H 0 A_Light2
		LASF H 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF H 0 A_Light0 
		Goto LightDone
		LASF H 0 
		LASF H 0 A_FireCustomMissile("DukeFlashShock1",0,0,0)
		LASF H 0 A_Light1
		LASF H 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF A 0 A_FireCustomMissile("DukeFlashShock2",0,0,0)
		LASF A 0 A_Light2
		LASF A 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		LASF A 0 A_Light0 
		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:  
        LASC AAAAAAAAAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Stop
	FireFail:
	    LASC A 0 A_PlaySound("LaserChaingun/Fail",6)
		LASC A 0 A_TakeInventory("Waiting",15)
		LASC DABCDAABBCCDDAAABBBCCCDDDAAAABBBBCCCCDDDD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSECONDARY|WRF_NOSWITCH) 
        Goto Ready	
        }
}

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

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

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

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

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

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

ACTOR LaserProjectile : FastProjectile
{
    Radius 4
    Height 4
    Speed 60
    Damage (Random(29,27))
    Projectile
	DamageType "Damage_Laser"
	DeathSound "Laser/Death"
	Decal "LaserChaingunDecal"
    MissileType "LaserProjectileTrailSpawner"
	Obituary "%o was incinerated by %k's laser chaingun."
    RenderStyle Add
	+THRUGHOST
    States
    {
	Spawn:
	    TNT1 A -1 
	    Stop
    Death:
        TNT1 A 1 A_SpawnItemEx("LaserProjectileSmoke")
		TNT1 AAAAAAAA 0 A_CustomMissile("LaserProjectileParticle",0,0,Random(0,360),2,Random(0,360))
		TNT1 BCDEFGH 1
        Stop
        }
}

ACTOR LaserProjectileParticle
{
    Height 0
    Radius 0
    Mass 0
    +MISSILE
    +NOBLOCKMAP
    -NOGRAVITY
    +DOOMBOUNCE
	+MOVEWITHSECTOR
    +FORCEXYBILLBOARD
    BounceFactor 0.2
    Gravity 0.8
    RenderStyle Add
    Scale 0.030
    Speed 10
    States
    {
    Spawn:
    Death:
        LENB BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB 2 Bright A_FadeOut(0.04)
        Stop
    }
}

ACTOR LaserProjectileTrailSpawner
{
	+NOBLOCKMAP
	+NOGRAVITY
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 1 A_SpawnItemEx("LaserProjectileTrail",0,0,8,0,0,0,0,SXF_CLIENTSIDE,0)
		Stop
	}
}

ACTOR LaserProjectileTrail
{    
    Scale 0.068
    Mass 5
	RenderStyle Add
	+NOBLOCKMAP
    +NOGRAVITY
    States
    {
    Spawn:
        LENB BB 1 Bright
        Stop
    }
}

ACTOR LaserProjectileSmoke
{
	Projectile
	Damage (0)	
	Radius 1
	Height 1
	Scale 0.26
	Alpha 0.9
	Renderstyle Add
	+RIPPER
	+BLOODLESSIMPACT	
	States
    {
	Spawn:
        LCEF AAA 1 Bright A_FadeOut(0.075)
	    TNT1 A 0 A_Jump(128,"Set2")
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.26,0.26)
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.29,0.29)
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.32,0.32)
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.35,0.35)
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.38,0.38)
		LCEF B 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.41,0.41)
		LCEF D 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.44,0.44)
		LCEF D 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.47,0.47)
		LCEF D 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.50,0.50)
		LCEF D 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.53,0.53)
		LCEF D 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.56,0.56)
		LCEF D 1 Bright A_FadeOut(0.075)
		Stop
	Set2:
		LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.26,0.26)
		LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.29,0.29)
		LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.32,0.32)
		LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.35,0.35)
		LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.38,0.38)
        LCEF C 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.41,0.41)
		LCEF E 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.44,0.44)
		LCEF E 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.47,0.47)
		LCEF E 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.50,0.50)
		LCEF E 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.53,0.53)
		LCEF E 1 Bright A_FadeOut(0.075)
		TNT1 A 0 A_SetScale(0.56,0.56)
		LCEF E 1 Bright A_FadeOut(0.075)
		Stop
	}
}