ACTOR Devastator : Weapon 25555
{
    Tag "DVS-555a Devastator"
    Inventory.PickupMessage "You got the DVS-555a 'Devastator' AT Pistol."
    Inventory.PickupSound "misc/w_pkup"
    Weapon.UpSound "Weapons/PunisherUp"
    Weapon.AmmoGive2 1
    Weapon.AmmoType "DevastatorClip"
    Weapon.AmmoType2 "Devastator_Magazine"
    Weapon.AmmoUse 1
    Weapon.Kickback 100
    Weapon.Slotnumber 2
    Weapon.PreferredSkin "Pistol"
    weapon.bobstyle inversesmooth
    weapon.bobrangeX 0.4
    weapon.bobrangeY 0.6
    weapon.bobspeed 2.5
    Obituary "%o was blown the fuck away by %k and %p Devastator."
    decal "BlazeChip"
    Scale 0.8
	+Weapon.NoAutoFire
    +Weapon.Ammo_Optional
    +CHEATNOTWEAPON
    +NOALERT
	+NOAUTOAIM
    States
    {
    Spawn:
        DEVP A -1
        loop
    Ready:
        REPG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
        loop
    ReadyEmpty:
        REPG B 1 A_WeaponReady(WRF_ALLOWRELOAD)
        loop
    Deselect:
        TNT1 A 0 SetPlayerProperty(0,1,2)
        TNT1 A 0 A_SetCrosshair(1)
        REPS EDCBA 1
        Goto DeselectLoop
    DeselectLoop:
        TNT1 A 1 A_Lower
        Loop
    Select:
        TNT1 A 0 SetPlayerProperty(0,0,2)
        TNT1 A 0 A_SetCrosshair(2)
        REPS ABCDE 1
        Goto SelectLoop
    SelectLoop:
        REPG A 1 A_Raise
        loop
    Fire: //Semi Auto, Spam the mouse button.
    FireSemi:
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",15, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",14, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",13, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",12, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",11, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",10, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",9, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",8, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",7, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",6, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",5, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",4, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",3, "FireSemiTrue")
		TNT1 A 0 A_JumpIfInventory("DevastatorClip",2, "FireSemiTrue")
        TNT1 A 0 A_JumpIfInventory("DevastatorClip",1, "FireSemiLast")
        Goto DryFire
	FireSemiTrue:
        TNT1 A 0 A_AlertMonsters
        TNT1 A 0 A_SetPitch(pitch - 0.6)
		TNT1 A 0 Radius_Quake(1, 8, 0, 16, 0)
		TNT1 AAA 0 A_FireCustomMissile("gausssmoke_spawner2",0,0,3,4,0)		
        TNT1 A 0 A_SpawnItem("Lightprojectile",0,0,0,0)
        TNT1 A 0 A_PlaySound("Weapons/DevastatorFire",81,0.99)
		TNT1 A 0 A_PlaySound("Weapons/DevastatorFireAdd",82,0.99)
        TNT1 A 0 A_FireCustomMissile("dcasing_spawner",0,0,1,3,0)
        TNT1 A 0 A_FireCustomMissile("p_devastator_tracer",random(-0.5, 0.5),1,2.5,5,0,random(-0.5, 0.5))
        REPF A 1 Bright A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.99)
        REPF B 1 Bright A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.98)
        REPF C 1 A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.99)
        REPF D 1 A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(1.00)
        REPF E 1 A_WeaponReady
        Goto Ready
    FireSemiLast: //Semi Auto, Spam the mouse button.
        TNT1 A 0 A_AlertMonsters
        TNT1 A 0 A_SetPitch(pitch - 0.6)
		TNT1 A 0 Radius_Quake(1, 8, 0, 16, 0)
		TNT1 AAA 0 A_FireCustomMissile("gausssmoke_spawner2",0,0,3,4,0)		
        TNT1 A 0 A_SpawnItem("Lightprojectile",0,0,0,0)
        TNT1 A 0 A_PlaySound("Weapons/DevastatorFire",81,0.99,0,1)
		TNT1 A 0 A_PlaySound("Weapons/DevastatorFireAdd",82,0.99,0,1)
		TNT1 A 0 A_PlaySound("Weapons/OmenBolt",83,1.5,0,1)
        TNT1 A 0 A_FireCustomMissile("dcasing_spawner",0,0,1,3,0)
        TNT1 A 0 A_FireCustomMissile("p_devastator_tracer",random(-0.5, 0.5),1,2.5,5,0,random(-0.5, 0.5))
        REPF F 1 Bright A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.99)
        REPF G 1 Bright A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.98)
        REPF H 1 A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(0.99)
        REPF I 1 A_WeaponReady(WRF_NOFIRE)
        TNT1 A 0 A_ZoomFactor(1.00)
        REPF J 1 A_WeaponReady(WRF_NOFIRE)
        Goto ReadyEmpty
    DryFire:
        TNT1 A 0 A_PlaySound("Pistol/Empty",199,1.0,0,1) // Play the clicky noise.
        REPG B 5 A_WeaponReady(WRF_NOFIRE)
        Goto ReadyEmpty
    Reload:
    ReloadBegin:
        TNT1 A 0 A_JumpIfInventory("DevastatorClip",15,"Ready")
        TNT1 A 0 A_JumpIfInventory("Devastator_Magazine",1,1)
        Goto DryFire
        REPR ABC 1
		TNT1 A 0 A_PlaySound("Weapons/DevMagOut",87,1.0,0,1)
		REPR DEFGH 1
		TNT1 A 0 A_SpawnItemEx("DevastatorClipDrop",0,0,20)
		REPR I 16
    ReloadWork:
        TNT1 A 0 A_TakeInventory("Devastator_Magazine",1)
        TNT1 A 0 A_GiveInventory("DevastatorClip",15)
        TNT1 A 0 A_JumpIfInventory("DevastatorClip",15,"ReloadFinish")
        TNT1 A 0 A_JumpIfInventory("Devastator_Magazine",1,"ReloadWork")
    ReloadFinish:
		TNT1 A 0 A_PlaySound("Weapons/DevMagIn",88,1.0,0,1)
        REPR LMNOP 1
		REPR QRSTTTT 1
		REPR U 2
		TNT1 A 0 A_PlaySound("Weapons/DevMagLock",89,1.0,0,1)
		REPR V 5
		REPR WXYZ 1
		REPU ABCD 1
        REPG A 1 A_WeaponReady(WRF_NOFIRE)
        Goto Ready
    }
}

ACTOR DevastatorClip : Ammo
{
Inventory.Amount 0
Inventory.MaxAmount 15
Ammo.BackpackAmount 0
Ammo.BackpackMaxAmount 15
+IGNORESKILL
}

actor Devastator_magazine : Ammo 26205 {
  radius 16
  height 8
  scale 0.26
  ConversationID 506
  inventory.pickupmessage "picked up a Magazine of .555 Magnum ammo for the Devastator"
  inventory.amount 1
  inventory.maxamount 5
  inventory.pickupsound "Weapons/DevMagUp"
  ammo.backpackamount 2
  ammo.backpackmaxamount 10
  states
  {
  Spawn:
    DEVC A -1
    stop
  }
}

actor dcasing_spawner {
	speed 15
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	states{
		spawn:
			TNT1 A 0
			TNT1 A 1 A_SpawnItemEx("ARifle_Casing", 0,-5,3,-1, random(-4,-5), random(-1,-2), 0) 
			stop
	}

}

ACTOR DevastatorClipDrop
{
   Radius 3
   Height 5
   Speed 0
   Scale 0.26
   BounceSound "Clip/PST"
   PROJECTILE
   -NOGRAVITY
   +BOUNCEONACTORS
   +BOUNCEONCEILINGS
   +NOTIMEFREEZE
   Gravity 0.75
   BounceType Doom
   BounceCount 3
   BounceFactor 0.6
   States
   {
   Spawn:
      CLP1 A 0
      CLP1 ABCDEFGH 1
      Loop
   Death:
      CLP1 A 0 A_SpawnItemEx("DevastatorClipLiedown")
      stop
   }
}

actor DevastatorClipLiedown
{
	-NOGRAVITY
	+FLOORCLIP
	+NOTIMEFREEZE
    Scale 0.26
	States
	{
	Spawn:
	  TNT1 A 0
	  TNT1 A 0 A_Jump(255,"Spawn1","Spawn2")
	  stop
	Spawn1:
	  CLP1 J 1
	  Goto Ded
	Spawn2:
	  CLP1 I 1
	  Goto Ded
	Ded:
	  "####" "#" 210 A_CheckSight("Fadying")
	  Loop
	Fadying:
	  "####" "#" 1 A_FadeOut(0.1)
	  Wait
   }
}