Actor ResShotgun1 : Weapon {
	radius 20
	height 16
	Weapon.AmmoGive 0
	Weapon.SlotNumber 3
	weapon.selectionorder 700
	weapon.kickback 128
	obituary "%o got pummeled by %k's shotgun."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "You got the shotgun!"
	weapon.ammotype "Shell"
	weapon.ammouse 0
	weapon.ammogive 0
	Weapon.AmmoType2 "ShellSize_12"
	Weapon.ammoGive2 0
	Weapon.AmmoUse2 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 "Deadlock"
	states {
		Spawn:
			RW01 X -1
		stop
		Ready:
			RW01 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		loop
		Deselect: 
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			RW01 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_DEADLOCK)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 15)
	    SelectLoop:
			RW01 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 1, "ContinueFire")
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH)
		Goto Reload
		ContinueFire:
			RW01 BC 1 Bright
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			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", 20 * cos(-pitch), 14, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_GiveInventory("DeadLockShooter", 1)
			RW01 D 1 Bright A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 15, 34 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SetPitch(pitch - 6.5)
			RW01 E 1 Bright A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 15, 34 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0  A_SetPitch(pitch + 0.5)
			RW01 F 1 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 16, 36 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SetPitch(pitch + 0.5)
			RW01 G 1 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 16, 36 * (1 + sin(-pitch)), 2, 0, 1)
			RW01 HIH 1 A_SetPitch(pitch + 0.5)
			RW01 JJKLL 1 A_SetPitch(pitch + 0.5)
			RW01 MN 1
		Pump:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 OPQ 1
			TNT1 A 0 A_GiveInventory("DeadlockCasingSpawner", 1)
			RW01 R 2
			RW01 QPO 1
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 1, "Skip")
			TNT1 A 0 A_GiveInventory("DoPump", 1)
		Skip:
			RW01 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
		Goto Ready
		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
		Reload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "NoAction")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 3), "ContinueReload")
			RW01 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		NoAction:
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			RW01 A 1 Offset(0, 34)
			RW01 A 1 Offset(0, 36)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 40)
			RW01 A 1 Offset(0, 42)
		ContinueReloadChecks:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUp")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 3), "ContinueReloadAgain")
			RW01 A 2 Offset(0, 42)
		Goto RiseUp
		ContinueReloadAgain:
			RW01 A 1 Offset(0, 44)
			RW01 A 1 Offset(0, 45)
			RW01 A 1 Offset(0, 46)
			RW01 A 1 Offset(0, 47)
			RW01 A 1 Offset(1, 48)
			RW01 A 1 Offset(2, 49)
			RW01 A 1 Offset(3, 50)
			RW01 A 1 Offset(3, 49)
			TNT1 A 0 A_PlayWeaponSound("Deadlock/Insert")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
		NoTake:
			TNT1 A 0 A_GiveInventory("Shellsize_12", 1)
			RW01 A 1 Offset(3, 50)
			RW01 A 1 Offset(2, 49)
			RW01 A 1 Offset(1, 48)
			RW01 A 1 Offset(0, 47)
			RW01 A 1 Offset(0, 46)
			RW01 A 1 Offset(0, 45)
			RW01 A 1 Offset(0, 44)
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePump")
			RW01 A 1 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecks")
		Goto RiseUp
		RiseUp:
			RW01 A 1 Offset(0, 42)
			RW01 A 1 Offset(0, 40)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 36)
			RW01 A 1 Offset(0, 34)
		Goto Ready
		RisePump:
			RW01 A 1 Offset(0, 42)
			RW01 A 1 Offset(0, 40)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 36)
			RW01 A 1 Offset(0, 34)
			RW01 A 1 Offset(0, 32)
		Goto PumpAllowRefire
		PumpAllowRefire:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 OPQ 1
			RW01 R 2
			RW01 QPO 1
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 1, "SkipRefire")
			TNT1 A 0 A_GiveInventory("DoPump", 1)
		SkipRefire:
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReload")
			RW01 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
		Goto Ready
		
		ReloadFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "NoAction")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 3), "ContinueReloadFast")
			RW01 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto NoAction
		ContinueReloadFast:
			RW01 A 1 Offset(0, 34)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 42)
		ContinueReloadChecksFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUpFast")
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 10, 3), "ContinueReloadAgainFast")
			RW01 A 2 Offset(0, 42)
		Goto RiseUpFast
		ContinueReloadAgainFast:
			RW01 A 1 Offset(0, 44)
			RW01 A 1 Offset(0, 46)
			RW01 A 1 Offset(3, 50)
			TNT1 A 0 A_PlayWeaponSound("Deadlock/Insert")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTakeFast")
		NoTakeFast:
			TNT1 A 0 A_GiveInventory("Shellsize_12", 1)
			RW01 A 1 Offset(2, 49)
			RW01 A 1 Offset(0, 46)
			RW01 A 1 Offset(0, 44)
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePumpFast")
			RW01 A 1 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecksFast")
		Goto RiseUpFast
		RiseUpFast:
			RW01 A 1 Offset(0, 42)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 34)
		Goto Ready
		RisePumpFast:
			RW01 A 1 Offset(0, 42)
			RW01 A 1 Offset(0, 38)
			RW01 A 1 Offset(0, 34)
		Goto PumpAllowRefireFast
		PumpAllowRefireFast:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 OQ 1
			RW01 R 1
			RW01 QO 1
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 1, "SkipRefireFast")
			TNT1 A 0 A_GiveInventory("DoPump", 1)
		SkipRefireFast:
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadFast")
			RW01 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
		Goto Ready
		
		Altfire:
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			TNT1 A 0 A_GiveInventory("DoPump", 1) // force a pump
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL, SPWEP_SG)
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
    }
}

Actor DoPump : DnD_Boolean { }

Actor DeadlockShooter : DnD_Activator {
	States {
		Use:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("ShellSize_12", 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("Deadlock/Fire")
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets (7.0, 5.2, 16, 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.0, 5.2, 16, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_BALLISTIC, DND_ISBOOMSTICK), "NewBulletPuff_FullDMG", FBF_NORANDOM | FBF_USEAMMO)  
		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 DeadlockCasingSpawner : 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,28,29+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Flechette:
			TNT1 A 0 A_SpawnItemEx ("flechettecasing",cos(-pitch)*36,28,29+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Magnum:
			TNT1 A 0 A_SpawnItemEx ("piercecasing",cos(-pitch)*36,28,29+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
		Electric:
			TNT1 A 0 A_SpawnItemEx ("electriccasing",cos(-pitch)*36,28,29+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
		Stop
	}
}

const int cyro_dmg = 210;
const int cryo_altdmg = 75;

Actor ResShotgun2 : Weapon {
	Weapon.AmmoType1 "NitrogenCanister"
	Weapon.AmmoTYpe2 "NitrogenCanister"
	Weapon.AmmoUse1 1
	Weapon.AmmoUse2 1
	Weapon.AmmoGive 5
	Weapon.SlotNumber 3
	Weapon.selectionorder 700
	Inventory.PickupMessage "You got the Nitrogen Crossbow!"
	Obituary "%o tasted %k's nitrogen."
	Tag "Nitrogen Crossbow"
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.55
	Weapon.BobRangeX 0.8
	Decal "PlasmaScorchLower"
	States {
		Spawn:
			WBOW A -1
			Stop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			BOWG A 1 Bright A_Lower
			TNT1 A 0 A_Lower
			Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_NITROGENCROSSBOW)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, cyro_dmg)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_1, cryo_altdmg)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_2, 5)
	    SelectLoop:
			BOWG A 1 Bright A_Raise
			TNT1 A 0 A_Raise
			Loop
		Ready:
			BOWG AAABBBCCCDDDCCCBBB 1 Bright A_WeaponReady
			Loop
		Fire:
			BOWG A 0 A_GunFlash
			BOWG A 0 A_Recoil(4.0)
			BOWG A 0 A_PlaySound("weapons/cryobowshot")
			BOWG A 0 A_PlaySound("weapons/cryobowfire", CHAN_WEAPON)
			BOWF A 2 Bright A_GiveInventory("CryoShooter_1", 1)
			BOWF BCD 2 Bright
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			BOWF E 8
			BOWF E 2 A_PlaySound("weapons/cryobowreload")
			BOWF E 2 Offset(0,31) 
			BOWF F 2 Offset(0,32)
			BOWF F 2 Offset(0,30)
			BOWF G 2 Offset(0,31)
			BOWF HI 1 Offset(0,32)
			BOWG CDB 3 Bright Offset(0,32)
			BOWG A 0 A_ReFire
		Goto Ready
		ReloadFaster:
			BOWF E 4
			BOWF E 1 A_PlaySound("weapons/cryobowreload")
			BOWF E 1 Offset(0,31) 
			BOWF F 1 Offset(0,32)
			BOWF F 1 Offset(0,30)
			BOWF G 1 Offset(0,31)
			BOWF HI 1 Offset(0,32)
			BOWG CDB 2 Bright Offset(0,32)
			BOWG A 0 A_ReFire("Fire")
			Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("CryoBowCooldown", 1, "Failed")
			BOWG A 1
			BOWG A 0 A_GunFlash
			BOWG A 0 A_Recoil(4.0)
			BOWG A 0 A_PlaySound("weapons/cryobowshot")
			BOWG A 0 A_PlaySound("weapons/cryobowfire", CHAN_WEAPON)
			TNT1 A 0 A_FireBullets(0, 0, 0, 0, "CryoPuffAlt", FBF_NORANDOM, 384)
			BOWF A 2 Bright A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1)
			BOWF BCD 2 Bright
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadAltFaster")
			BOWF E 8
			BOWF E 2 A_PlaySound("weapons/cryobowreload")
			BOWF E 2 Offset(0,31) 
			BOWF F 2 Offset(0,32)
			BOWF F 2 Offset(0,30)
			BOWF G 2 Offset(0,31)
			BOWF HI 1 Offset(0,32)
			TNT1 A 0 A_GiveInventory("CryoBowCooldown", 1)
			BOWG CDB 3 Bright Offset(0,32)
		Goto Ready
		ReloadAltFaster:
			BOWF E 4
			BOWF E 1 A_PlaySound("weapons/cryobowreload")
			BOWF E 1 Offset(0,31) 
			BOWF F 1 Offset(0,32)
			BOWF F 1 Offset(0,30)
			BOWF G 1 Offset(0,31)
			BOWF HI 1 Offset(0,32)
			TNT1 A 0 A_GiveInventory("CryoBowCooldown", 1)
			BOWG CDB 2 Bright Offset(0,32)
			Goto Ready
		Failed:
			BOWG AAABBB 1 Bright A_WeaponReady(WRF_NOSECONDARY)
			BOWG CCCDDDCCCBBB 1 Bright A_WeaponReady 
			Goto Ready
			
		Flash:
			TNT1 A 2 Bright A_Light1
			TNT1 A 2 Bright A_Light2
			TNT1 A 1 Bright A_Light1
			Goto LightDone
	}
}

Actor CryoShooter_1 : 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(0, 0, 0, 0, "CryoPuff", FBF_NORANDOM)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg", 0, 0, 0xFFF, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		NoTake:
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), 0, 0, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg", 0, 0, 0xFFF, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		Full:			
			TNT1 A 0 A_FireBullets(0, 0, 0, 0, "CryoPuff_FullDMG", FBF_NORANDOM)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTakeFull")
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg_Full", 0, 0, 0xFFF, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		NoTakeFull:
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL), 0, 0, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg_Full", 0, 0, 0xFFF, 0, 5.0, 0, "CryoTrail", 1)
		Stop
	}
}

Actor CryoShooter_2 : 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(0, 0, 0, 0, "CryoPuffAlt", FBF_NORANDOM, 384)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		NoTake:
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL), 0, 0, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		Full:			
			TNT1 A 0 A_FireBullets(0, 0, 0, 0, "CryoPuffAlt_FullDMG", FBF_NORANDOM, 384)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTakeFull")
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg_Full", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1)
		Stop
		NoTakeFull:
			TNT1 A 0 A_RailAttack(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL), 0, 1, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoPuffDmg_Full", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1)
		Stop
	}
}

Actor CryoBowCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration 79 // add +9
}

ACTOR CryoPrimarySmoke {
    Radius 2
    Height 2
    +NOINTERACTION
	+CLIENTSIDEONLY
    +FORCEXYBILLBOARD
    RenderStyle Add
	Translation "0:255=%[0, 0, 0]:[0.5, 1.0, 1.859375]"
    Alpha 1.0
    Scale 0.4
    States {
		Spawn:
			SMOK A 2 NoDelay A_FadeOut (0.05)
        Loop
    }
}

Actor CryoPrimarySmoke2 : CryoPrimarySmoke { 
	Translation "0:255=%[0, 0, 0]:[0.0, 1.0, 1.859375]"
	Scale 0.7 
	Alpha 0.5 
	VSpeed 2.5
	States {
		Spawn:
			SMOK A 6 NoDelay A_FadeOut(0.04)
		Loop
	}
}

Actor CryoPuff {
	DamageType "P_Ice"
	Species "Player"
	+NODAMAGETHRUST
	+ALWAYSPUFF
	+PUFFONACTORS
	+FORCERADIUSDMG
	+NOGRAVITY
	+MTHRUSPECIES
	+THRUSPECIES
	States {
		Spawn:
		Death:		
			TNT1 AAAAA 0 A_CustomMissile("ExplosionFX5", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 1
			TNT1 A 0 A_Explode(1, 128, 0)
			BXPL AAAAAAAA 0 A_SpawnItemEx("CryoPrimarySmoke", 0, 0, 0, random(10, 30)*0.1, 0, random(0, 10)*0.1, random(1,360), SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
			BXPL AAAA 0 A_SpawnItemEx("CryoPrimarySmoke2", 0, 0, 0, random(10, 30)*0.04, 0, random(0, 10)*0.04, random(1,360), SXF_CLIENTSIDE|SXF_NOCHECKPOSITION,64)
			TNT1 A 1
		Stop
	}
}

Actor CryoPuff_FullDMG : CryoPuff {
	DamageType "P_IceFull"
}

Actor CryoPuffAlt {
	Species "Player"
	// no ice damage because it should shatter things
	+NODAMAGETHRUST
	+ALWAYSPUFF
	+PUFFONACTORS
	+FORCERADIUSDMG
	+PUFFGETSOWNER
	+NOGRAVITY
	+MTHRUSPECIES
	+THRUSPECIES
	var int user_count;
	const int iter = 4;
	States {
		Spawn:
		Death:		
			TNT1 AAAAA 0 A_CustomMissile("ExplosionFX5", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 1 A_Explode(1, 128, 0)
			TNT1 A 0 A_ChangeFlag("ICEDAMAGE", 1)
			TNT1 A 1 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_PlaySound("weapons/cryobowalt", 5)
		DeathLoop:
			TNT1 A 0 A_JumpIf(user_count == iter, "Finish")
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 90, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 180, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 270, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 45, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 135, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 225, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWind", 0, 0, 10, 0, 0, 0, 315, SXF_TRANSFERPOINTERS)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 25 A_SetUserVar("user_count", user_count + 1)
		Loop
		Finish:
			TNT1 A 1
		Stop
	}
}

Actor CryoPuffAlt_FullDMG : CryoPuffAlt {
	States {
		Spawn:
		Death:		
			TNT1 AAAAA 0 A_CustomMissile("ExplosionFX5", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 1 A_Explode(1, 128, 0)
			TNT1 A 0 A_ChangeFlag("ICEDAMAGE", 1)
			TNT1 A 1 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_PlaySound("weapons/cryobowalt", 5)
		DeathLoop:
			TNT1 A 0 A_JumpIf(user_count == iter, "Finish")
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 90, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 180, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 270, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 45, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 135, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 225, SXF_TRANSFERPOINTERS)
			TNT1 A 0 A_SpawnItemEx("CryoWindFull", 0, 0, 10, 0, 0, 0, 315, SXF_TRANSFERPOINTERS)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 25 A_SetUserVar("user_count", user_count + 1)
		Loop
	}
}

Actor CryoPuffDMG {
	DamageType "P_Ice"
	+NODAMAGETHRUST
}

Actor CryoPuffDMG_Full {
	DamageType "P_IceFull"
	+NODAMAGETHRUST
}

ACTOR CryoTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Radius 4
	Height 8
	Renderstyle Add
	Alpha 0.5
	States {
		Spawn:
			BSHT AABBCDEFG 1 Bright
		Stop
	}
}

Actor CryoWind {
	PROJECTILE
	Speed 16
	Radius 10
	Height 20
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "P_Ice"
	Scale 1.75
	Alpha 0.9
	Renderstyle Add
	BounceType "Hexen"
	var int user_count;
	const int spd = 16;
	+RIPPER
	+BLOODLESSIMPACT
	+CANBOUNCEWATER
	+NODAMAGETHRUST
	+PAINLESS
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_count", 0)
			TNT1 A 0 ThrustThing(angle * 256 / 360, 20, 0, 0)
			TNT1 A 2
		SpawnLoop:
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 J 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 K 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 L 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 M 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 N 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 O 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 P 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 Q 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 R 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 S 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 T 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 U 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 V 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 W 5 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 X 5 A_FadeOut(0.05)
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor CryoWind_Damager : DnD_FakeDamager {
	Radius 3
	Height 4
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2, TALENT_ELEMENTAL, DND_USETARGET))
	DamageType "P_IceFull"
	+PAINLESS
}

Actor CryoWindFull : CryoWind {
	+THRUACTORS
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetUserVar("user_count", 0)
			TNT1 A 0 ThrustThing(angle * 256 / 360, 20, 0, 0)
			TNT1 A 2
		SpawnLoop:
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 JJJJJ 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 KKKKK 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 LLLLL 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 MMMMM 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 NNNNN 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 OOOOO 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 PPPPP 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 QQQQQ 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 RRRRR 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 SSSSS 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 TTTTT 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 UUUUU 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 VVVVV 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 WWWWW 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
			TNT1 A 0 A_ChangeVelocity(spd * cos(angle + 45 * user_count), spd * sin(angle + 45 * user_count), velz, CVF_REPLACE)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			RF34 XXXXX 1 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_FadeOut(0.05)
		Loop
	}
}

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
	+NOAUTOAIM
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.5
	Weapon.BobRangeY 0.55
	Weapon.BobRangeX 0.75
	Tag "Plasma Cannon"
	states {
		Spawn:
			RW02 "\" -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 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_PLASMACANNON)
			TNT1 A 0 ACS_NamedExecuteAlways("DND Weapon Damage Cache", 0, DND_DMGID_0, 20)
	    SelectLoop:
			RW02 X 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("PcanClip", 1, "ContinueFire")
			RW02 X 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueFire:
			RW02 A 2 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 A_GiveInventory("PlasmaCannonShooter", 1)
			RW02 BBCCDD 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 2
			RW02 X 3 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("PcanClip", 1, "ContinueAltFire")
			RW02 X 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueAltFire:
			RW02 A 2 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 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("PCanClip", 1)
		NoTake:
			TNT1 A 0 A_GiveInventory("PlasmaCannonShooter2", 1)
			RW02 BBCCDD 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 1
			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 A_GiveInventory("PlasmaCannonShooter2", 1)
			RW02 BBCCDD 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 1
			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 A_GiveInventory("PlasmaCannonShooter2", 1)
			RW02 BBCCDD 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 1
			RW02 X 3 A_Refire
		Goto Ready
		
		Reload:
			TNT1 A 0 A_JumpIfInventory("PcanAmmo", 1, "ContinueReload")
			RW02 X 1 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
		ReloadLoop:
			TNT1 A 0 A_JumpIfInventory("PcanClip", 0, "ReloadFinish")
			TNT1 A 0 A_JumpIfInventory("PCanAmmo", 1, "ReloadGive")
		Goto ReloadFinish
		ReloadGive:
			TNT1 A 0 A_TakeInventory("PcanAmmo", 1)
			TNT1 A 0 A_GiveInventory("PcanClip", 1)
		Goto ReloadLoop
		ReloadFinish:
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Charge")
			RW02 "YZ[ZYZ[ZYZ[ZY" 1
		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
		ReloadLoopFast:
			TNT1 A 0 A_JumpIfInventory("PcanClip", 0, "ReloadFinishFast")
			TNT1 A 0 A_JumpIfInventory("PCanAmmo", 1, "ReloadGiveFast")
		Goto ReloadFinishFast
		ReloadGiveFast:
			TNT1 A 0 A_TakeInventory("PcanAmmo", 1)
			TNT1 A 0 A_GiveInventory("PcanClip", 1)
		Goto ReloadLoopFast
		ReloadFinishFast:
			TNT1 A 0 A_PlayWeaponSound("PlasmaCannon/Charge")
			RW02 "YZ[ZY" 1
		Goto Ready
    }
}

Actor PlasmaCannonShooter : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("PCanClip", 1)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(0), 0, 0, 0, 1, 4 * sin(0))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(15), 0, 0, 0, 1, 4 * sin(15))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(30), 0, 0, 0, 1, 4 * sin(30))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(45), 0, 0, 0, 1, 4 * sin(45))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(60), 0, 0, 0, 1, 4 * sin(60))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(75), 0, 0, 0, 1, 4 * sin(75))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(90), 0, 0, 0, 1, 4 * sin(90))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(105), 0, 0, 0, 1, 4 * sin(105))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(120), 0, 0, 0, 1, 4 * sin(120))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(135), 0, 0, 0, 1, 4 * sin(135))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(150), 0, 0, 0, 1, 4 * sin(150))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(165), 0, 0, 0, 1, 4 * sin(165))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(180), 0, 0, 0, 1, 4 * sin(180))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(195), 0, 0, 0, 1, 4 * sin(195))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(210), 0, 0, 0, 1, 4 * sin(210))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(225), 0, 0, 0, 1, 4 * sin(225))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(240), 0, 0, 0, 1, 4 * sin(240))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(255), 0, 0, 0, 1, 4 * sin(255))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(270), 0, 0, 0, 1, 4 * sin(270))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(285), 0, 0, 0, 1, 4 * sin(285))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(300), 0, 0, 0, 1, 4 * sin(300))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(315), 0, 0, 0, 1, 4 * sin(315))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(330), 0, 0, 0, 1, 4 * sin(330))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 4 * cos(345), 0, 0, 0, 1, 4 * sin(345))
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(0), 0, 0, 0, 1, 4 * sin(0))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(15), 0, 0, 0, 1, 4 * sin(15))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(30), 0, 0, 0, 1, 4 * sin(30))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(45), 0, 0, 0, 1, 4 * sin(45))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(60), 0, 0, 0, 1, 4 * sin(60))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(75), 0, 0, 0, 1, 4 * sin(75))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(90), 0, 0, 0, 1, 4 * sin(90))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(105), 0, 0, 0, 1, 4 * sin(105))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(120), 0, 0, 0, 1, 4 * sin(120))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(135), 0, 0, 0, 1, 4 * sin(135))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(150), 0, 0, 0, 1, 4 * sin(150))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(165), 0, 0, 0, 1, 4 * sin(165))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(180), 0, 0, 0, 1, 4 * sin(180))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(195), 0, 0, 0, 1, 4 * sin(195))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(210), 0, 0, 0, 1, 4 * sin(210))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(225), 0, 0, 0, 1, 4 * sin(225))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(240), 0, 0, 0, 1, 4 * sin(240))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(255), 0, 0, 0, 1, 4 * sin(255))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(270), 0, 0, 0, 1, 4 * sin(270))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(285), 0, 0, 0, 1, 4 * sin(285))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(300), 0, 0, 0, 1, 4 * sin(300))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(315), 0, 0, 0, 1, 4 * sin(315))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(330), 0, 0, 0, 1, 4 * sin(330))
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall_FullDMG", 4 * cos(345), 0, 0, 0, 1, 4 * sin(345))
		Stop
	}
}

Actor PlasmaCannonShooter2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 1, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 3, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 5, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 7, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -1, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -3, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -5, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -7, 0, 0, 0, 1)
		Stop
		Full:
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 1, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 3, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 5, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", 7, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -1, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -3, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -5, 0, 0, 0, 1)
			TNT1 A 0 A_FireCustomMissile("PlasmaCannonBall", -7, 0, 0, 0, 1)
		Stop
	}
}

Actor PlasmaCannonBall {
	PROJECTILE
	Damage (ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ENERGY, DND_USETARGET))
	DamageType "Energy"
	Speed 30
	Radius 5
	Height 10
	Renderstyle Add
	Alpha 0.75
	Scale 0.85
	DeathSound "PlasmaCannon/Hit"
	Decal "Scorch"
	+MTHRUSPECIES
	+DONTREFLECT
	States {
		Spawn:
			NPSB ABCDEFGHIJKL 1 Bright
		Loop
		Death:
			PLNS ABCDEFGHIJKLMNOP 1 Bright A_FadeOut(0.025)
		Stop
	}
}

Actor PlasmaCannonBall_FullDMG : PlasmaCannonBall {
	DamageType "EnergyFull"
}

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 "Shocker"
	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 A_TakeInventory("DnD_WeaponID", 0x7FFFFFFF)
			TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_SHOCKER)
			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, 6, 3 | (5 << 16))
	    SelectLoop:
			WSON A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("DnD_QuestReward_GodSlayerBonus", 1, "FireCheck2")
			TNT1 A 0 A_JumpIfInventory("ShockerOverheat", 80, "DoNothing")
		FireCheck2:
			TNT1 A 0 A_JumpIfInventory("Cell", 3, "ContinueFire")
		DoNothing:
			WSON A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		ContinueFire:
			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 A_GiveInventory("ShockerShooter", 1)
			TNT1 A 0 A_Recoil(2)
			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_JumpIfInventory("Cell", 3, "ContinueAltCheck")
		Goto DoNothing
		ContinueAltCheck:
			TNT1 A 0 A_JumpIfInventory("ShockerOverheat", 10, "ContinueAltFire")
		Goto DoNothing
		ContinueAltFire:
			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)
			WSON B 1 Bright A_GiveInventory("ShockerShooter2", 1)
			TNT1 A 0 A_Recoil(2)
			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 ShockerShooter : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("Cell", 3)
		NoTake:
			TNT1 A 0 A_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(8.4, 6.2, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL, DND_ISBOOMSTICK), "ShockerPuff", FBF_NORANDOM)
		Stop
		Full:
			TNT1 A 0 A_FireBullets(8.4, 6.2, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL, DND_ISBOOMSTICK), "ShockerPuff_FullDMG", FBF_NORANDOM)
		Stop
	}
}

Actor ShockerShooter2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("Cell", 3)
			TNT1 A 0 A_TakeInventory("ShockerOverheat", 10)
		NoTake:
			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_JumpIfInventory("NetherCheck", 1, "Full")
			TNT1 A 0 A_FireBullets(8.4, 6.2, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL, DND_ISBOOMSTICK), "ShockerPuff", FBF_NORANDOM)
			TNT1 A 0 A_FireCustomMissile("ShockerAreaDamager", 0, 0)
		Stop
		Full:
			TNT1 A 0 A_FireBullets(8.4, 6.2, 18, ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_0, TALENT_ELEMENTAL, DND_ISBOOMSTICK), "ShockerPuff_FullDMG", FBF_NORANDOM)
			TNT1 A 0 A_FireCustomMissile("ShockerAreaDamager_FullDMG", 0, 0)
		Stop
	}
}

Actor ShockerPuff : BulletPuff {
	DamageType "Lightning"
	+RANDOMIZE
	+NOTIMEFREEZE
	+NOEXTREMEDEATH
	+CLIENTSIDEONLY
	+FORCEPAIN
	+PUFFONACTORS
	+FOILINVUL
	+MTHRUSPECIES
	Scale 0.68
	RenderStyle Add
	States {
		Spawn:
		Crash:
			EVA6 ABCDEFGH 2 Bright A_FadeOut(0.075)
		Stop
		Melee:
			TNT1 A 1
		Stop
	}
}

Actor ShockerPuff_FullDMG : ShockerPuff {
	DamageType "LightningFull"
}

Actor ShockerExplosion : BaseExplosionDamage {
	DamageType "Fire"
	+FOILINVUL
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1, TALENT_ELEMENTAL, DND_USETARGET | DND_ISBOOMSTICK), 96, 0, 0, 48)
		Stop
	}
}

Actor ShockerExplosion_FullDMG : ShockerExplosion {
	DamageType "FireFull"
	+FORCERADIUSDMG
}

Actor ShockerAreaDamager {
	PROJECTILE
	Height 2
	Radius 1
	Damage (0)
	DamageType "Fire"
	Speed 16
	+THRUACTORS
	+FOILINVUL
	States {
		Spawn:
			TNT1 AAAAAA 1 NoDelay A_SpawnItem("ShockerExplosion")
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 1 
		Stop
	}
}

Actor ShockerAreaDamager_FullDMG : ShockerAreaDamager {
	DamageType "FireFull"
	+FORCERADIUSDMG
	States {
		Spawn:
			TNT1 AAAAAA 1 A_SpawnItem("ShockerExplosion_FullDMG")
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 1 
		Stop
	}
}

Actor ShockerSmokes {
	Damage (0)
	DamageType "Fire"
	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
	}
}