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 "$WEP_2_4_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			RW01 Z -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 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_DEADLOCK)
	    SelectLoop:
			RW01 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 0), "ContinueFire")
			RW01 A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueFire:
			RW01 B 1 Bright Offset(2, 33)
			RW01 B 1 Bright Offset(6, 35)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 14, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DEADLOCK, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_SHELLSIZE_12 << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 15, 34 * (1 + sin(-pitch)), 2, 0, 1)
			RW01 C 1 Bright Offset(15, 39)
			TNT1 A 0 A_SetPitch(pitch - 6.5)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 24 * cos(-pitch), 15, 34 * (1 + sin(-pitch)), 2, 0, 1)
			RW01 C 1 Bright Offset(24, 41)
			TNT1 A 0 A_SetPitch(pitch + 0.5)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 16, 36 * (1 + sin(-pitch)), 2, 0, 1)
			RW01 P 1 Offset(31, 33)
			TNT1 A 0 A_SetPitch(pitch + 0.5)
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 20 * cos(-pitch), 16, 36 * (1 + sin(-pitch)), 2, 0, 1)
			RW01 P 1 Offset(39, 31) A_SetPitch(pitch + 0.5)
			RW01 P 1 Offset(33, 28) A_SetPitch(pitch + 0.5)
			RW01 Q 1 Offset(25, 29) A_SetPitch(pitch + 0.5)
			RW01 Q 1 Offset(17, 31) A_SetPitch(pitch + 0.5)
			RW01 Q 1 Offset(12, 36) A_SetPitch(pitch + 0.5)
			RW01 R 1 Offset(9, 37) A_SetPitch(pitch + 0.5)
			RW01 R 1 Offset(7, 39) A_SetPitch(pitch + 0.5)
			RW01 R 1 Offset(4, 40) A_SetPitch(pitch + 0.5)
			RW01 R 1 Offset(1, 41) A_SetPitch(pitch + 0.5)
			RW01 A 2 Offset(0, 32)
			RW01 A 1 Offset(0, 32) A_JumpIfInventory("ShellSize_12", 1, "Pump")
		Goto Skip
		Pump:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 D 1 Offset(0, 32)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(2, 34)
			TNT1 A 0 A_GiveInventory("DeadlockCasingSpawner", 1)
			RW01 E 2 Offset(4, 36)
			RW01 D 1 Offset(2, 34)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(0, 32)
			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_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ContinueReload")
			RW01 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		NoAction:
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUp")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ReloadBegin")
			RW01 A 2
		Goto RiseUp
		
		ReloadChecks:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUp")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ReloadInsert")
		Goto RiseUp
		
		ReloadBegin:
			RW01 FGHI 2
			RW01 J 3
		ReloadInsert:
			RW01 J 1
			TNT1 A 0 A_PlayWeaponSound("Deadlock/Insert")
			TNT1 A 0 A_GiveInventory("Shellsize_12", 1)
			RW01 KL 2
			RW01 M 2 Offset(0, 30)
			RW01 N 2 Offset(0, 31)
			RW01 O 2 Offset(0, 32)
			RW01 J 4
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePump")
			RW01 J 1 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ReloadChecks")
		Goto RiseUp
		RiseUp:
			RW01 IHGF 2
		Goto Ready
		RisePump:
			RW01 IHGF 2
		Goto PumpAllowRefire
		PumpAllowRefire:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 D 1 Offset(0, 32)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(2, 34)
			RW01 E 2 Offset(4, 36)
			RW01 D 1 Offset(2, 34)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(0, 32)
			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_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ContinueReloadFast")
			RW01 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		NoAction:
			RW01 A 1 A_WeaponReady(WRF_NOSWITCH)
		Goto Ready
		ContinueReloadFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUpFast")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ReloadBeginFast")
			RW01 A 2
		Goto RiseUpFast
		
		ReloadChecksFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_12", 0, "RiseUpFast")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEADLOCK, 1), "ReloadInsertFast")
		Goto RiseUp
		
		ReloadBeginFast:
			RW01 FGHI 1
			RW01 J 1
		ReloadInsertFast:
			RW01 J 1
			TNT1 A 0 A_PlayWeaponSound("Deadlock/Insert")
			TNT1 A 0 A_GiveInventory("Shellsize_12", 1)
			RW01 KL 1
			RW01 M 1 Offset(0, 30)
			RW01 N 1 Offset(0, 31)
			RW01 O 1 Offset(0, 32)
			RW01 J 2
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePumpFast")
			RW01 J 1 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ReloadChecksFast")
		Goto RiseUpFast
		RiseUpFast:
			RW01 IHGF 2
		Goto Ready
		RisePumpFast:
			RW01 IHGF 2
		Goto PumpAllowRefireFast
		PumpAllowRefireFast:
			TNT1 A 0 A_PlaySound("Deadlock/Pump", 7)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			RW01 D 1 Offset(0, 32)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(2, 34)
			RW01 E 2 Offset(4, 36)
			RW01 D 1 Offset(2, 34)
			RW01 D 1 Offset(1, 33)
			RW01 D 1 Offset(0, 32)
			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_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_HEAVYSHELLS, SPWEP_SG), "ModeSwitch")
			RW01 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ModeSwitch:
			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_HEAVYSHELLS, SPWEP_SG)
			RW01 A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			RW01 A 1 Offset(0, 50)
			RW01 A 1 Offset(0, 59)
			RW01 A 1 Offset(0, 68)
			RW01 A 12 Offset(0, 77)
			RW01 A 1 Offset(0, 68)
			RW01 A 1 Offset(0, 56)
			RW01 A 1 Offset(0, 44)
			RW01 A 1 Offset(0, 32)
		Goto Ready
    }
}

Actor DoPump : DnD_Boolean { }

Actor DeadlockPuff : DnD_BasePuff {
	Stamina 4096

	States {
		HitNoBlood:
		Goto Crash
	}
}

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 0
	Weapon.AmmoUse2 0
	Weapon.AmmoGive 5
	Weapon.SlotNumber 3
	Weapon.selectionorder 700
	Inventory.PickupMessage "You got the Nitrogen Crossbow!"
	Obituary "%o tasted %k's nitrogen."
	Tag "$WEP_2_5_TAG"
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.55
	Weapon.BobRangeX 0.8
	Decal "PlasmaScorchLower"
	+WEAPON.NOAUTOAIM
	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 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, cyro_dmg, 0, DND_WEAPON_NITROGENCROSSBOW)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, cryo_altdmg, 0, DND_WEAPON_NITROGENCROSSBOW)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 5, 0, DND_WEAPON_NITROGENCROSSBOW)
	    SelectLoop:
			BOWG A 1 Bright A_Raise
			TNT1 A 0 A_Raise
			Loop
		Ready:
			BOWG AAABBBCCCDDDCCCBBB 1 Bright A_WeaponReady
			Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_NITROGENCROSSBOW, 0), "FireConfirmed")
			BOWG AAABBBCCCDDDCCCBBB 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			BOWG A 0 A_GunFlash
			TNT1 A 0 A_JumpIfInventory("GryphonCheck", 1, "NoRecoil")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoil")
			BOWG A 0 A_Recoil(4.0)
		NoRecoil:
			BOWG A 0 A_PlaySound("weapons/cryobowshot")
			BOWG A 0 A_PlaySound("weapons/cryobowfire", CHAN_WEAPON)
			BOWF A 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NITROGENCROSSBOW, DND_ATK_PRIMARY, DND_AMMOSLOT_SHELL | (AMMO_NITROGENCANISTER << 16), 0)
			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")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_NITROGENCROSSBOW, 1), "AltFireConfirmed")
			BOWG AAABBBCCCDDDCCCBBB 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			BOWG A 1
			BOWG A 0 A_GunFlash
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoilAlt")
			BOWG A 0 A_Recoil(4.0)
		NoRecoilAlt:
			BOWG A 0 A_PlaySound("weapons/cryobowshot")
			BOWG A 0 A_PlaySound("weapons/cryobowfire", CHAN_WEAPON)
			BOWF A 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NITROGENCROSSBOW, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_NITROGENCANISTER << 16), 0)
			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 CryobowRailHelper_1 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_FireBullets(0, 0, 0, 0, "CryoPuff_FX", FBF_NORANDOM)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_NITROGENCROSSBOW |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0, 0, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoBowPuff", 0, 0, 0xFFF, 0, 5.0, 0, "CryoTrail", 1
			)
		Stop
	}
}

Actor CryobowRailHelper_2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_FireBullets(0, 0, 0, 0, "CryoPuffAlt", FBF_NORANDOM, 384)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_NITROGENCROSSBOW |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0, 0, none, none, RGF_SILENT | RGF_NOPIERCING, 0, "CryoBowPuff", 0, 0, 384, 0, 5.0, 0, "CryoTrail", 1
			)
		Stop
	}
}

Actor CryoBowPuff : DnD_BaseRailPuff {
	Stamina 4096

	States {
		Crash:
		Melee:
		HitNoBlood:
			TNT1 A 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_FX {
	+PUFFGETSOWNER
	+PUFFONACTORS
	+ALWAYSPUFF
	States {
		Spawn:
			TNT1 AAAAA 0 A_SpawnItemEx("ExplosionFX5", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 A 1
			TNT1 A 0 A_Explode(1, 128, 0, 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 CryoPuffAlt : DnD_BasePuff {
	Species "Player"
	DamageType "Ice"
	// no ice damage because it should shatter things
	+NODAMAGETHRUST
	+ALWAYSPUFF
	States {
		Init:
		HitNoBlood:
		Crash:
		Death:
			TNT1 A 0 A_JumpIfInTargetInventory("DnD_CritToken", 1, "Crit")
			TNT1 AAAAA 0 A_SpawnItemEx("ExplosionFX5", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 A 1 A_Explode(1, 128, 0)
			TNT1 A 0 A_PlaySound("weapons/cryobowalt", 5)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 1
		Stop
		Crit:
			TNT1 AAAAA 0 A_SpawnItemEx("ExplosionFX5", 0, 0, 0, frandom(-1, 1), frandom(-1, 1), frandom(-1, 1))
			TNT1 A 1 A_Explode(1, 128, 0)
			TNT1 A 0 A_PlaySound("weapons/cryobowalt", 5)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("CryoWind_Crit", 10, 0, 315, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("IceSmoke", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 25 A_PlaySound("weapons/cryobowloop", 6)
			TNT1 A 1
		Stop
	}
}

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

Actor CryoWind : DnD_BaseProjectile {
	Speed 16
	Radius 4
	Height 8
	Scale 1.75
	Alpha 0.9
	Renderstyle Add
	BounceType "Hexen"
	var int user_count;
	const int spd = 15;
	+THRUACTORS
	+BLOODLESSIMPACT
	+CANBOUNCEWATER
	+NODAMAGETHRUST
	+PAINLESS
	States {
		SpawnState:
			TNT1 A 0 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 JJ 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 KK 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 LL 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 MM 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 NN 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 OO 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 PP 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 QQ 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 RR 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 SS 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 TT 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 UU 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 VV 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 WW 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 XX 2 A_CustomMissile("CryoWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor CryoWind_Crit : CryoWind {
	States {
		SpawnState:
			TNT1 A 0 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 JJ 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 KK 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 LL 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 MM 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 NN 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 OO 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 PP 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 QQ 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 RR 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 SS 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 TT 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 UU 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 VV 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 WW 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			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 XX 2 A_CustomMissile("CryoWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
		Loop
	}
}

Actor CryoWind_Damager : DnD_BaseProjectile {
	Radius 10
	Height 20
	DamageType "Ice"
	Speed 1
	
	Damage(
		DND_WEAPON_NITROGENCROSSBOW |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+PAINLESS
	+BLOODLESSIMPACT
	States {
		SpawnState:
			TNT1 A 1
		Stop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor CryoWind_Damager_Crit : CryoWind_Damager {
	Accuracy 69
}

Actor ResShotgun3 : Weapon {
	Weapon.AmmoType "DemonBlood" 
	Weapon.AmmoGive 4
	Weapon.SelectionOrder 900
	Weapon.SlotNumber 3
	Weapon.AmmoUse 0
	Tag "$WEP_2_6_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.5
	Weapon.BobRangeX 0.8
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			WWOP A -1 
		Loop
		Ready:
			WOPG A 0 A_TakeInventory("BaneCount",1)
			WOPG A 1 A_WeaponReady
			WOPG AAAAA 5 A_WeaponReady 
			WOPG B 0 A_PlaySound("WoT/Idle",0,3.0)
			WOPG BCD 3 A_WeaponReady
		Goto Ready
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_TakeInventory("P_RedFire", 1)
		DeselectLoop:
			WOPG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_RedFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 160, 0, DND_WEAPON_WHEELOFTORMENT)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 192, 0, DND_WEAPON_WHEELOFTORMENT)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 10, 1 | (2 << 16), DND_WEAPON_WHEELOFTORMENT)
		SelectLoop:
			WOPG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_WHEELOFTORMENT, 0), "FireConfirmed")
			WOPG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			WOPG W 3 Bright A_PlaySound("WoT/Fire")
			WOPG X 6 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_WHEELOFTORMENT, DND_ATK_PRIMARY, DND_AMMOSLOT_SHELL | (AMMO_DEMONBLOOD << 16), 0)
			WOPG YH 3 Bright 
			WOPG NOPQRSTUV 2 Bright
			WOPG A 0 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("BaneCount", 1, "AltBane")
			WOPG I 4 Bright A_GiveInventory("BaneCount", 1)
		AltBane:
			TNT1 A 0 A_PlaySound("WoT/Alt")
			WOPG JKL 4 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_WHEELOFTORMENT, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_DEMONBLOOD << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)
			WOPG M 4 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_WHEELOFTORMENT, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_SHELL | (AMMO_DEMONBLOOD << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)
			WOPG I 4 A_Refire
			TNT1 A 0 A_TakeInventory("BaneCount", 1)
		Goto Ready 
	}
}

Actor BloodDrainHitFX {
	RENDERSTYLE "ADD"
	Alpha 0.75
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			BLFX ABCDEF 3 BRIGHT
		stop	
	}
}

Actor BloodFX2A : DnD_BasePuff {
	Renderstyle "Add"
	Alpha 1.0
	
	Stamina 4096
	
	+EXTREMEDEATH
	+NODAMAGETHRUST
	+LOOKALLAROUND
	States {
		Spawn:
			TNT1 AAAA 0
		HitNoBlood:
			BLBA E 4 Bright A_JumpIf(ACS_NamedExecuteWithResult("DnD Is Demon"), "SuperDamage")
		Stop
		SuperDamage:
			TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("BloodFXB", 0, 0, 0, frandom(-5, 5), 0, frandom(-5, 5), Frandom(0,360), SXF_NOCHECKPOSITION)
			TNT1 A 0 A_CustomMissile("WoTExploder", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		SkipDamage:
			BLBA E 3 Bright
			TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT, AAPTR_DEFAULT, AAPTR_TARGET)
			TNT1 A 0 A_FaceTarget
			TNT1 A 0 A_CustomMissile("WoTHealer", 0, 0, 0, CMF_TRACKOWNER)
			BLBA FGH 3 Bright
		stop
		Crash:
			BLBA ABCD 3 Bright A_FadeOut(0.1)
			BLF2 ABCDEF 3 A_FadeOut(0.1)
		stop
	}
}

Actor WoTExploder : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 1
			TNT1 A 0 A_SetUserVar("user_expdmg",
				DND_WEAPON_WHEELOFTORMENT |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 160)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius * 0.6)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 5
		Stop
	}
}

Actor BloodFXB : BloodDrainHitFX {
	+CLIENTSIDEONLY
	States {
		Spawn:
			BLFX ABCDEF 3 BRIGHT
		stop	
	}
}

Actor BloodDrainFX : DnD_BasePuff {
	RENDERSTYLE "ADD"
	Alpha 0.75
	
	Stamina 135270400
	
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 A_SpawnItemEx("BloodDrainHitFX")
		HitNoBlood:
			BLFX A 2 A_JumpIf(ACS_NamedExecuteWithResult("DnD Is Demon"), "GiveAmmo")
		Stop
		GiveAmmo:
			BLF2 A 3 BRIGHT ACS_NamedExecuteAlways("DnD Give Ammo To Target", 0, DND_AMMOSLOT_SHELL, AMMO_DEMONBLOOD, 1)
			BLF2 BCDEF 3 BRIGHT
		stop
		Crash:
			TNT1 A 2 BRIGHT
		stop
	}
}

Actor BloodFX3 : DnD_BasePuff {
	Scale 0.75
	Stamina 1052672
	States {
		Spawn:
			TNT1 AAAA 0
		HitNoBlood:
			TNT1 A 1 A_SpawnItemEx("BloodDrainHitFX")
		Stop
		Crash:
			TNT1 A 1
		Stop
	}
}

ACTOR BaneCount : DnD_Boolean { }

actor WoTHealer {
	Height 6
	Radius 6
	RenderStyle "Add"
	Scale 0.5
	Speed 15
	PROJECTILE
	+FORCEXYBILLBOARD
	+SEEKERMISSILE
	+THRUACTORS
	const int pickdist = 30;
	States {
		Spawn:
			HPMI A 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
			HPMI B 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
			HPMI C 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
			HPMI D 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
			HPMI E 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
			HPMI F 3 Bright A_SeekerMissile(10, 15)
			TNT1 A 0 A_JumpIfCloser(pickdist, "GotIt")
		Loop
		GotIt:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_PlaySound("WoT/Heal")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Health Pickup", 0, 2, 5, 1)
		Death:
			HPMI A 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.48, 0.48)
			HPMI A 1 Bright
			TNT1 A 0 A_SetScale(0.46, 0.46)
			HPMI A 1 Bright
			TNT1 A 0 A_SetScale(0.44, 0.44)
			HPMI B 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.41, 0.41)
			HPMI B 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.38, 0.38)
			HPMI B 1 Bright
			TNT1 A 0 A_SetScale(0.35, 0.35)
			HPMI C 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.31, 0.31)
			HPMI C 1 Bright
			TNT1 A 0 A_SetScale(0.27, 0.27)
			HPMI C 1 Bright
			TNT1 A 0 A_SetScale(0.23, 0.23)
			HPMI D 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.22, 0.22)
			HPMI D 1 Bright
			TNT1 A 0 A_SetScale(0.21, 0.21)
			HPMI D 1 Bright 
			TNT1 A 0 A_SetScale(0.20, 0.20)
			HPMI E 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.19, 0.19)
			HPMI E 1 Bright
			TNT1 A 0 A_SetScale(0.18, 0.18)
			HPMI E 1 Bright
			TNT1 A 0 A_SetScale(0.17, 0.17)
			HPMI F 1 Bright A_FadeOut(0.1)
			TNT1 A 0 A_SetScale(0.16, 0.16)
			HPMI F 1 Bright
			TNT1 A 0 A_SetScale(0.15, 0.15)
			HPMI F 1 Bright
		Stop
	}
}

ACTOR ResShotgun4 : Weapon {
	Weapon.UpSound ""
	Weapon.AmmoType1 "CharonAmmo"
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 10
	Weapon.AmmoType2 "CharonStacks"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 0
	Weapon.SlotNumber 3
	Obituary "%o was brought down by %k."
	Decal ""
	Tag "$WEP_2_7_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.6
	Weapon.BobRangeY 0.45
	Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			TNT1 A 1
		Stop
	
		Ready:
			TNT1 A 0 A_PlaySound("CharonBlaster/idle", CHAN_7, 1.0, 1, 1.5)
		ReadyLoop:
			RW08 ABCD 1 A_WeaponReady
		Loop

		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_GiveInventory("P_PurpleFire", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 6, 10 | (12 << 16), DND_WEAPON_CHARONBLASTER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 2, 5 | (8 << 16), DND_WEAPON_CHARONBLASTER)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Homing Lock-on Draw", 0, 360, 250, 894)
		SelectLoop:
			RW08 A 1 A_Raise
			"####" "#" 0 A_Raise
			RW08 B 1 A_Raise
			"####" "#" 0 A_Raise
			RW08 C 1 A_Raise
			"####" "#" 0 A_Raise
			RW08 D 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_StopSound(CHAN_7)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			TNT1 A 0 A_TakeInventory("P_PurpleFire", 1)
			TNT1 A 0 A_GiveInventory("DnD_RemoveLockOn", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Clear Homing Lock-on", 0)
		DeselectLoop:
			RW08 A 1 A_Lower
			"####" "#" 0 A_Lower
			RW08 B 1 A_Lower
			"####" "#" 0 A_Lower
			RW08 C 1 A_Lower
			"####" "#" 0 A_Lower
			RW08 D 1 A_Lower
			"####" "#" 0 A_Lower
		Loop

		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_CHARONBLASTER, 0), "FireConfirmed")
			RW08 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			RW08 IE 1
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlayWeaponSound("CharonBlaster/fire")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_CHARONBLASTER, DND_ATK_PRIMARY, DND_AMMOSLOT_SHELL | (AMMO_CHARON << 16), DND_ATF_CANFIRECIRCLE)
			RW08 J 1 Bright
			RW08 J 3 Bright A_SetPitch(pitch - 0.2)
			RW08 K 4 Bright A_SetPitch(pitch + 0.11)
			RW08 L 4 Bright A_SetPitch(pitch + 0.09)
			RW08 A 1 Bright A_Refire("Fire")
		Goto FireEnd
		
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_CHARONBLASTER, 1), "AltFireConfirmed")
			RW08 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			TNT1 A 0 A_PlaySound("CharonBlaster/Rail", CHAN_7, 1, 1, 0.75)
		AltLoop:
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_CHARONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_CHARON << 16), DND_ATF_NOAMMOGAINCHECK)
			RW08 F 1 Bright A_SetPitch(pitch - 0.0875)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_CHARONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_CHARON << 16), DND_ATF_NOAMMOGAINCHECK | DND_ATF_NOAMMOTAKE)
			RW08 G 1 Bright
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_CHARONBLASTER, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_CHARON << 16), DND_ATF_NOAMMOGAINCHECK | DND_ATF_NOAMMOTAKE)
			RW08 H 1 Bright A_SetPitch(pitch + 0.0375)
			TNT1 A 0 A_JumpIfInventory("CharonStacks", 1, "KeepFiring")
		Goto FireEnd
		KeepFiring:
			RW08 A 1 A_Refire("AltLoop")
		Goto FireEnd
		FireEnd:
			TNT1 A 0 A_StopSound(CHAN_7)
			RW08 EI 1
		Goto Ready

		Flash:
			TNT1 A 1 A_Light1
			TNT1 A 1 A_Light2
			TNT1 A 1 A_Light (3)
			TNT1 A 1 A_Light1
			TNT1 A 0 A_Light0
		Goto LightDone
	}
}

ACTOR CharonBall : DnD_BaseProjectile {
	Scale 0.6
	DeathSound "CharonBlaster/Hit"
	Decal "Scorch"
	Speed 36
	var int user_velz;
	const float s = 18.0;
	Height 16
	Radius 8
	
	Damage(
		DND_WEAPON_CHARONBLASTER |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FORCEXYBILLBOARD
	+EXPLODEONWATER
	+SEEKERMISSILE
	+LOOKALLAROUND
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_velz", velz)
			CHBP A 3 Bright Light("CharonLight1")
			CHBP B 3 Bright Light("CharonLight2")
			TNT1 A 0 A_Stop
			CHBP AB 3 Bright Light("CharonLight1")
			TNT1 A 0 A_ChangeVelocity(s * cos(angle), s * sin(angle), user_velz / 2, CVF_REPLACE)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP A 3 Bright Light("CharonLight2") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
			CHBP B 3 Bright Light("CharonLight1") A_SeekerMissile(45, 45, SMF_PRECISE | SMF_CURSPEED)
		SpawnLoop:
			CHBP A 3 Bright Light("CharonLight2")
			CHBP B 3 Bright Light("CharonLight1")
		Loop
		XDeath:
			TNT1 A 0 A_GiveToTarget("CharonStacks", 5)
		Death:
			TNT1 A 0 A_SetScale (1.0)
			TNT1 A 0 A_PlaySound ("CharonBlaster/Hit", 7, 1, 0, 1.2)
			CHBP C 3 Bright Light("CharonLightImpact1")
			CHBP D 3 Bright Light("CharonLightImpact2")
			CHBP E 3 Bright Light("CharonLightImpact3")
			CHBP F 3 Bright Light("CharonLightImpact4")
			CHBP G 3 Bright Light("CharonLightImpact5")
		Stop
	}
}

Actor CharonDamagingPuff1 : DnD_BasePuff {
	Scale 0.425
	
	Stamina 4096
	
	+FOILINVUL
	+ALWAYSPUFF
	States {
		Spawn:
		Crash:
		Melee:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Charon Trail Spawner", x, y, z, (DND_TRAILACTOR_CHARON1 << 16) | ACS_NamedExecuteWithResult("DnD Get Target"))
			CHBP C 1 Bright Light("CharonLightImpact1")
			CHBP D 1 Bright Light("CharonLightImpact2")
			CHBP E 1 Bright Light("CharonLightImpact3")
			CHBP F 1 Bright Light("CharonLightImpact4")
			CHBP G 1 Bright Light("CharonLightImpact5")
			TNT1 A 5
		Stop
	}
}

Actor CharonDamagingPuff2 : CharonDamagingPuff1 {
	States {
		Spawn:
		Crash:
		Melee:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Charon Trail Spawner", x, y, z, (DND_TRAILACTOR_CHARON2 << 16) | ACS_NamedExecuteWithResult("DnD Get Target"))
			CHBP C 1 Bright Light("CharonLightImpact1")
			CHBP D 1 Bright Light("CharonLightImpact2")
			CHBP E 1 Bright Light("CharonLightImpact3")
			CHBP F 1 Bright Light("CharonLightImpact4")
			CHBP G 1 Bright Light("CharonLightImpact5")
			TNT1 A 5
		Stop
	}
}

Actor CharonDamagingPuff3 : CharonDamagingPuff1 {
	States {
		Spawn:
		Crash:
		Melee:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Charon Trail Spawner", x, y, z, (DND_TRAILACTOR_CHARON3 << 16) | ACS_NamedExecuteWithResult("DnD Get Target"))
			CHBP C 1 Bright Light("CharonLightImpact1")
			CHBP D 1 Bright Light("CharonLightImpact2")
			CHBP E 1 Bright Light("CharonLightImpact3")
			CHBP F 1 Bright Light("CharonLightImpact4")
			CHBP G 1 Bright Light("CharonLightImpact5")
			TNT1 A 5
		Stop
	}
}

Actor Charon_NoPainPuff : BulletPuff {
	+PAINLESS
	-EXTREMEDEATH
	+ALWAYSPUFF
	+BLOODLESSIMPACT
	States {
		Spawn:
		XDeath:
		Melee:
		Crash:
			TNT1 A 5
		Stop
	}
}

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

Actor CharonBeamCounter : DnD_Info {
	inventory.maxamount 3
}

Actor CharonParticle_Orange {
	Renderstyle Add
	Alpha 0.875
	Scale 0.0475
	Height 4
	Radius 2
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			FLAR A 0
		Goto SpawnWork
		SpawnWork:
			FLAR "#####" 1 Bright A_FadeOut(0.125)
		Stop
	}
}

Actor CharonParticle_Green : CharonParticle_Orange {
	States {
		Spawn:
			FLAR C 0
		Goto SpawnWork
	}
}

Actor CharonParticle_Blue : CharonParticle_Orange {
	States {
		Spawn:
			FLAR B 0
		Goto SpawnWork
	}
}