Actor DnD_NoTempPickup : DnD_Boolean { }

Actor Sawedoff : Weapon {
	radius 20
	height 16
	Weapon.SlotNumber 9
	weapon.selectionorder 6666
	weapon.kickback 100
	obituary "%o was wiped off the face of earth by %k's sawedoff."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Sawedoff - 9"
	weapon.ammotype "SawedoffShell"
	weapon.ammotype2 "SawedoffCounter"
	weapon.ammouse 0
	weapon.ammouse2 0
	weapon.ammogive 0
	weapon.ammogive2 0
	Decal "BulletChip"
	YScale 0.59
	XScale 0.4
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Tag "$WEP_9_0_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Remove:
			TSWN A 1 Offset(0, 40)
			TSWN A 1 Offset(0, 48)
			TSWN A 1 Offset(0, 56)
			TSWN A 1 Offset(0, 64)
			TSWN A 1 Offset(0, 72)
			TSWN A 1 Offset(0, 80)
			TSWN A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("SawedoffShell", 1, "RiseBack")
			TSWN A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			//TNT1 A 0 A_TakeInventory("SawedOffCounter", 0)
			TNT1 A 0 A_TakeInventory("SawedoffShell", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Sawedoff", 1)
			TNT1 A 1
		Stop
		RiseBack:
			TSWN A 1 Offset(0, 88)
			TSWN A 1 Offset(0, 80)
			TSWN A 1 Offset(0, 72)
			TSWN A 1 Offset(0, 64)
			TSWN A 1 Offset(0, 56)
			TSWN A 1 Offset(0, 48)
			TSWN A 1 Offset(0, 40)
		Goto Ready
		Spawn:
			TSWP A -1
		stop
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("SawedoffShell", 1, "NoRemove")
			TNT1 A 0 A_JumpIfInventory("SawedoffCounter", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			TSWN A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Goto Ready
		Deselect: 
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
		DeselectLoop:
			TSWN A 1 A_Lower
			TNT1 A 0 A_Lower
		loop
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_SAWEDOFF)
		SelectLoop:
			TSWN A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SAWEDOFF, 1), "FireConfirmed")
			TSWN A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SAWEDOFF, 0), "Keep")
			TSWN A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TSW1 A 1 Bright
			TNT1 A 0 A_GunFlash
			TSW1 B 1 Bright
			TNT1 A 0 A_PlayWeaponSound("Sawedoff/Fire1")
			TNT1 AAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 2, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SAWEDOFF, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_SAWEDOFFSHELL << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_SetPitch(pitch - 3.0)
			TSW1 CDEF 1 Bright A_SetPitch(pitch + 0.5)
			TSW1 GH 1 A_SetPitch(pitch + 0.5)
			TSW1 I 1
			TSWN A 2
		FireFinishCheck:
			TNT1 A 0 A_JumpIfInventory("SawedoffCounter", 1, "Nothing")
		FireEnd:
			TNT1 A 0 A_JumpIfInventory("SawedOffShell", 1, "Keep")
		Goto Ready
		Keep:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			TSWN KLM 2
			TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*36,8,26+(sin(-pitch)*36),cos(-pitch)*0,random(5, 8), random(0, 1),0,0,0)
			TSWN NOPQRS 1
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_SAWEDOFF)
			TNT1 A 0 A_PlaySound("Sawedoff/Load")
			TSWN TUVX 1
			TSWN MLK 2
			TSWN A 1 A_ReFire	
		Goto Ready
		ReloadFaster:
			TSWN KLM 1
			TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*36,8,26+(sin(-pitch)*36),cos(-pitch)*0,random(5, 8), random(0, 1),0,0,0)
			TSWN NPRS 1
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_SAWEDOFF)
			TNT1 A 0 A_PlaySound("Sawedoff/Load")
			TSWN TUVX 1
			TSWN MLK 1
			TSWN A 1 A_ReFire	
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("SawedoffCounter", 2, "Nothing")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SAWEDOFF, 0), "Keep")
			TSWN A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Keep
		Nothing:
			TSWN A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SAWEDOFF, 1, 2), "AltFireConfirmed")
			TSWN A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SAWEDOFF, 1), "FireConfirmed")
			TSWN A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			TSWN B 1 Bright
			TNT1 A 0 A_GunFlash
			TSWN C 1 Bright
			TNT1 A 0 A_PlayWeaponSound("Sawedoff/Fire2")
			TNT1 AAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 4, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SAWEDOFF, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_SAWEDOFFSHELL << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_SetPitch(pitch - 6.0)
			TSWN DEFG 1 Bright A_SetPitch(pitch + 0.6)
			TSWN HIJ 1 A_SetPitch(pitch + 0.6)
			TSWX ABC 1 A_SetPitch(pitch + 0.6)
			TSWN A 2
		Goto FireFinishCheck
		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
	}
}

Actor SawedoffPuff : DnD_BasePuff {
	Stamina 4096
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor SawedoffPickup : CustomInventory
{
	Radius 16
	Height 24
	YScale 0.59
    XScale 0.4
	Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Sawedoff - 9\c-"
	+DONTGIB
	States
	{
		Spawn:
			TSWP A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SAWEDOFF), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Sawedoff", 1)
			TNT1 A 0 A_GiveInventory("SawedOffCounter", 2)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SAWEDOFF)
			TNT1 A 0 A_GiveInventory("SawedoffShell", random(6, 16) + ACS_ExecuteWithResult(918, 0, 1, random(6, 16)))
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("SawedoffShell", random(3, 8))
		Stop
	}
}

Actor SawedOffMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_SAWEDOFF)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor SawedOffPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	YScale 0.59
    XScale 0.4
	States {
		Spawn:
			TSWP A 17
		SpawnLoop:
			TSWP A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 360, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			TSWP A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			TSWP A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SAWEDOFF, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			TSWP A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Sawedoff", 1)
			TNT1 A 0 A_GiveToTarget("SawedoffShell", mass)
			TNT1 A 0 A_GiveToTarget("SawedOffMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SAWEDOFF, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

ACTOR "Soul Render" : Weapon
{
   Inventory.PickupMessage "You got the Soul Render!"
   Obituary "%k sliced and diced %o to pieces."
   Weapon.AmmoType "BladeHits"
   Weapon.SelectionOrder 6666
   +WEAPON.AXEBLOOD
   +AMMO_OPTIONAL
   +ALT_AMMO_OPTIONAL
   +WEAPON.NOALERT
   Weapon.AmmoUse 0
   Weapon.AmmoGive 0
   Weapon.AmmoType "BladeHits"
   Weapon.AmmoType2 "BladeCharge"
   Weapon.AmmoGive2 0
   Weapon.AmmoUse2 0
   Weapon.Slotnumber 9
   AttackSound "weapons/vblhit"
   +INVENTORY.UNDROPPABLE
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 2.1
    Weapon.BobRangeY 0.4
    Weapon.BobRangeX 0.7
	Tag "$WEP_9_1_TAG"
	+WEAPON.NOAUTOAIM
   States
   {
   Spawn:
      WVBL A -1 Bright
      Stop
  Remove:
      VBLG A 1 Offset(0, 40)
	  VBLG A 1 Offset(0, 48)
	  VBLG A 1 Offset(0, 56)
	  VBLG A 1 Offset(0, 64)
	  VBLG A 1 Offset(0, 72)
	  VBLG A 1 Offset(0, 80)
	  VBLG A 1 Offset(0, 88)
	  TNT1 A 0 A_JumpIfInventory("BladeHits", 1, "RiseBack") 
	  VBLG A 1 Offset(0, 96)
	  TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
      TNT1 A 0 A_TakeInventory("BladeCharge", 100)
	  TNT1 A 0 A_TakeInventory("BladeHits", 0)
	  TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
	  TNT1 A 0 A_TakeInventory("Soul Render", 1)
	  TNT1 A 1
      Stop
	RiseBack:
		VBLG A 1 Offset(0, 88)
		VBLG A 1 Offset(0, 80)
		VBLG A 1 Offset(0, 72)
		VBLG A 1 Offset(0, 64)
		VBLG A 1 Offset(0, 56)
		VBLG A 1 Offset(0, 48)
		VBLG A 1 Offset(0, 40)
    Goto Ready
   Ready:
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      TNT1 A 0 A_JumpIfInventory("BladeHits", 1, "NoRemove")
	Goto Remove
	NoRemove:
	  TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
      TNT1 A 0 A_JumpIfInventory("BladeCharge", 100, "ChargeReady")
	  TNT1 A 0 A_JumpIfInventory("DrainMode", 1, "DrainReady")
      VBLG A 1 A_WeaponReady
	Goto Ready
   DrainReady:
      TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB2G A 1 Bright A_WeaponReady
      TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB2G A 1 Bright A_WeaponReady
      TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB2G A 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB2G B 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB2G B 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB2G B 1 Bright A_WeaponReady
      Loop
   ChargeReady:
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB3G A 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB3G A 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      VB3G A 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G B 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G B 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G B 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G C 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G C 1 Bright A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  VB3G C 1 Bright A_WeaponReady
      Loop
   Deselect:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
   DeselectLoop:
      VBLG A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
	  TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 40, 3 | (4 << 16), DND_WEAPON_SOULRENDER)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 40, 6 | (8 << 16), DND_WEAPON_SOULRENDER)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 20, 1 | (8 << 16), DND_WEAPON_SOULRENDER)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 75, 0, DND_WEAPON_SOULRENDER)
	SelectLoop:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
      VBLG A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
   Fire:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SOULRENDER, 0), "FireConfirmed")
	  VBLG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
   Goto Ready
   FireCheckInvis:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SOULRENDER, 0), "FireConfirmed")
	  TNT1 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
   Goto ContFireCheckInvis
   FireConfirmed:
      // This fixes the A_Refire not making you go to Ready for the removal of the weapon
      TNT1 A 0 A_JumpIfInventory("BladeCharge",100,"Fire2")
	  TNT1 A 0 A_JumpIfInventory("DrainMode", 1, "DrainFire")
      VBLG B 3 A_AlertMonsters
      VBLG C 1 A_PlayWeaponSound("weapons/hamswg")
	  VBLX AB 1
      VBLG D 1 
	  VBLX CD 1
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0 A_SetInvulnerable
      VBLG E 1 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SOULRENDER, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOTAKE)
	  VBLX EF 1
      VBLG F 1 
	  VBLX GH 1
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0  A_UnSetInvulnerable
      VBLG G 3 
      TNT1 A 4 
      TNT1 A 0 A_ReFire("FireCheckInvis")
    ContFireCheckInvis:
      VBLG A 1 Offset (0,80)
      VBLG A 1 Offset (0,72)
      VBLG A 1 Offset (0,64)
      VBLG A 1 Offset (0,56)
      VBLG A 1 Offset (0,48)
	  VBLG A 1 Offset (0,40)
      Goto Ready
   Fire2CheckInvis:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SOULRENDER, 0), "Fire2")
	  TNT1 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
   Goto ContFire2CheckInvis
   Fire2:
      VB3G D 3 Bright A_AlertMonsters
      VB3G E 1 Bright A_PlayWeaponSound("weapons/vblswg")
	  VB3X AB 1 Bright
      VB3G F 1 Bright
	  VB3X CD 1 Bright
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0 A_SetInvulnerable
	  TNT1 A 0 ACS_NamedExecuteAlways("DnD Ammo Gain Chance", 0, DND_AMMOSLOT_TEMPORARY, DND_TEMPAMMO_BLADEHITS, 15)
	  TNT1 A 0 A_TakeInventory("BladeHits", 15)
	  TNT1 A 0 A_TakeInventory("BladeCharge", 100)
	  TNT1 A 0 Radius_Quake(6,6,0,1,0)
      VB3G G 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SOULRENDER, DND_ATK_SECONDARY, 0, DND_ATF_NOAMMOTAKE)
	  VB3X EF 1 Bright
      VB3G H 1 Bright 
	  VB3X GH 1 Bright
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0 A_UnSetInvulnerable
      VB3G I 3 Bright
      TNT1 A 4
      TNT1 A 0 A_ReFire("Fire2CheckInvis")
	ContFire2CheckInvis:
	  TNT1 A 0 A_JumpIfInventory("BladeCharge", 100, "RaiseFlame")
	  TNT1 A 0 A_JumpIfInventory("DrainMode", 1, "RaiseDrain")
      VBLG A 1 Offset (0,80)
      VBLG A 1 Offset (0,72)
      VBLG A 1 Offset (0,64)
      VBLG A 1 Offset (0,56)
      VBLG A 1 Offset (0,48)
	  VBLG A 1 Offset (0,40)
      Goto Ready
   AltFire:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_JumpIfInventory("DrainMode", 1, "TakeDrain")
	  TNT1 A 0 A_GiveInventory("DrainMode", 1)
	  TNT1 A 0 A_JumpIfInventory("BladeCharge",100,"Ready") //Skip regular/green if charge is at 100%
	  VB2G AB 3 Bright
   Goto Ready
   TakeDrain:
	  TNT1 A 0 A_TakeInventory("DrainMode", 1)
	  TNT1 A 0 A_JumpIfInventory("BladeCharge",100,"Ready") //Skip regular/green if charge is at 100%
	  VBLG A 6
   Goto Ready
   DrainCheckInvis:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SOULRENDER, 0), "DrainFire")
	  TNT1 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
   Goto ContDrainCheckInvis
   DrainFire:
      TNT1 A 0 A_JumpIfInventory("BladeCharge",100,"Fire2")
      VB2G C 3 Bright A_AlertMonsters
      VB2G D 1 Bright A_PlayWeaponSound("weapons/hamswg")
	  VB2X AB 1 Bright
      VB2G E 1 Bright 
	  VB2X CD 1 Bright
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0 A_SetInvulnerable
      VB2G F 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SOULRENDER, DND_ATK_OTHER_DIR, 0, DND_ATF_NOAMMOTAKE)
	  VB2X EF 1 Bright
      VB2G G 1 Bright 
	  VB2X GH 1 Bright
	  TNT1 A 0 A_JumpIfInventory("PowerInvulnerable", 1, 3)
	  TNT1 A 0 A_JumpIfInventory("ShieldPowerupGiver", 1, 2)
      TNT1 A 0 A_UnSetInvulnerable
      VB2G H 3 Bright 
      TNT1 A 4
      TNT1 A 0 A_ReFire("DrainCheckInvis")
	ContDrainCheckInvis:
	  TNT1 A 0 A_JumpIfInventory("BladeCharge", 100, "RaiseFlame")
   RaiseDrain:
      VB2G A 1 Bright Offset (0,80)
      VB2G B 1 Bright Offset (0,72)
      VB2G A 1 Bright Offset (0,64)
      VB2G B 1 Bright Offset (0,56)
      VB2G A 1 Bright Offset (0,48)
	  VB2G B 1 Bright Offset (0,40)
      Goto Ready
   RaiseFlame:
      VB3G B 1 Bright Offset (0,80)
      VB3G B 1 Bright Offset (0,72)
      VB3G B 1 Bright Offset (0,64)
      VB3G C 1 Bright Offset (0,56)
      VB3G C 1 Bright Offset (0,48)
	  VB3G C 1 Bright Offset (0,40)  
      Goto Ready
   }
}

Actor DrainMode : DND_Boolean { }

Actor BladeSlash_Damager : DnD_BaseProjectile {
	Radius 12
	Height 24
	
	Damage(
		DND_WEAPON_SOULRENDER |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 1048576
	
	Speed 0
	States {
		SpawnState:
			TNT1 A 1
		Stop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor BladeSlash_Damager_Crit : BladeSlash_Damager {
	Accuracy 69
}

ACTOR BladeSlash : DnD_BaseProjectile {
	Radius 8
	Height 16
	Speed 25
	RENDERSTYLE ADD
	ALPHA 0.75
	ReactionTime 15
	+RIPPER
	+EXTREMEDEATH
	+MTHRUSPECIES
	+FOILINVUL
	+DONTREFLECT
	States {
		SpawnState:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Update Melee ReactionTime", 15)
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			VFX4 A 1 Bright A_SpawnItem("SlashTrail",0,0)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", -50, -160, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", -40, -128, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", -30, -96, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", -20, -64, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", -10, -32, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 10, 32, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 20, 64, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 30, 96, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 40, 128, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 50, 160, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CountDown
		Loop
		Crit:
			VFX4 A 1 Bright A_SpawnItem("SlashTrail",0,0)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", -50, -160, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", -40, -128, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", -30, -96, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", -20, -64, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", -10, -32, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 10, 32, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 20, 64, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 30, 96, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 40, 128, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 50, 160, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("BladeSlash_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CountDown
		Loop
		Death:
			TNT1 A 3
		Stop
	}
}

ACTOR SlashTrail {
	Radius 3
	Height 3
	RENDERSTYLE ADD
	ALPHA 0.80
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 1
			VFX4 A 2 Bright A_FadeOut(0.10)
		Goto Spawn+1
	}
}

ACTOR SwordFXGreen {
	Radius 1
	Height 1
	Speed 3
	Damage 0
	Scale 1.4
	PROJECTILE
	+NOGRAVITY
	+CLIENTSIDEONLY
	States
	{
	Spawn:
		SWFX A 14 BRIGHT
		SWFX B 14 BRIGHT
		Stop
	}
}

ACTOR SwordFXRed {
	Radius 1
	Height 1
	Speed 3
	Damage 0
	Scale 1.4
	PROJECTILE
	+NOGRAVITY
	+CLIENTSIDEONLY
	States
	{
	Spawn:
		KN2M F 14 BRIGHT
		KN2M G 14 BRIGHT
		Stop
	}
}

Actor BladeHitFX {
	Radius 4
	Height 8
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			BLHB F 4
			BLHB GHIJK 3
		Stop
	}
}

Actor BladePuff1 : DnD_BasePuff {
	Height 2
	Radius 1
	Stamina 4096
	+LOOKALLAROUND
	+FORCEXYBILLBOARD
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 A_SpawnItemEx("BladeHitFX")
		HitNoBlood:
			TNT1 A 0 A_PlaySound("weapons/swinghit")
			TNT1 A 2 A_GiveToTarget("BladeCharge", 5)
			TNT1 A 2 A_TakeFromTarget("BladeHits", 1)
		Stop
		Crash:
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			VFX2 A 3 A_PlaySound("weapons/vblwal")
			VFX2 BCDE 3
		Stop
	}
}

Actor BladePuff2 : DnD_BasePuff {
	Height 2
	Radius 1
	Renderstyle Add
	Alpha 0.85
	Stamina 4096
	+LOOKALLAROUND
	+FORCEXYBILLBOARD
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 A_SpawnItemEx("BladeHitFX")
		HitNoBlood:
			VFX3 A 1 Bright A_PlaySound("weapons/vblhi2")
			TNT1 A 0 A_GivetoTarget("SoulRenderHealerWeak", 1)
			VFX3 A 2 Bright A_GiveToTarget("BladeCharge", 15)
			VFX3 A 2 Bright A_TakeFromTarget("BladeHits", 2)
			TNT1 AAAAAAAAAAAAAAA 0 A_CustomMissile("SwordFXGreen", random(0, 8), random(-4, 4), random(0, 360), 0, random(-16, 16))
			VFX3 BCDEFGHIJ 3 Bright
		Stop
		Crash:
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			VFX1 A 3 Bright A_PlaySound("weapons/vblwa2")
			VFX1 BCDEFG 3 Bright
		Stop
	}
}

Actor BladePuff3 : BladePuff2 {
	Height 2
	Radius 1
	Renderstyle Add
	Alpha 0.85
	
	Stamina 4096
	
	+LOOKALLAROUND
	+FORCEXYBILLBOARD
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 A_SpawnItemEx("BladeHitFX")
		HitNoBlood:
			VFX6 A 1 Bright A_PlaySound("weapons/vblhi3")
			TNT1 A 0 A_GivetoTarget("SoulRenderHealer", 1)
			VFX6 A 2 Bright A_GiveToTarget("BladeCharge", 15)
			VFX6 A 2 Bright A_TakeFromTarget("BladeHits", 2)
			TNT1 AAAAAAAAAAAAAAA 0 A_CustomMissile("SwordFXRed", random(0, 8), random(-4, 4), random(0, 360), 0, random(-16, 16))
			VFX6 BCDE 3 Bright
		Stop
		Crash:
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			HADE R 3 Bright A_PlaySound("weapons/vblwa2")
			HADE STUVWX 3 Bright
		Stop
	}
}

Actor SoulRenderHealerWeak : CustomInventory
{
	inventory.maxamount 2
	States
	{
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Health Pickup", 0, 10)
		Stop
	}
}

Actor SoulRenderHealer: SoulRenderHealerWeak
{
	States
	{
		Pickup:
			TNT1 A 0 A_GiveInventory("Souls", 2)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Health Pickup", 0, 30)
		Stop
	}
}

Actor SoulRenderPickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Soul Render - 9\c-"	
	+DONTGIB
	States
	{
		Spawn:
			WVBL A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SOULRENDER), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Soul Render", 1)
			TNT1 A 0 A_GiveInventory("BladeHits", 15 * random(1, 3))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SOULRENDER)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_TakeInventory("BladeHits", 15 * random(1, 2))
		Stop
	}
}

Actor SoulRenderMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_SOULRENDER)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor SoulRenderPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	States {
		Spawn:
			WVBL A 17
		SpawnLoop:
			WVBL A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			WVBL A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			WVBL A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SOULRENDER, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			WVBL A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Soul Render", 1)
			TNT1 A 0 A_GiveToTarget("BladeHits", mass)
			TNT1 A 0 A_GiveToTarget("SoulRenderMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SOULRENDER, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

actor "SMG" : Weapon
{
  Weapon.SelectionOrder 6666
  Weapon.Slotnumber 9
  Weapon.AmmoUse 0
  Weapon.AmmoGive 0
  Scale 0.65
  Weapon.AmmoType "SmgAmmo"
  Obituary  "%o was blasted by %k's smg"
  Inventory.PickupMessage "Picked up an smg"
  +AMMO_OPTIONAL
  Scale 0.65
  +INVENTORY.UNDROPPABLE
  Decal "BulletChip"
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 2.0
  Weapon.BobRangeY 0.3
  Weapon.BobRangeX 0.6
  Tag "$WEP_9_2_TAG"
  +WEAPON.NOAUTOAIM
  States
  {
  Remove:
    NAMG A 1 Offset(0, 40)
	NAMG A 1 Offset(0, 48)
	NAMG A 1 Offset(0, 56)
	NAMG A 1 Offset(0, 64)
	NAMG A 1 Offset(0, 72)
	NAMG A 1 Offset(0, 80)
	NAMG A 1 Offset(0, 88)
	TNT1 A 0 A_JumpIfInventory("SMGAmmo", 1, "RiseBack")
	NAMG A 1 Offset(0, 96)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	TNT1 A 0 A_TakeInventory("SMGAmmo", 0)
	TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    TNT1 A 0 A_TakeInventory("SMG", 1)
	TNT1 A 1
  Stop
  RiseBack:
    NAMG A 1 Offset(0, 88)
	NAMG A 1 Offset(0, 80)
	NAMG A 1 Offset(0, 72)
	NAMG A 1 Offset(0, 64)
	NAMG A 1 Offset(0, 56)
	NAMG A 1 Offset(0, 48)
	NAMG A 1 Offset(0, 40)
  Goto Ready
  Ready:
	TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
    TNT1 A 0 A_JumpIfInventory("SMGAmmo", 1, "NoRemove")
  Goto Remove
  NoRemove:
	TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
    NAMG A 1 A_WeaponReady
    Goto Ready
  Deselect:
    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
    TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    NAMG A 1 A_Lower
	TNT1 A 0 A_Lower
	Loop
  Select:
    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
    TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
	TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_SMG)
SelectLoop:
	NAMG A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SMG, 0), "FireConfirmed")
	NAMG A 1
  Goto Ready
  FireConfirmed:
    NAMG A 1 Bright
	TNT1 A 0 A_PlaySound("weapons/smg")
	TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-8.0, 8.0), 0, 0, frandom(-1.2, 1.2))
	TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 6, 32 * (1 + sin(-pitch)), 2, 0, 1)
    NAUZ Z 1 bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SMG, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_SMGAMMO << 16), 0)
  FireEnd:
    TNT1 A 0 A_GunFlash
	TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,5,36+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
    NAUZ X 1 bright A_SpawnItemEx ("pistolcasing",cos(pitch)*20,8,32+(sin(pitch)*20),0,8,random(4,8),0,0,0)
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SMG, 0), "HoldConfirmed")
	NAMG A 1
	Goto Ready
  HoldConfirmed:
	TNT1 A 0
	TNT1 A 0 A_ReFire
  Goto Ready
  Flash:
	TNT1 A 2 Bright A_Light1
	TNT1 A 2 Bright A_Light0
  Stop  
  Spawn:
    MPPU A -1
    Stop
  }
}

Actor SMGPuff : DnD_BasePuff {
	Stamina 4096
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor SMGPickup : CustomInventory
{
	Radius 16
	Height 24
	Scale 0.65
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Submachine Gun - 9"	
	+DONTGIB
	States
	{
		Spawn:
			MPPU A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SMG), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("SMG", 1)
			TNT1 A 0 A_GiveInventory("SMGAmmo", random(35, 80) + ACS_ExecuteWithResult(918, 0, 1, random(35, 80)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SMG)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("SMGAmmo", random(17, 40))
		Stop
	}
}

Actor SMGMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_SMG)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor SMGPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	Scale 0.65
	States {
		Spawn:
			MPPU A 8
		SpawnLoop:
			MPPU A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			MPPU A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			MPPU A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_SMG, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			MPPU A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("SMG", 1)
			TNT1 A 0 A_GiveToTarget("SMGAmmo", mass)
			TNT1 A 0 A_GiveToTarget("SMGMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_SMG, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

ACTOR "Hellforge Cannon" : Weapon
{	
   Inventory.PickupMessage "You got the Hellforge Cannon!"
   Obituary "%k ripped %o apart with a hellforge Cannon."
   Weapon.AmmoType "IronBalls"
   Weapon.AmmoGive 0
   Weapon.SelectionOrder 6666
   Weapon.AmmoUse 0
   Weapon.SlotNumber 9
   +AMMO_OPTIONAL
   +INVENTORY.UNDROPPABLE
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.6
    Weapon.BobRangeY 0.5
    Weapon.BobRangeX 0.9
	Tag "$WEP_9_3_TAG"
	+WEAPON.NOAUTOAIM
   States
   {
  Remove:
    HFCA A 1 Offset(0, 40)
	HFCA A 1 Offset(0, 48)
	HFCA A 1 Offset(0, 56)
	HFCA A 1 Offset(0, 64)
	HFCA A 1 Offset(0, 72)
	HFCA A 1 Offset(0, 80)
	HFCA A 1 Offset(0, 88)
	TNT1 A 0 A_JumpIfInventory("IronBalls", 1, "RiseBack")
	HFCA A 1 Offset(0, 96)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	TNT1 A 0 A_TakeInventory("IronBalls", 0)
	TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    TNT1 A 0 A_TakeInventory("Hellforge Cannon", 1)
	TNT1 A 1
  Stop
  RiseBack:
    HFCA A 1 Offset(0, 88)
	HFCA A 1 Offset(0, 80)
	HFCA A 1 Offset(0, 72)
	HFCA A 1 Offset(0, 64)
	HFCA A 1 Offset(0, 56)
	HFCA A 1 Offset(0, 48)
	HFCA A 1 Offset(0, 40)
  Goto Ready
  Ready:
	TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
    TNT1 A 0 A_JumpIfInventory("IronBalls", 1, "NoRemove")
  Goto Remove
  NoRemove:
	TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
    HFCA A 1 A_WeaponReady
    Goto Ready
   Spawn:
      WHFC A -1 Bright
      Stop
   Deselect:
	  TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
      HFCA A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
      TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 10, 1 | (8 << 16), DND_WEAPON_HELLFORGECANNON)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 64, 0, DND_WEAPON_HELLFORGECANNON)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 1, 3 | (6 << 16), DND_WEAPON_HELLFORGECANNON)
	SelectLoop:
      HFCA A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HELLFORGECANNON, 0), "FireConfirmed")
			HFCA A 1
		Goto Ready
		FireConfirmed:
			HFCA DE 2 Bright
			HFCA F 1 Bright
			HFCA D 0 A_GunFlash
			TNT1 A 0 A_TakeInventory("IronBalls", 1)
			TNT1 A 0 Radius_Quake(4, 3, 0, 1, 0)
			HFCA G 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HELLFORGECANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_IRONBALLS << 16), 0)
			HFCA HI 1 BRIGHT
			HFCA JKL 1
			HFCA MNO 2
			HFCA A 5 A_ReFire
		Goto Ready
		AltFire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HELLFORGECANNON, 1), "AltFireConfirmed")
			HFCA A 1
		Goto Ready
		AltFireConfirmed:
			HFCA DE 2 Bright
			HFCA F 1 Bright
			HFCA D 0 A_GunFlash
			TNT1 A 0 A_TakeInventory("IronBalls", 3)
			TNT1 A 0 Radius_Quake(4, 12, 0, 1, 0)
			HFCA G 1 Bright Offset(1, 33) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HELLFORGECANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_IRONBALLS << 16), 0)
			HFCA G 1 Bright Offset(2, 32)
			HFCA G 1 Bright Offset(0, 33)
			HFCA G 1 Bright Offset(-1, 33)
			HFCA G 1 Bright Offset(1, 32)
			HFCA G 1 Bright Offset(0, 33)
			HFCA G 1 Bright Offset(1, 34)
			HFCA G 1 Bright Offset(0, 33)
			HFCA G 1 Bright Offset(-1, 32)
			HFCA G 1 Bright Offset(-2, 33)
			HFCA G 1 Bright Offset(0, 32)
			HFCA HI 1 BRIGHT
			HFCA JKL 1
			HFCA MNO 2
			HFCA A 5 A_ReFire   
		Goto Ready
   }
}

ACTOR Ripper1 : DnD_ExplosiveBase {
	Radius 8
	Height 8
	Speed 28
	
	Damage(
		DND_WEAPON_HELLFORGECANNON |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	+FOILINVUL
	Seesound "weapons/macefi"
	DeathSound "weapons/maceex"
	States {
		SpawnState:
			RIP1 AAABBBCCC 1 Bright A_SpawnItemEx("RedPuff",0,0,0,0,0,0,0,8)
		loop
		XDeath:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Do Impact Damage", ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0 | (DND_WEAPON_HELLFORGECANNON << 16), DND_DAMAGECATEGORY_OCCULT, DND_USETARGET | DND_ISSLOT9), DND_DAMAGETYPE_OCCULT, 0, DND_WEAPON_HELLFORGECANNON)
		Death:
			TNT1 A 0 A_SetTranslucent (0.75, 1)
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_HELLFORGECANNON |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTEXPLOSION << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 84)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			RIP1 D 1 Bright
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 60, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 120, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 180, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 240, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2", 0, 0, 300, CMF_TRACKOWNER)
			RIP1 DEFGH 3 Bright
		stop
		Crit:
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 60, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 120, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 180, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 240, CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("Ripper2_Crit", 0, 0, 300, CMF_TRACKOWNER)
			RIP1 DEFGH 3 Bright
		Stop
	}
}

ACTOR Ripper2 : DnD_BaseProjectile {
	Radius 5
	Height 5
	Speed 24
	
	Damage(
		DND_WEAPON_HELLFORGECANNON |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(300 << DPCT_SHIFT)
	)
	
	+RIPPER
	+FORCEXYBILLBOARD
	+FOILINVUL
	DeathSound "weapons/firex2"
	States {
		SpawnState:
			RIP2 AAABBB 1 Bright A_SpawnItemEx("Ripper2Trail")
		loop
		Death:
			RIP2 C 0 Bright A_SetTranslucent (0.67,1)
			RIP2 CDEFG 3 Bright
		stop
	}
}

Actor Ripper2_Crit : Ripper2 {
	Accuracy 69
}

ACTOR Ripper2Trail {
	Radius 5
	Height 5
	+FORCEXYBILLBOARD
	+EXTREMEDEATH
	+DOOMBOUNCE
	+NOINTERACTION
	+CLIENTSIDEONLY
	RenderStyle Add
	Alpha 0.5
	States {
		Spawn:
			RIP2 AB 2 Bright A_Fadeout(0.07)
		loop
	}
}

Actor Ripper2Proj : Ripper2 {
	Speed 16
	Seesound "weapons/macefi"
	
	Damage(
		DND_WEAPON_HELLFORGECANNON |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FOILINVUL
	States {
		Death:
			RIP2 C 0 Bright A_SetTranslucent (0.67,1)
			RIP2 CDEFG 3 Bright
		stop
	}
}

Actor HellforgeCannonPickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Hellforge Cannon - 9\c-"	
	+DONTGIB
	States
	{
		Spawn:
			WHFC A -1 Bright
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_HELLFORGECANNON), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Hellforge Cannon", 1)
			TNT1 A 0 A_GiveInventory("IronBalls", random(10, 16) + ACS_ExecuteWithResult(918, 0, 1, random(10, 16)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_HELLFORGECANNON)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("IronBalls", random(8, 12))
		Stop
	}
}

Actor HellForgeMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_HELLFORGECANNON)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor HellForgePickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	States {
		Spawn:
			WHFC A 17 Bright
		SpawnLoop:
			WHFC A 1 Bright A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			WHFC A 1 Bright A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			WHFC A 1 Bright A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_HELLFORGECANNON, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			WHFC A 1 Bright
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Hellforge Cannon", 1)
			TNT1 A 0 A_GiveToTarget("IronBalls", mass)
			TNT1 A 0 A_GiveToTarget("HellForgeMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_HELLFORGECANNON, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

ACTOR "Bloodfiend Spine" : Weapon
{	
   Obituary "%k splattered %o with his Bloodfiend spine."
   Weapon.AmmoType "BloodAmmo"
   Weapon.Slotnumber 9
   Weapon.AmmoGive 0
   Weapon.SelectionOrder 6666
   Weapon.AmmoUse 0
   +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.6
  Weapon.BobRangeY 0.6
  Weapon.BobRangeX 0.9
  Tag "$WEP_9_4_TAG"
  +WEAPON.NOAUTOAIM
   States
   {
  Remove:
    GORG A 1 Offset(0, 40)
	GORG A 1 Offset(0, 48)
	GORG A 1 Offset(0, 56)
	GORG A 1 Offset(0, 64)
	GORG A 1 Offset(0, 72)
	GORG A 1 Offset(0, 80)
	GORG A 1 Offset(0, 88)
	TNT1 A 0 A_JumpIfInventory("BloodAmmo", 1, "RiseBack")
	GORG A 1 Offset(0, 96)
	TNT1 A 0 A_TakeInventory("P_RedFire", 1)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	TNT1 A 0 A_TakeInventory("BloodAmmo", 0)
	TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    TNT1 A 0 A_TakeInventory("Bloodfiend Spine", 1)
	TNT1 A 1
  Stop
  RiseBack:
    GORG A 1 Offset(0, 88)
	GORG A 1 Offset(0, 80)
	GORG A 1 Offset(0, 72)
	GORG A 1 Offset(0, 64)
	GORG A 1 Offset(0, 56)
	GORG A 1 Offset(0, 48)
	GORG A 1 Offset(0, 40)
  Goto Ready
  Ready:
    TNT1 A 0 A_JumpIfInventory("BloodAmmo", 1, "NoRemove")
  Goto Remove
  NoRemove:
      GORG A 0 A_JumpIfInventory("GoreMode", 1, "ReadyAlt")
	  TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
      GORG A 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG B 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG C 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG D 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG A 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG B 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG C 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG D 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG A 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG B 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG C 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG D 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG A 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG B 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG C 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG D 4 A_weaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
    Goto Ready
   ReadyAlt:
	  TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
      GORG K 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG L 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG M 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  GORG N 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      Loop	
   Spawn:
      WGOR A -1
      Stop
   Deselect:
      TNT1 A 0 A_TakeInventory("P_RedFire", 1)
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
      GORG A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
      TNT1 A 0 A_GiveInventory("P_RedFire", 1)
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
      TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 1, 16 | (32 << 16), DND_WEAPON_BLOODFIENDSPINE)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 36, 0, DND_WEAPON_BLOODFIENDSPINE)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 5, 1 | (3 << 16), DND_WEAPON_BLOODFIENDSPINE)
	SelectLoop:
      GORG A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
   Fire:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  GORG E 0 A_JumpIfInventory("GoreMode",1,"Check")
	  TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BLOODFIENDSPINE, 1), "FireConfirmed")
      GORG A 1
   Goto Ready
   FireConfirmed:
      GORG E 2 Bright A_PlayWeaponSound("weapons/gorfi1")
      GORG F 3 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BLOODFIENDSPINE, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_BLOODAMMO << 16), 0)
      GORG GH 2 Bright
      GORG A 1
      GORG A 0 A_Refire
      Goto Ready
   Check:
      TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BLOODFIENDSPINE, 0), "AltFireConfirmed")
	  GORG L 1
      Goto AltFire
	AltFireConfirmed:
      TNT1 A 0 A_GunFlash
      GORG O 1 Bright A_PlayWeaponSound("weapons/gorfi2")
	  TNT1 A 0 Radius_Quake(3, 3, 0, 1, 0)
      GORG O 3 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BLOODFIENDSPINE, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_BLOODAMMO << 16), DND_ATF_CANFIRECIRCLE)
   Continue:
      GORG PQR 3 Bright
      GORG I 5 A_PlaySound("weapons/gorsuc")
      GORG JK 5
      GORG KLMNKLMN 3
      GORG I 0 A_Refire
      Goto Ready
   AltFire:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_JumpIfInventory("GoreMode",1,"ChangeMode")
      TNT1 A 0 A_GiveInventory("GoreMode",1)
      GORG I 5 A_PlaySound("weapons/gorsuc")
      GORG JK 5
      Goto Ready
   ChangeMode:
      TNT1 A 0 A_TakeInventory("GoreMode",1)
      GORG L 5 A_PlaySound("weapons/gorsuc")
      GORG KJI 5
      Goto Ready
   }
}

Actor BloodFX : DnD_BasePuff {
   Radius 3
   Height 3
   RENDERSTYLE ADD
   ALPHA 0.75
   Stamina 4096
   +ALWAYSPUFF
   +FORCEXYBILLBOARD
   Vspeed 0
   States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Bloodfiend Heal")
		NoHeal:
			BLFX ABCDEF 3 BRIGHT
		stop
		Crash:
		Goto NoHeal
		
		HitNoBlood:
		Goto NoHeal
   }
}

ACTOR GoreShot1 : DnD_ExplosiveBase {
	Radius 6
	Height 12
	Speed 36
	RENDERSTYLE Translucent
	Alpha 0.85
	
	Damage(
		DND_WEAPON_BLOODFIENDSPINE |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+THRUGHOST
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	DeathSound "weapons/globex"
	States {
		SpawnState:
			FGOR A 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR A 0 Bright A_CStaffMissileSlither
			FGOR B 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR B 0 Bright A_CStaffMissileSlither
			FGOR C 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR C 0 Bright A_CStaffMissileSlither
			FGOR D 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR D 0 Bright A_CStaffMissileSlither
			FGOR E 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR E 0 Bright A_CStaffMissileSlither
			FGOR F 2 Bright A_SpawnItem("GoreFX1",0,0)
			FGOR F 0 Bright A_CStaffMissileSlither
		loop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_BLOODFIENDSPINE |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTEXPLOSION << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 40)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			FGOR GHIJ 4 Bright
		stop
	}
}

Actor GoreShot1_GhostHitter : GoreShot1 {
	-THRUGHOST
}

ACTOR GoreFX1
{   
   Radius 0
   Height 1
   Scale 0.66
   +NOGRAVITY
   +NOBLOCKMAP
   Damagetype normal
   RENDERSTYLE Translucent
   Alpha 0.85
   +FORCEXYBILLBOARD
   +CLIENTSIDEONLY
   States
   {
   Spawn:
      TNT1 A 3 Bright
      FGOR KLM 3 Bright
      Stop 
   }
}

Actor SpinePickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Bloodfiend Spine - 9\c-"	
	+DONTGIB
	States
	{
		Spawn:
			WGOR A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_BLOODFIENDSPINE), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Bloodfiend Spine", 1)
			TNT1 A 0 A_GiveInventory("BloodAmmo", random(4, 24) + ACS_ExecuteWithResult(918, 0, 1, random(4, 24)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_BLOODFIENDSPINE)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("BloodAmmo", random(2, 12))
		Stop
	}
}

Actor SpineMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_BLOODFIENDSPINE)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor SpinePickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	XScale 0.7
	YScale 0.8
	States {
		Spawn:
			WGOR A 17
		SpawnLoop:
			WGOR A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			WGOR A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			WGOR A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_BLOODFIENDSPINE, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			WGOR A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Bloodfiend Spine", 1)
			TNT1 A 0 A_GiveToTarget("BloodAmmo", mass)
			TNT1 A 0 A_GiveToTarget("SpineMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_BLOODFIENDSPINE, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

actor "Enforcer Rifle" : Weapon
{
  Weapon.SelectionOrder 6666
  Weapon.Slotnumber 9
  Weapon.AmmoUse 0
  Weapon.AmmoGive 0
  Scale 0.65
  Weapon.AmmoType "LaserAmmo"
  Obituary  "%o was lasered by %k's Enforcer Rifle"
  Inventory.PickupMessage "Picked up an Enforcer Rifle"
  +AMMO_OPTIONAL
  XScale 0.7
  YScale 0.8  
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 2.1
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.7
  Tag "$WEP_9_5_TAG"
  +WEAPON.NOAUTOAIM
  States
  {
  Remove:
    ENRI A 1 Offset(0, 40)
	ENRI A 1 Offset(0, 48)
	ENRI A 1 Offset(0, 56)
	ENRI A 1 Offset(0, 64)
	ENRI A 1 Offset(0, 72)
	ENRI A 1 Offset(0, 80)
	ENRI A 1 Offset(0, 88)
	TNT1 A 0 A_JumpIfInventory("LaserAmmo", 1, "RiseBack")
	ENRI A 1 Offset(0, 96)
	TNT1 A 0 A_TakeInventory("P_RedFire", 1)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	TNT1 A 0 A_TakeInventory("LaserAmmo", 0)
	TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    TNT1 A 0 A_TakeInventory("Enforcer Rifle", 1)
	TNT1 A 1
  Stop
  RiseBack:
    ENRI A 1 Offset(0, 88)
	ENRI A 1 Offset(0, 80)
	ENRI A 1 Offset(0, 72)
	ENRI A 1 Offset(0, 64)
	ENRI A 1 Offset(0, 56)
	ENRI A 1 Offset(0, 48)
	ENRI A 1 Offset(0, 40)
  Goto Ready
  Ready:
	TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
    TNT1 A 0 A_JumpIfInventory("LaserAmmo", 1, "NoRemove")
  Goto Remove
  NoRemove:
    TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
    ENRI A 1 A_WeaponReady
    Goto Ready
  Deselect: 
    TNT1 A 0 A_TakeInventory("P_RedFire", 1)
    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
    TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
	TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
    ENRI A 1 A_Lower
	TNT1 A 0 A_Lower
	Loop
  Select:
    TNT1 A 0 A_GiveInventory("P_RedFire", 1)
	TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
    TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
	TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
	TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 4 | (9 << 16), DND_WEAPON_ENFORCERRIFLE)
SelectLoop:
	ENRI A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_ENFORCERRIFLE, 0), "FireConfirmed")
	ENRI A 1
  Goto Ready
  FireConfirmed:
    ENRI A 1 Bright
    ENRI BC 1 bright
	TNT1 A 0 A_PlayWeaponSound("Enforcer/Fire")
	TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 2, 36 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ENFORCERRIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_LASERAMMO << 16), 0)
	TNT1 A 0 A_GunFlash
    ENRI DE 1 bright
	ENRI MN 1 Bright
	ENRI A 2 A_ReFire
  Goto Ready
  AltFire:
    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_ENFORCERRIFLE, 1), "AltFireConfirmed")
	ENRI A 1
  Goto Ready
  AltFireConfirmed:
    ENRI BFG 1 Bright
	TNT1 A 0 A_PlayWeaponSound("Enforcer/Fire")
	TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 4, 34 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_ENFORCERRIFLE, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_LASERAMMO << 16), 0)
	TNT1 A 0 A_GunFlash
    ENRI HIJ 1 Bright
	ENRI KLMN 1
	ENRI A 2 A_ReFire
  Goto Ready
  Flash:
	TNT1 A 2 A_Light1
	TNT1 A 2 A_Light0
	Goto LightDone
  Spawn:
    ENRP A -1
    Stop
  }
}

Actor EnforcerPlasma : DnD_BaseProjectile {
	Height 8
	Radius 4
	RenderStyle Add
	Alpha 0.8
	Scale 0.25
	Speed 48
	DeathSound "Enforcer/Hit"
	
	Damage(
		DND_WEAPON_ENFORCERRIFLE |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FOILINVUL
	States {
		SpawnState:
			TRAC A -1 Bright
		Stop
		Death:
			TNT1 AAAAAA 0 A_SpawnItemEx("EnforcerFX", random(-4,4), random(-4,4), random(-2, 2), 0, 0, 0)
			TNT1 A 2
		Stop
	}
}

Actor EnforcerFX
{
	Height 1
	Radius 1
	+NOGRAVITY
	+CLIENTSIDEONLY
	States
	{
		Spawn:
			SSF2 ABCD 2 Bright
			SSF2 EFG 2
		Stop
	}
}

Actor LaserPickup : CustomInventory
{
	Radius 24
	Height 24
	XScale 0.7
	YScale 0.8
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Enforcer Laser Rifle - 9\c-"	
	+DONTGIB
	States
	{
		Spawn:
			ENRP A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_ENFORCERRIFLE), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Enforcer Rifle", 1)
			TNT1 A 0 A_GiveInventory("LaserAmmo", random(15, 45) + ACS_ExecuteWithResult(918, 0, 1, random(15, 45)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_ENFORCERRIFLE)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("LaserAmmo", random(7, 22))
		Stop
	}
}

Actor LaserMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_ENFORCERRIFLE)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor LaserPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	XScale 0.7
	YScale 0.8
	States {
		Spawn:
			ENRP A 17
		SpawnLoop:
			ENRP A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			ENRP A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			ENRP A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_ENFORCERRIFLE, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			ENRP A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Enforcer Rifle", 1)
			TNT1 A 0 A_GiveToTarget("LaserAmmo", mass)
			TNT1 A 0 A_GiveToTarget("LaserMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_ENFORCERRIFLE, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

ACTOR Venom : Weapon
{
   Obituary "%o was poisoned to the core by %k's Venom."
   Weapon.AmmoType "VenomAmmo"
   Weapon.AmmoGive 0
   Weapon.SelectionOrder 6666
   Weapon.AmmoUse 0
   Weapon.Slotnumber 9
   Scale 0.67
   +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.6
  Weapon.BobRangeY 0.6
  Weapon.BobRangeX 0.9
  Tag "$WEP_9_6_TAG"
  +WEAPON.NOAUTOAIM
   States
   {
  Remove:
    SHRG A 1 Offset(0, 40)
	SHRG A 1 Offset(0, 48)
	SHRG A 1 Offset(0, 56)
	SHRG A 1 Offset(0, 64)
	SHRG A 1 Offset(0, 72)
	SHRG A 1 Offset(0, 80)
	SHRG A 1 Offset(0, 88)
	TNT1 A 0 A_JumpIfInventory("VenomAmmo", 1, "RiseBack")
	SHRG A 1 Offset(0, 96)
	TNT1 A 0 A_TakeInventory("P_GreenFire", 1)
	TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
	TNT1 A 0 A_TakeInventory("VenomAmmo", 0)
	TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
    TNT1 A 0 A_TakeInventory("Venom", 1)
	TNT1 A 1
  Stop
  RiseBack:
    SHRG A 1 Offset(0, 88)
	SHRG A 1 Offset(0, 80)
	SHRG A 1 Offset(0, 72)
	SHRG A 1 Offset(0, 64)
	SHRG A 1 Offset(0, 56)
	SHRG A 1 Offset(0, 48)
	SHRG A 1 Offset(0, 40)
  Goto Ready
  Ready:
    TNT1 A 0 A_JumpIfInventory("VenomAmmo", 1, "NoRemove")
  Goto Remove
   Spawn:
      WSHD A -1
      Stop
   NoRemove:
	  TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
      SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG B 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG C 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG B 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
	  SHRG A 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG A 1 A_PlaySound("weapons/wiggl1")
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG A 3 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG D 5 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG D 1 A_Playsound("weapons/wiggl2")
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG E 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG A 1 A_PlaySound("weapons/wiggl1")
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG A 3 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG D 5 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG D 1 A_Playsound("weapons/wiggl2")
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      SHRG E 4 A_WeaponReady
	  TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
      goto ready
   Deselect:
      TNT1 A 0 A_TakeInventory("P_GreenFire", 1)
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
      SHRG A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
      TNT1 A 0 A_GiveInventory("P_GreenFire", 1)
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
	  TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
      TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 1, 3 | (5 << 16), DND_WEAPON_VENOM)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 5, 1 | (3 << 16), DND_WEAPON_VENOM)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 6, 0, DND_WEAPON_VENOM)
	SelectLoop:
      SHRG A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
   Fire:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_VENOM, 0), "FireConfirmed")
	  SHRG A 1
   Goto Ready
   FireConfirmed:
      SHRG C 2 Bright
      TNT1 A 0 A_GunFlash
      SHRG F 1 Bright A_PlayWeaponSound("weapons/crabfi")
      SHRG F 1 Bright
	  SHRX AB 2 Bright
      SHRG G 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_VENOM, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_VENOMAMMO << 16), DND_ATF_CANFIRECIRCLE)
	  SHRX CD 1 Bright
	  SHRG H 1 Bright
	  SHRX EFGH 1 Bright
	  SHRG CBA 4 Bright
      SHRG A 1 A_PlaySound("weapons/wiggl1")
      SHRG AD 3
      SHRG D 1 A_Playsound("weapons/wiggl2")
      SHRG E 3
      SHRG A 2 A_ReFire
      Goto Ready
   AltFire:
      TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
      TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_VENOM, 1), "AltFireConfirmed")
	  SHRG A 1
   Goto Ready
   AltFireConfirmed:   
      SHRG C 2 Bright
      TNT1 A 0 A_GunFlash
      SHRG F 1 Bright A_PlayWeaponSound("weapons/crabf2")
      SHRG F 1 Bright
	  SHRX AB 2 Bright
	  TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_VENOM, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_VENOMAMMO << 16), DND_ATF_CANFIRECIRCLE)
      SHRG G 1 Bright A_SetPitch(pitch - 8.0)
	  SHRX CD 1 Bright A_SetPitch(pitch + 1.0)
	  SHRG H 1 Bright A_SetPitch(pitch + 1.0)
	  SHRX EFGH 1 Bright A_SetPitch(pitch + 1.0)
	  SHRG C 1 Bright A_SetPitch(pitch + 1.0)
	  SHRG C 3 Bright
	  SHRG BA 4 Bright
      SHRG A 1 A_PlaySound("weapons/wiggl1")
      SHRG AD 4
      SHRG D 1 A_Playsound("weapons/wiggl2")
      SHRG E 4
      SHRG A 7 A_ReFire   
      Goto Ready
   Flash:
      TNT1 A 5 bright A_Light1
      TNT1 A 5 bright A_Light2
      TNT1 A 5 bright A_Light1
      TNT1 A 1 bright A_Light0
      stop
   }
}

ACTOR Barbshot : DnD_BaseProjectile {
	Radius 4
	Height 8
	Speed 60
	ReactionTime 10
	RENDERSTYLE Normal
	ALPHA 1.0
	
	Damage(
		DND_WEAPON_VENOM |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+RIPPER
	+THRUGHOST
	+FORCEXYBILLBOARD
	DeathSound "weapons/crabex"
	States {
		SpawnState:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			SBRD A 1 Bright A_SpawnItemEx("Barbtrail",0,0,0,0,0,0,0,8)
			TNT1 A 0 A_SpawnItemEx("BarbFX",0,0,0,0,0,0,0,8)
			TNT1 A 0 A_CountDown
		Loop
		Crit:
			SBRD A 1 Bright A_SpawnItemEx("Barbtrail",0,0,0,0,0,0,0,8)
			TNT1 A 0 A_SpawnItemEx("BarbFX",0,0,0,0,0,0,0,8)
			TNT1 A 0 A_CountDown
		Loop
		Death:
			SSFX A 0 Bright A_SetTranslucent(0.75,1)
			SSFX ABCDEFGH 2 Bright
		stop
	}
}

Actor Barbshot_GhostHitter : Barbshot {
	-THRUGHOST
}

ACTOR Barbtrail
{   
   Radius 0
   Height 1
   PROJECTILE
   RENDERSTYLE ADD
   ALPHA 0.75
   +FORCEXYBILLBOARD
   +CLIENTSIDEONLY
   States
   {
   Spawn:
      TNT1 A 1 Bright
      SSFX ABCDEFG 2 Bright
      Stop 
   }
}

ACTOR BarbFX
{   
   Radius 0
   Height 1
   PROJECTILE
   RENDERSTYLE ADD
   ALPHA 0.75
   +FORCEXYBILLBOARD
   +CLIENTSIDEONLY
   States
   {
   Spawn:
      TNT1 A 1 Bright
      SDFX ABCD 2 Bright
      Stop 
   }
}

ACTOR Acidshot : DnD_ExplosiveBase {
	Radius 4
	Height 8
	Speed 35
	Gravity 0.25
	ReactionTime 16
	BounceType "Doom"
	Alpha 0.8
	
	Damage(
		DND_WEAPON_VENOM |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	-NOGRAVITY
	+THRUGHOST
	+FORCEXYBILLBOARD
	+FORCERADIUSDMG
	DeathSound "weapons/crabx2"
	SeeSound "weapons/wiggl2"
	States {
		SpawnState:
			BNAD ABCD 3 Bright A_SpawnItemEx("AcidFX",0,0,0,0,0,0,0,8)
			BNAD A 0 A_CountDown
		loop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_VENOM |
				(DND_DMGID_2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_POISON << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 32)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			BNAD E 3 A_SetTranslucent(0.75,1)
			BNAD F 3 Bright
			BNAD GHIJ 3 Bright
		stop
	}
}

Actor Acidshot_GhostHitter : Acidshot {
	-THRUGHOST
}

ACTOR AcidFX
{   
   Radius 0
   Height 1
   PROJECTILE
   RENDERSTYLE ADD
   Gravity 0.25
   ALPHA 0.75
   -NOGRAVITY
   +DONTSPLASH
   +FORCEXYBILLBOARD
   +CLIENTSIDEONLY
   States
   {
   Spawn:
      TNT1 A 2 Bright
      ACFX ABCDE 3 Bright
      Stop 
   }
}

Actor VenomPickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Venom - 9\c-"	
	+DONTGIB
	Scale 0.67
	States
	{
		Spawn:
			WSHD A -1 Bright
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_VENOM), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Venom", 1)
			TNT1 A 0 A_GiveInventory("VenomAmmo", random(15, 25) + ACS_ExecuteWithResult(918, 0, 1, random(15, 25)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_VENOM)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("VenomAmmo", random(7, 12))
		Stop
	}
}

Actor VenomMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_VENOM)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor VenomPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	Scale 0.67
	States {
		Spawn:
			WSHD A 17 Bright
		SpawnLoop:
			WSHD A 1 Bright A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			WSHD A 1 Bright A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			WSHD A 1 Bright A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_VENOM, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			WSHD A 1 Bright
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Venom", 1)
			TNT1 A 0 A_GiveToTarget("VenomAmmo", mass)
			TNT1 A 0 A_GiveToTarget("VenomMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_VENOM, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

ACTOR "Demon Heart" : Weapon {	
	Obituary "%o drained all of %k's blood."
	Weapon.AmmoType "HeartAmmo"
	Weapon.AmmoGive 0
	Weapon.SelectionOrder 6666
	Weapon.AmmoUse 0
	Weapon.SlotNumber 9
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.5
	Tag "$WEP_9_7_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			TNT1 A -1 Bright
		Loop
	    Remove:
			HRTG A 1 Offset(0, 40)
			HRTG A 1 Offset(0, 48)
			HRTG A 1 Offset(0, 56)
			HRTG A 1 Offset(0, 64)
			HRTG A 1 Offset(0, 72)
			HRTG A 1 Offset(0, 80)
			HRTG A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("HeartAmmo", 1, "RiseBack")
			HRTG A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("HeartAmmo", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Demon Heart", 1)
			TNT1 A 1
	    Stop
		RiseBack:
			HRTG A 1 Offset(0, 88)
			HRTG A 1 Offset(0, 80)
			HRTG A 1 Offset(0, 72)
			HRTG A 1 Offset(0, 64)
			HRTG A 1 Offset(0, 56)
			HRTG A 1 Offset(0, 48)
			HRTG A 1 Offset(0, 40)
		Goto Ready
		Ready:
			TNT1 A 0 A_JumpIfInventory("HeartAmmo", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			TNT1 A 0 A_PlayWeaponSound("Weapons/HeartBeat")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG A 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			HRTG B 1 A_WeaponReady
		Loop
		Deselect:
		    TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
		    TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			HRTG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
		    TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 32, 28 | (36 << 16), DND_WEAPON_DEMONHEART)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 48, 0, DND_WEAPON_DEMONHEART)
	    SelectLoop:
			HRTG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEMONHEART, 0), "FireConfirmed")
			HRTG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			HRTG C 1 Offset(0, 33)
			HRTG C 1 Offset(0, 34)
			HRTG C 1 Offset(1, 35)
			HRTG C 1 Offset(2, 36)
			HRTG C 1 Offset(3, 37)
			HRTG C 1 Offset(4, 38)
			HRTG C 1 Offset(5, 39)
			HRTG C 1 Offset(6, 40)
			HRTG C 1 Offset(7, 41)
			HRTG C 1 Offset(8, 42)
			HRTG C 1 Offset(9, 43)
			HRTG C 1 Offset(10, 44)
			HRTG C 1 Offset(11, 45)
			HRTG C 1 Offset(12, 46)
			TNT1 A 0 A_PlayWeaponSound("Weapons/HeartSqueeze")
			TNT1 A 0 Radius_Quake(4,2,0,1,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DEMONHEART, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_HEARTAMMO << 16), DND_ATF_NOAMMOGAINCHECK)
			TNT1 AAAA 0 A_SpawnItemEx("NashGore_FlyingBlood", 0, 32, 16, random(-8, 8), random(0, 8), random(4, 8), random(0, 180), SXF_CLIENTSIDE)
			HRTG D 1 A_SpawnItemEx("NashGore_FlyingBlood", 0, 32, 16, random(-8, 8), random(0, 8), random(4, 8), random(0, 180), SXF_CLIENTSIDE)
			HRTG D 2 Offset(13, 47)
			HRTG D 1 Offset(14, 48)
			HRTG D 1 Offset(13, 47)
			HRTG D 1 Offset(12, 46)
			HRTG D 1 Offset(11, 45)
			HRTG D 1 Offset(10, 44)
			HRTG D 1 Offset(8, 42)
			HRTG D 1 Offset(6, 40)
			HRTG D 1 Offset(4, 38)
			HRTG D 1 Offset(2, 36)
			HRTG D 1 Offset(0, 34)
			HRTG D 1 Offset(0, 32)
			HRTG C 6
			HRTG A 3
		Goto Ready
	}
}

Actor HearAttackPuff_FX {
	Renderstyle Add
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			HRFX ABCDE 3 Bright
		Stop
	}
}

Actor HeartAttackPuff : DnD_ExplosiveBase {
	Radius 2
	Height 2
	Speed 0
	+THRUACTORS
	+FOILINVUL
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 1 A_SpawnItemEx("HearAttackPuff_FX")
		Death:
			TNT1 A 0 A_SetUservar("user_count", 5)
			TNT1 AAAAA 0 A_SpawnDebris("ExplosiveSpark")
			TNT1 A 0 A_PlaySound("Weapons/HeartBurn")
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_DEMONHEART |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 40)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			
		ExplosionLoop:
			TNT1 A 1
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 2 A_SetUserVar("user_count", user_count - 1)
			TNT1 A 0 A_SetUserVar("user_expdmg", 7 * user_expdmg / 8)
			TNT1 A 0 A_SetUserVar("user_expradius", 6 * user_expradius / 5)
			TNT1 A 1 A_JumpIf(user_count > 0, "ExplosionLoop")
		Stop
    }
}

Actor DemonHeartPickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Demon Heart - 9\c-"	
	+DONTGIB
	Scale 0.67
	States
	{
		Spawn:
			HRTW AB 10
		Loop
		Pickup:
			TNT1 A 0 A_JumpIfInventory("Ability_HeartSeeker", 1, "Check2")
		Fail
		Check2:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_DEMONHEART), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Demon Heart", 1)
			TNT1 A 0 A_GiveInventory("HeartAmmo", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_DEMONHEART)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("HeartAmmo", 1)
		Stop
	}
}

Actor HeartMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_DEMONHEART)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor DemonHeartPickup_D : DND_DroppedItem {
	Scale 1.0
	States {
		Spawn:
			HRTW A 17
		SpawnLoop:
			HRTW AAAAAAAAAABBBBBBBBBB 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			HRTW A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			HRTW A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_DEMONHEART, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			HRTW A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Demon Heart", 1)
			TNT1 A 0 A_GiveToTarget("HeartAmmo", mass)
			TNT1 A 0 A_GiveToTarget("HeartMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_DEMONHEART, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

Actor DarkServantGloves : Weapon {
	radius 20
	height 16
	Weapon.SlotNumber 9
	weapon.selectionorder 6666
	weapon.kickback 100
	obituary "%o was electrocuted by %k's shiny new gloves."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Dark Servant Gloves - 9"
	weapon.ammotype "DarkServantEnergy"
	weapon.ammouse 0
	weapon.ammouse2 0
	weapon.ammogive 0
	weapon.ammogive2 0
	Tag "$WEP_9_8_TAG"
	YScale 0.59
	XScale 0.4
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	+WEAPON.NOAUTOAIM
	states {
		Remove:
			GAU3 A 1 Offset(0, 40)
			GAU3 A 1 Offset(0, 48)
			GAU3 A 1 Offset(0, 56)
			GAU3 A 1 Offset(0, 64)
			GAU3 A 1 Offset(0, 72)
			GAU3 A 1 Offset(0, 80)
			GAU3 A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("DarkServantEnergy", 1, "RiseBack")
			GAU3 A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("DarkServantEnergy", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("DarkServantGloves", 1)
			TNT1 A 1
		Stop
		RiseBack:
			GAU3 A 1 Offset(0, 88)
			GAU3 A 1 Offset(0, 80)
			GAU3 A 1 Offset(0, 72)
			GAU3 A 1 Offset(0, 64)
			GAU3 A 1 Offset(0, 56)
			GAU3 A 1 Offset(0, 48)
			GAU3 A 1 Offset(0, 40)
		Goto Ready
		Spawn:
			WGT3 A -1
		stop
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("DarkServantEnergy", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			GAU3 A 1 A_WeaponReady
		Goto Ready
		Deselect: 
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			GAU3 A 1 A_Lower
			TNT1 A 0 A_Lower
		loop
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 10, 6 | (9 << 16), DND_WEAPON_DARKGLOVES)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 48, 0, DND_WEAPON_DARKGLOVES)
	    SelectLoop:
			GAU3 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DARKGLOVES, 0), "FireConfirmed")
			GAU3 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Remove
		FireConfirmed:
			GAU3 A 3 A_PlaySound("weapons/gauntletsactivate")
			GAU3 B 3 
		FireFast:
			GAU3 C 2
			GAU3 D 1 BRIGHT
			GAU3 E 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DARKGLOVES, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_DARKSERVANTENERGY << 16), 0)
			GAU3 FGH 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DARKGLOVES, 0), "ContinueRight")
			GAU3 H 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_PlayWeaponSound("weapons/gauntletsrip")
		Goto Ready
		ContinueRight:
			GAU3 I 2
			GAU3 J 1 BRIGHT
			GAU3 K 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DARKGLOVES, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_DARKSERVANTENERGY << 16), 0)
			GAU3 LMN 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DARKGLOVES, 2), "FireFast")
			GAU3 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_PlayWeaponSound("weapons/gauntletsrip")
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DARKGLOVES, 1), "AltFireConfirmed")
			GAU3 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			GAU4 A 3 Bright A_PlayWeaponSound("weapons/gauntletscharge")
			GAU4 BCAB 3 BRIGHT
			GAU4 D 3 
			GAU4 EFGHI 3 BRIGHT
			GAU4 J 3 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DARKGLOVES, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_DARKSERVANTENERGY << 16), 0)
			GAU4 KLM 3
		Goto Ready
		
		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
    }
}

Actor DarkServantMissile1Trail {
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			FX16 DEF 2 Bright
		Stop
	}
}

Actor DarkServantMissileSmall : DnD_BaseProjectile {
	Speed 32
	Height 8
	Radius 4
	SeeSound "Weapons/SmallLightning"
	DeathSound "Weapons/SmallLightningH"
	Renderstyle Translucent
	
	Damage(
		DND_WEAPON_DARKGLOVES |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_LIGHTNING << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+PIERCEARMOR
	+FORCEPAIN
	States {
		SpawnState:
			FX16 AABBCC 2 Bright A_SpawnItemEx("DarkServantMissile1Trail", 0, 0, 0, -4, random(-3, 3))
		Loop
		Death:
			FX16 GHIJKL 2 Bright
		Stop
	}
}

Actor DarkServantMissile2Trail {
	+CLIENTSIDEONLY
	+NOINTERACTION
	Renderstyle Add
	States {
		Spawn:
			FX18 AABB 1 Bright A_FadeOut(0.1)
		Loop
	}
}

Actor DarkServantMissile_Explosion : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 1
		Death:
			TNT1 A 0 A_SetUserVar("user_count", 3)
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_DARKGLOVES |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_LIGHTNING << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		ExplosionLoop:
			TNT1 A 1
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 2 A_SetUserVar("user_count", user_count - 1)
			TNT1 A 1 A_JumpIf(user_count > 0, "ExplosionLoop")
		Stop
	}
}

Actor DarkServantMissile_Explosion_Crit : DarkServantMissile_Explosion {
	Accuracy 69
}

Actor DarkServantMissileBig : DnD_BaseProjectile {
	Speed 28
	Height 10
	Radius 6
	SeeSound "Weapons/BigLightning"
	DeathSound "Weapons/BigLightningH"
	
	Damage(
		DND_WEAPON_DARKGLOVES |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_LIGHTNING << DTYPE_SHIFT) |
		(400 << DPCT_SHIFT)
	)
	
	+SEEKERMISSILE
	+PIERCEARMOR
	+FORCEPAIN
	States {
		SpawnState:
			TNT1 A 0 A_SeekerMissile(16, 16, SMF_LOOK | SMF_CURSPEED)
			FX18 AA 2 Bright A_SpawnItem("DarkServantMissile2Trail")
			TNT1 A 0 A_SeekerMissile(16, 16, SMF_LOOK | SMF_CURSPEED)
			FX18 BB 2 Bright A_SpawnItem("DarkServantMissile2Trail")
		Loop
		Death:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("DarkServantMissile_Explosion", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_SpawnItemEx("BlueParticleSpawner")
			FX18 CDEFG 3 Bright
		Stop
		Crit:
			TNT1 A 0 A_CustomMissile("DarkServantMissile_Explosion_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_SpawnItemEx("BlueParticleSpawner")
			FX18 CDEFG 3 Bright
		Stop
	}
}

Actor DarkServantGlovesPickup : CustomInventory
{
	Radius 16
	Height 24
	Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Dark Servant Gloves - 9\c-"
	+DONTGIB
	States
	{
		Spawn:
			WGT3 A -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_DARKGLOVES), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("DarkServantGloves", 1)
			TNT1 A 0 A_GiveInventory("DarkServantEnergy", random(30, 45) + ACS_ExecuteWithResult(918, 0, 1, random(30, 45)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_DARKGLOVES)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("DarkServantEnergy", random(15, 25))
		Stop
	}
}

Actor DarkServantGlovesMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_DARKGLOVES)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor DarkServantGlovesPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	States {
		Spawn:
			WGT3 A 17
		SpawnLoop:
			WGT3 A 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 360, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			WGT3 A 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			WGT3 A 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_DARKGLOVES, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			WGT3 A 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("DarkServantGloves", 1)
			TNT1 A 0 A_GiveToTarget("DarkServantEnergy", mass)
			TNT1 A 0 A_GiveToTarget("DarkServantGlovesMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_DARKGLOVES, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

Actor Nailgun2 : Weapon {
	radius 20
	height 16
	Weapon.SlotNumber 9
	weapon.selectionorder 6666
	weapon.kickback 100
	obituary "%o was ripped by %k's nailgun."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Nailgun - 9"
	weapon.ammotype "BigNail"
	weapon.ammouse 0
	Decal "BulletChip"
	YScale 0.59
	XScale 0.4
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.3
	Weapon.BobRangeY 0.45
	Weapon.BobRangeX 0.75
	Tag "$WEP_9_9_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			NLCG F -1
		Loop
		Remove:
			NLCG A 1 Offset(0, 40)
			NLCG A 1 Offset(0, 48)
			NLCG A 1 Offset(0, 56)
			NLCG A 1 Offset(0, 64)
			NLCG A 1 Offset(0, 72)
			NLCG A 1 Offset(0, 80)
			NLCG A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("BigNail", 1, "RiseBack")
			NLCG A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("BigNail", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Nailgun2", 1)
			TNT1 A 1
		Stop
		RiseBack:
			NLCG A 1 Offset(0, 88)
			NLCG A 1 Offset(0, 80)
			NLCG A 1 Offset(0, 72)
			NLCG A 1 Offset(0, 64)
			NLCG A 1 Offset(0, 56)
			NLCG A 1 Offset(0, 48)
			NLCG A 1 Offset(0, 40)
		Goto Ready
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 4, 4 | (8 << 16), DND_WEAPON_HEAVYNAILGUN)
	    SelectLoop:
			TNT1 A 0 A_raise
			NLCG A 1 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_lower
			NLCG A 1 A_Lower
		Loop
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("BigNail", 1, "NoRemove")
			NLCG A 1 A_WeaponReady
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			NLCG A 1 A_WeaponReady
		Goto Ready
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HEAVYNAILGUN, 0), "FireConfirmed")
			NLCG A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Remove
		FireConfirmed:
			NLCG A 0 A_PlayWeaponSound("Weapons/NG2Fire")
			NLCF A 1 bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HEAVYNAILGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_BIGNAIL << 16), 0)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoil")
			NLCG A 0 A_Recoil(0.4)
		NoRecoil:
			NLCG A 0 Radius_Quake(2,6,0,1,0)
			NLCG B 1 Offset(0, 35)
			NLCG C 1 Offset(0, 34)
			NLCG D 1 Offset(0, 33)
			NLCG A 2 Offset(0, 32) A_Refire
			NLCG B 2 A_Refire
			NLCG C 2 A_Refire
			NLCG D 2 A_Refire
			NLCG A 2 A_Refire
			NLCG B 3 A_Refire
			NLCG C 3 A_Refire
			NLCG D 3 A_Refire
		Goto Ready
	}
}

Actor NailBigBlur       
{
  Height 8
  Radius 1
  Damage 0
  Scale 0.6
  Speed 0.2
  RenderStyle Translucent
  Alpha 0.75
  +NoGravity
  +DropOff
  +NoTeleport
  +CLIENTSIDEONLY
  States
  {
  Spawn:
    NLPJ A 1 A_FadeOut(0.35)
    Loop
  }
}

actor nailGib {
	health 1
	radius 8
	height 8
	mass 1
	+CORPSE
	+NOTELEPORT
	+CLIENTSIDEONLY
	Scale 0.4
	GRAVITY 0.8
	Renderstyle Translucent
	states {
		Spawn:
			NLPJ JKLM 3
		loop
		Crash:
			TNT1 A 0 A_Jump(128, "Flip")
		CrashLoop:
			NLPJ K 2 A_FadeOut(0.025) 
		Loop
		Flip:
			NLPJ M 2 A_FadeOut(0.025)
		Loop
	}
}


Actor BigNailProj : DnD_BaseProjectile {
	Radius 3
	Height 3
	Speed 44
	+noextremedeath
	Scale 0.5
	
	Damage(
		DND_WEAPON_HEAVYNAILGUN |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+BloodSplatter
	+RIPPER
	SeeSound ""
	DeathSound ""
	Decal BulletChip
	States {
		SpawnState:
			NLPJ A 1 A_SpawnItemEx("NailBigBlur", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
		Crash:
		Death:
			TNT1 A 0 A_PlaySound("Weapons/NG2HitWall")
			TNT1 A 0 A_SpawnItemEx("WallHitSpark", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnDebris("nailgib")
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 1
		Stop
		XDeath:
			TNT1 A 0 A_PlaySound("Weapons/NG2HitTarget")
			TNT1 AAAAAA 0 A_CustomMissile ("MeleeSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 1
		Stop
	}
}

Actor Nailgun2Pickup : CustomInventory
{
	Radius 16
	Height 24
	Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Heavy Nailgun - 9\c-"
	+DONTGIB
	States
	{
		Spawn:
			NLCG F -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_HEAVYNAILGUN), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Nailgun2", 1)
			TNT1 A 0 A_GiveInventory("BigNail", random(40, 56) + ACS_ExecuteWithResult(918, 0, 1, random(40, 56)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_HEAVYNAILGUN)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("BigNail", random(20, 28))
		Stop
	}
}

Actor Nailgun2Msg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_HEAVYNAILGUN)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor Nailgun2Pickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	States {
		Spawn:
			NLCG F 17
		SpawnLoop:
			NLCG F 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 360, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			NLCG F 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			NLCG F 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_HEAVYNAILGUN, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			NLCG F 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Nailgun2", 1)
			TNT1 A 0 A_GiveToTarget("BigNail", mass)
			TNT1 A 0 A_GiveToTarget("Nailgun2Msg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_HEAVYNAILGUN, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}


Actor Berettas : Weapon {
	radius 20
	height 16
	Weapon.SlotNumber 9
	weapon.selectionorder 6666
	weapon.kickback 100
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Akimbo Berettas - 9"
	weapon.ammotype "BerettaAmmo"
	weapon.ammouse 0
	weapon.ammogive 0
	Decal "BulletChip"
	YScale 0.59
	XScale 0.4
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.1
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Tag "$WEP_9_10_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			PAKM X -1
		Stop
		Remove:
			PAKM A 1 Offset(0, 40)
			PAKM A 1 Offset(0, 48)
			PAKM A 1 Offset(0, 56)
			PAKM A 1 Offset(0, 64)
			PAKM A 1 Offset(0, 72)
			PAKM A 1 Offset(0, 80)
			PAKM A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("BerettaAmmo", 1, "RiseBack")
			PAKM A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("BerettaAmmo", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Berettas", 1)
			TNT1 A 1
		Stop
		RiseBack:
			PAKM A 1 Offset(0, 88)
			PAKM A 1 Offset(0, 80)
			PAKM A 1 Offset(0, 72)
			PAKM A 1 Offset(0, 64)
			PAKM A 1 Offset(0, 56)
			PAKM A 1 Offset(0, 48)
			PAKM A 1 Offset(0, 40)
		Goto Ready
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("BerettaAmmo", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			PAKM A 1 A_WeaponReady
		Goto Ready
		Deselect:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
		DeselectLoop:
			PAKM A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 10, 0, DND_WEAPON_BERETTAS)
		SelectLoop:
			PAKM A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			PAKM A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BERETTAS, 0), "FireConfirmed")
			PAKM A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
		Hold:
			TNT1 A 0 A_PlaySound("Weapons/BerettaFire", 6)
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2.75, 2.75), 0, 0, frandom(-2.5, 2.5))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 20 * cos(-pitch), 9, 35 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*22,10,31+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BERETTAS, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_BERETTAAMMO << 16), 0)
			PAKM B 3 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PAKM C 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PAKM DE 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_PlaySound("Weapons/BerettaFire", 7)
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2.75, 2.75), 0, 0, frandom(-2.5, 2.5))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 20 * cos(-pitch), -9, 35 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*22,-10,31+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BERETTAS, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_BERETTAAMMO << 16), 0)
			PAKM G 3 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PAKM H 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PAKM IJ 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BERETTAS, 0), "Keep")
			PAKM A 1
		Goto Remove
		Keep:
			PAKM A 2 A_Refire
		Goto Ready
	}
}

Actor BerettaPuff : DnD_BasePuff {
	Stamina 4096

	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor BerettasPickup : CustomInventory
{
	Radius 16
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Akimbo Berettas - 9\c-"	
	+DONTGIB
	Scale 0.75
	States
	{
		Spawn:
			PAKM X -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_BERETTAS), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Berettas", 1)
			TNT1 A 0 A_GiveInventory("BerettaAmmo", 2 * random(3, 8) + ACS_ExecuteWithResult(918, 0, 1, 2 * random(3, 8)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_BERETTAS)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("BerettaAmmo", 2 * random(2, 4))
		Stop
	}
}

Actor BerettasMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_BERETTAS)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor BerettasPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	Scale 0.75
	States {
		Spawn:
			PAKM X 17
		SpawnLoop:
			PAKM X 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			PAKM X 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			PAKM X 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_BERETTAS, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			PAKM X 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Berettas", 1)
			TNT1 A 0 A_GiveToTarget("BerettaAmmo", mass)
			TNT1 A 0 A_GiveToTarget("BerettasMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_BERETTAS, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

actor "Plasma Bolter" : Weapon {
	Weapon.SelectionOrder 6666
	Weapon.Slotnumber 9
	Weapon.AmmoUse 0
	Weapon.AmmoGive 0
	Weapon.AmmoType "PlasmaBolterAmmo"
	Obituary  "%o was lasered by %k's Plasma Bolter."
	Inventory.PickupMessage "Picked up a Plasma Bolter."
	+AMMO_OPTIONAL
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.3
	Weapon.BobRangeX 0.6
	Tag "$WEP_9_11_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Remove:
			PBL9 A 1 Offset(0, 40)
			PBL9 A 1 Offset(0, 48)
			PBL9 A 1 Offset(0, 56)
			PBL9 B 1 Offset(0, 64)
			PBL9 B 1 Offset(0, 72)
			PBL9 B 1 Offset(0, 80)
			PBL9 C 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("PlasmaBolterAmmo", 1, "RiseBack")
			PBL9 C 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("PlasmaBolterAmmo", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Plasma Bolter", 1)
			TNT1 A 1
		Stop
		RiseBack:
			PBL9 A 1 Offset(0, 88)
			PBL9 A 1 Offset(0, 80)
			PBL9 A 1 Offset(0, 72)
			PBL9 A 1 Offset(0, 64)
			PBL9 A 1 Offset(0, 56)
			PBL9 A 1 Offset(0, 48)
			PBL9 A 1 Offset(0, 40)
		Goto Ready
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("PlasmaBolterAmmo", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			PBL9 AAABBBCCC 1 A_WeaponReady
		Goto Ready
		Deselect: 
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
		DeselectLoop:
			PBL9 E 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 8, 3 | (5 << 16), DND_WEAPON_PLASMABOLTER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 35, 0, DND_WEAPON_PLASMABOLTER)
		SelectLoop:
			PBL9 E 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMABOLTER, 0), "FireConfirmed")
			PBL9 D 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			PBL9 F 1 Bright Offset(0, 32)
			TNT1 A 0 A_PlayWeaponSound("PlasmaBolter/Fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 2, 36 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMABOLTER, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_PLASMABOLTERAMMO << 16), 0)
			TNT1 A 0 A_GunFlash
			PBL9 F 1 Bright Offset(0, 34)
			PBL9 G 1 Bright Offset(0, 37)
			PBL9 G 1 Bright Offset(0, 40)
			PBL9 G 1 Bright Offset(0, 41)
			PBL9 H 1 Bright Offset(0, 42)
			PBL9 H 1 Bright Offset(0, 38)
			PBL9 D 1 Offset(0, 36)
			PBL9 D 1 Offset(0, 34)
			PBL9 D 2 Offset(0, 32) A_ReFire
		Goto Ready
		AltFire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMABOLTER, 1), "AltFireConfirmed")
			PBL9 D 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			PBL9 F 1 Bright Offset(0, 32)
			TNT1 A 0 A_PlayWeaponSound("PlasmaBolter/Fire")
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 2, 36 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMABOLTER, DND_ATK_SECONDARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_PLASMABOLTERAMMO << 16), 0)
			TNT1 A 0 A_GunFlash
			PBL9 F 1 Bright Offset(0, 34)
			PBL9 G 1 Bright Offset(0, 37)
			PBL9 G 1 Bright Offset(0, 40)
			PBL9 G 1 Bright Offset(0, 41)
			PBL9 H 1 Bright Offset(0, 42)
			PBL9 H 1 Bright Offset(0, 38)
			PBL9 D 1 Offset(0, 36)
			PBL9 D 1 Offset(0, 34)
			PBL9 D 9 Offset(0, 32) A_ReFire
		Goto Ready
		Flash:
			TNT1 A 2 A_Light1
			TNT1 A 2 A_Light0
		Goto LightDone
		Spawn:
			PBL9 X -1
		Stop
	}
}

Actor PlasmaBolterProj : DnD_ExplosiveBase {
	Height 16
	Radius 8
	RenderStyle Add
	Alpha 0.8
	Scale 1.33
	Speed 32
	DeathSound "weapons/plasmax"
	const int dx = 15;
	
	Damage(
		DND_WEAPON_PLASMABOLTER |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+DONTREFLECT
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			PBL9 I 2 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 I 2 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 J 2 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 J 2 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
		Loop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_PLASMABOLTER |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGYEXPLOSION << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_SpawnItemEx("PlasmaBolterShockFX")
			PBL9 KLM 4 Bright
		Stop
	}
}

Actor PlasmaBolterProj2 : PlasmaBolterProj {
	Speed 20
	
	Damage(
		DND_WEAPON_PLASMABOLTER |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGYEXPLOSION << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+RIPPER
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			PBL9 II 1 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 II 1 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 JJ 1 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
			PBL9 JJ 1 Bright
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, -dx / 2 + dx * sin(user_count * 30), dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SpawnItemEx("BlueParticleNoGravityFastVanish", 0, dx * sin(user_count * 30), -dx / 2 + dx * cos(user_count * 30))
			TNT1 A 0 A_SetUserVar("user_count", (user_count + 1) % 12)
		Loop
	}
}

Actor PlasmaBolterShockFX  {
	RenderStyle add
	Alpha 0.9
	Translation "0:255=%[0.00,0.00,0.00]:[0.29,1.34,1.97]"
	Scale 1.33
	+CLIENTSIDEONLY
	+NOINTERACTION
	States { 
		Spawn: 
			R075 ABCDEFFGGHHIIIJJJKKKLLMMNNOP 1 Bright A_FadeOut(0.045)
		Stop 
	} 
} 

Actor PlasmaBolterPickup : CustomInventory
{
	Radius 24
	Height 24
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Plasma Bolter - 9\c-"	
	+DONTGIB
	States
	{
		Spawn:
			PBL9 X -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_PLASMABOLTER), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Plasma Bolter", 1)
			TNT1 A 0 A_GiveInventory("PlasmaBolterAmmo", random(15, 30) + ACS_ExecuteWithResult(918, 0, 1, random(15, 30)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_PLASMABOLTER)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("PlasmaBolterAmmo", random(7, 15))
		Stop
	}
}

Actor PlasmaBolterMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_PLASMABOLTER)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor PlasmaBolterPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	States {
		Spawn:
			PBL9 X 17
		SpawnLoop:
			PBL9 X 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			PBL9 X 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			PBL9 X 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_PLASMABOLTER, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			PBL9 X 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Plasma Bolter", 1)
			TNT1 A 0 A_GiveToTarget("PlasmaBolterAmmo", mass)
			TNT1 A 0 A_GiveToTarget("PlasmaBolterMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_PLASMABOLTER, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}

actor "Ripper Cannon" : Weapon {
	Weapon.SelectionOrder 6666
	Weapon.Slotnumber 9
	Weapon.AmmoUse 0
	Weapon.AmmoGive 0
	Scale 0.8
	Weapon.AmmoType "RipperCannonAmmo"
	Obituary  "%o was ripped by %k's ripper."
	Inventory.PickupMessage "Picked up a ripper."
	+AMMO_OPTIONAL
	Scale 0.65
	+INVENTORY.UNDROPPABLE
	Decal "BulletChip"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.3
	Weapon.BobRangeX 0.65
	Tag "$WEP_9_12_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Remove:
			TWP0 A 1 Offset(0, 40)
			TWP0 A 1 Offset(0, 48)
			TWP0 A 1 Offset(0, 56)
			TWP0 A 1 Offset(0, 64)
			TWP0 A 1 Offset(0, 72)
			TWP0 A 1 Offset(0, 80)
			TWP0 A 1 Offset(0, 88)
			TNT1 A 0 A_JumpIfInventory("RipperCannonAmmo", 1, "RiseBack")
			TWP0 A 1 Offset(0, 96)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_TakeInventory("RipperCannonAmmo", 0)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TNT1 A 0 A_TakeInventory("Ripper Cannon", 1)
			TNT1 A 1
		Stop
		RiseBack:
			TWP0 A 1 Offset(0, 88)
			TWP0 A 1 Offset(0, 80)
			TWP0 A 1 Offset(0, 72)
			TWP0 A 1 Offset(0, 64)
			TWP0 A 1 Offset(0, 56)
			TWP0 A 1 Offset(0, 48)
			TWP0 A 1 Offset(0, 40)
		Goto Ready
		Ready:
			TNT1 A 0 A_JumpIfInventory("ForceWeaponRemove", 1, "Remove")
			TNT1 A 0 A_JumpIfInventory("RipperCannonAmmo", 1, "NoRemove")
		Goto Remove
		NoRemove:
			TNT1 A 0 A_GiveInventory("TempWeaponReady", 1)
			TWP0 A 1 A_WeaponReady
		Goto Ready
		Deselect:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot9", 1)
			TWP0 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_TakeInventory("ForceWeaponRemove", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot9", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 25, 0, DND_WEAPON_RIPPERCANNON)
		SelectLoop:
			TWP0 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_TakeInventory("TempWeaponReady", 1)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIPPERCANNON, 0), "FireConfirmed")
			TWP0 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*20,10,32+(sin(pitch)*20),0,8,random(4,8),0,0,0)
			TNT1 A 0 A_PlaySound("Weapons/RipperFire")
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20, 5 + 5 * random(0, 2),36+(sin(-pitch)*20),0,0,2,0,0,0)
		    TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-14.25, 14.25), 0, 0, frandom(-7.6, 7.6))
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_FireBullets(14.25, 7.6, -1, 0, "RipperPuff_Regular", 0, 4096)
			TWP0 B 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIPPERCANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_RIPPERAMMO << 16), 0)
		    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIPPERCANNON, 0), "Cont2")
			TWP0 F 0
		Goto FireEnd
		Cont2:
		    TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*20,10,32+(sin(pitch)*20),0,8,random(4,8),0,0,0)
		    TNT1 A 0 A_PlaySound("Weapons/RipperFire")
		    TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20, 5 + 5 * random(0, 2),36+(sin(-pitch)*20),0,0,2,0,0,0)
		    TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-14.25, 14.25), 0, 0, frandom(-7.6, 7.6))
		    TNT1 A 0 A_GunFlash
			TNT1 A 0 A_FireBullets(14.25, 7.6, -1, 0, "RipperPuff_Regular", 0, 4096)
			TWP0 C 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIPPERCANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_RIPPERAMMO << 16), 0)
		    TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIPPERCANNON, 0), "Cont3")
			TWP0 F 0
		Goto FireEnd
		Cont3:
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*20,10,32+(sin(pitch)*20),0,8,random(4,8),0,0,0)
		    TNT1 A 0 A_PlaySound("Weapons/RipperFire")
		    TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20, 5 + 5 * random(0, 2),36+(sin(-pitch)*20),0,0,2,0,0,0)
		    TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-14.25, 14.25), 0, 0, frandom(-7.6, 7.6))
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_FireBullets(14.25, 7.6, -1, 0, "RipperPuff_Regular", 0, 4096)
			TWP0 D 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RIPPERCANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_TEMPORARY | (DND_TEMPAMMO_RIPPERAMMO << 16), 0)
			TWP0 E 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RIPPERCANNON, 0), "CheckRefire")
		FireEnd:
		    TWP0 F 3
			TWP0 G 2
		Goto Ready
		CheckRefire:
			TNT1 A 0
			TNT1 A 0 A_Refire
		Goto Ready
		Flash:
			TNT1 A 3 Bright A_Light1
			TNT1 A 3 Bright A_Light0
		Stop  
		Spawn:
			TWP0 X -1
		Stop
	}
}

Actor RipperCannonShooter : DnD_Activator {
	states {
		Pickup:
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_RIPPERCANNON |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0,0,"None","None",RGF_SILENT,0,"RipperPuff", 14.25 * (1.0 - accuracy * accuracy_factor), 7.6 * (1.0 - accuracy * accuracy_factor), 4096
			)
		Stop
	}
}

Actor RipperPuff : DnD_BaseRailPuff {
	Stamina 4096
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor RipperPuff_Regular : DnD_BasePuff {
	Stamina 4096
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor RipperCannonPickup : CustomInventory {
	Radius 16
	Height 24
	Scale 0.8
    Inventory.PickupSound "weapons/pickup"
    Inventory.pickupmessage "\ccWeapon Pickup : \c[Y5]Ripper Cannon - 9"	
	+DONTGIB
	States {
		Spawn:
			TWP0 X -1
		Stop
		Pickup:
			TNT1 A 0 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_RIPPERCANNON), "Success")
		Fail
		Success:
			TNT1 A 0 A_GiveInventory("Ripper Cannon", 1)
			TNT1 A 0 A_GiveInventory("RipperCannonAmmo", random(15, 36) + ACS_ExecuteWithResult(918, 0, 1, random(15, 36)))
			TNT1 A 0 ACS_NamedExecuteAlways("DND Mugshot Grin")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_RIPPERCANNON)
			TNT1 A 0 A_JumpIfInventory("Ability_Temporal", 1, "GiveMore")
		Stop
		GiveMore:
			TNT1 A 0 A_GiveInventory("RipperCannonAmmo", random(7, 18))
		Stop
	}
}

Actor RipperCannonMsg : CustomInventory {
	States {
		Pickup:
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Message Logger", 0, 0, DND_WEAPON_RIPPERCANNON)
			TNT1 A 0 A_PlaySound("weapons/pickup", 6)
			TNT1 A 0 A_SetBlend("25 99 25", 0.6, 17)
		Stop
	}
}

Actor RipperCannonPickup_D : DND_DroppedItem {
	Radius 16
	Height 24
	Scale 0.65
	States {
		Spawn:
			TWP0 X 8
		SpawnLoop:
			TWP0 X 1 A_LookEx(LOF_NOSOUNDCHECK, 0, 28, 0, 0, "CheckPickup")
		Loop
		
		See:
		CheckPickup:
			TWP0 X 1 A_JumpIfCloser(32, "Pickup")
		goto SpawnLoop

		Pickup:
			TWP0 X 1 A_JumpIf(1 == ACS_ExecuteWithResult(986, DND_WEAPON_RIPPERCANNON, 1), "PickupSuccess")
		goto PickupFail

		PickupFail:
			TWP0 X 1
		goto SpawnLoop

		PickupSuccess:
			TNT1 A 0 A_GiveToTarget("Ripper Cannon", 1)
			TNT1 A 0 A_GiveToTarget("RipperCannonAmmo", mass)
			TNT1 A 0 A_GiveToTarget("RipperCannonMsg", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Tip Trigger", 0, DND_WEAPON_RIPPERCANNON, ACS_NamedExecuteWithResult("DnD Get Target"))
		stop
	}
}