// Sprites by Eriance
Actor " Machine gun " : Weapon
{
	Weapon.SelectionOrder 720
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the machinegun!"	
    Obituary "%o was gunned down by %k's machinegun."
	Weapon.AmmoType1 "Clip"
	Weapon.AmmoType2 "MGClip"
	Weapon.AmmoUse2 0
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Decal "BulletChip"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "$WEP_4_0_TAG"
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.9
    Weapon.BobRangeY 0.4
    Weapon.BobRangeX 0.7
	+WEAPON.NOAUTOAIM
	States
	{
		Spawn:
			WASG A -1
		Stop
		Ready:
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
		    TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			DMGG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 3 | (4 << 16), DND_WEAPON_MACHINEGUN)
	    SelectLoop:
			DMGG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_GRENADE, "FireGrenade")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MACHINEGUN, 1), "FireConfirmed")
			DMGG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Warned
		FireConfirmed:
			DMGF A 2 Bright A_GunFlash("FlashNorm")
			TNT1 A 0 A_PlayWeaponSound("Weapons/MGFireSoft")
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-3, 3), 0, 0, frandom(-3, 3))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MACHINEGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP << 16), 0)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*28,4,32+(sin(-pitch)*20),0,8,random(4,10),0,0,0)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,0,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			DMGF B 2 Bright A_GunFlash("FlashLower")
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "Continue2nd")
			TNT1 A 0 A_JumpIfInventory("MGClip", 1, "Continue2nd")
			DMGG B 2 A_GunFlash("FlashLower")
		Goto Warned
		Continue2nd:
			DMGF C 2 Bright A_GunFlash("FlashNorm")
			TNT1 A 0 A_PlayWeaponSound("Weapons/MGFireSoft")
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_FireCustomMissile("Tracer", Random(-3, 3), 0, 0, Random(-3, 3))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MACHINEGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP << 16), 0)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*28,4,32+(sin(-pitch)*20),0,8,random(4,10),0,0,0)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,0,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			DMGF D 2 Bright A_GunFlash("FlashLower")
		FireEnd:
			TNT1 A 0 A_Refire
			DMGG B 2 A_GunFlash("FlashLower")
		Goto Ready
		Warned:
			TNT1 A 0 A_JumpIfInventory("WarnTimer", 1, "NoWarn")
			TNT1 A 0 A_PlaySound("Weapons/MGWarn", 6)
			TNT1 A 0 A_GiveInventory("WarnTimer", 1)
		Reload:
			TNT1 A 0 A_JumpIfInventory("MGClip", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MACHINEGUN, 0), "ContinueReload")
		NoWarn:
			TNT1 A 0 A_GunFlash("FlashNormLightless", GFF_NOEXTCHANGE)
			DMGG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			DMGG B 1 Offset(-1, 33)
			DMGG B 1 Offset(-3, 34)
			DMGG B 1 Offset(-5, 35)
			DMGG B 1 Offset(-8, 37)
			DMGG B 1 Offset(-11, 39)
			DMGG B 1 Offset(-15, 42)
			DMGG B 1 Offset(-18, 45)
			DMGG B 1 Offset(-21, 48)
			TNT1 A 0 A_PlaySound("Weapons/MGLoad", 6)
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			DMGG B 1 Offset(-21, 50)
			DMGG B 48 Offset(-21, 51)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_MACHINEGUN)
			DMGG B 1 Offset(-21, 51)
			DMGG B 1 Offset(-21, 43)
			DMGG B 1 Offset(-21, 49)
			DMGG B 1 Offset(-18, 47)
			DMGG B 1 Offset(-15, 45)
			DMGG B 1 Offset(-12, 43)
			DMGG B 1 Offset(-9, 41)
			DMGG B 1 Offset(-6, 38)
			DMGG B 1 Offset(-3, 36)
			DMGG B 1 Offset(-1, 33)
			DMGG A 1 Offset(0, 32)
		Goto Ready
		Failed:
			TNT1 A 0 A_GunFlash("FlashNormLightless", GFF_NOEXTCHANGE)
			DMGG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ReloadFaster:
			DMGG B 1 Offset(-1, 33)
			DMGG B 1 Offset(-3, 34)
			DMGG B 1 Offset(-5, 35)
			DMGG B 1 Offset(-8, 37)
			DMGG B 1 Offset(-11, 39)
			DMGG B 1 Offset(-15, 42)
			DMGG B 1 Offset(-18, 45)
			DMGG B 1 Offset(-21, 48)
			TNT1 A 0 A_PlaySound("Weapons/MGLoad", 6)
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			DMGG B 1 Offset(-21, 50)
			DMGG B 24 Offset(-21, 51)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_MACHINEGUN)
			DMGG B 1 Offset(-21, 51)
			DMGG B 1 Offset(-21, 43)
			DMGG B 1 Offset(-21, 49)
			DMGG B 1 Offset(-18, 47)
			DMGG B 1 Offset(-15, 45)
			DMGG B 1 Offset(-12, 43)
			TNT1 A 0 A_PlaySound("Weapons/MGReady", 6)
			DMGG B 1 Offset(-9, 41)
			DMGG B 1 Offset(-6, 38)
			DMGG B 1 Offset(-3, 36)
			DMGG B 1 Offset(-1, 33)
			DMGG A 1 Offset(0, 32)
		Goto Ready
		Flash:
			TNT1 A 0 A_Light0
		FlashNorm:
			TNT1 A 0
		FlashNormLightless:
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_GRENADE, "FlashFinish")
			TNT1 A 0 A_JumpIfInventory("MGClip", 1, 2)
			MGNM A 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 2, 2)
			MGNM B 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 3, 2)
			MGNM C 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 4, 2)
			MGNM D 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 5, 2)
			MGNM E 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 6, 2)
			MGNM F 2 Bright
			Goto FlashFinish			
			TNT1 A 0 A_JumpIfInventory("MGClip", 7, 2)
			MGNM G 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 8, 2)
			MGNM H 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 9, 2)
			MGNM I 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 10, 2)
			MGNM J 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 11, 2)
			MGNM K 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 12, 2)
			MGNM L 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 13, 2)
			MGNM M 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 14, 2)
			MGNM N 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 15, 2)
			MGNM O 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 16, 2)
			MGNM P 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 17, 2)
			MGNM Q 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 18, 2)
			MGNM R 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 19, 2)
			MGNM S 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 20, 2)
			MGNM T 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 21, 2)
			MGNM U 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 22, 2)
			MGNM V 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 23, 2)
			MGNM W 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 24, 2)
			MGNM X 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 25, 2)
			MGNM Y 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 26, 2)
			MGNM Z 2 Bright
			Goto FlashFinish			
			TNT1 A 0 A_JumpIfInventory("MGClip", 27, 2)
			MGN2 A 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 28, 2)
			MGN2 B 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 29, 2)
			MGN2 C 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 30, 2)
			MGN2 D 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 31, 2)
			MGN2 E 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 32, 2)
			MGN2 F 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 33, 2)
			MGN2 G 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 34, 2)
			MGN2 H 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 35, 2)
			MGN2 I 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 36, 2)
			MGN2 J 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 37, 2)
			MGN2 K 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 38, 2)
			MGN2 L 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 39, 2)
			MGN2 M 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 40, 2)
			MGN2 N 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 41, 2)
			MGN2 O 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 42, 2)
			MGN2 P 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 43, 2)
			MGN2 Q 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 44, 2)
			MGN2 R 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 45, 2)
			MGN2 S 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 46, 2)
			MGN2 T 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 47, 2)
			MGN2 U 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 48, 2)
			MGN2 V 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 49, 2)
			MGN2 W 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 50, 2)
			MGN2 X 2 Bright
			Goto FlashFinish
			MGN2 Y 2 Bright
			
		FlashFinish:
			TNT1 A 1
			Goto LightDone
			
		FlashLower:
			TNT1 A 0 A_Light1
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_4", AMMO_GRENADE, "FlashFinish")
			TNT1 A 0 A_JumpIfInventory("MGClip", 1, 2)
			MGN3 A 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 2, 2)
			MGN3 B 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 3, 2)
			MGN3 C 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 4, 2)
			MGN3 D 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 5, 2)
			MGN3 E 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 6, 2)
			MGN3 F 2 Bright
			Goto FlashFinish			
			TNT1 A 0 A_JumpIfInventory("MGClip", 7, 2)
			MGN3 G 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 8, 2)
			MGN3 H 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 9, 2)
			MGN3 I 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 10, 2)
			MGN3 J 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 11, 2)
			MGN3 K 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 12, 2)
			MGN3 L 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 13, 2)
			MGN3 M 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 14, 2)
			MGN3 N 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 15, 2)
			MGN3 O 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 16, 2)
			MGN3 P 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 17, 2)
			MGN3 Q 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 18, 2)
			MGN3 R 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 19, 2)
			MGN3 S 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 20, 2)
			MGN3 T 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 21, 2)
			MGN3 U 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 22, 2)
			MGN3 V 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 23, 2)
			MGN3 W 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 24, 2)
			MGN3 X 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 25, 2)
			MGN3 Y 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 26, 2)
			MGN3 Z 2 Bright
			Goto FlashFinish			
			TNT1 A 0 A_JumpIfInventory("MGClip", 27, 2)
			MGN4 A 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 28, 2)
			MGN4 B 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 29, 2)
			MGN4 c 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 30, 2)
			MGN4 D 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 31, 2)
			MGN4 E 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 32, 2)
			MGN4 F 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 33, 2)
			MGN4 G 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 34, 2)
			MGN4 H 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 35, 2)
			MGN4 I 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 36, 2)
			MGN4 J 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 37, 2)
			MGN4 K 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 38, 2)
			MGN4 L 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 39, 2)
			MGN4 M 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 40, 2)
			MGN4 N 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 41, 2)
			MGN4 O 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 42, 2)
			MGN4 P 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 43, 2)
			MGN4 Q 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 44, 2)
			MGN4 R 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 45, 2)
			MGN4 S 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 46, 2)
			MGN4 T 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 47, 2)
			MGN4 U 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 48, 2)
			MGN4 V 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 49, 2)
			MGN4 W 2 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("MGClip", 50, 2)
			MGN4 X 2 Bright
			Goto FlashFinish
			MGN4 Y 2 Bright
			Goto FlashFinish
			
		Altfire:
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_MGGRENADE, SPWEP_MG), "ModeSwitch")
			DMGG A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ModeSwitch:
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "NoAction")
			DMGG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_GiveInventory("AmmoSwitchCooldown", 1)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMO_SCRIPT, 0, AMMO_TYPE_MGGRENADE, SPWEP_MG)
			DMGG A 1 Offset(0, 41)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 Offset(0, 50)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 Offset(0, 59)
			DMGG A 1 Offset(0, 68)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 2 Offset(0, 77)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 Offset(0, 68)
			DMGG A 1 Offset(0, 56)
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 Offset(0, 44)
			DMGG A 1 Offset(0, 32)
		Goto Ready
		NoAction:
			TNT1 A 0 A_GunFlash("FlashNorm", GFF_NOEXTCHANGE)
			DMGG A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		
		FireGrenade:
			DMGG A 1 Offset(0, 33) A_PlayWeaponSound("WeaponGL/Fire")
			DMGG A 1 Offset(0, 34) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MACHINEGUN, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP << 16), 0)
			DMGG A 2 Offset(0, 44)
			DMGG A 1 Offset(0, 41)
			DMGG A 1 Offset(0, 36)
			DMGG A 1 Offset(3, 40)
			DMGG A 1 Offset(6, 46) 
			DMGG A 1 Offset(8, 51)
			DMGG A 1 Offset(9, 54) A_PlaySound("WeaponGL/Open")
			DMGG A 1 Offset(10, 56)
			DMGG A 19 Offset(11, 58)
			DMGG A 3 Offset(13, 62) A_PlaySound("WeaponGL/In")
			DMGG A 3 Offset(11, 59)
			DMGG A 2 Offset(9, 54)
			DMGG A 3 Offset(6, 50)
			DMGG A 3 Offset(4, 45)
			DMGG A 2 Offset(3, 41) A_PlaySound("WeaponGL/Close")
			DMGG A 2 Offset(1, 36)
			DMGG A 2 Offset(0, 34)
		Goto Ready
	}
}

Actor WarnTimer : PowerDamage {
	powerup.duration 17
	damagefactor "normal", 1.0
}

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

Actor "Upgraded Machine Gun" : Chaingun
{
	Weapon.SelectionOrder 720
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the heavy machinegun!"	
    Obituary "%o was gunned down by %k's machinegun."
	Weapon.AmmoType1 "Clip"
	Weapon.AmmoType2 "MGClip2"
	Weapon.AmmoUse2 0
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Decal "BulletChip"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	Tag "$WEP_4_1_TAG"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 2.0
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	States
	{
		Spawn:
			WSG2 A -1
		Stop
		Ready:
			TNT1 A 0 A_JumpIfInventory("WeaponZoom", 1, "ZoomReady")
			SMG2 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		ZoomReady:
			SMG2 A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Goto Ready
		Deselect:
			TNT1 A 0 A_TakeInventory("WeaponZoom", 1)
			TNT1 A 0 A_ZoomFactor(1.0, ZOOM_NOSCALETURNING)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			SMG2 A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 25, 0, DND_WEAPON_HEAVYMACHINEGUN)
	    SelectLoop:
			SMG2 A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HEAVYMACHINEGUN, 1), "FireConfirmed")
			SMG2 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		FireConfirmed:
			TNT1 A 0 A_Jump(256, "Fire1", "Fire2")
		Fire1:
			SMG2 B 1 Bright A_AlertMonsters
			TNT1 A 0 A_PlayWeaponSound("weapons/mgfire2")
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2, 2), 0, 0, frandom(-2, 2))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 6, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HEAVYMACHINEGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP2 << 16), 0)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,11,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			SMG2 D 1 Bright
			SMG2 FG 1
		Goto FireEnd
		Fire2:
			SMG2 C 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/mgfire2")
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,11,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-2, 2), 0, 0, frandom(-2, 2))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 6, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_HEAVYMACHINEGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP2 << 16), 0)
			TNT1 A 0 Radius_Quake(1,2,0,1,0)
			SMG2 E 1 Bright
			SMG2 FG 1
		Goto FireEnd
		FireEnd:
			TNT1 A 0 A_JumpIfInventory("WeaponZoom", 1, "SkipAuto")
			SMG2 A 1 A_Refire
			SMG2 A 2	
		Goto Ready
		SkipAuto:
			SMG2 A 3
		Goto Ready
		AltFire:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_JumpIfInventory("WeaponZoomCooldown", 1, "Failed")
			TNT1 A 0 A_GiveInventory("WeaponZoomCooldown", 1)
			TNT1 A 0 A_JumpIfInventory("WeaponZoom", 1, "RevertZoom")
		    TNT1 A 0 A_GiveInventory("WeaponZoom", 1)
			TNT1 A 0 A_PlaySound("Weapons/Scope")
			SMG2 A 2 A_ZoomFactor(2.0, ZOOM_NOSCALETURNING)
		Goto Ready
		RevertZoom:
			TNT1 A 0 A_GiveInventory("WeaponZoomCooldown", 1)
		    TNT1 A 0 A_TakeInventory("WeaponZoom", 1)
			TNT1 A 0 A_PlaySound("Weapons/Scope")
			SMG2 A 2 A_ZoomFactor(1.0, ZOOM_NOSCALETURNING)
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIfInventory("MGClip2", 0, "Failed")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_HEAVYMACHINEGUN, 0), "ContinueReload")
			SMG2 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			SMG2 HIJKLMN 1
			TNT1 A 0 A_PlaySound("weapons/mg2clipout")
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			SMG2 O 16
			SMG2 PQR 2
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_HEAVYMACHINEGUN)
			TNT1 A 0 A_PlaySound("weapons/mg2clipin")
			SMG2 STU 2
			SMG2 VWXYZ 1
			TNT1 A 0 A_PlaySound("weapons/mg2ready")
			SMG2 A 4
		Goto Ready
		Failed:
			SMG2 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		ReloadFaster:
			TNT1 A 0 A_JumpIfInventory("MGClip2", 0, "Failed")
			SMG2 HJLN 1
			TNT1 A 0 A_PlaySound("weapons/mg2clipout")
			TNT1 A 0 A_FireCustomMissile("MGClip2Drop", frandom(-12.0, 12.0), 0, 0, 0)
			SMG2 O 8
			SMG2 PQR 1
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_HEAVYMACHINEGUN)
			TNT1 A 0 A_PlaySound("weapons/mg2clipin")
			SMG2 STU 1
			SMG2 VXZ 1
			TNT1 A 0 A_PlaySound("weapons/mg2ready")
			SMG2 A 4
		Goto Ready
		
		Flash:
		  TNT1 A 4 A_Light1
		  TNT1 A 3 A_Light2
		  TNT1 A 0 A_Light0
		  stop
	}
}

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

Actor "Upgraded Machine Gun2" : Weapon {
   	Weapon.SelectionOrder 450
   	Weapon.AmmoType1 "Clip"
   	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Weapon.AmmoType2 "MGClip3"
	Weapon.AmmoUse2 0
	Weapon.AmmoGive2 0
   	Weapon.Kickback 240
	Inventory.PickupMessage " "
	Weapon.SlotNumber 4
	Scale 0.8
	Tag "$WEP_4_2_TAG"
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 2.0
    Weapon.BobRangeY 0.4
    Weapon.BobRangeX 0.8
	+INVENTORY.UNDROPPABLE
   	+AMMO_OPTIONAL
	+WEAPON.NOAUTOAIM
   	States
   	{
	Spawn:
		QWOP A -1
		Stop
  	Ready:
		TNT1 A 0 A_GiveInventory("LeadSoundChecker", 1)
	ReadyLoop:
      	QUAG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
   	Deselect:
		QUAH A 0 A_StopSoundEx("Weapon")
		TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
		TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
      	QUAG A 1 A_Lower
		TNT1 A 0 A_Lower
      	Loop
	Select:
		TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
		TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
		TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 16, 0, DND_WEAPON_LEADSPITTER)
	SelectLoop:
      	QUAG A 1 A_Raise
		TNT1 A 0 A_Raise
      	Loop
	Fire:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_LEADSPITTER, 1), "FireConfirmed")
		QUAG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Reload
	FireConfirmed:
		QUAG A 0 A_PlaySound("Leadspitter/fireloop", CHAN_WEAPON, 1.0, 1)
		TNT1 A 0 A_GiveInventory("LeadTimer", 1)
		TNT1 A 0 A_SpawnItemEx ("leadspittercasing",cos(pitch)*20,11,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
		TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20, 4,37+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
		TNT1 AA 0 A_FireCustomMissile("LeadSpitterTracer", frandom(-5, 5), 0, 0, frandom(-4, 4))
		TNT1 A 0 A_JumpIfInventory("LeadAnim", 1, "OtherAnim")
		QUAF A 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_LEADSPITTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP3 << 16), DND_ATF_CANFIRECIRCLE)
		TNT1 A 0 A_SpawnItemEx ("leadspittercasing",cos(pitch)*20,11,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
		TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20, 4,37+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
		TNT1 AA 0 A_FireCustomMissile("LeadSpitterTracer", frandom(-5, 5), 0, 0, frandom(-4, 4))
		QUAF B 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_LEADSPITTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP3 << 16), DND_ATF_CANFIRECIRCLE)
		TNT1 A 0 A_GiveInventory("LeadAnim", 1)
	AnimFinish:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "NoRecoil")
		TNT1 A 0 A_Recoil(0.35)
	NoRecoil:
		TNT1 A 0 A_SetPitch(pitch - 0.8)
		QUAG B 2
		QUAG A 0 A_Refire
		QUAG A 0 A_PlaySound("Leadspitter/firetail", CHAN_WEAPON, 1.0, 0)
	Goto Ready
	OtherAnim:
		QUAF C 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_LEADSPITTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP3 << 16), DND_ATF_CANFIRECIRCLE)
		TNT1 A 0 A_SpawnItemEx ("leadspittercasing",cos(pitch)*20,11,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
		TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20, 4,37+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
		TNT1 AA 0 A_FireCustomMissile("LeadSpitterTracer", frandom(-5, 5), 0, 0, frandom(-4, 4))
		QUAF D 1 BRIGHT ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_LEADSPITTER, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP3 << 16), DND_ATF_CANFIRECIRCLE)
		TNT1 A 0 A_TakeInventory("LeadAnim", 1)
	Goto AnimFinish
	Dryfire:
		QUAG B 0 A_StopSoundEx("Weapon")
		QUAG B 0 A_PlaySoundEx("Leadspitter/dryfire","SoundSlot5")
		QUAG BAAA 3
	Reload:
		QUAG A 0 A_JumpIfInventory("MGClip3", 0, "NoReload")
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_LEADSPITTER, 0), "ContinueReload")
	NoReload:
		QUAG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	ContinueReload:
		TNT1 A 0 A_GiveInventory("LeadSoundChecker", 1)
		QUAR A 1 A_PlaySoundEx("Leadspitter/burst","SoundSlot5")
		TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "DoReloadFaster")
		QUAR BC 1
		QUAR D 10
		QUAR EFGH 2
		QUAR I 2 A_PlayWeaponSound("Leadspitter/eject")
		QUAR JKLMNOPQ 2
		QUAR R 25
		QUAR QPON 2
		TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_LEADSPITTER)
		QUAR M 3 A_PlayWeaponSound("Leadspitter/reload")
		QUAR LKJIHGFEDBCA 3
		Goto Ready
	DoReloadFaster:
		QUAR B 1
		QUAR D 5
		QUAR EFGH 1
		QUAR I 1 A_PlayWeaponSound("Leadspitter/eject")
		QUAR JKLMNOPQ 1
		QUAR R 12
		QUAR QPON 1
		TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_LEADSPITTER)
		QUAR M 2 A_PlayWeaponSound("Leadspitter/reload")
		QUAR LKJIHGFEDBCA 2
		Goto Ready
   	}
}

Actor LeadAnim : DnD_Boolean { }

Actor LeadTimer : PowerDamage {
	powerup.duration 40
	damagefactor "Normal", 1.0
}

Actor LeadSoundChecker : DND_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIFInventory("LeadTimer", 1, "StopSound")
		Stop
		StopSound:
			TNT1 A 0 A_PlaySound("Leadspitter/firetail", CHAN_WEAPON, 1.0, 0)
		Stop
	}
}

Actor LeadBulletPuff : DnD_BasePuff {
	Renderstyle "Add"
	Alpha 0.6
	Scale 0.1
	Stamina 4096
	Decal "LeadBulletDecal"
	var int user_scaler;
	States {
		Spawn:
		Crash:
		Melee:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 A 0 A_SetUserVar("user_scaler", 1) 
			TNT1 a 0 A_Jump(255,"Type1","Type2","Type3","Type4","Type5","Type6","Type7","Type8")
		Type1:
			DB21 ABCDEFGHI 1 Bright A_SetScale(scaleX + user_scaler * 0.01)
		Stop
		Type2:
			DB21 JKLMNOPQR 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type3:
			DB22 ABCDEFGHI 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type4:
			DB22 JKLMNOPQR 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type5:
			DB23 ABCDEFGHI 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type6:
			DB23 JKLMNOPQR 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type7:
			DB24 ABCDEFGHI 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
		Type8:
			DB24 JKLMNOPQR 1 Bright A_SetScale(scaleX+user_scaler * 0.01)
		Stop
	}
}

Actor "Upgraded Machine Gun3" : Weapon {
	Weapon.UpSound ""
	Weapon.AmmoType1 "DSealAmmo"
	Weapon.AmmoType2 "DSealAmmo"
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.SlotNumber 4
	Obituary "%o was sealed away by %k."
	Decal ""
	Tag "$WEP_4_3_TAG"
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.8
    Weapon.BobRangeY 0.5
    Weapon.BobRangeX 0.7
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "ReadyAmmo")
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, "ReadyAmmo")
		ReadyNoAmmo:
			JPLA A 1 A_WeaponReady(WRF_NOFIRE)
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, "LoadAmmo")
		Loop
		LoadAmmo:
			TNT1 A 0 A_PlaySound("jpcpplasmarifle/idle", 7, 0.3, 1, 1.4)
			JPLA BC 1
		Goto Ready
		ReadyAmmo:
			TNT1 A 0 A_PlaySound("jpcpplasmarifle/idle", 7, 0.3, 1, 1.4)
		ReadyAmmoLoop:
			JPLA C 1 A_WeaponReady
		Loop

		Select:
			TNT1 A 0 A_GiveInventory("P_RedFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 18, 0, DND_WEAPON_DEMONSEALER)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 150, 0, DND_WEAPON_DEMONSEALER)
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, "SelectAmmo")
		SelectLoop:
			JPLA A 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		SelectAmmo:
			JPLA C 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			TNT1 A 0 A_TakeInventory("P_RedFire", 1)
			TNT1 A 0 A_StopSound(7)
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, "DeselectAmmo")
		DeselectLoop:
			JPLA A 1 A_Lower
			"####" "#" 0 A_Lower
		Loop
		DeselectAmmo:
			JPLA C 1 A_Lower
			"####" "#" 0 A_Lower
		Loop


		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEMONSEALER, 0), "FireConfirmed")
		Dryfire:
			JPLA A 6 A_PlaySound("weapons/dryfire1", 5, 1, 0, 1.25)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlaySound ("jpcpplasmarifle/fire", CHAN_WEAPON, 1, 0, 0.8)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DEMONSEALER, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_DEMONSEAL << 16), 0)
		FireDone:
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, 2)
			TNT1 A 0 A_StopSound(7) // Doesn't hum if there's no amulets loaded in it
			JPLA D 1 Bright A_SetPitch(pitch - 0.1)
			TNT1 A 0 A_Jump (256, "FireAnimation1", "FireAnimation2")
		FireAnimation1:
			JPLA E 1 Bright A_SetPitch(pitch + 0.06)
			JPLA F 1 Bright A_SetPitch(pitch + 0.03)
			JPLA G 1 Bright A_SetPitch(pitch + 0.01)
		Goto FireEnd
		FireAnimation2:
			JPLA H 1 Bright A_SetPitch(pitch + 0.06)
			JPLA I 1 Bright A_SetPitch(pitch + 0.03)
			JPLA J 1 Bright A_SetPitch(pitch + 0.01)
		Goto FireEnd
		FireEnd:
			TNT1 A 0 A_JumpIfInventory ("DSealAmmo", 1, 1)
		Goto Ready
			JPLA ABC 1
			JPLA CCCCCCCCCC 1 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DEMONSEALER, 1), "AltFireConfirmed")
			JPLA A 2
		Goto DryFire
		AltFireConfirmed:
			JPLA D 1 Bright Offset(-1, 32)
			JPLA D 1 Bright Offset(1, 33)
			JPLA D 1 Bright Offset(-2, 32)
			JPLA D 1 Bright Offset(0, 31)
			JPLA D 1 Bright Offset(1, 32)
			JPLA D 1 Bright Offset(2, 33)
			JPLA D 1 Bright Offset(2, 34)
			JPLA D 1 Bright Offset(-1, 33)
			JPLA D 1 Bright Offset(0, 32)
			JPLA D 1 Bright Offset(1, 32)
			JPLA D 1 Bright Offset(-2, 33)
			JPLA D 1 Bright Offset(-1, 32)
			JPLA D 1 Bright Offset(1, 31)
			JPLA D 1 Bright Offset(1, 32)
			JPLA D 1 Bright Offset(-2, 33)
			JPLA D 1 Bright Offset(2, 34)
			JPLA D 1 Bright Offset(-1, 33)
			JPLA D 1 Bright Offset(0, 32) A_GunFlash
			JPLA D 1 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH | WRF_NOBOB)
			TNT1 A 0 A_PlaySound ("jpcpplasmarifle/fire", CHAN_WEAPON, 1, 0, 0.8)
			JPLA D 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DEMONSEALER, DND_ATK_SECONDARY, DND_AMMOSLOT_CLIP | (AMMO_DEMONSEAL << 16), 0)
			TNT1 A 0 A_Jump (256, "FireAnimation1", "FireAnimation2")
		Goto FireAnimation1
		FailFire:
			JPLA C 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready

		Flash:
			TNT1 A 1 A_Light2
			TNT1 A 1 A_Light1
			TNT1 A 0 A_Light0
		Goto LightDone
	}
}

Actor DemonSealCard : DnD_BaseProjectile {
	Radius 6
	Height 6
	Speed 48
	
	Damage(
		DND_WEAPON_DEMONSEALER |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_MAGICSEAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 4
	
	+FORCEXYBILLBOARD
	+BLOODLESSIMPACT
	+EXPLODEONWATER
	RenderStyle Translucent
	Alpha 1.0
	Scale 0.6
	States {
		SpawnState:
			OFUD A 1 Bright Light("FDOfudaGlow") A_SpawnItemEx("DemonSealTrail", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
		Loop
		XDeath:
			TNT1 A 0 A_CheckFlag ("ISMONSTER", "TracerApplication", AAPTR_TRACER)
		Death:
			TNT1 A 1
		Goto DeathAnimation

		TracerApplication:
			TNT1 A 0 A_GiveInventory("DemonSealDebuffGiver", 1, AAPTR_TRACER)
		DeathAnimation:
			TNT1 A 0 A_SpawnItemEx("DemonSealImpactFX", 0,0,0, 0,0,0, 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner3")
		Stop
	}
}

actor DemonSealTrail {
    Scale 0.6
    RenderStyle Add
    Alpha 0.65
    +FORCEXYBILLBOARD
    +NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
			OFUD BCDEFG 1 A_FadeTo (0, 0.08, 1)
        Stop
    }
}

actor DemonSealImpactFX : DemonSealTrail {
    Alpha 0.95
    States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound ("jpcpplasmarifle/hit", CHAN_AUTO, 0.5, 0, 1.2)
			OFUD HIJK 3 Bright
			OFUD LM 3
		Stop
    }
}

actor DemonSealKanji : DemonSealTrail {
    Scale 0.8
    Alpha 0.9
    States {
		Spawn:
			KANJ ABCABCABC 3 Bright
		EndLoop:
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
		Loop
    }
}

Actor DemonSealDetectionSpawner : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(0), 48 * sin(0), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(90), 48 * sin(90), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(180), 48 * sin(180), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(270), 48 * sin(270), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(45), 48 * sin(45), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(135), 48 * sin(135), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(225), 48 * sin(225), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, -24, 48 * cos(315), 48 * sin(315), 0, 0, SXF_SETMASTER)
		
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(0), 48 * sin(0), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(90), 48 * sin(90), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(180), 48 * sin(180), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(270), 48 * sin(270), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(45), 48 * sin(45), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(135), 48 * sin(135), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(225), 48 * sin(225), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 0, 48 * cos(315), 48 * sin(315), 0, 0, SXF_SETMASTER)
			
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(0), 48 * sin(0), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(90), 48 * sin(90), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(180), 48 * sin(180), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(270), 48 * sin(270), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(45), 48 * sin(45), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(135), 48 * sin(135), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(225), 48 * sin(225), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 24, 48 * cos(315), 48 * sin(315), 0, 0, SXF_SETMASTER)
			
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(0), 48 * sin(0), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(90), 48 * sin(90), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(180), 48 * sin(180), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(270), 48 * sin(270), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(45), 48 * sin(45), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(135), 48 * sin(135), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(225), 48 * sin(225), 0, 0, SXF_SETMASTER)
			TNT1 A 0 A_SpawnItemEx("DemonSealDetector", 0, 0, 48, 48 * cos(315), 48 * sin(315), 0, 0, SXF_SETMASTER)
		Stop
	}
}

Actor DemonSealTrap {
	Height 32
	Radius 16
	Renderstyle Add
	DamageType "MagicSealing"
	Alpha 0.9
	Scale 1.1
	ReactionTime 40
	+NOGRAVITY
	+FLOATBOB
	-TELESTOMP
	+DONTSPLASH
	+BLOODLESSIMPACT
	+FORCEXYBILLBOARD
	States {
		Spawn:
			KANJ A 3 Bright
			TNT1 A 0 A_PlaySound("jpcpplasmarifle/idle", 7, 0.3, 1, 1.4)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeVelocity(0, 0, 0, CVF_REPLACE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Sync Hack Immediate", x, y, z)
		SpawnLoop:
			TNT1 A 0 A_GiveInventory("DemonSealDetectionSpawner", 1)
			KANJ B 3 Bright Light("FDOfudaRedFlash0") A_JumpIfInventory("DnD_Boolean", 1, "DemonDetected")
			TNT1 A 0 A_GiveInventory("DemonSealDetectionSpawner", 1)
			KANJ C 3 Bright Light("FDOfudaRedFlash1") A_JumpIfInventory("DnD_Boolean", 1, "DemonDetected")
			TNT1 A 0 A_GiveInventory("DemonSealDetectionSpawner", 1)
			KANJ A 3 Bright Light("FDOfudaRedFlash2") A_JumpIfInventory("DnD_Boolean", 1, "DemonDetected")
			TNT1 A 0 A_Countdown
		Loop
		DemonDetected:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Kanji Explosion", x, y, z)
			TNT1 A 0 A_PlaySound ("jpcpplasmarifle/hit", CHAN_AUTO, 0.5, 0, 1.2)
		Death:
			TNT1 A 0 A_StopSound(7)
		DeathLoop:
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ A 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ B 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
			TNT1 A 0 A_FadeTo (0, 0.08, 1)
			KANJ C 1 Bright A_SetScale (scalex * 0.90, scaley * 0.99)
		Loop
	}
}

Actor DemonSealExplosion : DnD_ExplosiveBase {
	DamageType "MagicSealing"
	Speed 0
	+THRUACTORS
	+FORCERADIUSDMG
	+FOILINVUL
	States {
		SpawnState:
			TNT1 A 1
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_DEMONSEALER |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_MAGICSEAL << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 144)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_CULL)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 0 A_SpawnItemEx("DemonSealWhoosh", 0,0,6, 0,0,0, 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("SealedDemonFX", 0, 0, 6, 0, 0, 2, 0, SXF_NOCHECKPOSITION)
			TNT1 A 5 A_PlaySound ("jpcpplasmarifle/seal", CHAN_AUTO, 1, 0, 0.8)
		Stop
	}
}

Actor DemonSealDetector {
	PROJECTILE
	Damage 0
	Speed 48
	Height 24
	Radius 8
	Species "Player"
	+THRUSPECIES
	+HITTRACER
	+DONTBLAST
	+DONTSPLASH
	+BLOODLESSIMPACT
	States {
		Spawn:
			TNT1 A 2
		Stop
		Death:
			TNT1 A 1
		Stop
		XDeath:
			TNT1 A 2 A_CheckFlag ("ISMONSTER", "Alert", AAPTR_TRACER)
		Stop
		Alert:
			TNT1 A 4 ACS_NamedExecuteWithResult("DnD Kanji Detect")
		Stop
	}
}

actor DemonSealWhoosh {
    Scale 1.3
	Alpha 0.99
	+CLIENTSIDEONLY
	+NOINTERACTION
    States {
		Spawn:
		SpawnLoop:
			TNT1 A 0 A_FadeTo (0, 0.05, 1)
			TNT1 A 0 A_SpawnItemEx("RedMagicSpark", 0, 0, height / 2 + frandom(-16.0, 16.0), frandom(-2.4, 2.4), frandom(-2.4, 2.4), frandom(-1.2, 2.4), 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf (alpha <= 0.2, "GlowLevel4")
			TNT1 A 0 A_JumpIf (alpha <= 0.4, "GlowLevel3")
			TNT1 A 0 A_JumpIf (alpha <= 0.6, "GlowLevel2")
			TNT1 A 0 A_JumpIf (alpha <= 0.8, "GlowLevel1")
		GlowLevel0:
			OGLP C 1 Bright Light("FDOfudaRedFlash0") A_SetScale (scalex * frandom(0.92,0.95))
		Goto SpawnLoop
		GlowLevel1:
			OGLP C 1 Bright Light("FDOfudaRedFlash1") A_SetScale (scalex * frandom(0.92,0.95))
		Goto SpawnLoop
		GlowLevel2:
			OGLP C 1 Bright Light("FDOfudaRedFlash2") A_SetScale (scalex * frandom(0.92,0.95))
		Goto SpawnLoop
		GlowLevel3:
			OGLP C 1 Bright Light("FDOfudaRedFlash3") A_SetScale (scalex * frandom(0.92,0.95))
		Goto SpawnLoop
		GlowLevel4:
			OGLP C 1 Bright Light("FDOfudaRedFlash4") A_SetScale (scalex * frandom(0.92,0.95))
		Goto SpawnLoop
    }
}

actor DemonSealWhoosh2 : DemonSealWhoosh {
    Scale 1.0
    States {
		Spawn:
			TNT1 A 37
		SpawnLoop:
			TNT1 A 0 A_FadeTo (0, 0.09, 1)
			TNT1 A 0 A_SpawnItemEx("BlueMagicSpark", 0, 0, height / 2 + frandom(-16.0, 16.0), frandom(-2.4, 2.4), frandom(-2.4, 2.4), frandom(-1.2, 2.4), 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_JumpIf (alpha <= 0.2, "GlowLevel4")
			TNT1 A 0 A_JumpIf (alpha <= 0.4, "GlowLevel3")
			TNT1 A 0 A_JumpIf (alpha <= 0.6, "GlowLevel2")
			TNT1 A 0 A_JumpIf (alpha <= 0.8, "GlowLevel1")
		GlowLevel0:
			OGLP D 1 Bright Light("FDOfudaBlueGlow0") A_SetScale (scalex * frandom(0.82,0.85))
		Goto SpawnLoop
		GlowLevel1:
			OGLP D 1 Bright Light("FDOfudaBlueGlow1") A_SetScale (scalex * frandom(0.82,0.85))
		Goto SpawnLoop
		GlowLevel2:
			OGLP D 1 Bright Light("FDOfudaBlueGlow2") A_SetScale (scalex * frandom(0.82,0.85))
		Goto SpawnLoop
		GlowLevel3:
			OGLP D 1 Bright Light("FDOfudaBlueGlow3") A_SetScale (scalex * frandom(0.82,0.85))
		Goto SpawnLoop
		GlowLevel4:
			OGLP D 1 Bright Light("FDOfudaBlueGlow4") A_SetScale (scalex * frandom(0.82,0.85))
		Goto SpawnLoop
    }
}

actor SealedDemonFX {
    Scale 0.6
    RenderStyle Translucent
    Alpha 1.0
	Mass 0x7FFFFFFF
	Gravity 0.2
	+CLIENTSIDEONLY
    States {
		Spawn:
			OFUD N 1 Light("FDOfudaSoftGlow")
		MonsterUnsealed:
			TNT1 A 0 A_Jump (256, 1,2,3)
			TNT1 AAAA 0 
			TNT1 A 0 A_Jump (256, 1,2,3)
			TNT1 AAAAAAAAA 0 
			TNT1 A 0 A_Jump (256, 1,2,3)
			TNT1 AAAAAAAAAAA 0 
			TNT1 A 0 A_Jump (256, 1,2,3)
			TNT1 AAAAAA 0 
		MonsterUnsealedParticlesDone:
			TNT1 A 0
        Stop
    }
}

Actor DemonSealDebuffGiver : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfHealthLower(1, "Nothing")
			TNT1 A 0 A_CheckFlag("INVULNERABLE", "Nothing")
			TNT1 A 0 A_CheckFlag("FRIENDLY", "Nothing")
			TNT1 A 0 ACS_NamedExecuteAlways("DND Demon Seal FX")
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

actor DemonSealDebuffFXSpawner {
	+NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0 NoDelay A_SpawnItemEx("DemonSealVFX", frandom(-20.0,20.0),frandom(-20.0,20.0),frandom(0.0,50.0), 0,0,0, 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_SpawnItemEx("DemonSealDebuffParticle", frandom(-42.0, 42.0),frandom(-42.0,42.0),frandom(40.0,68.0), 0,0,-2, 0, SXF_NOCHECKPOSITION)
			TNT1 A 1 Light("FDNeutronRedGlow")
		Stop
    }
}

Actor DemonSealResistDebuff : PowerProtection {
	DamageFactor "Normal", 1.0
	Powerup.Duration -6
}

Actor DemonSealDamageDebuff : PowerDamage {
	DamageFactor "Normal", 1.0
	Powerup.Duration -6
}

actor DemonSealVFX {
    Scale 0.2
    RenderStyle Add
    Alpha 0.85
    +FORCEXYBILLBOARD
    +NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0 NoDelay Thing_ChangeTID(0, SPECIAL_FX_TID)
			JDBF B 1 A_FadeTo (0, 0.13, 1)
        Wait
    }
}

actor DemonSealDebuffParticle {
    Scale 0.3
    RenderStyle Add
    Alpha 0.85
    +FORCEXYBILLBOARD
	+NOGRAVITY
	+THRUACTORS
    +NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0
			JDBF A 1 Bright Light("FDDebuffSmallRedGlow") A_FadeTo (0, 0.03, 1)
		Wait
    }
}

Actor Desolator : Weapon {
	Weapon.UpSound ""
	Weapon.AmmoType1 "DesolatorAmmo"
	Weapon.AmmoType2 "DesolatorOverheat"
	Weapon.AmmoUse 0
	Weapon.AmmoGive1 30
	Weapon.SlotNumber 4
	Decal "DesolatorDecal"
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.8
    Weapon.BobRangeY 0.5
    Weapon.BobRangeX 0.7
	Tag "$WEP_4_9_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			TNT1 A 0 A_GiveInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Overheat Reduction", 0, DND_OVERHEAT_DESOLATOR, 1 | (3 << 16))
		ReadyAmmoCheck:
			TNT1 A 0 A_JumpIfInventory ("DesolatorAmmo", 1, "ReadyAmmo")
		ReadyNoAmmo:
			DES4 B 1 A_WeaponReady(WRF_NOFIRE)
		Goto ReadyAmmoCheck
		ReadyAmmo:
			DES4 A 1 A_WeaponReady
		Loop

		Select:
			TNT1 A 0 A_GiveInventory("P_GreenFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 30, 0, DND_WEAPON_DESOLATOR)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 80, 0, DND_WEAPON_DESOLATOR)
			TNT1 A 0 A_JumpIfInventory ("DesolatorAmmo", 1, "SelectAmmo")
		SelectLoop:
			DES4 B 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		SelectAmmo:
			DES4 A 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			TNT1 A 0 A_TakeInventory("P_GreenFire", 1)
			TNT1 A 0 A_JumpIfInventory ("DesolatorAmmo", 1, "DeselectAmmo")
		DeselectLoop:
			DES4 B 1 A_Lower
			"####" "#" 0 A_Lower
		Loop
		DeselectAmmo:
			DES4 A 1 A_Lower
			"####" "#" 0 A_Lower
		Loop

		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DESOLATOR, 0), "FireConfirmed")
			DES4 A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			DES4 C 1 A_TakeInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 A_PlaySound("Desolator/RevUp", 5)
			DES4 C 9
			DES4 D 9
			DES4 E 8
			DES4 F 7
			DES4 G 6
			DES4 H 5
			DES4 I 4
		Refire_P:
			DES4 G 3
			DES4 H 2
		Refire_N:
			DES4 I 1
		FireLoop:
			DES4 J 1 Bright
			TNT1 A 0 A_PlaySound("Desolator/Fire", 6, 0.825)
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("DesolatorCasing",cos(pitch)*28,-2,32+(sin(-pitch)*20),0,-8,random(4,10),0,0,0)
			TNT1 A 0 A_FireCustomMissile("GreenTracer", frandom(-8.4, 8.4),0,6,0,0, frandom(-6.2, 6.2))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_DESOLATOR, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_DESOLATOR << 16), 0)
			TNT1 A 0 A_GiveInventory("DesolatorCooldownGiver", 1)
			TNT1 A 0 A_GunFlash
			DES4 K 1 Bright
			DES4 L 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DESOLATOR, 1), "FireLoop")
			DES4 L 1
		RevDown:
			TNT1 A 0 A_PlaySound("Desolator/RevDown", 5)
			DES4 M 4
			DES4 N 5 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DESOLATOR, 1), "Refire_N")
			DES4 OO 3 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DESOLATOR, 1), "Refire_N")
			DES4 PP 3 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_DESOLATOR, 1), "Refire_P")
			DES4 P 1
			DES4 Q 8
		Goto Ready
		Nothing:
			DES4 A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready

		Flash:
			TNT1 A 2 A_Light2
			TNT1 A 2 A_Light1
			TNT1 A 0 A_Light0
		Goto LightDone
	}
}

Actor DesolatorCooldownGiver : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("DesolatorOverHeat", 0, "Give")
		Stop
		Give:
			TNT1 A 0 A_GiveInventory("DesolatorCooldown", 1)
		Stop
	}
}

Actor DesolatorCooldown : PowerDamage {
	powerup.duration -4
	damagefactor "normal", 1.0
}

Actor DesolatorPuff : DnD_BasePuff {
	Renderstyle "Add"
	Alpha 1.0
	Scale 0.575
	Stamina 4096
	States {
		Spawn:
			TNT1 AAAA 0
			TNT1 A 0 A_SpawnItemEx("DesolatorPuff_FX")
			TNT1 A 1 A_JumpIfInventory("DesolatorStackCounter", 0, "Stack5", AAPTR_TRACER)
		Stop
		Stack5:
			TNT1 A 0 A_JumpIfInTargetInventory("DnD_CritToken", 1, "Crit")
			TNT1 A 0 A_CustomMissile("DesolatorExplosion", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 1 A_SpawnItemEx("DesolatorExplosionFX")
		Stop
		Crit:
			TNT1 A 0 A_CustomMissile("DesolatorExplosion_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 1 A_SpawnItemEx("DesolatorExplosionFX")
		Stop
		Crash:
		Melee:
		HitNoBlood:
			TNT1 A 1 A_SpawnItemEx("DesolatorPuff_FX")
		Stop
	}
}

Actor DesolatorExplosion : DnD_ExplosiveBase {
	Speed 0
	+FORCERADIUSDMG
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_DESOLATOR |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_DESOLATOR << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor DesolatorExplosion_Crit : DesolatorExplosion {
	Accuracy 69
}

Actor DesolatorPuff_FX {
	Renderstyle "Add"
	Alpha 1.0
	Scale 0.575
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			TNT1 A 0 NoDelay A_PlaySound("Desolator/Hit")
			DES5 AB 2 Bright
			DES5 CDEFGH 3 Bright
		Stop
	}
}

Actor DesolatorDebuffFXApply : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfHealthLower(1, "Nothing")
			TNT1 A 0 A_CheckFlag("INVULNERABLE", "Nothing")
			TNT1 A 0 A_CheckFlag("FRIENDLY", "Nothing")
			TNT1 A 0 ACS_NamedExecuteAlways("DND Desolator Debuff FX")
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

actor DesolatorDebuffFXSpawner {
	+NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0 NoDelay A_SpawnItemEx("DesolatorDebuffParticle", frandom(-42.0, 42.0),frandom(-42.0,42.0),frandom(40.0,68.0), 0,0,-2, 0, SXF_NOCHECKPOSITION)
			TNT1 A 1
		Stop
    }
}

Actor DesolatorStackTimer : DnD_Info { 
	inventory.maxamount 210
}

Actor DesolatorStackCounter : DnD_Info {
	inventory.maxamount 5
}

actor DesolatorDebuffParticle {
    Scale 0.3
    RenderStyle Add
    Alpha 0.85
    +FORCEXYBILLBOARD
	+NOGRAVITY
	+THRUACTORS
    +NOINTERACTION
	+CLIENTSIDEONLY
    States {
		Spawn:
			TNT1 A 0
			DES5 K 1 Bright Light("DesolatorGreenGlow") A_FadeTo (0, 0.03, 1)
		Wait
    }
}

Actor DesolatorScriptRunning : Inventory {
	inventory.maxamount 2
}

// Sprites / most of decorate by DoomNukem
actor " Minigun " : Chaingun {
	Weapon.AmmoUse 0
	Weapon.AmmoGive 40
	Weapon.AmmoType "Clip"
	Weapon.SlotNumber 4
	Weapon.SelectionOrder 775
	Weapon.Kickback 125
	Inventory.PickupSound "misc/w_pkup"
	Inventory.PickupMessage "You got the chaingun!"
	Obituary "%o didn't quite make through %k's Minigun bullet storm."
	+NOALERT
	+NOAUTOAIM
	Tag "$WEP_4_10_TAG"
	Scale 1.1
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.4
    Weapon.BobRangeY 0.5
    Weapon.BobRangeX 1.1
	States {
		Ready:
		    TNT1 A 0
			TNT1 A 0 A_StopSound(5)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			TNT1 A 0 A_TakeInventory("MinigunCanCancel", 1)
		ReadyLoop:
			CHNG A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			TNT1 A 0 A_StopSound(1)
			TNT1 A 0 A_StopSound(5)
		DeselectLoop:
			CHNG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 4, 4 | (7 << 16), DND_WEAPON_MINIGUN)
	    SelectLoop:
			CHNG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 0, 5), "FireConfirmed")
			CHNG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_JumpIFInventory("MinigunSpin", 1, "ToastMcFire")
			CHNG A 0 A_PlaySound("Throttle/WindUp",5,0.8)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_AlertMonsters
			CHNG ABCDEFG 1
			TNT1 A 0 A_GiveInventory("MinigunFiring", 1)
			CHNG ACEGACEGACEGACEGACEG 1
		Goto ToastMcFire
		ToastMcFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Unique Player Property", PUP_KNOCKBACKIMMUNE), "ToastMcFireNoRecoil")
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			CHNF A 0 A_PlaySound("Throttle/Fire",CHAN_WEAPON,0.8,1)
			CHNF A 0 A_PlaySound("Throttle/Add",5,0.9,1)
			CHNF A 0 A_Quake(3,8,0,2,"none")

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_AlertMonsters
			CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 1 Bright A_SetPitch(Pitch-0.35)
			TNT1 A 0 A_GiveInventory("MinigunFiring", 1)

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF B 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF C 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			//CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF D 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF E 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			//CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF F 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF G 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			CHNF A 0 A_AlertMonsters
			//CHNF A 0 A_GunFlash
			CHNF A 0 A_Recoil(0.2)
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF H 1 Bright
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNF H 1 Bright
		Goto WindDownAfterFire
		
		ToastMcFireNoRecoil: // copied here to reduce load on server with many if checks
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			CHNF A 0 A_PlaySound("Throttle/Fire",1,0.8,1)
			CHNF A 0 A_PlaySound("Throttle/Add",5,0.9,1)
			CHNF A 0 A_Quake(3,8,0,2,"none")

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_AlertMonsters
			CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 1 Bright A_SetPitch(Pitch-0.35)
			TNT1 A 0 A_GiveInventory("MinigunFiring", 1)

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF B 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF C 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			//CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF D 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF E 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			//CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF F 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
			CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF G 1 Bright

			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),1,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 A_FireCustomMissile("Tracer",0.035*frandom(300,-300),0,6,0,0,0.035*frandom(150,-150))
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MINIGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), DND_ATF_NOAMMOTAKE | DND_ATF_NOAMMOGAINCHECK)

			CHNF A 0 A_AlertMonsters
			//CHNF A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx ("bulletcasing",cos(pitch)*20,12,32+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			CHNF A 0 A_SetAngle(Angle-0.25)
			CHNF A 0 A_SetPitch(Pitch-0.35)
			CHNF H 1 Bright
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFireNoRecoil")
			CHNF H 1 Bright
		Goto WindDownAfterFire
		
		/*NoMoreMangling:
			CHNG A 0 A_PlaySound("Throttle/Dry",1,0.8,1)
			CHNG A 0 A_StopSound(5)
			TNT1 A 0 A_AlertMonsters
			CHNG ACEGACEGACEGACEG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto WindDown*/
		WindDownAfterFire:
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			TNT1 A 0 A_GiveInventory("MinigunSpin", 1)
			TNT1 A 0 A_GiveInventory("MinigunCanCancel", 1)
			CHNE A 0 A_StopSound(1)
			CHNE A 0 A_StopSound(5)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNE A 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_PlaySound("Throttle/WindDown",1,0.8)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNE B 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNE A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNE C 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG G 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG A 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG C 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG E 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG G 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG A 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG C 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG E 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG G 1 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,2,36+(sin(-pitch)*20),frandom(-0.5, 0.5), frandom(-0.75, 0.75), 2,0,0,0)
			TNT1 A 0 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH | WRF_NOPRIMARY)
			CHNG A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			CHNG BC 1
			CHNG D 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG EF 1
			CHNG G 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG AB 1
			CHNG C 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG DE 1
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 1)
			CHNG FFGG 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG ABBC 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG C 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG CDDD 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG EEEF 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG F 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG FFGG 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG G 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG GAAA 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG BBBB 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG C 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG CCCC 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG D 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG DDDD 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG EEEE 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG F 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG FFFF 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG F 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG GGGG 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
			CHNG G 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG GGG 1 A_WeaponReady(WRF_NOPRIMARY | WRF_NOSWITCH)
		Goto Ready
		WindDown:
			CHNG A 0 A_StopSound(5)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			CHNG A 0 A_PlaySound("Throttle/WindDown",1,0.8)
			CHNG A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG C 1
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG G 1
			CHNG A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG C 1
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG G 1
			CHNG A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG C 1
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "ToastMcFire")
			CHNG G 1
			CHNG AB 1
			CHNG C 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG DE 1
			CHNG F 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG GA 1
			CHNG B 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG CD 1
			CHNG E 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 1, 5), "FireConfirmed")
			CHNG FFGGAABBCCCDDDEEEEFFFFGGGGAAAABBBBCCCCCDDDDDEEEEEFFFFFFGGGGGGGG 1 A_WeaponReady(WRF_NOSWITCH)
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MINIGUN, 0, 5), "AltfireConfirmed")
			CHNG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltfireConfirmed:
			CHNG A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_JumpIfInventory("MinigunCanCancel", 1, "CancelMidSpin")
			TNT1 A 0 A_PlaySound("Throttle/WindUp",5,0.8)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_JumpIfInventory("MinigunSpin", 1, "HackedAltfire")
			TNT1 A 0 A_AlertMonsters
			CHNG BCDEFGACEGACEGACEGACEGACEG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
			TNT1 A 0 A_GiveInventory("MinigunFiring", 1)
			TNT1 A 0 A_GiveInventory("MinigunSpin", 1)
			TNT1 A 0 A_Refire
			CHNG A 0 A_PlaySound("Throttle/WindDown",1,0.8)
			CHNG FFGGAABBCCCDDDEEEEFFFFGGGG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOSECONDARY)
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
		Goto Ready
		HackedAltFire:
			TNT1 A 0 A_PlaySound("Throttle/Loop",5,0.8)
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_AlertMonsters
			CHNG ACEGACEGACEGACEGACEG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOSECONDARY)
			TNT1 A 0 A_Refire("HackedAltFire")
		StopAlt:
			TNT1 A 0 A_StopSound(5)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 1)
			CHNG A 0 A_PlaySound("Throttle/WindDown",1,0.8)
			CHNG FFGGAABBCCCDDDEEEEFFFFGGGG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOSECONDARY)
			TNT1 A 0 A_TakeInventory("MinigunSpin", 1)
			TNT1 A 0 A_TakeInventory("MinigunFiring", 1)
			CHNG AAAABBBBCCCCCDDDDDEEEEEFFFFFFGGGGGGGG 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOSECONDARY)
		Goto Ready
		CancelMidSpin:
			TNT1 A 0 A_TakeInventory("MinigunCanCancel", 1)
			TNT1 A 0 ACS_ExecuteAlways(920, 0, 2)
			TNT1 A 0 A_PlaySound("Throttle/Loop",5,0.8)
			TNT1 A 0 A_AlertMonsters
			CHNG ACEGACEGACEGACEGACEG 1 A_WeaponReady(WRF_NOBOB | WRF_NOSWITCH)
			TNT1 A 0 A_Refire("CancelMidSpin")
		Goto StopAlt
		Flash:
			TNT1 A 1 A_Light2
			TNT1 A 6 A_Light1
			TNT1 A 0 A_Light0
		Stop	
		Spawn:
			CHNG X -1
		Stop
	}
}

Actor MinigunCanCancel : DnD_Boolean { }
Actor MinigunFiring : DND_Boolean { }
Actor MinigunSpin : DND_Boolean { }

Actor ThrottleTrail
{
	+NoInteraction
	+ForceXYBillboard
	+CLIENTSIDEONLY
	Alpha 0.05
	Scale 0.0625
	RenderStyle Translucent
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Jump(255, "SpriteA", "SpriteB", "SpriteC", "SpriteD")
		SpriteA:
			DYMI E 0 A_Jump(255, "FadeIn")
			Goto SpriteA
		SpriteB:
			DYMI F 0 A_Jump(255, "FadeIn")
			Goto SpriteB
		SpriteC:
			DYMI G 0 A_Jump(255, "FadeIn")
			Goto SpriteC
		SpriteD:
			DYMI H 0 A_Jump(255, "FadeIn")
			Goto SpriteD
		FadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.1, 0.05))
			"####" "#" 0 A_JumpIf(Alpha >= 0.25, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 A_FadeOut(FRandom(0.125,0.075))
			Loop
	}
}

Actor ThrottlePuff : DnD_BasePuff {
	Stamina 4096
	+THRUGHOST
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor ThrottlePuff_GhostHitter : ThrottlePuff {
	-THRUGHOST
}

Actor EbonyOverheat : Inventory {
	inventory.maxamount 4
}

// Sprites by Eriance
Actor "Ebony Cannon" : Weapon {
	Weapon.SelectionOrder 600
	Weapon.SlotNumber 4
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the Ebony Cannon!"	
    Obituary "%o met a grim dark future by %k's Ebony Cannon"
	Weapon.AmmoType1 "EbonyAmmo"
	Weapon.AmmoType2 "EbonyAmmoX"
	Weapon.AmmoUse2 1
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 10
	Weapon.AmmoGive2 4
	AttackSound ""
	+AMMO_OPTIONAL
	+ALT_AMMO_OPTIONAL
	+INVENTORY.UNDROPPABLE
	+NOAUTOAIM
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.8
    Weapon.BobRangeY 0.3
    Weapon.BobRangeX 0.6
	Tag "$WEP_4_11_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			WMAU Q -1
		Stop
		Ready:
			WMAU A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
		DeselectLoop:
			WMAU A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 96, 0, DND_WEAPON_EBONYCANNON)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 8, 4 | (6 << 16), DND_WEAPON_EBONYCANNON)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 1, 4 | (8 << 16), DND_WEAPON_EBONYCANNON)
	    SelectLoop:
			WMAU A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_EBONYCANNON, 0), "FireConfirmed")
			WMAU A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_JumpIfInventory("EbonyOverheat", 0, "CoolOff")
			WMAU C 3 Bright A_PlaySoundEx("weapons/ebonyfire", CHAN_WEAPON)
			TNT1 A 0 A_GiveInventory("EbonyOverHeat", 1)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_EBONYCANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_EBONY1 << 16), DND_ATF_CANFIRECIRCLE)
			WMAU D 1 Bright
			TNT1 A 0 A_SetPitch(pitch - 5.0)
			WMAU D 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU D 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU E 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU E 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU E 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU E 1
			WMAU F 5
			TNT1 A 0 A_Refire
		CoolOff:
			WMAU G 5 A_TakeInventory("EbonyOverHeat", 4)
			TNT1 A 0 A_PlaySound("Weapons/EbonyHiss")
			WMAU H 4
			WMAU IJK 3
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_EBONYCANNON, 0), "AltFireConfirmed")
			WMAU A 3 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		AltFireConfirmed:
			WMAU L 3 Bright A_PlaySoundEx("weapons/ebonyalt", CHAN_WEAPON)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_EBONYCANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_CLIP | (AMMO_EBONY2 << 16), DND_ATF_CANFIRECIRCLE)
			WMAU M 1 Bright
			TNT1 A 0 A_SetPitch(pitch - 8.0)
			WMAU M 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU M 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU N 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU N 1 
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU N 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU N 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU O 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU O 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			WMAU O 2
			WMAU PB 5
		Goto CoolOff
		Flash:
			TNT1 A 6
		Stop
	}
}

Actor EbonyBalls : DnD_ExplosiveBase {
	Radius 6
	Height 12
	Damage (
		DND_WEAPON_EBONYCANNON |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	Gravity 0.6
	BounceCount 4
	Speed 36
	Scale 0.6
	-NOGRAVITY
	+FOILINVUL
	+DONTBLAST
	+CANBOUNCEWATER
	BounceType Doom
	BounceSound "weapons/ebonybounce"
	DeathSound "weapons/ebonyexplode"
	States {
		SpawnState:
			EBOP ABCD 3
		Loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SetTranslucent(0.7, 1)
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlareSmall", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			BAXP A 6 Bright
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_EBONYCANNON |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTEXPLOSION << DTYPE_SHIFT) |
				(50 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 64 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_HALFDMGSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			BAXP BCDEF 2 Bright
		Stop
	}
}

Actor EbonyPellets : DnD_BaseProjectile {
	Damage (
		DND_WEAPON_EBONYCANNON |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	Gravity 0.6
	Height 4
	Radius 2
	Speed 18
	BounceCount 4
	+DOOMBOUNCE
	+RIPPER
	+BLOODLESSIMPACT
	+PAINLESS
	+CANBOUNCEWATER
	-NOGRAVITY
	States {
		SpawnState:
			TNT1 A 0 ThrustThingZ(0, 8 * random(2, 4), 0, 0)
			MAPF AAA 1 Bright
		SpawnLoop:
			MAPF BBCC 1 Bright
		Loop
		Death:
			MAPF DEFGH 2
		Stop
	}
}

Actor EbonyPellets_Crit : EbonyPellets {
	States {
		SpawnState:
			TNT1 A 0 ThrustThingZ(0, 8 * random(2, 4), 0, 0)
			MAPF AAA 1 Bright A_CustomMissile("EbonyPellet_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		SpawnLoop:
			MAPF BBCC 1 Bright A_CustomMissile("EbonyPellet_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Loop
	}
}

Actor EbonyPellet_Damager : DnD_BaseProjectile {
	Radius 2
	Height 4
	Speed 18
	Species "Player"
	+THRUSPECIES
	States {
		SpawnState:
			TNT1 A 1
		Stop
		XDeath:
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Do Impact Damage", ACS_NamedExecuteWithResult("DND Weapon Damage Retrieve", DND_DMGID_2 | (DND_WEAPON_EBONYCANNON << 16), DND_DAMAGECATEGORY_OCCULT, DND_USETARGET | DND_ISSLOT4), DND_DAMAGETYPE_OCCULT, 0, DND_WEAPON_EBONYCANNON)
		Death:
			TNT1 A 1
		Stop
	}
}

Actor EbonyPellet_Damager_Crit : EbonyPellet_Damager {
	Accuracy 69
}

Actor EbonyBalls2 : EbonyBalls {
	Damage(
		DND_WEAPON_EBONYCANNON |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	States {
		SpawnState:
			EBOP EFGH 3 Bright
		Loop
		Death:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SetTranslucent(0.7, 1)
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlareSmall", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmokeSmall", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			BAXP A 6 Bright
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_EBONYCANNON |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTEXPLOSION << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 64 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 AAAAA 0 A_CustomMissile("EbonyPellets", 0, 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION)
		FinishAnim:
			BAXP BCDEF 2 Bright
		Stop
		Crit:
			TNT1 AAAAA 0 A_CustomMissile("EbonyPellets_Crit", 0, 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Goto FinishAnim
	}
}

ACTOR MPPB : Weapon {
	Weapon.UpSound ""
	Weapon.AmmoType "Cell"
	Weapon.AmmoUse 0
	Weapon.SlotNumber 4
	Obituary "%o was mowed down by %k."
	Decal "PlasmaScorch"
	Tag "$WEP_4_12_TAG_ALT"
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.3
	Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			TNT1 A 1
		Stop
	
		Ready:
			MPPB A 1 A_WeaponReady
		Loop

		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot4", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 7, 6 | (8 << 16), DND_WEAPON_MPPB)
		SelectLoop:
			MPPB A 1 A_Raise
			"####" "#" 0 A_Raise
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot4", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 A_ClearRefire
			TNT1 A 0 A_StopSound(CHAN_WEAPON)
			TNT1 A 0 A_StopSound(7)
		DeselectLoop:
			MPPB A 1 A_Lower
			"####" "#" 0 A_Lower
		Loop

		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 0), "FireConfirmed")
			MPPB A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_ClearRefire
		Windup:
			TNT1 A 0 A_PlaySound("MPPhotonBlaster/spinup", 6, 1, 0, 1.5)
		Windup0:
			MPPB BCD 3
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "Windup1")
			TNT1 A 0 A_JumpIfInventory("Cell", 1, "Windup1")
		Goto Winddown0
		Windup1:
			MPPB ABCD 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "WindUp2")
		Goto Winddown1
		Windup2:
			MPPB ABCD 1
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "WindUp3")
		Goto Winddown2
		Windup3:
			MPPB ABCD 1
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold")
		Goto Winddown3
		
		Hold:
			TNT1 A 0 A_PlaySound("MPPhotonBlaster/fireloop", CHAN_WEAPON, 1.0, true)
		Hold0:
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MPPB, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			MPPB E 1 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold1")
			MPPB E 1 Bright
		Goto Winddown
		Hold1:
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MPPB, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			MPPB F 1 Bright A_SetPitch(pitch + 0.3)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold2")
			MPPB F 1 Bright
		Goto Winddown
		Hold2:
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MPPB, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			MPPB G 1 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold3")
			MPPB G 1 Bright
		Goto Winddown
		Hold3:
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MPPB, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			MPPB H 1 Bright A_SetPitch(pitch + 0.3)
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold0")
			MPPB H 1 Bright
		Goto Winddown

		Winddown:
			TNT1 A 0 A_ClearRefire
			TNT1 A 0 A_PlaySound("MPPhotonBlaster/fireend", CHAN_WEAPON, 1, 0, 1.5)
			TNT1 A 0 A_PlaySound("MPPhotonBlaster/spindown", 6, 1, 0, 1.5)
		Winddown3:
			MPPB ABCD 1
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Hold")
		Goto Winddown2
		Winddown2:
			MPPB ABCD 1
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Winddown3")
		Goto Winddown1
		Winddown1:
			MPPB ABCD 2
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Winddown2")
		Goto Winddown0
		Winddown0:
			MPPB ABCD 3
			TNT1 A 0 A_ClearRefire
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MPPB, 1), "Winddown1")
		Goto Ready

		Flash:
			TNT1 A 1 A_Light (random(1,4))
			TNT1 A 1 A_Light1
			TNT1 A 0 A_Light0
		Goto LightDone
	}
}

Actor MPPB_Phase : Inventory {
	inventory.maxamount 2
}

Actor MPPB_Projectile1 : DnD_BaseProjectile {
	Speed 60
	Radius 5
	Height 10
	Renderstyle Add
	Alpha 1.0
	Scale 0.58
	Decal "PlasmaScorchLower"
	DeathSound "MPPB/Hit"
	
	Damage(
		DND_WEAPON_MPPB |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+DONTREFLECT
	States {
		SpawnState:
			XPSG F 1 Light("MPPB_Light1")
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail",(0.01*momx)/-35.0, -(0.01*momy)/-35.0, 2+(0.01*momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail2", (0.5 *momx)/-35.0, -(0.5 *momy)/-35.0, 2+(0.5 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail3", (1 *momx)/-35.0, -(1 *momy)/-35.0, 2+(1 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail4", (2 *momx)/-35.0, -(2 *momy)/-35.0, 2+(2 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail5", (4 *momx)/-35.0, -(4 *momy)/-35.0, 2+(4 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail6", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail7", (8 *momx)/-35.0, -(8 *momy)/-35.0, 2+(8 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail8", (10 *momx)/-35.0, -(10 *momy)/-35.0, 2+(10 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail9", (12 *momx)/-35.0, -(12 *momy)/-35.0, 2+(12 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail10", (14 *momx)/-35.0, -(14 *momy)/-35.0, 2+(14 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail11", (16 *momx)/-35.0, -(16 *momy)/-35.0, 2+(16 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
		Loop
		Death:
			XPSG FFF 1 Bright Light("MPPB_Light2") A_FadeTo (0, 0.1, 1)
			XPSG GGG 1 Bright Light("MPPB_Light3") A_FadeTo (0, 0.1, 1)
		Stop
	}
}

Actor MPPB_Projectile2 : MPPB_Projectile1 {
	+BLOODLESSIMPACT
	+RIPPER
	+THRUGHOST
	
	Stamina 32768
	
	var int user_ripperid;
}

Actor MPPB_Projectile2_GhostHitter : MPPB_Projectile2 {
	-THRUGHOST
}

Actor MPPB_Projectile3 : DnD_ExplosiveBase {
	Speed 60
	Radius 5
	Height 10
	Renderstyle Add
	Alpha 1.0
	Scale 0.58
	Decal "PlasmaScorchLower"
	DeathSound "MPPB/Hit"
	States {
		SpawnState:
			XPSG F 1 Light("MPPB_Light1")
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail",(0.01*momx)/-35.0, -(0.01*momy)/-35.0, 2+(0.01*momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail2", (0.5 *momx)/-35.0, -(0.5 *momy)/-35.0, 2+(0.5 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail3", (1 *momx)/-35.0, -(1 *momy)/-35.0, 2+(1 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail4", (2 *momx)/-35.0, -(2 *momy)/-35.0, 2+(2 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail5", (4 *momx)/-35.0, -(4 *momy)/-35.0, 2+(4 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail6", (6 *momx)/-35.0, -(6 *momy)/-35.0, 2+(6 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail7", (8 *momx)/-35.0, -(8 *momy)/-35.0, 2+(8 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail8", (10 *momx)/-35.0, -(10 *momy)/-35.0, 2+(10 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail9", (12 *momx)/-35.0, -(12 *momy)/-35.0, 2+(12 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail10", (14 *momx)/-35.0, -(14 *momy)/-35.0, 2+(14 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("MPPB_ProjectileTrail11", (16 *momx)/-35.0, -(16 *momy)/-35.0, 2+(16 *momz)/-35.0, 0, 0, 0, 0, SXF_ABSOLUTEANGLE | SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
		Loop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_MPPB |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 80)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", user_expradius / 2)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			XPSG FFF 1 Bright Light("MPPB_Light2") A_FadeTo (0, 0.1, 1)
			XPSG GGG 1 Bright Light("MPPB_Light3") A_FadeTo (0, 0.1, 1)
		Stop
	}
}

Actor MPPB_ProjectileTrail_Base {
	Scale 0.58
	RenderStyle Add
	Alpha 0.99
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 Thing_ChangeTID(0, SPECIAL_FX_TID)
			XPSG F 2 Bright
		Stop
	}
}

actor MPPB_ProjectileTrail : MPPB_ProjectileTrail_Base {
    Scale 0.58
    Alpha 0.99
    States {
		Spawn:
			XPSG F 2 Bright
        stop
    }
}

actor MPPB_ProjectileTrail2 : MPPB_ProjectileTrail_Base {
    Scale 0.58
    Alpha 0.90
    States {
		Spawn:
			XPSG G 2 Bright
        stop
    }
}

actor MPPB_ProjectileTrail3 : MPPB_ProjectileTrail_Base {
    Scale 0.23
    Alpha 0.65
    States {
		Spawn:
			OGLP E 2 Bright
        stop
    }
}

actor MPPB_ProjectileTrail4 : MPPB_ProjectileTrail3 {
    Scale 0.20
    Alpha 0.60
}

actor MPPB_ProjectileTrail5 : MPPB_ProjectileTrail3 {
    Scale 0.18
    Alpha 0.54
}

actor MPPB_ProjectileTrail6 : MPPB_ProjectileTrail3 {
    Scale 0.16
    Alpha 0.48
}

actor MPPB_ProjectileTrail7 : MPPB_ProjectileTrail3 {
	Scale 0.14
    Alpha 0.42
}

actor MPPB_ProjectileTrail8 : MPPB_ProjectileTrail3 {
    Scale 0.12
    Alpha 0.36
}

actor MPPB_ProjectileTrail9 : MPPB_ProjectileTrail3 {
    Scale 0.10
    Alpha 0.30
}

actor MPPB_ProjectileTrail10 : MPPB_ProjectileTrail3 {
    Scale 0.08
    Alpha 0.24
}

actor MPPB_ProjectileTrail11 : MPPB_ProjectileTrail3 {
    Scale 0.06
    Alpha 0.18
}