Actor " Pistol " : Pistol
{
	Weapon.SlotNumber 2
	Weapon.AmmoGive 0
	Weapon.SelectionOrder 2700
	attacksound ""
	Decal "BulletChip"
	+INVENTORY.UNDROPPABLE
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 2.1
    Weapon.BobRangeY 0.3
    Weapon.BobRangeX 0.6
	Tag "$WEP_1_0_TAG"
	Weapon.AmmoUse 0
	+WEAPON.NOAUTOAIM
	States
	{
	  Ready:
		COLT A 1 A_WeaponReady
		Loop
	  Deselect:
		TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
	  DeselectLoop:
		COLT A 1 A_Lower
		TNT1 A 0 A_Lower
		Loop
	  Select:
		TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
		TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 15, 0, DND_WEAPON_PISTOL)
		TNT1 A 0 A_TakeInventory("DnD_WeaponID", DND_WEAPON_PISTOL)
		TNT1 A 0 A_GiveInventory("DnD_WeaponID", DND_WEAPON_PISTOL)
	  SelectLoop:
		COLT A 1 A_Raise
		TNT1 A 0 A_Raise
		Loop
	  Fire:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PISTOL, 0), "FireConfirmed")
		COLT A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	  Goto Ready
	  FireConfirmed:
	    TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-0.75, 0.75), 0, 0, frandom(-0.5, 0.5))
		TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
		COLF A 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PISTOL, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)//A_GiveInventory("PistolShooter", 1)
	  FireEnd:
	    TNT1 A 0 A_GunFlash
		TNT1 A 0 A_PlayWeaponsound("Weapons/NewPist")
		COLF B 1 Bright A_SetPitch(pitch - 2.0)
		COLF C 1 Bright A_SetPitch(pitch + 1.0)
		COLT B 1 A_SetPitch(pitch + 1.0)
		COLT B 2
		TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*20,0,32+(sin(-pitch)*20),0,-8,random(4,8),0,0,0)
		COLT C 1
		COLX AB 1
		COLT D 1
		COLX CD 1
		COLT E 1
		COLX EF 1
		COLT B 1 A_ReFire
		COLX GH 1 A_ReFire
	    Goto Ready
	  Hold:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PISTOL, 0), "HoldConfirmed")
		COLT A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	  Goto Ready
	  HoldConfirmed:
	    TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-0.75, 0.75), 0, 0, frandom(-0.5, 0.5))
		TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
		COLF A 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PISTOL, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
		Goto FireEnd
	  Flash:
		TNT1 A 3 Bright A_Light1
		TNT1 A 3 Bright A_Light0
		Goto LightDone
	}
}

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

// Sprites by mik57
Actor " Akimbo Pistols " : Pistol {
	Weapon.SlotNumber 2
	Weapon.AmmoGive 0
	Weapon.AmmoUse1 0
	Weapon.AmmoType1 "Clip"
	Weapon.SelectionOrder 2000
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 2.1
    Weapon.BobRangeY 0.3
    Weapon.BobRangeX 0.6
	attacksound ""
	Decal "BulletChip"
	Tag "$WEP_1_1_TAG"
	+INVENTORY.UNDROPPABLE
	+AMMO_OPTIONAL
	+ALT_AMMO_OPTIONAL
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			NPIS F -1
		Stop
		Ready:
			PS2G A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
			PS2G A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 30, 0, DND_WEAPON_AKIMBOPISTOL)
		SelectLoop:
			PS2G A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		CheckLeft:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_AKIMBOPISTOL, 0), "ContinueLeftFire")
			PS2G A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		CheckRight:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_AKIMBOPISTOL, 1), "ContinueRightFire")
			PS2G A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		Fire:
			TNT1 A 0 A_GiveInventory("AkimboFireMode", ACS_ExecuteWithResult(994, 1))
			TNT1 A 0 A_JumpIfInventory("AkimboFireMode", 3, "RightFire")
			TNT1 A 0 A_JumpIfInventory("AkimboFireMode", 2, "LeftFire")
			//PS2G A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		RightFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_AKIMBOPISTOL, 1), "ContinueRightFire")
			PS2G A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto CheckLeft
		ContinueRightFire:
			PS2G B 1 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_Playsound("Weapons/NewPist2", CHAN_WEAPON)
			TNT1 A 0 A_GiveInventory("AkimboShooter_R", 1)
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*22,10,31+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			PS2G B 2 bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PS2G C 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PS2G D 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_GiveInventory("FireLeft", 1)
			TNT1 A 0 A_TakeInventory("AkimboFireMode", 0)
			TNT1 A 0 A_Refire
		Goto Ready
		LeftFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_AKIMBOPISTOL, 0), "ContinueLeftFire")
			PS2G A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto CheckRight
		ContinueLeftFire:
			PS2G E 1 Bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_Playsound("Weapons/NewPist2", 6)
			TNT1 A 0 A_GiveInventory("AkimboShooter_L", 1)
			TNT1 A 0 A_SpawnItemEx ("pistolcasing",cos(pitch)*22,-10,31+(sin(-pitch)*20),0,8,random(4,8),0,0,0)
			PS2G E 2 bright A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PS2G F 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			PS2G G 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_TakeInventory("FireLeft", 1)
			TNT1 A 0 A_TakeInventory("AkimboFireMode", 0)
			TNT1 A 0 A_Refire
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(994, 1, 1), "ContinueReload")
			PS2G A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_TakeInventory("AkimboFireMode", 0)
			PS2S JKLMN 1
			TNT1 A 0 A_GiveInventory("AkimboReloadDecider", 1)
			PS2S OP 1
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "CoolReload")
			TNT1 A 0 A_JumpIfInventory("LoadLeft", 1, "LoadLeft")
		LoadRight:
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipO")
			TNT1 A 0 A_FireCustomMissile("AkimboClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			PISR A 1 Offset(52, 98)
			PISR A 1 Offset(48, 90)
			PISR A 1 Offset(44, 82)
			PISR A 1 Offset(40, 74)
			PISR A 1 Offset(36, 66)
			PISR A 1 Offset(32, 58)
			PISR A 1 Offset(28, 50)
			PISR A 1 Offset(24, 42)
			PISR A 1 Offset(20, 34)
			PISR A 1 Offset(16, 33)
			PISR A 1 Offset(17, 32)
			PISR A 1 Offset(18, 33)
			PISR A 1 Offset(19, 34)
			PISR A 1 Offset(20, 35)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipI")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_AKIMBOPISTOL, 1)
			PISR C 1 Offset(20, 35)
			PISR C 1 Offset(19, 34)
			PISR D 1 Offset(18, 33)
			PISR D 1 Offset(17, 32)
			PISR E 1 Offset(17, 33)
			PISR E 1 Offset(17, 34)
			PISR F 1 Offset(18, 35)
			PISR F 1 Offset(19, 36)
			PISR A 1 Offset(20, 42)
			PISR A 1 Offset(21, 51)
			PISR A 1 Offset(22, 60)
			PISR A 1 Offset(23, 69)
			PISR A 1 Offset(24, 78)
			PISR A 1 Offset(25, 87)
			PISR A 1 Offset(26, 96)
			TNT1 A 9 Offset(0, 104)
		Goto Finish
		LoadLeft:
			TNT1 A 0 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipO")
			TNT1 A 0 A_FireCustomMissile("AkimboClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			PISR H 1 Offset(0, 98)
			PISR H 1 Offset(4, 90)
			PISR H 1 Offset(8, 82)
			PISR H 1 Offset(12, 74)
			PISR H 1 Offset(16, 66)
			PISR H 1 Offset(20, 58)
			PISR H 1 Offset(24, 50)
			PISR H 1 Offset(28, 42)
			PISR H 1 Offset(32, 34)
			PISR H 1 Offset(36, 33)
			PISR H 1 Offset(35, 32)
			PISR H 1 Offset(31, 33)
			PISR H 1 Offset(30, 34)
			PISR H 1 Offset(29, 35)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipI")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_AKIMBOPISTOL, 0)
			PISR J 1 Offset(29, 35)
			PISR J 1 Offset(28, 34)
			PISR K 1 Offset(27, 33)
			PISR K 1 Offset(26, 32)
			PISR L 1 Offset(26, 33)
			PISR L 1 Offset(26, 34)
			PISR M 1 Offset(27, 35)
			PISR M 1 Offset(28, 36)
			PISR H 1 Offset(29, 42)
			PISR H 1 Offset(30, 51)
			PISR H 1 Offset(31, 60)
			PISR H 1 Offset(32, 69)
			PISR H 1 Offset(33, 78)
			PISR H 1 Offset(34, 87)
			PISR H 1 Offset(35, 96)
			TNT1 A 9 Offset(0, 104)
			TNT1 A 0 A_JumpIFInventory("Clip", 1, "ContinueRightReloadCheck")
		Goto Finish
		ContinueRightReloadCheck:
			TNT1 A 0 A_JumpIfInventory("LoadRight", 1, "LoadRight")
		Finish:
			TNT1 A 0 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2Ready")
			TNT1 A 1 Offset(0, 32)
			PS2S OPNMLKJ 1
		Goto Ready
		
		CoolReload:
			TNT1 A 0 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
			TNT1 A 2
			PS2S OPNMLKJ 1
			PS2R A 2
			PS2R B 1 Offset(0, 31)
			PS2R B 1 Offset(0, 30)
			PS2R C 2 Offset(0, 32)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipO")
			TNT1 A 0 A_FireCustomMissile("AkimboClipDrop", frandom(-12.0, 12.0), 9, 0, 0)
			TNT1 A 0 A_FireCustomMissile("AkimboClipDrop", frandom(-12.0, 12.0), -9, 0, 0)
			PS2R D 2
			PS2R F 1 Offset(0, 32)
			PS2R F 1 Offset(0, 37)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2ClipI")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_AKIMBOPISTOL, 0)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_AKIMBOPISTOL, 1, 0)
			PS2R E 1 Offset(0, 33)
			PS2R E 1 Offset(0, 29)
			PS2R A 1 Offset(0, 25)
			PS2R A 1 Offset(0, 29)
			PS2R A 1 Offset(0, 32)
			TNT1 A 0 A_PlayWeaponSound("Weapons/NewPist2Ready")
		Goto Ready
		
		Failure:
			PS2G A 1
			Goto Ready
		Flash:
			TNT1 A 3 A_Light1
			TNT1 A 3 A_Light0
		Goto LightDone
	}
}

Actor AkimboFireMode : Inventory {
	inventory.maxamount 3
}

Actor FireLeft : DND_Boolean { }

Actor LoadRight : DND_Boolean { }

Actor LoadLeft : DND_Boolean { }

Actor AkimboReloadDecider : DND_Activator {
	States {
		Pickup:
			TNT1 A 0 A_TakeInventory("LoadLeft", 1)
			TNT1 A 0 A_TakeInventory("LoadRight", 1)
			TNT1 A 0 A_JumpIfInventory("AkimboClipLeft", 0, "CheckRight")
		LoadLeft:
			TNT1 A 0 A_GiveInventory("LoadLeft", 1)
		CheckRight:
			TNT1 A 0 A_JumpIFInventory("AkimboClipRight", 0, "NoReload")
			TNT1 A 0 A_GiveInventory("LoadRight", 1)
		Stop
		NoReload:
			TNT1 A 0
		Stop
	}
}

Actor AkimboShooter_R : DND_Activator {
	states {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Ammo Gain Chance", 0, DND_AMMOSLOT_MAGAZINE, DND_MAGAZINE_AKIMBOCLIPRIGHT, 1)
		NoTake:
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-3.5, 3.5), 0, 0, frandom(-2.5, 2.5))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 20 * cos(-pitch), 6, 35 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_AKIMBOPISTOL, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOGAINCHECK)
		Stop
	}
}

Actor AkimboShooter_L : DND_Activator {
	States {
		Use:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Ammo Gain Chance", 0, DND_AMMOSLOT_MAGAZINE, DND_MAGAZINE_AKIMBOCLIPLEFT, 1)
		NoTake:
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-3.5, 3.5), 0, 0, frandom(-2.5, 2.5))
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 20 * cos(-pitch), -6, 35 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_AKIMBOPISTOL, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOGAINCHECK)
		Stop
	}
}

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

Actor Magnum : Weapon {
	Weapon.SlotNumber 2
	Weapon.AmmoGive 0
	Weapon.AmmoUse1 0
	Weapon.AmmoUse2 0
	Weapon.AmmoType1 "Clip"
	Weapon.AmmoType2 "BulletSize_6"
	Weapon.SelectionOrder 1850
	attacksound ""
	Tag "$WEP_1_2_TAG"
	Decal "BulletChip"
	+INVENTORY.UNDROPPABLE
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.8
    Weapon.BobRangeY 0.3
    Weapon.BobRangeX 0.7
	const int magnum_clip = 6;
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			REVP A -1
		Stop
		Ready:
			REVO A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
			REVO A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 25, 4 | (6 << 16), DND_WEAPON_MAGNUM)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 50, 0, DND_WEAPON_MAGNUM)
		SelectLoop:
			REVO A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MAGNUM, 1), "ContinueFire")
			REVO A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueFire:
			REVO A 3
			TNT1 A 0 A_FireCustomMissile("Tracer", frandom(-0.75, 0.75), 0, 0, frandom(-0.5, 0.5))
			TNT1 A 0 A_SpawnItemEx("GunSmoke", 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_MAGNUM, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_BULLETSIZE_6 << 16), 0)
			TNT1 A 0 A_RailAttack(0, 0, 0, "None", "None", 0, 0, "MagnumPistolPuff_Rail", 1.0)
			
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_PlayWeaponsound("Weapons/magnumfire")
			// don't place a_setpitch right after bullets are fired
			REVO B 1 Bright // these are structured like this for a reason: online, they bug out if you constantly hold the fire button and switch weapons
			TNT1 A 0 A_SetPitch(pitch - 8.0)
			REVO B 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO C 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO C 1 Bright
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO D 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO D 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO D 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO E 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO E 1
			TNT1 A 0 A_SetPitch(pitch + 1.0)
			REVO E 1
			REVO F 3
			REVO ED 2
			REVO A 3 A_Refire
	    Goto Ready
		NoReload:
			REVO A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		Reload:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MAGNUM, 0), "CheckReload")
			REVO A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		CheckReload:
			TNT1 A 0 A_JumpIfInventory("BulletSize_6", 0, "NoReload")
		DoReload:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			REVO DEFDG 2
			TNT1 A 0 A_PlaySound("weapons/magnumopen", 6)
			REVO HI 2
			TNT1 A 10
			TNT1 A 0 A_PlaySound("weapons/magnumout", 6)
			TNT1 A 5
		ReloadLoop:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_MAGNUM, 0), "ContinueReload")
		Goto FinishReload
		ContinueReload:
			TNT1 A 1
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Take Ammo From Weapon", 0, DND_WEAPON_MAGNUM, 0, magnum_clip)
			TNT1 A 0 A_GiveInventory("BulletSize_6", 1)
			TNT1 A 0 A_SpawnItemEx ("revolvercasing",cos(-pitch)*20, 2, 26+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
			TNT1 A 0 A_PlaySound("Weapons/magnumload", 6)
			TNT1 AAA 5 A_JumpIf(!ACS_ExecuteWithResult(994, 9), "FinishReload")
			TNT1 A 0 A_JumpIfInventory("BulletSize_6", 0, "FinishReload")
		Goto ReloadLoop
		FinishReload:
			TNT1 A 10
			TNT1 A 0 A_PlaySound("weapons/magnumin", 6)
			REVO JKGDEDA 2
		Goto Ready
	
		ReloadFaster:
			REVO DEFDG 1
			TNT1 A 0 A_PlaySound("weapons/magnumopen", 6)
			REVO HI 1
			TNT1 A 5
			TNT1 A 0 A_PlaySound("weapons/magnumout", 6)
			TNT1 A 2
		ReloadLoopFaster:
			TNT1 A 0 A_JumpIfInventory("Clip", magnum_clip, "ContinueReloadFaster")
		Goto FinishReloadFaster
		ContinueReloadFaster:
			TNT1 A 0 A_TakeInventory("Clip", magnum_clip)
			TNT1 A 0 A_GiveInventory("BulletSize_6", 1)
			TNT1 A 0 A_SpawnItemEx ("revolvercasing",cos(-pitch)*20, 2, 26+(sin(-pitch)*36),0,random(5, 8), random(0, 1),0,0,0)
			TNT1 A 0 A_PlaySound("Weapons/magnumload", 6)
			TNT1 AAA 2  A_JumpIf(!ACS_ExecuteWithResult(994, 9), "FinishReloadFaster")
			TNT1 A 0 A_JumpIfInventory("BulletSize_6", 0, "FinishReloadFaster")
		Goto ReloadLoopFaster
		FinishReloadFaster:
			TNT1 A 5
			TNT1 A 0 A_PlaySound("weapons/magnumin", 6)
			REVO JKGDEDA 1
		Goto Ready
	}
}

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

Actor MagnumPistolPuff_Rail : DnD_BaseRailPuff {
	Stamina 4096
	
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor Magnum_RailHelper : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_MAGNUM |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0,0,"None","None",RGF_SILENT,0,"MagnumPistolPuff_Rail", 0.25, 0.25
			)
		Stop
	}
}

Actor "Laser Pistol" : Weapon {
	Weapon.SlotNumber 2
	Weapon.AmmoGive 0
	Weapon.AmmoUse 0
	Weapon.AmmoType "LPistolCharge"
	Weapon.SelectionOrder 1850
	attacksound ""
	Decal "LaserPistolDecal"
	Tag "$WEP_1_3_TAG"
	+INVENTORY.UNDROPPABLE
    Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.8
    Weapon.BobRangeY 0.2
    Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			PBLT A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_StopSound(5)
			TNT1 A 0 A_StopSound(6)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
		DeselectLoop:
			PBLT A 1 A_Lower
			PBLT A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 3 | (6 << 16), DND_WEAPON_LASERPISTOL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 10, 3 | (6 << 16), DND_WEAPON_LASERPISTOL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 15, 3 | (6 << 16), DND_WEAPON_LASERPISTOL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 20, 3 | (6 << 16), DND_WEAPON_LASERPISTOL)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_4, 25, 3 | (6 << 16), DND_WEAPON_LASERPISTOL)
		SelectLoop:
			PBLT A 1 A_Raise
			PBLT A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			PBLT B 1 Bright
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_LASERPISTOL, DND_ATK_PRIMARY, 0, DND_ATF_NOAMMOGAINCHECK | DND_ATF_NOAMMOTAKE)
			TNT1 A 0 A_FireCustomMissile("LeadSpitterTracer", 0, 0, frandom(-2.0, 2.0), 0, 0, frandom(-1.25, 1.25))
			TNT1 A 0 A_PlayWeaponSound("weapons/laserpistolfire")
			TNT1 A 0 A_TakeInventory("LPistolCharge", 0)
			PBLT B 1 Bright 
			PBLT C 1 Offset(3, 30) A_SetPitch(pitch-0.7)
			PBLT C 1 Offset(6, 27) A_SetPitch(pitch + 0.35)
			PBLT C 1 Offset(8, 30) A_SetPitch(pitch + 0.35)
			PBLT C 1 Offset(2, 33)
			PBLT A 1 Offset(0, 32)
			PBLT A 3
		Goto Ready
		AltFire:
			TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
			TNT1 A 0 A_PlaySound("Weapons/laserpistolcharge", 5)
		ChargeLoop:
			PBLT A 1 A_GiveInventory("LPistolCharge", 1)
			TNT1 A 0 A_PlaySound("weapons/laserpistolcloop", 6, 1, 1)
			PBLT A 1 A_Refire("ChargeLoop")
		Release:
			TNT1 A 0 A_StopSound(5)
			TNT1 A 0 A_StopSound(6)
			TNT1 A 0 A_JumpIfInventory("LPistolCharge", 100, "Fire4")
			TNT1 A 0 A_JumpIfInventory("LPistolCharge", 75, "Fire3")
			TNT1 A 0 A_JumpIfInventory("LPistolCharge", 50, "Fire2")
			TNT1 A 0 A_JumpIfInventory("LPistolCharge", 25, "Fire1")
		Goto Fire
		Fire1:
			TNT1 A 0 A_TakeInventory("LPistolCharge", 0)
			PBLT B 2 Bright
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Attack", 0)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_LASERPISTOL |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				8, 1, "36 36 99", "60 60 90", RGF_EXPLICITANGLE, 0, "LaserPistolPuff_1", 2.0 * (1.0 - accuracy * accuracy_factor), 0, 256
			)
			TNT1 A 0 A_FireCustomMissile("LeadSpitterTracer", 0, 0, 4)
			TNT1 A 0 A_PlayWeaponSound("weapons/laserpistolfire2")
			PBLT B 1 Bright
			PBLT C 1 Offset(3, 30) A_SetPitch(pitch-1.4)
			PBLT C 1 Offset(6, 27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(8,25)
			PBLT D 1 Offset(6,27)
			PBLT D 1 Offset(3,30)
			PBLT C 1 Offset(2,32)
			PBLT C 1 Offset(1,33)
			PBLT A 1 Offset(1,32)
			PBLT A 5 Offset(0, 32) A_Refire("AltFire")
		Goto Ready
		Fire2:
			TNT1 A 0 A_TakeInventory("LPistolCharge", 0)
			PBLT B 2 Bright
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Attack", 0)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_LASERPISTOL |
				(DND_DMGID_2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				8, 1, "36 36 99", "60 60 90", RGF_EXPLICITANGLE, 0, "LaserPistolPuff_1", 2.0 * (1.0 - accuracy * accuracy_factor), 0, 320
			)
			TNT1 A 0 A_FireCustomMissile("LeadSpitterTracer", 0, 0, 4)
			TNT1 A 0 A_PlayWeaponSound("weapons/laserpistolfire2")
			PBLT B 1 Bright
			PBLT C 1 Offset(3, 30) A_SetPitch(pitch-2.1)
			PBLT C 1 Offset(6, 27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(8,25) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27)
			PBLT D 1 Offset(3,30)
			PBLT C 1 Offset(2,32)
			PBLT C 1 Offset(1,33)
			PBLT A 1 Offset(1,32)
			PBLT A 5 Offset(0, 32) A_Refire("AltFire")
		Goto Ready
		Fire3:
			TNT1 A 0 A_TakeInventory("LPistolCharge", 0)
			PBLT B 2 Bright
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Attack", 0)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_LASERPISTOL |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				8, 1, "36 36 99", "60 60 90", RGF_EXPLICITANGLE, 0, "LaserPistolPuff_1", 2.0 * (1.0 - accuracy * accuracy_factor), 0, 384
			)
			TNT1 A 0 A_FireCustomMissile("LeadSpitterTracer", 0, 0, 4)
			TNT1 A 0 A_PlayWeaponSound("weapons/laserpistolfire2")
			PBLT B 1 Bright
			PBLT C 1 Offset(3, 30) A_SetPitch(pitch-2.8)
			PBLT C 1 Offset(6, 27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(8,25) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(3,30)
			PBLT C 1 Offset(2,32)
			PBLT C 1 Offset(1,33)
			PBLT A 1 Offset(1,32)
			PBLT A 5 Offset(0, 32) A_Refire("AltFire")
		Goto Ready
		Fire4:
			TNT1 A 0 A_TakeInventory("LPistolCharge", 0)
			PBLT B 2 Bright
			TNT1 A 0 ACS_NamedExecuteAlways("DnD On Attack", 0)
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_LASERPISTOL |
				(DND_DMGID_4 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				8, 1, "36 36 99", "60 60 90", RGF_EXPLICITANGLE, 0, "LaserPistolPuff_1", 2.0 * (1.0 - accuracy * accuracy_factor), 0, 448
			)
			TNT1 A 0 A_FireCustomMissile("LeadSpitterTracer", 0, 0, 4)
			TNT1 A 0 A_PlayWeaponSound("weapons/laserpistolfire2")
			PBLT B 1 Bright
			PBLT C 1 Offset(3, 30) A_SetPitch(pitch-3.5)
			PBLT C 1 Offset(6, 27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(8,25) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(6,27) A_SetPitch(pitch + 0.7)
			PBLT D 1 Offset(3,30) A_SetPitch(pitch + 0.7)
			PBLT C 1 Offset(2,32)
			PBLT C 1 Offset(1,33)
			PBLT A 1 Offset(1,32)
			PBLT A 5 Offset(0, 32) A_Refire("AltFire")
		Goto Ready
		Spawn:
			PBLT Z -1
		Stop
	}
}

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

Actor LaserPistolPuff_0 : DnD_BasePuff {
	Scale 0.1
	RenderStyle "Add"
	Alpha 0.99
	Translation "0:255=%[0,0,0]:[0.6,1.0,1.8]"
	var int user_scaler;	// this one is to easily tweak the inherited versions
	
	Stamina 4096
	
	+FOILINVUL
	+FORCEXYBILLBOARD
	States {
		Crash:
		Melee:
			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
		
		HitNoBlood:
		Goto Crash
	}
}

Actor LaserPistolPuff_1 : DnD_BaseRailPuff {
	Scale 0.1
	RenderStyle "Add"
	Alpha 0.99
	Translation "0:255=%[0,0,0]:[0.6,1.0,1.8]"
	var int user_scaler;	// this one is to easily tweak the inherited versions
	
	Stamina 4096
	
	+FORCEXYBILLBOARD
	+FOILINVUL
	States {
		Crash:
		Melee:
			TNT1 A 0 A_SetUserVar("user_scaler", 3) 
			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
		
		HitNoBlood:
		Goto Crash
	}
}

ACTOR ScatterGun : Weapon
{
   Inventory.PickupSound "misc/w_pkup"
   Inventory.PickupMessage "You got the Scatter Pistol!"
   Weapon.AmmoType1 "Clip"
   Weapon.AmmoType2 "Clip"
   Weapon.AmmoGive 0
   Weapon.AmmoUse1 0
   Weapon.AmmoUse2 0
   Tag "$WEP_1_7_TAG"
   Weapon.BobStyle InverseSmooth
   Weapon.BobSpeed 2.1
   Weapon.BobRangeY 0.3
   Weapon.BobRangeX 0.6
   Weapon.SlotNumber 2
   +WEAPON.NOAUTOAIM
   States
   {
   Spawn:
      SPPP A -1
      Loop
   Ready:
      SPRP A 1 A_WeaponReady
      Loop
   Deselect:
      TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
      SPRP A 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop  
   Select:
	  TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 2 | (4 << 16), DND_WEAPON_SCATTERGUN)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 3, 2 | (4 << 16), DND_WEAPON_SCATTERGUN)
   SelectLoop:
      SPRP A 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop 
  Fire:
  		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SCATTERGUN, 0, 3), "FireConfirmed")
		SPRP A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  Goto Ready
  FireConfirmed:
      TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
	  TNT1 A 0 A_PlaySound("SPRPSHOT")
	  SPRP E 1 Bright 
      TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SCATTERGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
	  TNT1 A 0 A_GunFlash
	  SPRP F 1 Bright
	  SPRP G 1
	  TNT1 A 0 A_CheckReload
	  TNT1 A 0 A_PlaySound("SPRPSHOT")
	  SPRP E 1 Bright 
	  TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SCATTERGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
	  TNT1 A 0 A_GunFlash
	  SPRP F 1 Bright
	  SPRP G 1
	  TNT1 A 0 A_CheckReload
	  TNT1 A 0 A_PlaySound("SPRPSHOT")
	  SPRP E 1 Bright 
	  TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SCATTERGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
	  TNT1 A 0 A_GunFlash
	  SPRP F 1 Bright
	  SPRP G 1	  
	  SPRP D 4
	  SPRP G 3
	  SPRP CBA 3
	  SPRP A 4
	  SPRP A 1 A_ReFire
      Goto Ready  	  
  AltFire:
	TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_SCATTERGUN, 0), "AltFireConfirmed")
	SPRP A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
  Goto Ready
  AltFireConfirmed:
	  TNT1 A 0 A_GiveInventory("DnD_UsedNonSpecial", 1)
	  TNT1 A 0 A_PlaySound("SPRPSHOT")
	  SPRP E 1 Bright 
	  TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_SCATTERGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_CLIP | (AMMO_CLIP << 16), 0)
	  TNT1 A 0 A_GunFlash
	  SPRP F 1 Bright
	  SPRP G 1
	  SPRP D 3
	  SPRP G 2
	  SPRP CBA 2
	  SPRP A 1
	  SPRP A 1 A_ReFire
      Goto Ready  
   Flash:
      TNT1 A 1 Bright A_Light1
	  TNT1 A 1 Bright A_Light0
      Stop
   }
}

ACTOR ScatterPShot : DnD_BaseFastProjectile {
	Speed 50
	Radius 4
	Height 4
	Scale 0.25
	RenderStyle Add
	MissileHeight 8
	MissileType "ScatterPShotTrail"
	SeeSound "NDLSHOT"
	
	Damage (
		DND_WEAPON_SCATTERGUN |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 1024
	
	+BRIGHT
	+FOILINVUL
	+MTHRUSPECIES
	States {
		SpawnState:
			SPPJ A 1
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlow", 0, 0, 0, 0, 0, 0, 0, 32)
		Loop
		Death:
			TNT1 A 0 A_PlaySound("SPRPIMPT")
			TNT1 A 0 A_SetScale(0.20)
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 AAAAAA 0 A_CustomMissile("ScatterSpark",0,0,random(0,360),CMF_AIMDIRECTION,random(0,12))
		Finish:
			SPRI ABCDE 1
		Stop
		Crit:
			TNT1 AAAAAA 0 A_CustomMissile("ScatterSpark_Crit",0,0,random(0,360),CMF_AIMDIRECTION,random(0,12))
		Goto Finish
	}
}

ACTOR ScatterSpark : DnD_BaseProjectile {
	Speed 16
	Radius 4
	Height 4
	Scale 0.15
	Gravity 0.3
	Renderstyle "Add"
	+BRIGHT
	-NOGRAVITY
	+DROPOFF 
	+THRUACTORS
	States {
		SpawnState:
			SPPJ A 1
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlowSmall", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_CustomMissile("ScatterShotXDMG", 0, 0, 0, CMF_TRACKOWNER)
		Loop
		Death:
			TNT1 A 0
			TNT1 A 0 A_PlaySound("SPRPIMPT",5,0.12,0)
			TNT1 A 0 A_SetScale(0.08)
			SPRI ABCDE 1
		Stop
	}
}

Actor ScatterSpark_Crit : ScatterSpark {
	Accuracy 69
	States {
		SpawnState:
			SPPJ A 1
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlowSmall", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
			TNT1 A 0 A_CustomMissile("ScatterShotXDMG_Crit", 0, 0, 0, CMF_TRACKOWNER)
		Loop
	}
}

ACTOR ScatterShotXDMG : DnD_BaseProjectile {
	Speed 2
	Radius 6
	Height 7
	
	Damage (
		DND_WEAPON_SCATTERGUN |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 0
	
	+NODAMAGETHRUST
	+FOILINVUL
	States {
		SpawnState:
			TNT1 A 1
		Stop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor ScatterShotXDMG_Crit : ScatterShotXDMG {
	Accuracy 69
}

Actor RubyWand : Weapon {
	Inventory.PickupSound ""
	Inventory.PickupMessage "You got the Ruby Wand!"
	Obituary "%k toasted %o."
	Weapon.AmmoType "RubyAmmo"
	Weapon.AmmoGive 0
	Weapon.SelectionOrder 2400
	Weapon.AmmoUse 0
	Weapon.SlotNumber 2
	+WEAPON.AMMO_OPTIONAL
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.8
	Tag "$WEP_1_4_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			WAND F -1 Bright
		Loop
		Ready:
			WAND A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot2", 1)
		DeselectLoop:
			WAND A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			  TNT1 A 0 A_GiveInventory("H_WeaponSlot2", 1)
			  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 3 | (6 << 16), DND_WEAPON_RUBYWAND)
			  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 25, 0, DND_WEAPON_RUBYWAND)
			  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 8, 4 | (8 << 16), DND_WEAPON_RUBYWAND)
			  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 24, 0, DND_WEAPON_RUBYWAND)
	    SelectLoop:
			WAND A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RUBYWAND, 0, 3), "FireConfirmed")
			WAND A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	  Goto Fire2
	  FireConfirmed:
			WAND A 3 Bright 
			WAND B 0 A_GunFlash
			WAND B 0 A_PlayWeaponSound("RubyWand/Fire")
			WAND B 1 Bright Offset(0, 33)
			WAND B 1 Bright Offset(0, 35)
			WAND B 1 Bright Offset(0, 38)
			WAND C 1 Bright Offset(0, 42) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RUBYWAND, DND_ATK_PRIMARY, DND_AMMOSLOT_CLIP | (AMMO_RUBY << 16), DND_ATF_CANFIRECIRCLE)
			WAND C 1 Bright Offset(0, 41)
			WAND C 1 Bright Offset(0, 40)
			WAND C 1 Bright Offset(0, 39)
			WAND A 1 Offset(0, 36)
			WAND A 1 Offset(0, 35)
			WAND A 1 Offset(0, 34)
			WAND A 1 Offset(0, 33)
			WAND A 1 Offset(0, 33)
		Goto Ready
		Fire2:
			WAND A 3 Bright 
			WAND B 0 A_GunFlash
			WAND B 0 A_PlayWeaponSound("RubyWand/Fire")
			WAND B 1 Bright Offset(0, 33)
			WAND B 1 Bright Offset(0, 35)
			WAND B 1 Bright Offset(0, 38)
			WAND C 1 Bright Offset(0, 42) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RUBYWAND, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_CLIP | (AMMO_RUBY << 16), DND_ATF_NOAMMOGAINCHECK | DND_ATF_NOAMMOTAKE)
			WAND C 1 Bright Offset(0, 41)
			WAND C 1 Bright Offset(0, 40)
			WAND C 1 Bright Offset(0, 39)
			WAND A 1 Offset(0, 36)
			WAND A 1 Offset(0, 35)
			WAND A 1 Offset(0, 34)
			WAND A 1 Offset(0, 33)
			WAND A 1 Offset(0, 33)
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RUBYWAND, 1), "AltFireConfirmed")
			WAND A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			WAND A 1 Offset(0, 33)
			WAND A 1 Offset(-1, 34)
			WAND A 1 Offset(1, 32)
			WAND A 1 Offset(0, 33)
			WAND A 1 Offset(-1, 32)
			WAND A 1 Offset(1, 33)
			WAND A 3 Bright Offset(0, 33)
			WAND B 0 A_GunFlash
			WAND B 0 A_PlayWeaponSound("RubyWand/Alt")
			WAND B 1 Bright Offset(0, 33)
			WAND B 1 Bright Offset(0, 35)
			WAND B 1 Bright Offset(0, 38)
			WAND C 1 Bright Offset(0, 42) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RUBYWAND, DND_ATK_SECONDARY, DND_AMMOSLOT_CLIP | (AMMO_RUBY << 16), 0)
			WAND C 1 Bright Offset(0, 41)
			WAND C 1 Bright Offset(0, 40)
			WAND C 1 Bright Offset(0, 39)
			WAND A 1 Offset(0, 36)
			WAND A 1 Offset(0, 35)
			WAND A 1 Offset(0, 34)
			WAND A 1 Offset(0, 33)
			WAND A 6 A_WeaponReady(WRF_NOSECONDARY | WRF_NOSWITCH)
		Goto Ready
	}
}

Actor RubyShot : DnD_BaseProjectile {
	Radius 3
	Height 6
	Speed 30
	RENDERSTYLE "Add"
	ALPHA 0.75
	DeathSound "RubyWand/Hit"
	
	Damage (
		DND_WEAPON_RUBYWAND |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 0
	
	+THRUGHOST
	+FORCEXYBILLBOARD
	States {
		SpawnState:
			VBAL A 3 Bright
			TNT1 A 0 A_SpawnItemEx("RubyFireTrail")
			VBAL B 3 Bright
			TNT1 A 0 A_SpawnItemEx("RubyFireTrail")
		loop
		Death:
			TNT1 A 0 A_SpawnItemEx("RedParticleSpawner")
			WBAL FGHIJ 3 Bright
		Stop
	}
}

Actor RubyShot_GhostHitter : RubyShot {
	-THRUGHOST
}

Actor RubyFiretrail {   
   +NOINTERACTION
   +CLIENTSIDEONLY
   +FORCEXYBILLBOARD
   RENDERSTYLE ADD
   ALPHA 0.75
   States {
	   Spawn:
		  TNT1 A 2 bright
		  RUFX AB 2 bright
		  RUFX C 2 Bright A_SetTranslucent (0.33)
		  RUFX DEF 2 BRIGHT
	  Stop 
   }
}

Actor RubyFlameTrail {
	Height 1
	Radius 1
	+NOINTERACTION
	+CLIENTSIDEONLY
	Renderstyle Add
	Alpha 1.0
	States {
		Spawn:
			CFFX NOP 3 Bright
		Stop
	}
}

Actor RubyCircleFlame : DnD_ExplosiveBase {
	Radius 6
	Height 12
	RenderStyle "Add"
	DeathSound "ClericFlameCircle"
	const float rubyspeed = 5.0;
	
	Damage (
		DND_WEAPON_RUBYWAND |
		(DND_DMGID_2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 0
	
	+THRUGHOST
	+FORCERADIUSDMG
	States {
		SpawnState:
			CFCF A 4 Bright
			CFCF B 2 Bright A_ChangeVelocity(rubyspeed * cos(angle), rubyspeed * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_SetAngle(angle + 6.0)
			CFCF C 2 Bright
			CFCF D 1 Bright
			CFCF E 2 Bright
			CFCF F 2 Bright A_ChangeVelocity(rubyspeed * cos(angle), rubyspeed * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_SetAngle(angle + 6.0)
			CFCF G 1 Bright
			CFCF HI 2 Bright
			CFCF J 1 Bright A_ChangeVelocity(rubyspeed * cos(angle), rubyspeed * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_SetAngle(angle + 6.0)
			CFCF K 2 Bright
			CFCF LM 3 Bright
			CFCF N 2 Bright A_ChangeVelocity(rubyspeed * cos(angle), rubyspeed * sin(angle), velz, CVF_REPLACE)
			TNT1 A 0 A_SetAngle(angle + 6.0)
			CFCF O 3 Bright
			CFCF P 2 Bright
		Stop
		Death:
			TNT1 A 0 A_SetUserVar(
				"user_expdmg", 
				DND_WEAPON_RUBYWAND |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 32)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", 0)
			CFCF QR 3 Bright
			CFCF S 3 Bright
		Goto DoExplosionDamage
		ContinueFromExplosion:
			CFCF TUVWXYZ 3 Bright
		Stop
	}
}

Actor RubyFlameMissile : DnD_BaseFastProjectile {
	Speed 128
	Radius 14
	Height 8
	RenderStyle Add
	
	Damage (
		DND_WEAPON_RUBYWAND |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_FIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+INVISIBLE
	+THRUGHOST
	States {
		SpawnState:
			CFFX A 3 Bright ACS_NamedExecuteWithResult("DND Trail Spawner", DND_TRAILACTOR_RUBYFLAME, 32, 0)
			TNT1 A 0 A_ChangeFlag("INVISIBLE", 0)
		Goto NoExplode
		Death:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame", 0, 0, 335, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItem("RedParticleSpawner")
		Goto NoExplode
		Crit:
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_Crit", 0, 0, 335, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItem("RedParticleSpawner")
		NoExplode:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("INVISIBLE", 0)
			CFFX ABC 3 Bright
			CFFX D 4 Bright
			CFFX E 3 Bright
			CFFX F 4 Bright
			CFFX G 3 Bright
			CFFX H 4 Bright
			CFFX I 3 Bright
			CFFX J 4 Bright
			CFFX K 3 Bright
			CFFX L 4 Bright
			CFFX M 3 Bright
		Stop
	}
}

Actor RubyCircleFlame_Crit : RubyCircleFlame {
	Accuracy 69
}

Actor RubyFlameMissile_GhostHitter : RubyFlameMissile {
	-THRUGHOST
	States {
		Death:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter", 0, 0, 335, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItem("RedParticleSpawner")
		Goto NoExplode
		Crit:
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 45, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 90, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 135, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 180, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 225, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 270, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("RubyCircleFlame_GhostHitter_Crit", 0, 0, 335, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_SpawnItem("RedParticleSpawner")
		NoExplode:
			TNT1 A 0 A_Stop
			TNT1 A 0 A_ChangeFlag("INVISIBLE", 0)
			CFFX ABC 3 Bright
			CFFX D 4 Bright
			CFFX E 3 Bright
			CFFX F 4 Bright
			CFFX G 3 Bright
			CFFX H 4 Bright
			CFFX I 3 Bright
			CFFX J 4 Bright
			CFFX K 3 Bright
			CFFX L 4 Bright
			CFFX M 3 Bright
		Stop
	}
}

Actor RubyCircleFlame_GhostHitter : RubyCircleFlame {
	-THRUGHOST
}

Actor RubyCircleFlame_GhostHitter_Crit : RubyCircleFlame_GhostHitter {
	Accuracy 69
}