// Sprites by Mike12
Actor " Shotgun " : Weapon
{
  radius 20
  height 16
  Weapon.AmmoGive 0
  Weapon.SlotNumber 3
  weapon.selectionorder 1500
  weapon.kickback 100
  obituary "%o got pummeled by %k's shotgun."
  Inventory.PickupSound "weapons/pickup"
  inventory.pickupmessage "You got the shotgun!"
  weapon.ammotype1 "Shell"
  weapon.ammotype2 "ShellSize_8N"
  Weapon.AmmoUse1 0
  Weapon.AmmoUse2 0
  Decal "BulletChip"
  XScale 0.8
  YScale 0.9
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.8
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.8
  states
  {
  Spawn:
    SGN1 Z -1
    stop
  Ready:
    SGN1 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
    loop
  Deselect: 
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
    SGN1 A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SHOTGUN)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 5)
  SelectLoop:
    SGN1 A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
		TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 1, "ContinueFire")
		SGN1 A 1 A_WeaponReady(WRF_NOSWITCH)
  Goto Reload
  ContinueFire:
	  SGN1 BB 1 Bright
      TNT1 A 0 A_GunFlash
      SGN1 C 1 Bright	
	  TNT1 AAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	  TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
	  TNT1 A 0 A_GiveInventory("ShotgunShooter", 1)
	  TNT1 A 0 A_TakeInventory("DoPump", 1)
	  SGN1 C 1 bright A_SetPitch(pitch - 4.0)
	  TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 0, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN1 DDDE 1 A_SetPitch(pitch + 1.0)
	  SGN1 E 2
	  SGN1 F 3
	  TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 1, "Skip")
	  TNT1 A 0 A_GiveInventory("DoPump", 1)
    Skip:
	  SGN1 G 3 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24, -3, 42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  SGN1 H 3 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24, -7, 42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  TNT1 A 0 A_PlaySound("weapons/sgun1pump")
	  TNT1 A 0 A_GiveInventory("ShotgunCasingSpawner", 1)
	  SGN1 I 4
	  SGN1 JJ 2 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24,-15,42+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN1 KK 2 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24,-12,42+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN1 LM 2
      SGN1 A 1 A_ReFire	
	  Goto Ready
    Reload:
  		TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
		TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "NoAction")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10), "ContinueReload")
		SGN1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto NoAction
    ContinueReload:
	    SGN1 N 4
		TNT1 A 0 A_PlaySound("Weapons/ShotgunOpen")
	    SGN1 MLK 3
	ContinueReloadChecks:
		TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "RiseUp")
		SGN1 K 2 A_JumpIf(ACS_ExecuteWithResult(994, 10), "ContinueReloadAgain")
	Goto RiseUp
	ContinueReloadAgain:
		SGN1 K 1 Offset(0, 33)
		SGN1 K 1 Offset(0, 35)
		SGN1 K 1 Offset(1, 37)
		SGN1 K 1 Offset(1, 39)
		TNT1 A 0 A_PlayWeaponSound("Weapons/ShotgunInsert")
		TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
	NoTake:
		TNT1 A 0 A_GiveInventory("ShellSize_8N", 1)
		SGN1 K 2 Offset(3, 42)
		SGN1 K 1 Offset(2, 40)
		SGN1 K 1 Offset(1, 39)
		SGN1 K 1 Offset(1, 39)
		SGN1 K 1 Offset(1, 37)
		SGN1 K 1 Offset(1, 35)
		SGN1 K 1 Offset(1, 33)
		TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePump")
		SGN1 K 3 Offset(0, 32) A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecks") // dont change the 3 tic there
	Goto RiseUp
	RiseUp:
		TNT1 A 0 A_PlaySound("Weapons/ShotgunClose")
		SGN1 LM 3
		SGN1 N 4
	Goto Ready
	RisePump:
		TNT1 A 0 A_TakeInventory("DoPump", 1)
		SGN1 O 4 Offset(0, 33) A_PlaySound("weapons/sgun1pump", 7)
		SGN1 K 2
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecks")
		SGN1 K 1
		SGN1 LMN 3
	SkipRefire:
		SGN1 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
	Goto Ready
  NoAction:
	  SGN1 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  Goto Ready
	
	ReloadFast:
		TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "NoAction")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10), "ContinueReloadFast")
		SGN1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto NoAction
    ContinueReloadFast:
	    SGN1 N 2
		TNT1 A 0 A_PlaySound("Weapons/ShotgunOpen")
	    SGN1 M 1
		SGN1 L 2
		SGN1 K 1
	ContinueReloadChecksFast:
		TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "RiseUpFast")
		SGN1 K 2 A_JumpIf(ACS_ExecuteWithResult(994, 10), "ContinueReloadAgainFast")
	Goto RiseUp
	ContinueReloadAgainFast:
		SGN1 K 1 Offset(0, 35)
		SGN1 K 1 Offset(1, 39)
		TNT1 A 0 A_PlayWeaponSound("Weapons/ShotgunInsert")
		TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTakeFast")
	NoTakeFast:
		TNT1 A 0 A_GiveInventory("ShellSize_8N", 1)
		SGN1 K 1 Offset(3, 42)
		SGN1 K 1 Offset(2, 40)
		SGN1 K 1 Offset(1, 39)
		SGN1 K 1 Offset(1, 35)
		TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePumpFast")
		SGN1 K 3 Offset(0, 32) A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecksFast")
	Goto RiseUpFast
	RiseUpFast:
		TNT1 A 0 A_PlaySound("Weapons/ShotgunClose")
		SGN1 L 1
		SGN1 M 2
		SGN1 N 2
	Goto Ready
	RisePumpFast:
		TNT1 A 0 A_TakeInventory("DoPump", 1)
		SGN1 O 2 Offset(0, 33) A_PlaySound("weapons/sgun1pump", 7)
		SGN1 K 1
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecksFast")
		SGN1 K 1
		SGN1 L 1
		SGN1 M 2
		SGN1 N 1
	SkipRefireFast:
		SGN1 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
	Goto Ready
	  
	Altfire:
		TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
		SGN1 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
		TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL, SPWEP_SG)
		SGN1 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
		SGN1 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
	Goto Ready
	  
	Flash:
	  TNT1 A 4 bright A_Light1
	  TNT1 A 3 bright A_Light2
	  TNT1 A 0 bright A_Light0
	  stop
    }
}

Actor ShotgunShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_8N", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 3, "Electric")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 2, "Magnum")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 1, "Flechette")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake2")
			TNT1 A 0 A_TakeInventory("Shell", 1)
		NoTake2:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_PlayWeaponSound("weapons/sgun1fire")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (5.6, 5.6, 10, random(2, 3) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM)  
		Stop
		Full:
			TNT1 A 0 A_FireBullets (5.6, 5.6, 10, random(2, 3) * ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM)  
		Stop
		Flechette:
			TNT1 A 0 A_GiveInventory("FlechetteShellShooter", 1)
		Stop
		Magnum:
			TNT1 A 0 A_GiveInventory("MagnumShellShooter", 1)
		Stop
		Electric:
			TNT1 A 0 A_GiveInventory("ShockShellShooter", 1)
		Stop
	}
}

Actor ShotgunCasingSpawner : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 3, "Electric")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 2, "Magnum")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 1, "Flechette")
			TNT1 A 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*36,-11,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Flechette:
			TNT1 A 0 A_SpawnItemEx ("flechettecasing",cos(-pitch)*36,-11,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Magnum:
			TNT1 A 0 A_SpawnItemEx ("piercecasing",cos(-pitch)*36,-11,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Electric:
			TNT1 A 0 A_SpawnItemEx ("electriccasing",cos(-pitch)*36,-11,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
	}
}

// Sprites by PisstePank
Actor "Upgraded Shotgun" : Weapon
{
  radius 20
  height 16
  Weapon.SlotNumber 3
  weapon.selectionorder 1500
  weapon.kickback 100
  obituary "%o got pummeled by %k's shotgun."
  Inventory.PickupSound "weapons/pickup"
  inventory.pickupmessage "You got the shotgun!"
  weapon.ammotype "Shell"
  weapon.ammouse1 0
  weapon.ammogive1 0
  Weapon.AmmoType2 "ShellSize_8"
  Weapon.ammoGive2 0
  Weapon.AmmoUse2 0
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.8
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.8
  Decal "BulletChip"
  Tag "Purifier"
  +INVENTORY.UNDROPPABLE
  states
  {
  Spawn:
    SGP2 Z -1
    stop
  Ready:
    SGN2 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
    loop
  Deselect: 
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
    SGN2 A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_PURIFIER)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
  SelectLoop:
    SGN2 A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	  TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "ContinueFire")
	  TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "ContinueFire")
  Goto Reload
  ContinueFire:
	  TNT1 A 0 A_JumpIfInventory("Reloading", 1, "LowerWeapon")
  ContinueForReal:
	  SGN2 BCD 1 Bright
	  TNT1 A 0 A_GunFlash
	  TNT1 AAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	  TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 6, 30 * (1 + sin(-pitch)), 2, 0, 1)
	  TNT1 A 0 A_GiveInventory("PurifierShooter", 1)
	  SGN2 E 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 4, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  TNT1 A 0 A_SetPitch(pitch - 6.0)
	  SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  TNT1 A 0 A_SetPitch(pitch + 1.0)
	  SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  TNT1 A 0 A_SetPitch(pitch + 1.0)
	  SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  TNT1 A 0 A_SetPitch(pitch + 1.0)
	  TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN2 GGG 1 A_SetPitch(pitch + 1.0)
	  TNT1 A 0 A_CheckReload
	  SGN2 H 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 6, 37+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN2 I 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 7, 38+(sin(-pitch)*20),0,0,2,0,0,0)
	  TNT1 A 0 A_GiveInventory("PurifierCasingSpawner", 1)
	  TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
	  SGN2 JKL 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 7, 40+(sin(-pitch)*20),0,0,2,0,0,0)
	  SGN2 KJ 3
	  TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "ContinueLowering")
	  SGN2 J 2 A_JumpIf(ACS_ExecuteWithResult(994, 10, 1), "GoHereFromFire")
	  ContinueLowering:
	  SGN2 I 3
	  SGN2 HG 1
	  SGN2 A 1 A_ReFire	
	  Goto Ready
	LowerWeapon:
		TNT1 A 0 A_TakeInventory("Reloading", 1)
		SGN2 TSRQPONMIHG 1
	  Goto ContinueForReal
	Reload:
		SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
		TNT1 A 0 A_JumpIfInventory("ShellSize_8", 0, "Ready")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 1), "ContinueAltFire")
		SGN2 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
	Goto Ready
	ContinueAltFire:
		SGN2 GH 1
		SGN2 IJ 2
	GoHereFromFire:
	    TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "GoHereFromFire2")
		SGN2 MNOP 2
		SGN2 QRST 1
		TNT1 A 0 A_GiveInventory("Reloading", 1)
	AltFireLoop:
		TNT1 A 0 A_JumpIFInventory("ShellSize_8", 0, "CockNLoad")
		TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "DoHack")
	Goto NoHack
	DoHack:
		SGN2 U 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
	ContinueAltLoop:
		SGN2 V 2
		SGN2 W 1
		TNT1 A 0 A_PlayWeaponSound("weapons/shotgunloadnew")
		TNT1 A 0 A_GiveInventory("ShellSize_8", 1)
		SGN2 XY 1
		SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 1), "AltFireLoop")
		SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
	Goto CockNLoad
	NoHack:
		SGN2 U 2
	Goto ContinueAltLoop
	CockNLoad:
		TNT1 A 0 A_TakeInventory("Reloading", 1)
		SGN2 TSRQ 1
		SGN2 PONMJ 2
		TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
		SGN2 KLKJ 3
		SGN2 I 2
		SGN2 HG 1
	Goto Ready
	
	
	ReloadFaster:
		TNT1 A 0 A_JumpIfInventory("ShellSize_8", 0, "Ready")
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 1), "ContinueAltFire2")
		SGN2 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	ContinueAltFire2:
		SGN2 GH 1
		SGN2 IJ 1
	GoHereFromFire2:
		SGN2 MNOP 1
		TNT1 A 0 A_GiveInventory("Reloading", 1)
	AltFireLoop2:
		TNT1 A 0 A_JumpIFInventory("ShellSize_8", 0, "CockNLoad2")
		TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "DoHack2")
	Goto NoHack2
	DoHack2:
		SGN2 U 1 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
	ContinueAltLoop2:
		SGN2 V 1
		SGN2 W 1
		TNT1 A 0 A_PlayWeaponSound("weapons/shotgunloadnew")
		TNT1 A 0 A_GiveInventory("ShellSize_8", 1)
		SGN2 XY 1
		SGN2 Z 1 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 1), "AltFireLoop2")
		SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
	Goto CockNLoad2
	NoHack2:
		SGN2 U 1
	Goto ContinueAltLoop2
	CockNLoad2:
		TNT1 A 0 A_TakeInventory("Reloading", 1)
		SGN2 PONMJ 1
		TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
		SGN2 KLKJ 1
		SGN2 I 1
		SGN2 HG 1
	Goto Ready
	
	Altfire:
		TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
		SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
		TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL, SPWEP_SG)
		SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
		SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
	Goto Ready
	NoAction:
		SGN2 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
	Goto Ready
	
	Flash:
	  TNT1 A 4 bright A_Light1
	  TNT1 A 3 bright A_Light2
	  TNT1 A 0 bright A_Light0
	  stop
    }
}

Actor PurifierShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_8", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 3, "Electric")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 2, "Magnum")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 1, "Flechette")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake2")
			TNT1 A 0 A_TakeInventory("Shell", 1)
		NoTake2:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_PlayWeaponSound("weapons/shotgunfirenew")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (3.6, 3.6, 15, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM) 
		Stop
		Full:
			TNT1 A 0 A_FireBullets (3.6, 3.6, 15, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM) 
		Stop
		Flechette:
			TNT1 A 0 A_GiveInventory("FlechetteShellShooter", 1)
		Stop
		Magnum:
			TNT1 A 0 A_GiveInventory("MagnumShellShooter", 1)
		Stop
		Electric:
			TNT1 A 0 A_GiveInventory("ShockShellShooter", 1)
		Stop
	}
}

Actor PurifierCasingSpawner : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 3, "Electric")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 2, "Magnum")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_3", 1, "Flechette")
			TNT1 A 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*36, 10,34+(sin(-pitch)*36), 0, frandom(-8.0, -5.0), random(0, 1),0,0,0)
		Stop
		Flechette:
			TNT1 A 0 A_SpawnItemEx ("flechettecasing",cos(-pitch)*36, 10,34+(sin(-pitch)*36), 0, frandom(-8.0, -5.0), random(0, 1),0,0,0)
		Stop
		Magnum:
			TNT1 A 0 A_SpawnItemEx ("piercecasing",cos(-pitch)*36, 10,34+(sin(-pitch)*36), 0, frandom(-8.0, -5.0), random(0, 1),0,0,0)
		Stop
		Electric:
			TNT1 A 0 A_SpawnItemEx ("electriccasing",cos(-pitch)*36, 10,34+(sin(-pitch)*36), 0, frandom(-8.0, -5.0), random(0, 1),0,0,0)
		Stop
	}
}

ACTOR "Upgraded Shotgun2" : Weapon
{
  Weapon.SelectionOrder 400
  Weapon.AmmoUse1 0
  Weapon.AmmoUse2 0
  Weapon.AmmoGive 0
  Weapon.AmmoType1 "Shell"
  Weapon.AmmoType2 "ShellSize_10"
  Weapon.SlotNumber 3
  Inventory.PickupMessage "$GOTSHOTGUN2"
  Inventory.PickupSound "weapons/pickup"
  Obituary "$OB_MPSSHOTGUN"
  Tag "Killstorm"
  Decal "BulletChip"
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.5
  Weapon.BobRangeY 0.6
  Weapon.BobRangeX 0.7
  States
  {
  Ready:
    UASG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
    Loop
  Deselect:
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
    UASG A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_KILLSTORM)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 18)
  SelectLoop:
    UASG A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	  TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "ContinueFire")
	  TNT1 A 0 A_JumpIfInventory("ShellSize_10", 1, "ContinueFire")
  Goto Reload
  ContinueFire:
	UASG BC 1 Bright
	TNT1 A 0 A_PlayWeaponSound("weapons/autosgfire")
	TNT1 A 0 A_GunFlash
	TNT1 AAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 5, 34 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 A_GiveInventory("KillstormShooter", 1)
    TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(5, 10), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	UASG D 1 Bright A_SetPitch(pitch - 4.5)
	UASG E 1 bright A_SetPitch(pitch + 1.0)
	TNT1 A 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*28, 22, 28+(sin(-pitch)*36),0,random(5, 8), random(1, 8),0,0,0)
	TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(5, 10), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	UASG F 1 A_SetPitch(pitch + 1.0)
	UASG FGGHH 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(5, 10), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	UASG A 2
	UASG A 2 A_Refire
    Goto Ready
  Reload:
    TNT1 A 0 A_JumpIfInventory("Shell", 1, "ContinueCheck")
	UASG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  Goto Ready
  ContinueCheck:
	TNT1 A 0 A_JumpIfInventory("ShellSize_10", 0, "NoReload")
	TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "DoReloadFaster")
  DoReload:
	UASG I 4
	UASG J 3
	UASG KL 2
	UASG M 2 A_PlaySound("weapons/autosgopen", 6)
	UASG N 24
  ReloadLoop:
	TNT1 A 0 A_JumpIfInventory("Shell", 1, "ContinueReload")
  Goto FinishReload
  ContinueReload:
    TNT1 A 0 A_JumpIfInventory("ShellSize_10", 0, "FinishReload")
    TNT1 A 0 A_TakeInventory("Shell", 1)
	TNT1 A 0 A_GiveInventory("ShellSize_10", 1)
  Goto ReloadLoop
  FinishReload:
	UASG M 2
	TNT1 A 0 A_PlaySound("weapons/autosgload", 6)
	UASG L 1 Offset(0, 28)
	UASG L 1 Offset(0, 22)
	UASG L 1 Offset(0, 28)
	UASG L 1 Offset(0, 32)
	UASG K 2
	UASG J 3
	UASG I 4
    Goto Ready
	
  DoReloadFaster:
	UASG I 2
	UASG J 2
	UASG KL 1
	UASG M 1 A_PlaySound("weapons/autosgopen", 6)
	UASG N 12
  ReloadLoopFaster:
	TNT1 A 0 A_JumpIfInventory("Shell", 1, "ContinueReloadFaster")
  Goto FinishReloadFaster
  ContinueReloadFaster:
    TNT1 A 0 A_JumpIfInventory("ShellSize_10", 0, "FinishReloadFaster")
    TNT1 A 0 A_TakeInventory("Shell", 1)
	TNT1 A 0 A_GiveInventory("ShellSize_10", 1)
  Goto ReloadLoopFaster
  FinishReloadFaster:
	UASG M 2
	TNT1 A 0 A_PlaySound("weapons/autosgload", 6)
	UASG L 1 Offset(0, 28)
	UASG L 1 Offset(0, 22)
	UASG L 1 Offset(0, 28)
	UASG L 1 Offset(0, 32)
	UASG KJI 2
    Goto Ready
  NoReload:
	UASG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	
  Flash:
    TNT1 A 4 Bright A_Light1
    TNT1 A 3 Bright A_Light2
    Goto LightDone
  Spawn:
    UASG X -1
    Stop
  }
}

Actor KillstormShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_10", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (7.2, 5.2, 12, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM | FBF_USEAMMO)
		Stop
		Full:
			TNT1 A 0 A_FireBullets (7.2, 5.2, 12, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
		Stop
	}
}

// Sprites by Eriance
ACTOR " Super Shotgun " : Weapon
{
  Weapon.SelectionOrder 650
  Weapon.AmmoUse 2
  Weapon.AmmoGive 0
  Weapon.AmmoType "Shell"
  Weapon.SlotNumber 3
  Inventory.PickupMessage "$GOTSHOTGUN2"
  Inventory.PickupSound "weapons/pickup"
  Obituary "$OB_MPSSHOTGUN"
  Tag "Super Shotgun"
  Decal "BulletChip"
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.8
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.8
  +INVENTORY.UNDROPPABLE
  States
  {
  Ready:
    SHT1 A 1 A_WeaponReady
    Loop
  Deselect:
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
    SHT1 A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SUPERSHOTGUN)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 5, 2 | (3 << 16))
  SelectLoop:
    SHT1 A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	SHT1 BC 1 Bright
	SHT2 M 0 A_PlayWeaponSound("weapons/ssgfire")
	TNT1 A 0 A_GunFlash
	TNT1 AAAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 A_GiveInventory("SSGShooter", 1)
	SHT1 D 1 Bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(-6, 6),30+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch - 10.0)
	SHT1 E 1 Bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(-6, 6),30+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	SHT1 G 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(-6, 6),30+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	SHT1 H 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(-6, 6),30+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	SHT1 I 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(-6, 6),30+(sin(-pitch)*20),0,0,2,0,0,0)
	SHT1 JJ 1 A_SetPitch(pitch + 2.0)
	TNT1 A 0 A_CheckReload
	TNT1 A 0 A_JumpIFInventory("Ability_Reloader", 1, "ReloadFaster")
	SHT1 KLM 2
	SHT1 N 2
	SHT1 ML 2
	SHT1 KP 2 
	SHT1 Q 1 A_PlaySound("weapons/ssgopen")
	SHT1 RST 2
	TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*24,-8,31+(sin(-pitch)*36),0,-1*random(5, 8), random(0, 1),0,0,0)		
    SHT1 UV 2
	SHT1 WX 1
	SHT1 YZ 2
	SHX1 A 1 A_PlaySound("weapons/ssgload")
	SHX1 BCD 2
	SHX1 E 1 A_PlaySound("weapons/ssgclose")
	SHX1 FG 1
	SHX1 HI 2
	SHT1 A 3 A_Refire
    Goto Ready
  ReloadFaster:
	SHT1 JKLM 1
	SHT1 NMLKP 1
	SHT1 Q 1 A_PlaySound("weapons/ssgopen")
	SHT1 RST 1
	TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*24,-8,31+(sin(-pitch)*36),0,-1*random(5, 8), random(0, 1),0,0,0)		
    SHT1 UV 1
	SHT1 X 1
	SHT1 YZ 1
	SHX1 A 1 A_PlaySound("weapons/ssgload")
	SHX1 BCD 1
	SHX1 E 1 A_PlaySound("weapons/ssgclose")
	SHX1 G 1
	SHX1 HI 1
	SHT1 A 3 A_Refire
	Goto Ready
  Flash:
    TNT1 A 4 Bright A_Light1
    TNT1 A 3 Bright A_Light2
    Goto LightDone
  Spawn:
    SHS1 Z -1
    Stop
  }
}

Actor SSGShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (11.2, 7.1, 20, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM | FBF_USEAMMO)
		Stop
		Full:
			TNT1 A 0 A_FireBullets (11.2, 7.1, 20, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
		Stop
	}
}

ACTOR "Upgraded Super Shotgun" : Weapon
{
  Weapon.SelectionOrder 650
  Weapon.AmmoUse 2
  Weapon.AmmoGive 0
  Weapon.AmmoType "Shell"
  Weapon.SlotNumber 3
  Inventory.PickupMessage "$GOTSHOTGUN2"
  Inventory.PickupSound "weapons/pickup"
  Obituary "$OB_MPSSHOTGUN"
  Tag "Heavy Super Shotgun"
  Decal "BulletChip"
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.8
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.8
  States
  {
  Ready:
    SSGG A 1 A_WeaponReady
    Loop
  Deselect:
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
    SSGG A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_HEAVYSUPERSHOTGUN)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
  SelectLoop:
    SSGG A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
	Fire:
		SSGG A 1
		TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "FireFaster")
		SSGF A 1 Bright
		TNT1 A 0 A_PlayWeaponSound("weapons/hunssgfire")
		TNT1 A 0 A_GiveInventory("HeavySSGShooter1", 1)
		TNT1 A 0 A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 8, 32 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 AAAAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 8, 32 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch - 4.0, SPF_INTERPOLATE)
		TNT1 A 0 A_ZoomFactor(0.985,ZOOM_NOSCALETURNING)
		SSGF A 1 Bright A_GunFlash
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGX B 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		TNT1 A 0 A_ZoomFactor(1,ZOOM_NOSCALETURNING)
		SSGX C 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGX D 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGF C 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF D 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 34 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF E 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF F 1
		TNT1 A 0 A_JumpIfInventory("Shell", 2, "ContinueReload")
	Goto NoLoad
	ContinueReload:
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 11, 36 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF F 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 11, 36 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF E 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF GH 1
		SSGF IJKLMNOP 1
		TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*24,-6,32+(sin(-pitch)*36),0,-1*random(5, 8), random(0, 1),0,0,0)
		SSGF QRRSSTTUUVXYZ 1
		SSGG BCDEFFGHIJKLMNOPQRSTU 1
		SSGG A 3 A_ReFire
	Goto Ready
  FireFaster:
		SSGF A 1 Bright
		TNT1 A 0 A_PlayWeaponSound("weapons/hunssgfirefast")
		TNT1 A 0 A_GiveInventory("HeavySSGShooter1", 1)
		TNT1 A 0 A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 8, 32 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 AAAAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 8, 32 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch - 4.0, SPF_INTERPOLATE)
		TNT1 A 0 A_ZoomFactor(0.985,ZOOM_NOSCALETURNING)
		SSGF A 1 Bright A_GunFlash
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGX B 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		TNT1 A 0 A_ZoomFactor(1,ZOOM_NOSCALETURNING)
		SSGX C 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGX D 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 9, 33 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_SetPitch(pitch + 1.0)
		SSGF C 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF D 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 34 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF E 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		TNT1 A 0 A_JumpIfInventory("Shell", 2, "ContinueReloadFast")
	Goto NoLoad
	ContinueReloadFast:
		SSGF F 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 11, 36 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF F 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 11, 36 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF E 1
		TNT1 A 0 A_SpawnItemEx("SHOTGUNSMOKE", 18 * cos(-pitch), 10, 35 * (1 + sin(-pitch)), 2, 0, 1)
		SSGF GH 1
		SSGF IKLNOP 1
		TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*24,-6,32+(sin(-pitch)*36),0,-1*random(5, 8), random(0, 1),0,0,0)
		SSGF QRSTUVXYZ 1
		SSGG BCDEFGHIJKLMNOPQRT 1
		SSGG A 3 A_ReFire
    Goto Ready
	NoLoad:
		SSGF FE 2
		SSGX DCB 2
		SSGG A 2
		TNT1 A 0 A_StopSound(CHAN_WEAPON)
	Goto Ready
  Flash:
    TNT1 A 4 Bright A_Light1
    TNT1 A 3 Bright A_Light2
    Goto LightDone
  Spawn:
    SSGP A -1
    Stop
  }
}

Actor HeavySSGShooter1 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(9.6, 5.8, 14, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM | FBF_USEAMMO)
			TNT1 AAAAAAAAAAAAAA 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK),0,0,"None","None",RGF_SILENT,0,"NewBulletPuff_Rail", 9.6, 5.8, 384)
		Stop
		Full:
			TNT1 A 0 A_FireBullets(9.6, 5.8, 14, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
			TNT1 AAAAAAAAAAAAAA 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK),0,0,"None","None",RGF_SILENT,0,"NewBulletPuff_RailFull", 9.6, 5.8, 384)
		Stop
	}
}

ACTOR "Upgraded Super Shotgun2" : Weapon
{
  Weapon.SelectionOrder 400
  Weapon.AmmoUse1 0
  Weapon.AmmoUse2 0
  Weapon.AmmoGive 0
  Weapon.AmmoType1 "Shell"
  Weapon.AmmoType2 "ShellSize_2"
  Weapon.SlotNumber 3
  Inventory.PickupMessage "$GOTSHOTGUN2"
  Inventory.PickupSound "weapons/pickup"
  Obituary "$OB_MPSSHOTGUN"
  Tag "Erasus"
  Decal "BulletChip"
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.2
  Weapon.BobRangeY 0.5
  Weapon.BobRangeX 0.9
  States
  {
  Ready:
    ERAG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
    Loop
  Deselect:
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
    ERAG A 1 A_Lower
	TNT1 A 0 A_Lower
    Loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_ERASUS)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
  SelectLoop:
    ERAG A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	  TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "ContinueFire")
	  TNT1 A 0 A_JumpIfInventory("ShellSize_2", 1, "ContinueFire")
  Goto Reload
  ContinueFire:
	ERAF AAB 1 Bright
	TNT1 A 0 A_PlayWeaponSound("weapons/erasfire")
	TNT1 A 0 A_GunFlash
	TNT1 AAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 7, 32 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 A_GiveInventory("ErasusShooter1", 1)
    TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	ERAF B 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch - 6.0)
	ERAF C 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ERAF C 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(8, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ER2F C 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(8, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ER2F D 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(8, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ER2F E 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(9, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ER2F F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(9, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 1.0)
	ER2F F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(9, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	ER2F DC 2 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(9, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	ER2F B 3
	TNT1 A 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*28, 22,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
	ER2F A 4 A_JumpIfInventory("Shell", 1, "CheckNormalReload")
	TNT1 A 0 A_Refire
	ERAG A 6
	Goto Ready
	CheckNormalReload:
	TNT1 A 0 A_JumpIfInventory("ShellSize_2", 1, "FinishFiring")
	ERAG A 1
	TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "DoReloadFaster")
    Goto Reload
  FinishFiring:
	ERAG A 1
	Goto Ready
  FireEndBurst:
	ERAF B 1 Bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12),36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch - 16.0)
	ERAF C 1 Bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12),36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ERAF C 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12),36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ER2F C 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(7, 12),36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ER2F G 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(10, 16), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ER2F H 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(10, 16), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ER2F I 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(10, 16), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	TNT1 A 0 A_SetPitch(pitch + 2.0)
	ER2F J 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(10, 16), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	ER2F FDC 2 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*36, random(10, 12), 36+(sin(-pitch)*20),0,0,2,0,0,0)
	ER2F B 3
	TNT1 AA 0 A_SpawnItemEx ("shotguncasing",cos(-pitch)*28, 22,34+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
	ER2F A 4 A_JumpIfInventory("Shell", 1, "CheckAltReload")
	Goto Ready
	CheckAltReload:
	TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "DoReloadFaster")
    Goto Reload
  AltFire:
    TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "BurstFire")
	TNT1 A 0 A_JumpIfInventory("ShellSize_2", 2, "BurstFire")
	ERAG A 1
  Reload:
    TNT1 A 0 A_JumpIfInventory("ShellSize_2", 2, "NoAction")
	TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "DoReloadFaster")
	ERAG C 3
	ERAR AB 2
	TNT1 A 0 A_PlaySound("weapons/erascock", 6)
  ReloadLoop:
	TNT1 A 0 A_JumpIfInventory("Shell", 1, "ContinueReload")
  Goto FinishReload
  ContinueReload:
    TNT1 A 0 A_JumpIfInventory("ShellSize_2", 2, "FinishReload")
    TNT1 A 0 A_TakeInventory("Shell", 1)
	TNT1 A 0 A_GiveInventory("ShellSize_2", 1)
  Goto ReloadLoop
  FinishReload:
	ERAR CDEFEDCBA 2
	ERAG C 3
    Goto Ready
  BurstFire:
	ERAF AAB 1 Bright
	TNT1 A 0 A_PlayWeaponSound("weapons/erasfire2")
	TNT1 A 0 A_GunFlash
	TNT1 AAAAAAAAAA 0 A_FireCustomMissile("SGTracer", Random(-12, 12), 0, 0, Random(-8, 8))
	TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 7, 32 * (1 + sin(-pitch)), 2, 0, 1)
	TNT1 A 0 A_GiveInventory("ErasusShooter2", 1)
    Goto FireEndBurst
	
	
  DoReloadFaster:
	ERAG C 2
	ERAR AB 1
	TNT1 A 0 A_PlaySound("weapons/erascock", 6)
  ReloadLoopFast:
	TNT1 A 0 A_JumpIfInventory("Shell", 1, "ContinueReloadFaster")
  Goto FinishReloadFaster
  ContinueReloadFaster:
    TNT1 A 0 A_JumpIfInventory("ShellSize_2", 2, "FinishReloadFaster")
    TNT1 A 0 A_TakeInventory("Shell", 1)
	TNT1 A 0 A_GiveInventory("ShellSize_2", 1)
  Goto ReloadLoopFast
  FinishReloadFaster:
	ERAR CDEFEDCBA 1
	ERAG C 2
    Goto Ready
  NoAction:
	ERAG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  Goto Ready
  Flash:
    TNT1 A 4 Bright A_Light1
    TNT1 A 3 Bright A_Light2
    Goto LightDone
  Spawn:
    ERAG X -1
    Stop
  }
}

Actor ErasusShooter1 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_2", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (9.0, 6.4, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM | FBF_USEAMMO)
		Stop
		Full:
			TNT1 A 0 A_FireBullets (9.0, 6.4, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
		Stop
	}
}

Actor ErasusShooter2 : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_2", 2)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (12.8, 8.2, 36, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff", FBF_NORANDOM | FBF_USEAMMO)
		Stop
		Full:
			TNT1 A 0 A_FireBullets (12.8, 8.2, 36, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
		Stop
	}
}

// An exploding shotgun, idk where the graphics come from
Actor "Silver Gun" : Weapon
{
  radius 20
  height 16
  Weapon.SlotNumber 3
  weapon.selectionorder 1600
  weapon.kickback 100
  obituary "%o was devastated by %k's silver gun."
  Inventory.PickupSound "weapons/pickup"
  inventory.pickupmessage "You got the silver gun!"
  weapon.ammotype "ExplodingShell"
  weapon.ammouse 1
  weapon.ammogive 4
  DamageType "Explosives"
  +INVENTORY.UNDROPPABLE
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 1.8
  Weapon.BobRangeY 0.4
  Weapon.BobRangeX 0.8
  states
  {
  Spawn:
    EXSG X -1
    stop
  Ready:
    EXSG A 1 A_WeaponReady
    loop
  Deselect: 
    TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
    EXSG A 1 A_Lower
	TNT1 A 0 A_Lower
    loop
  Select:
    TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
	TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
	TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SILVERGUN)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
	TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 8, 4 | (6 << 16))
  SelectLoop:
    EXSG A 1 A_Raise
	TNT1 A 0 A_Raise
    Loop
  Fire:
	  EXSG B 1
      EXSG E 0 A_GunFlash
      EXSG CD 1 Bright
	  TNT1 AAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
	  TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
	  TNT1 A 0 A_GiveInventory("SilverShooter", 1)
	  EXSG E 1 Bright A_PlayWeaponSound("weapons/expshotgunfire")
	  TNT1 A 0 A_SetPitch(pitch - 6.0)
	  EXSG F 1 bright
	  TNT1 A 0 A_SetPitch(pitch + 1.5)
	  EXSG G 1 bright
	  TNT1 A 0 A_SetPitch(pitch + 1.5)
	  EXSG H 1 bright
	  TNT1 A 0 A_SetPitch(pitch + 1.5)
	  EXSG I 1 bright
	  TNT1 A 0 A_SetPitch(pitch + 1.5)
	  SHTG G 0 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*20,-10,36+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
      EXSG JKLM 1
	  SHTG G 0 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*20,-15,42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  EXSG NOPQ 1
	  TNT1 A 0 A_Playsound("weapons/expshotgunpump")
	  SHTG G 0 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*20,-15,42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  EXSG RSTU 1
	  SHTG G 0 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*20,-15,42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  EXSG V 2
	  SHTG G 0 A_SpawnItemEx ("exshotguncasing",cos(-pitch)*36,-18,34+(sin(-pitch)*36),cos(-pitch)*0,random(5, 8), random(0, 1),0,0,0)
	  EXSG V 2
	  SHTG G 0 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*20,-15,42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  EXSG UTSRQPONMLKJ 1
      EXSG A 1 A_ReFire	
	  Goto Ready
	Flash:
	  TNT1 A 4 bright A_Light1
	  TNT1 A 3 bright A_Light2
	  TNT1 A 0 bright A_Light0
	  stop
    }
}

Actor SilverShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (6.4, 4.8, 5, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "ExplodingPuff", FBF_NORANDOM | FBF_USEAMMO)
			TNT1 A 0 A_FireBullets (6.4, 4.8, 5, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "ExplodingPuffNoSelfDmg", FBF_NORANDOM)  
		Stop
		Full:
			TNT1 A 0 A_FireBullets (6.4, 4.8, 5, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "ExplodingPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)
			TNT1 A 0 A_FireBullets (6.4, 4.8, 5, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "ExplodingPuffNoSelfDmg_FullDMG", FBF_NORANDOM)  
		Stop
	}
}

Actor ExpShellSoundEmitter
{
	+NOINTERACTION
	+NOTELEPORT
	
	States
	{
		Spawn:
			TNT1 AA 0 A_PlaySound("weapons/expshotgunxpl")
		Stop
	}
}

// Taken from Samsara
actor ExplosiveSpark
{
    health 5
    radius 1
    height 1
    Speed 10
    Scale 0.2
    Gravity 0.7
    PROJECTILE
    +NOBLOCKMAP
    +DONTSPLASH
    +RANDOMIZE
    -NOGRAVITY
    -SOLID
    +WINDTHRUST
    +CLIENTSIDEONLY
    States
    {
      Spawn:
        DXSK A 1 BRIGHT A_FadeOut(0.01)
        loop
    }
}

Actor ExplodingPuff : BulletPuff
{
	VSpeed 0
	Renderstyle Add
	Alpha 0.85
	Scale 0.55
	Decal "Scorch"
	DamageType "Explosives"
	+ALWAYSPUFF
	+PUFFONACTORS
	+PUFFGETSOWNER
	+EXTREMEDEATH
	+MTHRUSPECIES
	+FOILINVUL
	States
	{
		Spawn:
			TNT1 AA 0 A_SpawnItem("ExpShellSoundEmitter")
			TNT1 AA 0 A_SpawnDebris("ExplosiveSpark", 1)
			DKSX M 2
			TNT1 A 0 A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "LessSelfDmg")
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET | DND_ISBOOMSTICK), 96)
			DKSX NOPQRS 2
			DKSX TUVWX 1
		Stop
		LessSelfDmg:
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET | DND_ISBOOMSTICK) / 2, 96)
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET | DND_ISBOOMSTICK) / 2, 96, 0)
			DKSX NOPQRS 2
			DKSX TUVWX 1
		Stop
	}
}

Actor ExplodingPuff_FullDMG : ExplodingPuff {
	DamageType "ExplosivesFull"
	+FORCERADIUSDMG
}

Actor ExplodingPuffNoSelfDmg : ExplodingPuff
{
	States
	{
		Spawn:
			TNT1 AA 0 A_SpawnItem("ExpShellSoundEmitter")
			TNT1 AA 0 A_SpawnDebris("ExplosiveSpark", 1)
			DKSX A 2
			TNT1 A 0 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_EXPLOSIVE, DND_USETARGET | DND_ISBOOMSTICK), 96, 0)
			DKSX BCDEFG 2
			DKSX HIJKL 1
		Stop
	}	
}

Actor ExplodingPuffNoSelfDmg_FullDMG : ExplodingPuffNoSelfDmg {
	DamageType "ExplosivesFull"
	+FORCERADIUSDMG
}

ACTOR Slayer : Weapon {	
	Inventory.PickupMessage "You got the Slayer!"
	Obituary "%o was torn apart by %k's Slayer."
	Weapon.AmmoType "SlayerAmmo"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 4
	Weapon.SlotNumber 3
	Weapon.SelectionOrder 666
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.9
	Weapon.BobRangeY 0.33
	Weapon.BobRangeX 0.64
	States {
		Spawn:
			SLYP A -1
		Loop
		Ready:
			IREG BCDEFG 3 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			IREG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SLAYER)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 10)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, 50)
	  SelectLoop:
			IREG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			IREG H 2 Bright Offset(0, 32)
			TNT1 A 0 A_GunFlash
			IREG H 2 Bright Offset(0, 35) A_PlayWeaponSound("weapons/slayerfire")
			TNT1 A 0 A_TakeInventory("SlayerBack", 1)
			TNT1 A 0 Radius_Quake(4,3,0,1,0)
			IREG I 2 Bright Offset(0, 32) A_GiveInventory("SlayerShooter", 1)
			IREG I 2 Bright Offset(0, 35)
			IREG J 2 Bright Offset(0, 32)
			IREG J 2 Bright Offset(0, 35)
		Recoil:
			IREG K 2 Bright Offset(0, 38)
			IREG K 2 Bright Offset(0, 41)
			IREG L 2 Bright Offset(0, 38)
			IREG L 2 Bright Offset(0, 35)
			IREG M 3 Bright Offset(0, 32)
			IREG A 1 Offset(0, 42)
			IREG A 1 Offset(0, 37)
			IREG A 1 Offset(0, 32)
			IREG A 3 A_ReFire
		Goto Ready
		Flash:
			TNT1 A 3 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 3 bright A_Light0
		stop
	}
}

Actor SlayerShooter : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_GiveInventory("SlayerTimer", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_DreamingGodBonus", 1, "Full")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("SlayerHook", -3, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook", 3, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook", -6, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook", 6, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook", 1, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook", -1)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", -3, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", 3, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", -6, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", 6, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", 1, 0)
			TNT1 A 0 A_FireCustomMissile("SlayerHook_FullDMG", -1)
		Stop
	}
}

Actor SlayerHookTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 0.75
	States {
		Spawn:
			TNT1 A 1
			FX09 ABCDEF 2 Bright
		Stop
	}
}

Actor SlayerBack : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration 3
}

Actor SlayerExp : BaseExplosionDamage {
	DamageType "Explosives_Magic"
	+FOILINVUL
	States {
		Spawn:
			TNT1 A 0
			TNT1 AA 7 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT), 108)
		Stop
	}
}

Actor SlayerExp_Full : SlayerExp {
	DamageType "Explosives_MagicFull"
	+FOILINVUL
	+FORCERADIUSDMG
}

Actor SlayerExp2 : SlayerExp {
	DamageType "Explosives_Magic"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 7 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT), 108, 0)
			TNT1 A 7 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT), 108)
		Stop
	}
}

Actor SlayerExp2_Full : SlayerExp2 {
	DamageType "Explosives_MagicFull"
	+FORCERADIUSDMG
}

Actor SlayerExplosionFX {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Height 1
	Radius 1
	Renderstyle Add
	Alpha 0.75
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 AAAA 0 A_CustomMissile("ExplosionFX2", 0, 0, random(0,360), 2, random(0,360))
			TNT1 AAAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			IREP EFGHI 2 Bright
		Stop
	}
}

Actor SlayerHook {
	PROJECTILE
	Height 12
	Radius 6
	Speed 32
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT))
	DamageType "Magic"
	var int user_count;
	MeleeRange 12
	SeeSound "weapons/slayergo"
	Species "Player"
	+THRUSPECIES
	+RIPPER
	+DONTBLAST
	+DONTSPLASH
	+THRUGHOST
	+NOTARGETSWITCH
	States {
		Spawn:
			TNT1 A 0 A_JumpIf(user_count == 2, "ReturnSpin")
			TNT1 A 0 A_PlaySound("weapons/slayerspin", CHAN_BODY)
			IREP AAA 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			IREP BBB 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			IREP CCC 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			IREP DDD 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		ReturnSpin:
			TNT1 A 0 A_CustomMissile("ReturnSlayerHook", 0, 0, 0, CMF_TRACKOWNER)
		Stop
		Death:
		Explode:
			TNT1 A 0 A_StopSound(CHAN_BODY)
			IREP "#" 1 A_PlaySound("redballbdeth")
			TNT1 A 0 A_SpawnItemEx("SlayerExplosionFX", 0, 0, 0, 0, 0, 1, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "LessSelfDmg")
			TNT1 A 1 A_SpawnItem("SlayerExp")
		Stop
		LessSelfDmg:
			TNT1 A 1 A_SpawnItem("SlayerExp2")
		Stop
	}
}

Actor ReturnSlayerHook : SlayerHook {
	ReactionTime 4
	SeeSound ""
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/slayerspin", CHAN_BODY)
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager2", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CountDown
		Loop
		Death:
		Vanish:
			TNT1 A 0 A_StopSound(CHAN_BODY)
			TNT1 A 1
		Stop
	}
}

Actor SlayerHook_Damager : DnD_FakeDamager {
	Radius 8
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT))
	DamageType "MagicFull"
	Speed 20
	Species "Player"
	+THRUSPECIES
}

Actor SlayerHook_Damager2 : SlayerHook_Damager {
	Radius 8
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_OCCULT, DND_USETARGET | DND_ISOCCULT))
	DamageType "MagicFull"
	Speed 20
	+RIPPER
	+THRUGHOST
}

Actor SlayerHook_FullDMG : SlayerHook {
	-RIPPER
	+THRUACTORS
	States {
		Spawn:
			TNT1 A 0 A_JumpIf(user_count == 2, "ReturnSpin")
			TNT1 A 0 A_PlaySound("weapons/slayerspin", CHAN_BODY)
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		ReturnSpin:
			TNT1 A 0 A_CustomMissile("ReturnSlayerHook2", 0, 0, 0, CMF_TRACKOWNER)
		Stop
		Death:
		Explode:
			TNT1 A 0 A_StopSound(CHAN_BODY)
			IREP "#" 1 A_PlaySound("redballbdeth")
			TNT1 A 0 A_SpawnItemEx("SlayerExplosionFX", 0, 0, 0, 0, 0, 1, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "LessSelfDmg")
			TNT1 A 1 A_SpawnItem("SlayerExp_Full")
		Stop
		LessSelfDmg:
			TNT1 A 1 A_SpawnItem("SlayerExp2_Full")
		Stop
	}
}

Actor ReturnSlayerHook2 : SlayerHook_FullDMG {
	ReactionTime 4
	SeeSound ""
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay A_FaceTarget
			TNT1 A 0 A_PlaySound("weapons/slayerspin", CHAN_BODY)
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP A 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP B 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP C 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_ChangeVelocity(32 * cos(angle), 32 * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_JumpIfCloser(72, "Vanish")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_CustomMissile("SlayerHook_Damager", 0, 0, 0, CMF_TRACKOWNER)
			IREP D 1 A_JumpIfInTargetInventory("SlayerBack", 1, "Explode")
			TNT1 A 0 A_SpawnItem("SlayerHookTrail")
			TNT1 A 0 A_CountDown
		Loop
		Death:
			TNT1 A 0 A_StopSound(CHAN_BODY)
			IREP "#" 1 A_PlaySound("redballbdeth")
			TNT1 A 0 A_SpawnItemEx("SlayerExplosionFX", 0, 0, 0, 0, 0, 1, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_JumpIfInTargetInventory("Ability_ExplosionMastery", 1, "LessSelfDmg")
			TNT1 A 1 A_SpawnItem("SlayerExp_Full")
		Vanish:
			TNT1 A 0 A_StopSound(CHAN_BODY)
			TNT1 A 1
		Stop
	}
}

Actor SlayerTimer : PowerProtection {
	damagefactor "normal", 1.0
	powerup.duration 3
}