// Sprites by Mike12
Actor " Shotgun " : Weapon {
	radius 20
	height 16
	Weapon.AmmoGive 0
	Weapon.SlotNumber 3
	weapon.selectionorder 1500
	weapon.kickback 100
	obituary "%o got pummeled by %k's shotgun."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "You got the shotgun!"
	weapon.ammotype1 "Shell"
	weapon.ammotype2 "ShellSize_8N"
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Decal "BulletChip"
	XScale 0.8
	YScale 0.9
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.8
	Tag "$WEP_2_0_TAG"
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			SGN1 Z -1
		stop
		Ready:
			SGN1 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		loop
		Deselect: 
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
		DeselectLoop:
			SGN1 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, 5, 2 | (3 << 16), DND_WEAPON_SHOTGUN)
		SelectLoop:
			SGN1 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOTGUN, 0), "ContinueFire")
			SGN1 A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueFire:
			SGN1 BB 1 Bright
			TNT1 A 0 A_GunFlash
			SGN1 C 1 Bright	
			TNT1 AAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SHOTGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_SHELLSIZE_8N << 16), DND_ATF_CANFIRECIRCLE)
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			SGN1 C 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 0, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN1 D 1 A_SetPitch(pitch - 4.0)
			SGN1 DDEE 1 A_SetPitch(pitch + 1.0)
			SGN1 E 1
			SGN1 F 3
			TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 1, "Skip")
			TNT1 A 0 A_GiveInventory("DoPump", 1)
		Skip:
			SGN1 G 3 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24, -3, 42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			SGN1 H 3 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24, -7, 42+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlaySound("weapons/sgun1pump")
			TNT1 A 0 A_GiveInventory("ShotgunCasingSpawner", 1)
			SGN1 I 4
			SGN1 JJ 2 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24,-15,42+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN1 KK 2 A_SpawnItemEx ("SHOTGUNSMOKE",cos(-pitch)*24,-12,42+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN1 LM 2
			SGN1 A 1 A_ReFire
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
			TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "NoAction")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOTGUN, 1), "ContinueReload")
			SGN1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto NoAction
		ContinueReload:
			SGN1 N 4
			TNT1 A 0 A_PlaySound("Weapons/ShotgunOpen")
			SGN1 MLK 3
		ContinueReloadChecks:
			TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "RiseUp")
			SGN1 K 2 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOTGUN, 1), "ContinueReloadAgain")
		Goto RiseUp
		ContinueReloadAgain:
			SGN1 K 1 Offset(0, 33)
			SGN1 K 1 Offset(0, 35)
			SGN1 K 1 Offset(1, 37)
			SGN1 K 1 Offset(1, 39)
			TNT1 A 0 A_PlayWeaponSound("Weapons/ShotgunInsert")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
		NoTake:
			TNT1 A 0 A_GiveInventory("ShellSize_8N", 1)
			SGN1 K 2 Offset(3, 42)
			SGN1 K 1 Offset(2, 40)
			SGN1 K 1 Offset(1, 39)
			SGN1 K 1 Offset(1, 39)
			SGN1 K 1 Offset(1, 37)
			SGN1 K 1 Offset(1, 35)
			SGN1 K 1 Offset(1, 33)
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePump")
			SGN1 K 3 Offset(0, 32) A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecks") // dont change the 3 tic there
		Goto RiseUp
		RiseUp:
			TNT1 A 0 A_PlaySound("Weapons/ShotgunClose")
			SGN1 LM 3
			SGN1 N 4
		Goto Ready
		RisePump:
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			SGN1 O 4 Offset(0, 33) A_PlaySound("weapons/sgun1pump", 7)
			SGN1 K 2
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecks")
			SGN1 K 1
			SGN1 LMN 3
		SkipRefire:
			SGN1 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
		Goto Ready
		NoAction:
			SGN1 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready

		ReloadFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "NoAction")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOTGUN, 1), "ContinueReloadFast")
			SGN1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto NoAction
		ContinueReloadFast:
			SGN1 N 2
			TNT1 A 0 A_PlaySound("Weapons/ShotgunOpen")
			SGN1 M 1
			SGN1 L 2
			SGN1 K 1
		ContinueReloadChecksFast:
			TNT1 A 0 A_JumpIfInventory("ShellSize_8N", 0, "RiseUpFast")
			SGN1 K 2 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SHOTGUN, 1), "ContinueReloadAgainFast")
		Goto RiseUp
		ContinueReloadAgainFast:
			SGN1 K 1 Offset(0, 35)
			SGN1 K 1 Offset(1, 39)
			TNT1 A 0 A_PlayWeaponSound("Weapons/ShotgunInsert")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTakeFast")
		NoTakeFast:
			TNT1 A 0 A_GiveInventory("ShellSize_8N", 1)
			SGN1 K 1 Offset(3, 42)
			SGN1 K 1 Offset(2, 40)
			SGN1 K 1 Offset(1, 39)
			SGN1 K 1 Offset(1, 35)
			TNT1 A 0 A_JumpIfInventory("DoPump", 1, "RisePumpFast")
			SGN1 K 3 Offset(0, 32) A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecksFast")
		Goto RiseUpFast
		RiseUpFast:
			TNT1 A 0 A_PlaySound("Weapons/ShotgunClose")
			SGN1 L 1
			SGN1 M 2
			SGN1 N 2
		Goto Ready
		RisePumpFast:
			TNT1 A 0 A_TakeInventory("DoPump", 1)
			SGN1 O 2 Offset(0, 33) A_PlaySound("weapons/sgun1pump", 7)
			SGN1 K 1
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 9), "ContinueReloadChecksFast")
			SGN1 K 1
			SGN1 L 1
			SGN1 M 2
			SGN1 N 1
		SkipRefireFast:
			SGN1 AAA 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOBOB)
		Goto Ready
		
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_SHELL, SPWEP_SG), "ModeSwitch")
			SGN1 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ModeSwitch:
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
			SGN1 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL, SPWEP_SG)
			SGN1 A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			SGN1 A 1 Offset(0, 50)
			SGN1 A 1 Offset(0, 59)
			SGN1 A 1 Offset(0, 68)
			SGN1 A 12 Offset(0, 77)
			SGN1 A 1 Offset(0, 68)
			SGN1 A 1 Offset(0, 56)
			SGN1 A 1 Offset(0, 44)
			SGN1 A 1 Offset(0, 32)
		Goto Ready

		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
	}
}

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

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

// Sprites by PisstePank
Actor "Upgraded Shotgun" : Weapon {
	radius 20
	height 16
	Weapon.SlotNumber 3
	weapon.selectionorder 1500
	weapon.kickback 100
	obituary "%o got pummeled by %k's shotgun."
	Inventory.PickupSound "weapons/pickup"
	inventory.pickupmessage "You got the shotgun!"
	weapon.ammotype "Shell"
	weapon.ammouse1 0
	weapon.ammogive1 0
	Weapon.AmmoType2 "ShellSize_8"
	Weapon.ammoGive2 0
	Weapon.AmmoUse2 0
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.8
	Decal "BulletChip"
	Tag "$WEP_2_1_TAG"
	+INVENTORY.UNDROPPABLE
	+WEAPON.NOAUTOAIM
	states {
		Spawn:
			SGP2 Z -1
		stop
		Ready:
			SGN2 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		loop
		Deselect: 
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
			SGN2 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_PURIFIER)
		SelectLoop:
			SGN2 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 0), "ContinueFire")
			SGN2 A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Reload
		ContinueFire:
			TNT1 A 0 A_JumpIfInventory("Reloading", 1, "LowerWeapon")
		ContinueForReal:
			SGN2 BCD 1 Bright
			TNT1 A 0 A_GunFlash
			TNT1 AAAAAA 0 A_FireCustomMissile("SGTracer", frandom(-6, 6), 0, 0, frandom(-6, 6))
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 6, 30 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PURIFIER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_SHELLSIZE_8 << 16), DND_ATF_CANFIRECIRCLE)
			SGN2 E 1 bright A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 4, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_SetPitch(pitch - 6.0)
			SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			SGN2 F 1 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			TNT1 A 0 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 5, 36+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN2 GGG 1 A_SetPitch(pitch + 1.0)
			TNT1 A 0 A_CheckReload
			SGN2 H 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 6, 37+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN2 I 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 7, 38+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_GiveInventory("PurifierCasingSpawner", 1)
			TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
			SGN2 JKL 3 A_SpawnItemEx ("SHOTGUNSMOKE", cos(-pitch)*24, 7, 40+(sin(-pitch)*20),0,0,2,0,0,0)
			SGN2 K 3
			// check if user is holding fire, and has enough ammo to reload when they have no ammo OR they are pressing reload button and wish to proceed early
			SGN2 J 3 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 1, 0, DND_CFW_HOLDFIREORRELOADCHECK), "GoHereFromFire")
			SGN2 I 3
			SGN2 HG 1
			SGN2 A 1 A_ReFire("Fire")
		Goto Ready
		LowerWeapon:
			TNT1 A 0 A_TakeInventory("Reloading", 1)
			SGN2 TSRQPONMIHG 1
		Goto ContinueForReal
		Reload:
			SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			TNT1 A 0 A_JumpIfInventory("ShellSize_8", 0, "Ready")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 1), "ContinueAltFire")
			SGN2 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		ContinueAltFire:
			SGN2 GH 1
			SGN2 IJ 2
		GoHereFromFire:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "GoHereFromFire2")
			SGN2 MNOP 2
			SGN2 QRST 1
			TNT1 A 0 A_GiveInventory("Reloading", 1)
		AltFireLoop:
			TNT1 A 0 A_JumpIFInventory("ShellSize_8", 0, "CockNLoad")
			TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "DoHack")
		Goto NoHack
		DoHack:
			SGN2 U 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		ContinueAltLoop:
			SGN2 V 2
			SGN2 W 1
			TNT1 A 0 A_PlayWeaponSound("weapons/shotgunloadnew")
			TNT1 A 0 A_GiveInventory("ShellSize_8", 1)
			SGN2 XY 1
			SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 1), "AltFireLoop")
			SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		Goto CockNLoad
		NoHack:
			SGN2 U 2
		Goto ContinueAltLoop
		CockNLoad:
			TNT1 A 0 A_TakeInventory("Reloading", 1)
			SGN2 TSRQ 1
			SGN2 PONMJ 2
			TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
			SGN2 KLKJ 3
			SGN2 I 2
			SGN2 HG 1
		Goto Ready


		ReloadFaster:
			TNT1 A 0 A_JumpIfInventory("ShellSize_8", 0, "Ready")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 1), "ContinueAltFire2")
			SGN2 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueAltFire2:
			SGN2 GH 1
			SGN2 IJ 1
		GoHereFromFire2:
			SGN2 MNOP 1
			TNT1 A 0 A_GiveInventory("Reloading", 1)
		AltFireLoop2:
			TNT1 A 0 A_JumpIFInventory("ShellSize_8", 0, "CockNLoad2")
			TNT1 A 0 A_JumpIfInventory("ShellSize_8", 1, "DoHack2")
		Goto NoHack2
		DoHack2:
			SGN2 U 1 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		ContinueAltLoop2:
			SGN2 V 1
			SGN2 W 1
			TNT1 A 0 A_PlayWeaponSound("weapons/shotgunloadnew")
			TNT1 A 0 A_GiveInventory("ShellSize_8", 1)
			SGN2 XY 1
			SGN2 Z 1 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PURIFIER, 1), "AltFireLoop2")
			SGN2 Z 2 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOSECONDARY)
		Goto CockNLoad2
		NoHack2:
			SGN2 U 1
		Goto ContinueAltLoop2
		CockNLoad2:
			TNT1 A 0 A_TakeInventory("Reloading", 1)
			SGN2 PONMJ 1
			TNT1 A 0 A_PlaySound("weapons/shotguncocknew")
			SGN2 KLKJ 1
			SGN2 I 1
			SGN2 HG 1
		Goto Ready
	
		Altfire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_SHELL, SPWEP_SG), "ModeSwitch")
			SGN2 A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ModeSwitch:
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
			SGN2 A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_SHELL, SPWEP_SG)
			SGN2 A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			SGN2 A 1 Offset(0, 50)
			SGN2 A 1 Offset(0, 59)
			SGN2 A 1 Offset(0, 68)
			SGN2 A 12 Offset(0, 77)
			SGN2 A 1 Offset(0, 68)
			SGN2 A 1 Offset(0, 56)
			SGN2 A 1 Offset(0, 44)
			SGN2 A 1 Offset(0, 32)
		Goto Ready
		NoAction:
			SGN2 A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready

		Flash:
			TNT1 A 4 bright A_Light1
			TNT1 A 3 bright A_Light2
			TNT1 A 0 bright A_Light0
		stop
    }
}

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

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

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

Actor KillstormPuff : DnD_BasePuff {
	Stamina 4096

	States {
		HitNoBlood:
		Goto Crash
	}
}

ACTOR "Upgraded Shotgun3" : Weapon {
	Weapon.AmmoType "EmeraldMana"
	Weapon.AmmoGive 12
	Weapon.SelectionOrder 1200
	Weapon.SlotNumber 3
	Weapon.AmmoUse 1
	Weapon.KickBack 100
	+UNDROPPABLE
	Tag "$WEP_2_3_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.8
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			JADE C -1 Bright
		Loop
		Ready:
			JADE A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_GreenFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot3", 1)
		DeselectLoop:
			JADE A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_GreenFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot3", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_EMERALDWAND)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 150, 0, DND_WEAPON_EMERALDWAND)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 8, 1 | (4 << 16), DND_WEAPON_EMERALDWAND)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 50, 0, DND_WEAPON_EMERALDWAND)
		SelectLoop:
			JADE A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_EMERALDWAND, 0), "FireConfirmed")
			JADE A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			JADE B 1 Bright Offset(0, 48)
			TNT1 A 0 A_PlaySound("EmeraldWand/Fire")
			TNT1 AAAAA 0 A_FireCustomMissile("GreenTracer", frandom(-6, 6),0,0,0,0, frandom(-4.25, 4.25))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_EMERALDWAND, DND_ATK_PRIMARY, DND_AMMOSLOT_SHELL | (AMMO_EMERALDMANA << 16), DND_ATF_CANFIRECIRCLE)
			JADE B 1 bright offset(0, 42) 
			JADE B 1 bright offset(0, 42) A_SetPitch(pitch - 0.4)
			JADE A 1 offset(0, 49) A_SetPitch(pitch + 0.2)
			JADE A 1 offset(0, 50) A_SetPitch(pitch + 0.2)
			JADE A 1 offset(0, 49)
			JADE A 1 offset(0, 46)
			JADE A 1 offset(0, 43)
			JADE A 1 offset(0, 40)
			JADE A 1 offset(0, 37)
			JADE A 1 offset(0, 35)
			JADE A 1 Offset(0, 33)
			JADE A 2 Offset(0, 32)
			JADE A 1
			TNT1 A 0 offset(0, 35) a_refire
			JADE A 1 Offset(0, 33)
		goto ready
		AltFire:
			TNT1 A 0 A_JumpIfInventory("EmeraldRainCooldown", 1, "Nothing")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_EMERALDWAND, 1), "AltFireConfirmed")
			JADE A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			JADE B 1 Bright Offset(0, 48)
			TNT1 A 0 A_PlaySound("EmeraldWand/Alt")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_EMERALDWAND, DND_ATK_SECONDARY, DND_AMMOSLOT_SHELL | (AMMO_EMERALDMANA << 16), 0)
			TNT1 A 0 A_GiveInventory("EmeraldRainCooldown", 1)
			JADE B 1 bright offset(0, 42) 
			JADE B 1 bright offset(0, 42) A_SetPitch(pitch - 0.4)
			JADE A 1 offset(0, 49) A_SetPitch(pitch + 0.2)
			JADE A 1 offset(0, 50) A_SetPitch(pitch + 0.2)
			JADE A 1 offset(0, 49)
			JADE A 1 offset(0, 46)
			JADE A 1 offset(0, 43)
			JADE A 1 offset(0, 40)
			JADE A 1 offset(0,  37)
			JADE A 1 offset(0, 35)
			TNT1 A 0 offset(0, 35) a_refire
			JADE A 1 Offset(0, 33)
			JADE A 18 A_WeaponReady(WRF_NOSECONDARY | WRF_NOSWITCH)
		goto ready
		Nothing:
			JADE A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
	}
}

Actor EmeraldRainCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -8
}

Actor EmeraldPuff : DnD_BasePuff {
	renderstyle "Add"
	Scale 0.5
	
	Stamina 4096
	
	+THRUGHOST
	+BLOODLESSIMPACT
	States {
		Spawn:
		Crash:
		Melee:
		HitNoBlood:
			TNT1 AAAA 0
			IDSE AABBCCDD 1 bright A_FadeOut(0.05)
		Stop
	}
}

Actor EmeraldPuff_GhostHitter : EmeraldPuff {
	-THRUGHOST
}

Actor EmeraldRainer : DnD_BaseProjectile {
	Radius 6
	Height 8
	Speed 30
	DeathSound "EmeraldWand/AltHit"
	
	Damage(
		DND_WEAPON_EMERALDWAND |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_EMERALD << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+NODAMAGETHRUST
	+THRUGHOST
	+DONTBLAST
	RENDERSTYLE "Add"
	var int user_count;
	const int raindrops = 84;
	States {
		SpawnState:
			JWPR AAAAAABBBBBBCCCCCC 1 Bright A_SpawnItemEx("JadeTrail")
		loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_PlaySound("EmeraldWand/Rain")
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			JWPR DDDDD 1 Bright A_CustomMissile("EmeraldRainDropper", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			JWPR EEEEEFFFFFGGGGG 1 Bright A_CustomMissile("EmeraldRainDropper", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			/*JWPR DDDDD 1 Bright A_SpawnItemEx("EmeraldRainDropper", frandom(-r, r), frandom(-r, r), 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
			JWPR EEEEEFFFFFGGGGG 1 Bright A_SpawnItemEx("EmeraldRainDropper", frandom(-r, r), frandom(-r, r), 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)*/
		DeathLoop:
			TNT1 A 0 A_JumpIf(user_count == raindrops, "Finish")
			TNT1 AA 0 A_CustomMissile("EmeraldRainDropper", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 1 A_CustomMissile("EmeraldRainDropper", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		
		Crit:
			JWPR DDDDD 1 Bright A_CustomMissile("EmeraldRainDropper_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			JWPR EEEEEFFFFFGGGGG 1 Bright A_CustomMissile("EmeraldRainDropper_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
		DeathLoopCrit:
			TNT1 A 0 A_JumpIf(user_count == raindrops, "Finish")
			TNT1 AA 0 A_CustomMissile("EmeraldRainDropper_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 1 A_CustomMissile("EmeraldRainDropper_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		
		Finish:
			TNT1 A 50
		Stop
	}
}

Actor EmeraldRainDropper {
	PROJECTILE
	Height 4
	Radius 2
	//Scale 0.25
	var int user_spd;
	+CEILINGHUGGER
	States {
		Spawn:
		Death:
			TNT1 A 0 NoDelay A_SetUserVar("user_spd", random(4, 48))
			TNT1 A 3 A_ChangeVelocity(user_spd * cos(angle), user_spd * sin(angle), 0, CVF_REPLACE)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("CEILINGHUGGER", 0)
			TNT1 A 165 A_CustomMissile("EmeraldRain", ceilingz - 16, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION, -90)
		Stop
	}
}

Actor EmeraldRainDropper_Crit : EmeraldRainDropper {
	States {
		Spawn:
		Death:
			TNT1 A 0 NoDelay A_SetUserVar("user_spd", random(4, 48))
			TNT1 A 3 A_ChangeVelocity(user_spd * cos(angle), user_spd * sin(angle), 0, CVF_REPLACE)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("CEILINGHUGGER", 0)
			TNT1 A 165 A_CustomMissile("EmeraldRain_Crit", ceilingz - 16, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION, -90)
		Stop
	}
}

/*Actor EmeraldRainDropper {
	+MISSILE
	+NOCLIP
	+CEILINGHUGGER
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 165 A_CustomMissile("EmeraldRain", ceilingz - 16, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION, -90)
		Stop
	}
}*/

Actor EmeraldRain : DnD_BaseProjectile {
	Radius 3
	Height 4
	Speed 40
	Damage (1) // for some reason this +1 is needed, otherwise the game wont think this can hurt things for some reason
	Renderstyle "Add"
	Alpha 1.0
	ReactionTime 165
	
	Damage(
		DND_WEAPON_EMERALDWAND |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_EMERALD << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+NODAMAGETHRUST
	+THRUGHOST
	+DONTBLAST
	+CEILINGHUGGER
	+NOCLIP
	States {
		SpawnState:
			JADE D 1
			TNT1 A 0 A_ChangeFlag("CEILINGHUGGER", 0)
			TNT1 A 0 A_ChangeFlag("NOCLIP", 0)
		SpawnLoop:
			JADE D 1 Bright A_Countdown
		Loop
		Death:
			TNT1 A 0 A_Stop
			JADE EFGHI 3 Bright
		Stop
	}
}

Actor EmeraldRain_Crit : EmeraldRain {
	Accuracy 69
}

Actor EmeraldRainer_GhostHitter : EmeraldRainer {
	-THRUGHOST
	States {
		XDeath:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Do Impact Damage", ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_1 | (DND_WEAPON_EMERALDWAND << 16), DND_DAMAGECATEGORY_POISON, DND_USETARGET | DND_ISSLOT3), DND_DAMAGETYPE_EMERALD, 0, DND_WEAPON_EMERALDWAND)
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_PlaySound("EmeraldWand/Rain")
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			JWPR DDDDD 1 Bright A_CustomMissile("EmeraldRainDropper_GhostHitter", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			JWPR EEEEEFFFFFGGGGG 1 Bright A_CustomMissile("EmeraldRainDropper_GhostHitter", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
		DeathLoop:
			TNT1 A 0 A_JumpIf(user_count == raindrops, "Finish")
			TNT1 AA 0 A_CustomMissile("EmeraldRainDropper_GhostHitter", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 1 A_CustomMissile("EmeraldRainDropper_GhostHitter", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		
		Crit:
			JWPR DDDDD 1 Bright A_CustomMissile("EmeraldRainDropper_GhostHitter_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			JWPR EEEEEFFFFFGGGGG 1 Bright A_CustomMissile("EmeraldRainDropper_GhostHitter_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
		DeathLoopCrit:
			TNT1 A 0 A_JumpIf(user_count == raindrops, "Finish")
			TNT1 AA 0 A_CustomMissile("EmeraldRainDropper_GhostHitter_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 1 A_CustomMissile("EmeraldRainDropper_GhostHitter_Crit", 0, 0, frandom(0, 360), CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		
		Finish:
			TNT1 A 50
		Stop
	}
}

Actor EmeraldRainDropper_GhostHitter : EmeraldRainDropper {
	States {
		Spawn:
		Death:
			TNT1 A 0 NoDelay A_SetUserVar("user_spd", random(4, 48))
			TNT1 A 3 A_ChangeVelocity(user_spd * cos(angle), user_spd * sin(angle), 0, CVF_REPLACE)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("CEILINGHUGGER", 0)
			TNT1 A 165 A_CustomMissile("EmeraldRain_GhostHitter", ceilingz - 16, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION, -90)
		Stop
	}
}

Actor EmeraldRainDropper_GhostHitter_Crit : EmeraldRainDropper_GhostHitter {
	States {
		Spawn:
		Death:
			TNT1 A 0 NoDelay A_SetUserVar("user_spd", random(4, 48))
			TNT1 A 3 A_ChangeVelocity(user_spd * cos(angle), user_spd * sin(angle), 0, CVF_REPLACE)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("CEILINGHUGGER", 0)
			TNT1 A 165 A_CustomMissile("EmeraldRain_GhostHitter_Crit", ceilingz - 16, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION, -90)
		Stop
	}
}

Actor EmeraldRain_GhostHitter : EmeraldRain {
	-THRUGHOST
}

Actor EmeraldRain_GhostHitter_Crit : EmeraldRain_GhostHitter {
	Accuracy 69
}

ACTOR JadeTrail {   
	+CLIENTSIDEONLY
	+NOINTERACTION
	Renderstyle Add
	States {
		Spawn:
			JWPR AAAAABBBBBCCCCC 1 Bright A_Fadeout(0.1)
		Stop 
	}
}

Actor EmeraldDeathActor : DnD_ExplosiveBase {
	Radius 3
	Height 6
	Speed 0
	Renderstyle "Add"
	Alpha 1.0
	+THRUACTORS
	+THRUGHOST
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg",
				DND_WEAPON_EMERALDWAND |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_EMERALD << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)	
			TNT1 A 0 A_SetUserVar("user_expradius", 96)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 2 * user_expradius / 3)
			TNT1 A 0 A_PlaySound("EmeraldWand/Explode")
			TNT1 AAAAAAA 0 A_SpawnItemEx("ExplosionFXMagicGreen", 0, 0, 0, frandom(-5, 5), frandom(-5, 5), frandom(-5, 5))
			TNT1 A 1
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}