Actor ResSSG1 : Weapon {
	radius 20
	height 16
	Weapon.AmmoGive 0
	Weapon.SlotNumber 3
	weapon.selectionorder 600
	weapon.kickback 128
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "You got the plasma cannon!"
	weapon.ammotype "PCanAmmo"
	weapon.ammouse 0
	weapon.ammogive 5
	weapon.ammotype2 "PCanClip"
	weapon.ammouse2 0
	weapon.ammogive2 0
	XScale 0.8
	YScale 0.9
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.5
	Weapon.BobRangeY 0.55
	Weapon.BobRangeX 0.75
	Tag "$WEP_3_5_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			//RW02 "\" -1
			TNT1 A -1
		stop
		Ready:
			RW02 X 1 A_WeaponReady(WRF_ALLOWRELOAD)
		loop
		Deselect: 
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
			RW02 X 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 40, 0, DND_WEAPON_PLASMACANNON)
	    SelectLoop:
			RW02 X 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMACANNON, 1), "FireConfirmed")
			RW02 X 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		FireConfirmed:
			RW02 A 1 Bright
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Fire")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMACANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_PCANCLIP << 16), DND_ATF_CANFIRECIRCLE)
			RW02 BCD 1 Bright A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			RW02 EFGHI 3
			RW02 X 6
			RW02 X 3 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMACANNON, 1), "AltFireConfirmed")
			RW02 X 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		AltFireConfirmed:
			RW02 A 1 Bright
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Fire")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMACANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_PCANCLIP << 16), DND_ATF_CANFIRECIRCLE)
			RW02 BCD 1 Bright A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			RW02 EFGHI 2
			RW02 X 3
			RW02 A 1 Bright
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Fire")
			// fires 2 other shots that need this to be called on them
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMACANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_PCANCLIP << 16), DND_ATF_CANFIRECIRCLE | DND_ATF_NOAMMOGAINCHECK)
			RW02 BCD 1 Bright A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			RW02 EFGHI 2
			RW02 X 3
			RW02 A 1 Bright
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Fire")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD On Attack", 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMACANNON, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_PCANCLIP << 16), DND_ATF_CANFIRECIRCLE | DND_ATF_NOAMMOGAINCHECK)
			RW02 BCD 1 Bright A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 4,24+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			RW02 EFGHI 2
			RW02 X 3
			RW02 X 3 A_Refire
		Goto Ready
		
		Reload:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMACANNON, 0), "AltFireConfirmed")
			RW02 X 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		ContinueReload:
			RW02 X 1 A_JumpIfInventory("PcanClip", 0, "Failed")
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Out")
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
			RW02 JKLMNO 2
			RW02 P 16
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/In")
			RW02 QRSTUVW 2
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_PLASMACANNON)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Charge")
			RW22 ABC 2
		Goto Ready
		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
		Failed:
			RW02 X 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		ReloadFast:
			RW02 JKLMNO 1
			RW02 P 8
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/In")
			RW02 QRSTUVW 1
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_PLASMACANNON)
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Charge")
			RW22 ABC 1
		Goto Ready
    }
}

Actor PlasmaCannonBall : DnD_BaseProjectile {
	Speed 30
	Radius 5
	Height 10
	Renderstyle "Add"
	Alpha 0.75
	Scale 0.85
	DeathSound "PlasmaCannon/Hit"
	Decal "Scorch"
	+DONTREFLECT
	+FOILINVUL
	States {
		SpawnState:
			NPSB ABCDEFGHIJKL 1 Bright
		Loop
		XDeath:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Do Impact Damage", ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0 | (DND_WEAPON_PLASMACANNON << 16), DND_DAMAGECATEGORY_ENERGY, DND_USETARGET | DND_ISSLOT3), DND_DAMAGETYPE_ENERGY, 0, DND_WEAPON_PLASMACANNON)
		Death:
			PLNS ABCDEFGHIJKLMNOP 1 Bright A_FadeOut(0.025)
		Stop
	}
}

Actor ResSSG2 : Weapon {
	radius 20
	height 16
	Weapon.AmmoGive 0
	Weapon.SlotNumber 3
	weapon.selectionorder 700
	weapon.kickback 64
	weapon.ammotype1 "Cell"
	weapon.ammotype2 "ShockerOverheat"
	weapon.ammouse1 0
	weapon.ammogive1 0
	weapon.ammouse2 0
	weapon.ammogive2 0
	Decal "BulletChip"
	XScale 0.8
	YScale 0.9
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.7
	Weapon.BobRangeY 0.6
	Weapon.BobRangeX 0.9
	Tag "$WEP_3_6_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			WSON C -1
		Stop
		Ready:
			WSON A 1 A_WeaponReady(WRF_NOSWITCH)
		ReadyLoop:
			TNT1 A 0 A_GiveInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Overheat Reduction", 0, DND_OVERHEAT_SHOCKER, 2 | (3 << 16))
			WSON AAAAAAAAA 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
		DeselectLoop:
			WSON A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 18, 0, DND_WEAPON_SHOCKER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 10, 4 | (5 << 16), DND_WEAPON_SHOCKER)
	    SelectLoop:
			WSON A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOCKER, 0), "FireConfirmed")
			WSON A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		FireConfirmed:
			WSON B 1 Bright
			TNT1 A 0 A_TakeInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlaySound("Shocker/Fire", CHAN_WEAPON)
			TNT1 A 0 A_PlaySound("Shocker/Fire2", 7)
			TNT1 A 0 A_GiveInventory("ShockerOverheat", 20)
			WSON B 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SHOCKER, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoil")
			TNT1 A 0 A_Recoil(2)
		NoRecoil:
			WSON A 1 offset(3,36)
			TNT1 AAAAAA 0 A_SpawnItemEx("ElectDrSpark", frandom(48.0, 72.0) + 20 * cos(pitch), frandom(-10.0, 10.0), frandom(24.0, 48.0) + sin(-pitch) * 16, frandom(-2.0, 2.0), frandom(-2.0, 2.0), frandom(-2.0, 2.0), 0, SXF_NOCHECKPOSITION)
			TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("ElectDrSpark", frandom(8.0, 40.0) + 20 * cos(pitch), frandom(-12.0, 12.0), frandom(24.0, 48.0) + sin(-pitch) * 16, frandom(-2.0, 2.0), frandom(-2.0, 2.0), frandom(-2.0, 2.0), 0, SXF_NOCHECKPOSITION, 64)
			WSON A 1 offset(10,61)
			WSON A 1 offset(12,69)
			WSON A 1 offset(11,77)
			WSON A 1 offset(10,73)
			WSON A 1 offset(9,70)
			WSON A 1 offset(8,68)
			WSON A 1 offset(7,65)
			WSON A 1 offset(6,63)
			WSON A 1 offset(5,59)
			WSON A 1 offset(4,54)
			WSON A 1 offset(3,47)
			WSON A 1 offset(2,41)
			WSON A 1 offset(1,37)
			WSON A 1 offset(1,33)
			WSON A 1 offset(1,33)
			TNT1 A 0 A_JumpIfInventory("Cell", 3, "ContinueCancelCheck")
		Goto NoCancel
		ContinueCancelCheck:
			TNT1 A 0 A_JumpIfInventory("ShockerOverheat", 10, "Cancel")
		Goto NoCancel
		Cancel:
			WSON A 10 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			TNT1 A 0 A_ReFire
			WSON A 6 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
		Goto Ready
		NoCancel:
			WSON A 10 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_ReFire
			WSON A 6 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOCKER, 1), "AltFireConfirmed")
			WSON A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		AltFireConfirmed:
			WSON B 1 Bright
			TNT1 A 0 A_TakeInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlaySound("Shocker/Fire", CHAN_WEAPON)
			TNT1 A 0 A_PlaySound("Shocker/Fire2", 6)
			TNT1 A 0 A_PlaySound("Shocker/Smokes", 7)
			TNT1 A 0 A_TakeInventory("ShockerOverheat", 10)
			TNT1 AAAAAAAAAAA 0 A_SpawnItemEx("ShockerSmokes", 16 * cos(-pitch), frandom(-3.6, 3.6), (24 + frandom(-1.8, 1.8)) * (1 + sin(-pitch)), frandom(2.4, 4.8), frandom(-2.4, 2.4), frandom(2, 3), 0)
			TNT1 A 0 A_FireCustomMissile("ShockerAreaDamager", 0, 0)
			WSON B 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SHOCKER, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoilAlt")
			TNT1 A 0 A_Recoil(2)
		NoRecoilAlt:
			TNT1 AAAAAA 0 A_SpawnItemEx("ElectDrSpark", frandom(48.0, 72.0) + 20 * cos(pitch), frandom(-10.0, 10.0), frandom(24.0, 48.0) + sin(-pitch) * 16, frandom(-2.0, 2.0), frandom(-2.0, 2.0), frandom(-2.0, 2.0), 0, SXF_NOCHECKPOSITION)
			TNT1 AAAAAAAAAAAAAAA 0 A_SpawnItemEx("ElectDrSpark", frandom(8.0, 40.0) + 20 * cos(pitch), frandom(-12.0, 12.0), frandom(24.0, 48.0) + sin(-pitch) * 16, frandom(-2.0, 2.0), frandom(-2.0, 2.0), frandom(-2.0, 2.0), 0, SXF_NOCHECKPOSITION, 64)
			WSON A 1 offset(3,36)
			WSON A 1 offset(10,61)
			WSON A 1 offset(12,69)
			WSON A 1 offset(11,77)
			WSON A 1 offset(10,73)
			WSON A 1 offset(9,70)
			WSON A 1 offset(8,68)
			WSON A 1 offset(7,65)
			WSON A 1 offset(6,63)
			WSON A 1 offset(5,59)
			WSON A 1 offset(4,54)
			WSON A 1 offset(3,47)
			WSON A 1 offset(2,41)
			WSON A 1 offset(1,37)
			WSON A 1 offset(1,33)
			WSON A 1 offset(1,33)
			WSON A 10 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_ReFire
			WSON A 9 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
	}
}

Actor ShockerPuff : DnD_BasePuff {
	Scale 0.68
	RenderStyle "Add"
	
	Stamina 4096
	
	+FORCEPAIN
	+FOILINVUL
	+NOEXTREMEDEATH
	States {
		Spawn:
		Crash:
		HitNoBlood:
			TNT1 AAAA 0
			EVA6 ABCDEFGH 2 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor ShockerAreaDamager : DnD_ExplosiveBase {
	Speed 16
	+THRUACTORS
	+FOILINVUL
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 1 A_SetArg(0, 6)
		Again:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_SHOCKER |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 108)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
			TNT1 A 1
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1 A_SetArg(0, Args[0] - 1)
			TNT1 A 1 A_JumpIf(Args[0] > 0, "Again")
		Stop
	}
}

Actor ShockerSmokes {
	Height 4
	Radius 2
	Scale 0.1
	Alpha 0.85
	Renderstyle Translucent
	+THRUACTORS
	+NOGRAVITY
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
			SMOK A 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK B 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK C 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK D 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK E 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK F 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK G 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK H 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK I 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK J 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK K 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK L 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK M 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK N 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK O 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK P 2 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
			SMOK Q 1 A_ScaleVelocity(0.925)
			TNT1 A 0 A_FadeOut(0.05)
		Stop
	}
}

Actor ResSSG3 : Weapon {
	Weapon.AmmoGive1 8
	Weapon.AmmoGive2 0
	Weapon.SlotNumber 3
	weapon.selectionorder 600
	weapon.ammotype1 "HadesAmmo"
	weapon.ammouse1 0
	weapon.ammogive 5
	weapon.ammotype2 "Shellsize_16"
	weapon.ammouse2 0
	weapon.ammogive2 0
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.6
	Weapon.BobRangeX 0.7
	Tag "$WEP_3_7_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			STRG X -1
		stop
		Ready:
			STRG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		loop
		Deselect: 
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
		DeselectLoop:
			STRG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Weapon Input Handler", 0, DND_WEAPON_HADES)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 1, 2 | (3 << 16), DND_WEAPON_HADES)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 10, 0, DND_WEAPON_HADES)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 18, 0, DND_WEAPON_HADES)
	    SelectLoop:
			STRG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HADES, 1), "FireConfirmed")
			STRG A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		FireConfirmed:
			STRG F 1 Bright Offset(4, 39)
			TNT1 A 0 A_PlaySound("Hades/Fire",1,0.6)
			TNT1 A 0 A_PlaySound("Hades/Add",5,0.4)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HADES, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_SHELLSIZE_16 << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 AAAAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-9, 9), 0, 0, frandom(-7, 7))
			TNT1 A 0 A_SetBlend("Yellow",0.1,7)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 7, 32 * (1 + sin(-pitch)), 2, 0, 1)
			STRG F 1 Bright Offset(19, 55)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 13, 32 * (1 + sin(-pitch)), 2, 0, 1)
			STRG B 1 Offset(18, 54) A_SetPitch(pitch - 5.0)
			TNT1 A 0 A_SpawnItemEx ("HadesCasing",cos(-pitch)*36, 16, 25+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
			STRG B 1 Offset(17, 52) A_SetPitch(pitch + 1.0)
			STRG B 1 Offset(12, 46) A_SetPitch(pitch + 1.0)
			STRG B 1 Offset(7, 40) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(5, 36) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(3, 33) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(1, 33)
			STRG C 1 Offset(0, 32)
			STRG DE 4 Offset(0, 32)
			STRG A 4 Offset(0, 32) A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HADES, 2), "AltFireConfirmed")
			STRG A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		AltFireConfirmed:
			STRG F 1 Bright Offset(4, 39)
			TNT1 A 0 A_GiveInventory("HadesBurstTimer", 1)
			TNT1 A 0 A_TakeInventory("MakeHadesBurst", 1)
			TNT1 A 0 A_PlaySound("Hades/Fire",1,0.6)
			TNT1 A 0 A_PlaySound("Hades/Add",5,0.4)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HADES, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_SHELLSIZE_16 << 16), 0)
			TNT1 AAAAAAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-9, 9), 0, 0, frandom(-7, 7))
			TNT1 A 0 A_SetBlend("Yellow",0.1,7)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 7, 32 * (1 + sin(-pitch)), 2, 0, 1)
			STRG F 1 Bright Offset(19, 55)
			TNT1 A 0 A_GiveInventory("HadesBurstFired", 1)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 13, 32 * (1 + sin(-pitch)), 2, 0, 1)
			STRG B 1 Offset(18, 54) A_SetPitch(pitch - 5.0)
			TNT1 AA 0 A_SpawnItemEx ("HadesCasing",cos(-pitch)*36, 16, 25+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
			STRG B 1 Offset(17, 52) A_SetPitch(pitch + 1.0)
			STRG B 1 Offset(12, 46) A_SetPitch(pitch + 1.0)
			STRG B 1 Offset(7, 40) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(5, 36) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(3, 33) A_SetPitch(pitch + 1.0)
			STRG C 1 Offset(1, 33)
			STRG C 1 Offset(0, 32)
			STRG DE 4 Offset(0, 32)
			STRG A 4 Offset(0, 32)
		Goto Ready
		
		Reload:
			TNT1 A 0 A_JumpIfInventory("Shellsize_16", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HADES, 0), "ContinueReload")
			STRG A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			STRG A 1 Offset(0, 39)
			TNT1 A 0 A_PlaySound("Hades/ClipOut", 6)
			STRG A 1 Offset(0, 47)
			STRG A 1 Offset(0, 53)
			STRG A 1 Offset(0, 63)
			STRG A 1 Offset(0, 74)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_HADES)
			TNT1 A 0 A_PlaySound("Hades/Load", 7)
			STRG A 40 Offset(0, 82)
			TNT1 A 0 A_PlaySound("Hades/Clipin", 6)
			STRG A 12 Offset(0, 82)
			STRG A 1 Offset(0, 74)
			STRG A 1 Offset(0, 63)
			STRG A 1 Offset(0, 53)
			STRG A 1 Offset(0, 47)
			STRG A 1 Offset(0, 39)
		Goto Ready
		
		ReloadFaster:
			STRG A 1 Offset(0, 39)
			TNT1 A 0 A_PlaySound("Hades/ClipOut", 6)
			STRG A 1 Offset(0, 47)
			STRG A 1 Offset(0, 53)
			STRG A 1 Offset(0, 63)
			STRG A 1 Offset(0, 74)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_HADES)
			TNT1 A 0 A_PlaySound("Hades/Load", 7)
			STRG A 20 Offset(0, 82)
			TNT1 A 0 A_PlaySound("Hades/Clipin", 6)
			STRG A 6 Offset(0, 82)
			STRG A 1 Offset(0, 74)
			STRG A 1 Offset(0, 63)
			STRG A 1 Offset(0, 53)
			STRG A 1 Offset(0, 47)
			STRG A 1 Offset(0, 39)
		Goto Ready
		
		Failed:
			STRG A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
    }
}

Actor HadesPuff : DnD_BasePuff {
	Stamina 266240

	States {
		Spawn:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 AAA 0 A_SpawnItemEx("BigPuffFX_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 AA 0 A_SpawnItemEx("BigPuffFX_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 1
			TNT1 AAA 1 A_SpawnItemEx("BigPuffFX_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		Stop
		Crash:
		Melee:
			TNT1 AAA 0 A_SpawnItemEx("BigPuffFX_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_PlaySound("puff/ric")
			TNT1 AA 0 A_SpawnItemEx("BigPuffFX_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_SpawnItemEx("BigPuffFX_Spark1", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_SpawnItemEx("BigPuffFX_Spark2", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 1
			TNT1 AAA 1 A_SpawnItemEx("BigPuffFX_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		stop
	}
}

Actor HadesPuff_GhostHitter : HadesPuff {
	States {
		AfterDamage:
		HitNoBlood:
			TNT1 AAA 0 A_SpawnItemEx("BigPuffFX_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 AA 0 A_SpawnItemEx("BigPuffFX_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 1
			TNT1 AAA 1 A_SpawnItemEx("BigPuffFX_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
		Stop
	}
}

Actor HadesBurstTimer : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration 5
}

Actor HadesOnlyDieOnce : DnD_Boolean { }
Actor MakeHadesBurst : DnD_Boolean { }
Actor HadesBurstFired : DnD_Boolean { }

Actor HadesBurstCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration 7
}

actor HadesShot : DnD_BaseFastProjectile {
	-NOGRAVITY
	+NODAMAGETHRUST
	+THRUGHOST
	+SKYEXPLODE
	+BRIGHT
	Radius 4
	Height 4
	Speed 40
	Scale 1.0
	Renderstyle "Normal"
	Mass 150
	Gravity 0.3
	MissileType "SmokeTrail3"
	MissileHeight 8
	Alpha 1.0
	Decal "DoomImpScorch"
	
	Damage(
		DND_WEAPON_HADES |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 262144
	
	States {
		SpawnState:
			//TNT1 A 0 A_RearrangePointers(AAPTR_MASTER, AAPTR_DEFAULT, AAPTR_DEFAULT)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
		Goto SpawnA

		SpawnA:
			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 BBBBB 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 BBBBBBB 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 B 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

			TNT1 A 0 A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 A 1 Light("HadesShellLight") A_JumpIfInTargetInventory("MakeHadesBurst",1,"RainingMen")

		Loop

		Death:
			TNT1 A 0 A_TakeFromTarget("HadesBurstFired", 1)
			TNT1 A 0 A_JumpIfInventory("HadesOnlyDieOnce",1,"Death2")
			TNT1 A 0 A_PlaySound("imp/shotx",0)
			TNT1 A 1 A_NoBlocking
		stop
		XDeath:
			TNT1 A 0 A_TakeFromTarget("HadesBurstFired", 1)
			TNT1 A 0 A_JumpIfInventory("HadesOnlyDieOnce",1,"Death2")
			TNT1 A 0 A_PlaySound("imp/shotx",0)
			TNT1 A 1 A_NoBlocking
		stop
		Death2:
			TNT1 A 0 A_TakeFromTarget("HadesBurstFired", 1)
			TNT1 A 0 A_TakeInventory("HadesOnlyDieOnce",9)
			TNT1 A 1
		stop
		RainingMen:
			FX12 A 0
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",1)
			TNT1 A 0 A_TakeFromTarget("HadesBurstFired", 1)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)

			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)

			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_PlaySound("Hades/FireImpact",0)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,-6))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,8))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_GiveInventory("HadesOnlyDieOnce",1)
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",9)
			FX12 A 1 Light("HadesShellLight") A_SpawnItemEx("HadesPellet",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(8,-4))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_TakeInventory("HadesOnlyDieOnce",9)
			TNT1 A 5 A_Stop
		Stop
		Crit:
			TNT1 A 0 A_PlaySound("Hades/FireImpact",0)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,-6))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,8))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_GiveInventory("HadesOnlyDieOnce",1)
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",9)
			FX12 A 1 Light("HadesShellLight") A_SpawnItemEx("HadesPellet_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(8,-4))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_TakeInventory("HadesOnlyDieOnce",9)
			TNT1 A 5 A_Stop
		Stop
	}
}

actor HadesPellet : DnD_BaseProjectile {
	Radius 8
	Height 16
	Speed 24
	Scale 0.2
	Renderstyle "Normal"
	Mass 150
	Gravity 0.3
	BounceType Doom
	BounceCount 4
	BounceFactor 0.2
	WallBounceFactor 0.2
	
	Damage(
		DND_WEAPON_HADES |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 262144
	
	+BRIGHT
	-NOGRAVITY
	+NODAMAGETHRUST
	+USEBOUNCESTATE
	+BLOODLESSIMPACT
	+PAINLESS
	+THRUGHOST
	Alpha 1.0
	Decal "DoomImpScorch"
	States {
		SpawnState:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			TNT1 AA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SpawnItemEx("SmokeTrail",random(-6,0),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			TNT1 AA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight") A_SpawnItemEx("SmokeTrail",random(-6,0),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
		Loop
		Bounce:
			TNT1 A 0 A_ChangeFlag("CORPSE", 1)
			TNT1 A 0 A_ChangeFlag("RIPPER", 0)
		Goto SpawnState
		Crash:
			TNT1 A 0 A_PlaySound("Hades/FireFX",0)
			TNT1 A 8 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
		Stop
		Death:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("Hades/FireFX",0)
			TNT1 A 0 A_Jump(170, "Death2", "Death3")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.25)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") 
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight") 
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") 
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.2)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") 
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.15)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.1)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight")
		Stop
		Death2:
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.25)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.2)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.15)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.1)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight")
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.05)
		Stop
		Death3:
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.25)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight") A_SetScale(0.2)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.15)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight") A_SetScale(0.1)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 B 1 Light("SmallHadesShellLight") A_SetScale(0.05)
			TNT1 A 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-2,2),0,0,0,1,Random(-180,180),SXF_NOCHECKPOSITION)
			SMK2 A 1 Light("SmallHadesShellLight") A_SetScale(0.00001)	
		Stop
	}
}

Actor HadesPellet_Crit : HadesPellet {
	Accuracy 69
}

Actor HadesShot_GhostHitter : HadesShot {
	-THRUGHOST
	States {
		RainingMen:
			FX12 A 0
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",1)
			TNT1 A 0 A_TakeFromTarget("HadesBurstFired", 1)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-33,-39),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-27,-33),random(-4,4),random(-4,4),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-21,-27),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-15,-21),random(-3,3),random(-3,3),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-9,-15),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-3,-9),random(-2,2),random(-2,2),0,0,0,0,SXF_NOCHECKPOSITION)
			FX12 AAAAA 0 A_SpawnItemEx("SmokeTrail",random(-2,2),random(-3,3),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)
			FX12 AAAAAAA 0 A_SpawnItemEx("SmokeTrail2",random(-2,-11),random(-3,3),random(-3,3),random(-1,1),random(-1,1),random(-1,1),Random(-180,180),SXF_NOCHECKPOSITION)

			FX12 A 0 A_SpawnItemEx("SmokeTrail",random(-6,6),random(-2,2),random(-2,2),0,0,0,Random(-180,180),SXF_NOCHECKPOSITION)

			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_PlaySound("Hades/FireImpact",0)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_GhostHitter",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,-6))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_GhostHitter",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,8))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_GiveInventory("HadesOnlyDieOnce",1)
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",9)
			FX12 A 1 Light("HadesShellLight") A_SpawnItemEx("HadesPellet_GhostHitter",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(8,-4))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_TakeInventory("HadesOnlyDieOnce",9)
			TNT1 A 5 A_Stop
		Stop
		Crit:
			TNT1 A 0 A_PlaySound("Hades/FireImpact",0)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_GhostHitter_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,-6))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 AAAAAAA 0 A_SpawnItemEx("HadesPellet_GhostHitter_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(0,8))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_GiveInventory("HadesOnlyDieOnce",1)
			FX12 A 0 A_TakeFromTarget("MakeHadesBurst",9)
			FX12 A 1 Light("HadesShellLight") A_SpawnItemEx("HadesPellet_GhostHitter_Crit",0,0,0,cos(-pitch)*15,0,sin(-pitch-Random(8,-4))*15,Random(-30,30), SXF_TRANSFERPITCH | SXF_TRANSFERPOINTERS)
			FX12 A 0 A_TakeInventory("HadesOnlyDieOnce",9)
			TNT1 A 5 A_Stop
		Stop
	}
}

actor HadesPellet_GhostHitter : HadesPellet {
	-THRUGHOST
}

Actor HadesPellet_GhostHitter_Crit : HadesPellet_GhostHitter {
	Accuracy 69
}

// Sprites by ETTINGRINDER
Actor ResSSG4 : Weapon {
	radius 20
	height 16
	Weapon.AmmoGive 0
	Weapon.SlotNumber 3
	weapon.selectionorder 600
	weapon.kickback 128
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "You got the flayer crossbow!"
	weapon.ammotype "FlayerAmmo"
	weapon.ammouse 0
	weapon.ammogive 8
	XScale 0.8
	YScale 0.9
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.5
	Weapon.BobRangeY 0.45
	Weapon.BobRangeX 0.65
	Tag "$WEP_3_8_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			TNT1 A -1
		stop
		Ready:
			TNT1 A 0 A_JumpIfInventory("FlayerAmmo", 1, "AmmoReady")
			CBOW K 3 A_WeaponReady(WRF_NOFIRE)
		Loop
		AmmoReady:
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "Ready_4")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "Ready_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "Ready_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "Ready_1")
			CBOW A 3 A_WeaponReady
		loop
		Ready_1:
			CBOW G 3 A_WeaponReady
		Goto Ready
		Ready_2:
			CBOW H 3 A_WeaponReady
		Goto Ready
		Ready_3:
			CBOW I 3 A_WeaponReady
		Goto Ready
		Ready_4:
			CBOW J 3 A_WeaponReady
		Goto Ready
		
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 A_JumpIfInventory("FlayerAmmo", 1, "AmmoDeSelect")
		Deselect_NoAmmo:
			CBOW K 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		AmmoDeSelect:
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "DeSelectLoop_4")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "DeSelectLoop_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "DeSelectLoop_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "DeSelectLoop_1")
		DeselectLoop:
			CBOW A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		DeSelectLoop_1:
			CBOW G 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		DeSelectLoop_2:
			CBOW H 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		DeSelectLoop_3:
			CBOW I 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		DeSelectLoop_4:
			CBOW J 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3X", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 400, 0, DND_WEAPON_CROSSBOW)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 200, 0, DND_WEAPON_CROSSBOW)
			TNT1 A 0 A_JumpIfInventory("FlayerAmmo", 1, "AmmoSelect")
		Select_NoAmmo:
			CBOW K 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		AmmoSelect:
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "SelectLoop_4")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "SelectLoop_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "SelectLoop_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "SelectLoop_1")
	    SelectLoop:
			CBOW A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
	    SelectLoop_1:
			CBOW G 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
	    SelectLoop_2:
			CBOW H 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
	    SelectLoop_3:
			CBOW I 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
	    SelectLoop_4:
			CBOW J 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_CROSSBOW, 0), "FireConfirmed")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "NoFire_4")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "NoFire_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "NoFire_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "NoFire_1")
			CBOW A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		NoFire_1:
			CBOW G 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		NoFire_2:
			CBOW H 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		NoFire_3:
			CBOW I 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		NoFire_4:
			CBOW J 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "Fire_4")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "Fire_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "Fire_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "Fire_1")
			CBOW A 1
		ContinueFromFire:
			TNT1 A 0 A_PlayWeaponSound("Crossbow/Fire")
			CBOW B 1 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_CROSSBOW, DND_ATK_PRIMARY, DND_AMMOSLOT_SHELL | (AMMO_FLAYER << 16), 0)
			CBOW B 1 Offset(0, 34)
			CBOW B 1 Offset(0, 37)
			CBOW B 1 Offset(0, 41)
			CBOW C 1 Offset(0, 42)
			CBOW C 2 Offset(0, 43)
			CBOW C 1 Offset(0, 44)
			CBOW C 1 Offset(0, 41)
			CBOW C 1 Offset(0, 36)
			TNT1 A 0 A_TakeInventory("Crossbow_PullLevel", 0)
			CBOW D 1 Offset(0, 34) A_PlaySound("Crossbow/Reload", 5)
			CBOW D 1 Offset(0, 33)
			CBOW D 3 Offset(0, 32)
			CBOW E 5 Offset(0, 32)
			TNT1 A 0 A_JumpIfNoAmmo("RanOut")
			CBOW F 6 Offset(0, 32)
			CBOW A 2 Offset(0, 32)
		Goto Ready
		RanOut:
			CBOW K 3 Offset(0, 32)
		Goto Ready
		Fire_1:
			CBOW G 1
		Goto ContinueFromFire
		Fire_2:
			CBOW H 1
		Goto ContinueFromFire
		Fire_3:
			CBOW I 1
		Goto ContinueFromFire
		Fire_4:
			CBOW J 1
		Goto ContinueFromFire
		
		AltFire:
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 4, "AltFail")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 3, "Alt_3")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 2, "Alt_2")
			TNT1 A 0 A_JumpIfInventory("Crossbow_PullLevel", 1, "Alt_1")
			TNT1 A 0 A_GiveInventory("Crossbow_PullLevel", 1)
			TNT1 A 0 A_PlayWeaponSound("Crossbow/String")
			CBOW G 10
		Goto Ready
		Alt_1:
			TNT1 A 0 A_GiveInventory("Crossbow_PullLevel", 1)
			TNT1 A 0 A_PlayWeaponSound("Crossbow/String")
			CBOW H 10
		Goto Ready
		Alt_2:
			TNT1 A 0 A_GiveInventory("Crossbow_PullLevel", 1)
			TNT1 A 0 A_PlayWeaponSound("Crossbow/String")
			CBOW I 10
		Goto Ready
		Alt_3:
			TNT1 A 0 A_GiveInventory("Crossbow_PullLevel", 1)
			TNT1 A 0 A_PlayWeaponSound("Crossbow/String")
			CBOW J 10
		Goto Ready
		AltFail:
			CBOW J 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		NoAlt:
			CBOW K 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
    }
}

Actor Crossbow_PullLevel : Ammo {
	inventory.amount 1
	inventory.maxamount 4
	ammo.backpackamount 0
	ammo.backpackmaxamount 4
	+IGNORESKILL
}

Actor CrossbowBolt_1 : DnD_BaseProjectile {
	Speed 64
	Damage (
		DND_WEAPON_CROSSBOW |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	Radius 5
	Height 10
	DeathSound "Crossbow/Hit"
	+DONTREFLECT
	States {
		SpawnState:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ BCDEFG 2
		Stop
	}
}

Actor CrossbowBolt_2 : DnD_BaseFastProjectile {
	Speed 80
	Damage (
		DND_WEAPON_CROSSBOW |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(150 << DPCT_SHIFT)
	)
	Radius 5
	Height 10
	DeathSound "weapons/swingwall"
	
	Stamina 32768
	
	var int user_ripperid;
	
	+DONTREFLECT
	+RIPPER
	States {
		SpawnState:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		SpawnStateLoop:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ BCDEFG 2
		Stop
	}
}

Actor CrossbowBolt_3 : CrossbowBolt_2 {
	Speed 120
	Damage (
		DND_WEAPON_CROSSBOW |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(200 << DPCT_SHIFT)
	)
	Stamina 32768
	
	States {
		SpawnState:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		SpawnStateLoop:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ BCDEFG 2
		Stop
	}
}

Actor CrossbowBolt_4 : CrossbowBolt_2 {
	Speed 160
	Damage (
		DND_WEAPON_CROSSBOW |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(250 << DPCT_SHIFT)
	)
	Stamina 32768
	
	States {
		SpawnState:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		SpawnStateLoop:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ BCDEFG 2
		Stop
	}
}

Actor CrossbowBolt_5 : CrossbowBolt_2 {
	Speed 200
	Damage (
		DND_WEAPON_CROSSBOW |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(300 << DPCT_SHIFT)
	)
	Stamina 32768
	
	States {
		SpawnState:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		SpawnStateLoop:
			ARRW A 1 A_SpawnItemEx("CrossbowBolt_AfterImage", -8, 0)
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ BCDEFG 2
		Stop
	}
}

Actor CrossbowBolt_AfterImage {
	Alpha 1.0
	Renderstyle Translucent
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			ARRW A 1 A_FadeOut(0.175)
		Loop
	}
}

Actor Crossbow_SilverParticle {
	Renderstyle Add
	Alpha 1.0
	Scale 0.1
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 Thing_ChangeTID(0, SPECIAL_FX_TID)
			TNT1 A 1
		SpawnLoop:
			OGLP F 2 Bright A_FadeOut(0.08)
			TNT1 A 0 A_SetScale(scalex * 0.95, scaley * 0.95)
		Loop
	}
}

Actor Crossbow_Explosion : DnD_ExplosiveBase {
	Renderstyle "Add"
	Height 1
	Radius 1
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	var int user_dmg;
	
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 1 A_PlaySound("Crossbow/Explode")
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_CROSSBOW |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_EXTRATOUNDEAD)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 AAAAAA 0 A_SpawnItemEx("Crossbow_SilverParticle", 0, 0, -16, frandom(-2, 2), frandom(-2, 2), frandom(-2, 2))
			TNT1 A 1 A_SpawnItemEx("GrayFlare", 0, 0, -16)
		Stop
	}
}