ACTOR " Railgun " : Weapon Replaces BackPack 31021
{
    //$Category DN3D Weapons
	Weapon.SelectionOrder 41
	Weapon.BobStyle Normal
    Weapon.BobSpeed 1.4
    Weapon.BobRangeX 0.85
    Weapon.BobRangeY 0.6
    Weapon.AmmoUse 5
    Weapon.AmmoGive 50
    Weapon.AmmoType "Laser Ammo"
    Obituary "%o was burned by %k's railgun."
    Inventory.PickupMessage "\cnRailgun!"
    Inventory.PickupSound "DukeNukem/PickWeapon"
    Scale 0.62
    +WEAPON.AMMO_OPTIONAL
	+WEAPON.ALT_AMMO_OPTIONAL
	+WEAPON.NOALERT
    States
    {
	Spawn:
		TNT1 A 0		
		TNT1 A 1 A_Jump(256,"Spawn1","Spawn2")
		Stop
	Spawn1:	
        RAIP A -1
        Stop
	Spawn2:	
        RAIP B -1
        Stop
    Ready:
	    RADU A 1 A_WeaponReady
        RADU A 0 A_JumpIfInventory("Waiting",15,"Knuckles")
		RADU AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_WeaponReady
		RADU A 0 A_GiveInventory("Waiting",1)
        Loop
	Knuckles:
        RADU AAAAA 1 A_Lower
        RADU 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:
        RADU AAAAA 1 A_Lower
		RADU A 0 A_TakeInventory("Waiting",15)
        RADU A 0 A_Lower
        Goto Deselect+4
    Select:
        RADU 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_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_TakeInventory("CheckWeaponLaserChaingun",1)
        TNT1 A 0 A_GiveInventory("CheckWeaponRailgun",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponFreezethrower",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponIncinerator",1)
        TNT1 A 0 A_TakeInventory("CheckWeaponPulsethrower",1)
		RADU A 0 A_PlaySound("Railgun/Up",6)
        RADU A 0 A_Raise
        RADU A 1 A_Raise
        RADU A 0 A_Raise
        RADU A 1 A_Raise
        RADU A 0 A_Raise
        RADU A 1 A_Raise
        RADU A 0 A_Raise
        RADU A 1 A_Raise
        RADU A 0 A_Raise
        RADU AAAAA 1 A_Raise
        RADU AAAAAAAAAA 2 A_Raise
        Loop 
    Fire:
	    RADU B 0 A_JumpIfInventory("Laser Ammo",5,5)
		RADU B 0 A_JumpIfInventory("Laser Ammo",4,"FireFail")
		RADU B 0 A_JumpIfInventory("Laser Ammo",3,"FireFail")
		RADU B 0 A_JumpIfInventory("Laser Ammo",2,"FireFail")
		RADU B 0 A_JumpIfInventory("Laser Ammo",1,"FireFail")
		RADU B 0 
		RADU B 0 A_JumpIfNoAmmo("FireFail")
		RADU B 0 A_GunFlash
		RADU BCD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADU D 0 A_FireBullets(-5,0,1,0,"RailgunThunderPuff",0,5000) 
		RADU D 0 A_RailAttack(250,7,1,"Red","Blue",0,0,"RailgunThunder2Puff",0,0,0,0,5,1.0,"DukeRailGunTrail")
		RADU D 0 A_TakeInventory("Waiting",15)
		RADU D 0 A_AlertMonsters
		RADU E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		RADU FGHIJKLMNNOO 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)   
		RADU PPQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		Goto Ready
	Flash:
		RADF B 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		RADF B 0 A_Light1
		RADF B 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF C 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		RADF C 0 A_Light1
		RADF C 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF D 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		RADF D 0 A_Light1
		RADF D 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF E 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		RADF E 0 A_Light1
		RADF E 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF F 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		RADF F 0 A_Light2
		RADF F 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF G 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		RADF G 0 A_Light2
		RADF G 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF H 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		RADF H 0 A_Light2
		RADF H 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF I 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		RADF I 0 A_Light1
		RADF I 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF J 0 A_FireCustomMissile("DukeFlashChaingunCannon",0,0,0)
		RADF J 0 A_Light1
		RADF J 1 Bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		RADF K 0 A_Light0
		RADF KLMNNOO 1 Bright 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:  
        RADU AAAAAAAAAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Stop
	FireFail:
		RADU A 0 A_PlaySound("Railgun/Fail",6)
		RADU A 0 A_TakeInventory("Waiting",15)
		RADU AAAAAAAAAAAAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready	
        }
}

ACTOR DukeRailGunTrail
{ 
    Scale 0.075
    Alpha 0.7
    RenderStyle Add
	Obituary "%o was burned by %k's railgun."
	DamageType "Damage_Railgun"
    +NOINTERACTION
    +NOGRAVITY
	+THRUGHOST
    States
    {
    Spawn:
        LENR B 0
        LENR B 1 Bright A_SpawnItemEx("RailgunProjectileParticle",Random(4,-4),Random(4,-4),Random(4,-4),0,0,0,0,128,0)
    Death:
        LENR BBBBBBBBBBBBBBBBBBBBBBBBBB 1 Bright A_FadeOut(0.025)
        Stop
    }
}

ACTOR RailgunProjectileParticle
{ 
    RenderStyle Add
    Scale 0.018
    Alpha 0.95
    +NOINTERACTION
    +NOGRAVITY
    States
    {
    Spawn:
	    LENB B 0 NoDelay A_JumpIf(ScaleX<=0,"NULL")
	    LENB B 0 A_SetScale(ScaleX-0.0008)
        LENB B 1 Bright A_ChangeVelocity(FRandom(-0.2,0.2),FRandom(-0.2,0.2),FRandom(-0.2,0.2),0)
        LENB B 2 Bright A_FadeOut(0.05)
        Loop
    }
}