ACTOR "Devastator" : Weapon Replaces BFG9000 31019
{
    //$Category DN3D Weapons
	Weapon.SelectionOrder 39
    Weapon.BobStyle Normal
    Weapon.BobSpeed 1.4
    Weapon.BobRangeX 0.85
    Weapon.BobRangeY 0.6
    Weapon.AmmoUse 1
    Weapon.AmmoGive 25
    Weapon.AmmoType "Devastator Ammo"
    Obituary "%o was devastated by %k's Devastator."
    Inventory.PickupMessage "\cnDevastator!"
    Inventory.PickupSound "DukeNukem/PickWeapon"
    Scale 0.718
	+WEAPON.AMMO_OPTIONAL
	+WEAPON.ALT_AMMO_OPTIONAL
	+WEAPON.NOALERT
    States
    {
	Spawn:
		TNT1 A 0		
		TNT1 A 1 A_Jump(256,"Spawn1","Spawn2")
		Stop
	Spawn1:	
        DEVP A -1
        Stop
	Spawn2:	
        2EVP A -1
        Stop
	Ready:
	    DEVG A 1 A_WeaponReady
        DEVG A 0 A_JumpIfInventory("Waiting",15,"Knuckles")
		DEVG AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_WeaponReady
		DEVG A 0 A_GiveInventory("Waiting",1)
        Loop
	Knuckles:
        DEVG AAAAA 1 A_Lower
        DEVG 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:
        DEVG AAAAA 1 A_Lower
        DEVG A 0 A_Lower
        Goto Deselect+4
    Select:
        DEVG 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_GiveInventory("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)
		DEVG A 0 A_PlaySound("Weapons/Up",6)
        DEVG A 0 A_Raise
        DEVG A 1 A_Raise
        DEVG A 0 A_Raise
        DEVG A 1 A_Raise
        DEVG A 0 A_Raise
        DEVG A 1 A_Raise
        DEVG A 0 A_Raise
        DEVG A 1 A_Raise
        DEVG A 0 A_Raise
        DEVG AAAAA 1 A_Raise
        DEVG AAAAAAAAAA 2 A_Raise
        Loop
    Fire:
	    DEVG H 0 A_JumpIfInventory("Devastator Ammo",2,2)
		DEVG H 0 A_JumpIfInventory("Devastator Ammo",1,"Fire1Rocket")
		DEVG H 0 A_JumpIfNoAmmo("FireFail")	 
        DEVG H 0 A_JumpIfInventory("DevastatorSwitch",1,"FireLeft")
		DEVG H 0 A_TakeInventory("Waiting",15)
		DEVG H 0 A_GunFlash
        DEVG H 0 A_PlaySound("Devastator/Shoot",6)
		DEVG H 0 A_PlaySound("Rpg/Shoot",5)
        DEVG H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG H 0 A_AlertMonsters
		DEVG H 0 A_GiveInventory("DevastatorSwitch",1)
        DEVG I 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG I 0 A_PlaySound("Rpg/Shoot",5)
        DEVG J 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG J 0 A_FireCustomMissile("DevastatorAttack",Random(0,3),1,10)
        DEVG K 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG K 0 A_FireCustomMissile("DevastatorAttack",Random(0,3),1,12,2)
        DEVG LLMM 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 0 A_GiveInventory("NewDevastatorFlash",1)
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready
    FireLeft:
		DEVG B 0 A_TakeInventory("Waiting",15)
		DEVG B 0 A_GunFlash
		DEVG B 0 A_PlaySound("Devastator/Shoot",6)
		DEVG B 0 A_PlaySound("Rpg/Shoot",5)
        DEVG B 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG B 0 A_AlertMonsters
		DEVG B 0 A_TakeInventory("DevastatorSwitch",1)
        DEVG C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG C 0 A_PlaySound("Rpg/Shoot",5)
        DEVG D 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG D 0 A_FireCustomMissile("DevastatorAttack",Random(-3,0),1,-10)
        DEVG E 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG E 0 A_FireCustomMissile("DevastatorAttack",Random(-3,0),1,-12,2)
        DEVG FFGG 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 0 A_TakeInventory("NewDevastatorFlash",1)
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready
	Fire1Rocket:
	    DEVG H 0 A_JumpIfInventory("DevastatorSwitch",1,"Fire1RocketLeft")
		DEVG H 0 A_TakeInventory("Waiting",15)
		DEVG H 0 A_GunFlash
        DEVG H 0 A_PlaySound("Devastator/Shoot",6)
		DEVG H 0 A_PlaySound("Rpg/Shoot",5)
        DEVG H 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG H 0 A_AlertMonsters
		DEVG H 0 A_GiveInventory("DevastatorSwitch",1)
        DEVG I 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG I 0 A_PlaySound("Rpg/Shoot",5)
        DEVG JK 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG K 0 A_FireCustomMissile("DevastatorAttack",Random(0,3),1,Random(10,12))
        DEVG LLMM 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 0 A_GiveInventory("NewDevastatorFlash",1)
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready
	Fire1RocketLeft:
		DEVG B 0 A_TakeInventory("Waiting",15)
		DEVG B 0 A_GunFlash
		DEVG B 0 A_PlaySound("Devastator/Shoot",6)
        DEVG B 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG B 0 A_AlertMonsters
		DEVG B 0 A_TakeInventory("DevastatorSwitch",1)
        DEVG C 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG C 0 A_PlaySound("Rpg/Shoot",5)
        DEVG DE 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG E 0 A_FireCustomMissile("DevastatorAttack",Random(-3,0),1,Random(-10,-12))
        DEVG FFGG 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 0 A_TakeInventory("NewDevastatorFlash",1)
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready
	Flash:
	    TNT1 A 1 A_JumpIfInventory("NewDevastatorFlash",1,10)
	    TNT1 A 1 
		TNT1 A 0 A_FireCustomMissile("DukeFlashSuperShotgun",0,0,0)
		DEVB J 1 Bright A_Light2
		TNT1 A 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		DEVB K 1 Bright A_Light1
		TNT1 A 0 A_FireCustomMissile("DukeFlashSuperShotgun",0,0,0)
		DEVB L 2 Bright A_Light2
		TNT1 A 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		DEVB M 2 Bright A_Light1
		Goto LightDone
		TNT1 A 1
	    TNT1 A 1
		TNT1 A 0 A_FireCustomMissile("DukeFlashSuperShotgun",0,0,0)
		DEVB D 1 Bright A_Light2
		TNT1 A 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		DEVB E 1 Bright A_Light1
		TNT1 A 0 A_FireCustomMissile("DukeFlashSuperShotgun",0,0,0)
		DEVB F 2 Bright A_Light2
		TNT1 A 0 A_FireCustomMissile("DukeFlashShotgun",0,0,0)
		DEVB G 2 Bright A_Light1
		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:  
        DEVG AAAAAAAAAAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Stop
	FireFail:
	    DEVG H 0 A_JumpIfInventory("DevastatorSwitch",1,"FireFail2")
		DEVG HI 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
		DEVG I 0 A_TakeInventory("Waiting",15)
        DEVG I 0 A_PlaySound("Executor/Fail",6)
		DEVG I 0 A_GiveInventory("DevastatorSwitch",1)
        DEVF JKLLMM 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready	
	FireFail2:
		DEVG BC 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG C 0 A_TakeInventory("Waiting",15)
        DEVG C 0 A_PlaySound("Executor/Fail",6)
		DEVG C 0 A_TakeInventory("DevastatorSwitch",1)
        DEVF DEFFGG 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
		DEVG A 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) 
        Goto Ready	
        }
}

ACTOR DevastatorAttack
{
    Radius 2
    Height 2
    Speed 30
    Damage (50)
    Projectile
    DeathSound "Rpg/BlowUp"
    Obituary "%o was devastated by %k's Devastator."
    Scale 0.23
	Decal "Scorch"
    DamageType "Devastator"
	+THRUGHOST
	+FORCERADIUSDMG
    States
    {
    Spawn:
        RPGX A 0 A_PlaySound("MiniRocket/Fly",CHAN_BODY,1.0,True)
		RPGX A 1 Bright A_SpawnItemEx("DevastatorSmoke",0,0,0,Random(-1,1),Random(-1,1),Random(-1,1))
		Loop
    Death:
		TNT1 A 0 A_StopSound(CHAN_BODY)
		TNT1 A 0 A_PlaySound("Explosion/Sounds2",11)
		TNT1 A 0 A_Explode(80,128)
        TNT1 A 1 A_SpawnItemEx("DukeNukemExplosion2",0,0,0,0,0,0,0,0)
        Stop
        }
}

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

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