// Sprites by Eriance
Actor "Plasma Rifle" : PlasmaRifle
{	
   Weapon.Slotnumber 6
   Weapon.SelectionOrder 300
   +INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Weapon.AmmoUse 0
	Weapon.AmmoGive 0
	Tag "$WEP_6_0_TAG"
	+WEAPON.NOAUTOAIM
   States
   {
   Spawn:
      NRAI E -1
      Stop
   Ready:
      NRAI Y 3 A_WeaponReady
      Loop
   Deselect:
      TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
      TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
	  TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
   DeselectLoop:
      NRAI Y 1 A_Lower
	  TNT1 A 0 A_Lower
      Loop
   Select:
      TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
      TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
	  TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
	  TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 4 | (8 << 16), DND_WEAPON_PLASMARIFLE)
	SelectLoop:
      NRAI Y 1 A_Raise
	  TNT1 A 0 A_Raise
      Loop
   Fire:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_PLASMARIFLE, 0), "FireConfirmed")
		NRAI A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	Goto Ready
	FireConfirmed:
      TNT1 A 0 A_Jump(256, "Fire1", "Fire2", "Fire3", "Fire4")
   Fire1:
	  NRAI A 1 Bright A_Gunflash
	  TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  NRAI A 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
	  NRAI X 3 A_Refire
      Goto Cooldown
   Fire2:
	  NRAI B 1 Bright A_Gunflash
	  TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  NRAI B 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
	  NRAI X 3 A_Refire
      Goto Cooldown
   Fire3:
	  NRAI C 1 Bright A_Gunflash
	  TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  NRAI C 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
	  NRAI X 3 A_Refire
      Goto Cooldown
   Fire4:
	  NRAI D 1 Bright A_Gunflash
	  TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
	  NRAI D 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_PLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
	  NRAI X 3 A_Refire  
   Cooldown:
	  NRAI F 1 A_PlaySound("Weapons/PlasmaCharge")
	  NRAI GHIJKLMNMLKJIHGF 1
	  Goto Ready
   Flash:
      TNT1 A 1 A_Light1
      TNT1 A 1 A_Light2
      TNT1 A 1 A_Light1
      TNT1 A 1 A_Light0
      stop
   }
}

// Sprites by Eriance -- edited version taken from Yholl's Doom RPG Arsenal
Actor "Upgraded Plasma Rifle" : PlasmaRifle {	
	Weapon.Slotnumber 6
	Weapon.AmmoType2 "PlasmaOverheat"
	Tag "$WEP_6_1_TAG"
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Weapon.AmmoGive 0
	States {
		Spawn:
			QNPL Z -1
		Stop
		Ready:
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		ReadyLoop:
			TNT1 A 0 A_GiveInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Overheat Reduction", 0, DND_OVERHEAT_NUCLEARPR, 1 | (1 << 16))
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
			TNT1 A 0 A_GunFlash("FlashC", GFF_NOEXTCHANGE)
			QNPL A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
		    TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
			QNPL A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 6, 6 | (10 << 16), DND_WEAPON_NUCLEARPLASMARIFLE)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 10, 1 | (3 << 16), DND_WEAPON_NUCLEARPLASMARIFLE)
	    SelectLoop:
			QNPL A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_NUCLEARPLASMARIFLE, 0), "FireConfirmed")
			QNPL A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Beep
		FireConfirmed:
			TNT1 A 0 A_TakeInventory("DnD_OverheatCanReduce", 1)
			TNT1 A 0 A_Jump(256, "Fire1", "Fire2", "Fire3", "Fire4")
		Fire1:
			QNPL B 1 Bright A_Gunflash
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			QNPL B 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NUCLEARPLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TNT1 A 0 A_Refire
			TNT1 A 0 A_PlayWeaponSound("weapons/plasmacharge")
		Goto Cooldown
		Fire2:
			QNPL C 1 Bright A_Gunflash("FlashB")
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			QNPL C 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NUCLEARPLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TNT1 A 0 A_Refire
			TNT1 A 0 A_PlayWeaponSound("weapons/plasmacharge")
		Goto Cooldown
		Fire3:
			QNPL E 1 Bright A_Gunflash
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			QNPL E 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NUCLEARPLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TNT1 A 0 A_Refire
			TNT1 A 0 A_PlayWeaponSound("weapons/plasmacharge")
		Goto Cooldown
		Fire4:
			QNPL F 1 Bright A_Gunflash("FlashB")
			TNT1 A 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*25, 0,30+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			QNPL F 2 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NUCLEARPLASMARIFLE, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TNT1 A 0 A_Refire 
			TNT1 A 0 A_PlayWeaponSound("weapons/plasmacharge")
		Goto Cooldown
		Beep:
			TNT1 A 0 A_PlaySound("weapons/plasmabeep", 5)
		Cooldown:
			QNPL A 2 A_WeaponReady(WRF_NOSWITCH | WRF_NOFIRE)
		Goto Ready
		Flash:
			TNT1 A 0 A_Light0
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 4, 2)
			TNT1 A 6
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 8, 2)
			QNP1 X 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 12, 2)
			QNP1 W 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 16, 2)
			QNP1 V 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 20, 2)
			QNP1 U 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 24, 2)
			QNP1 T 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 28, 2)
			QNP1 S 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 32, 2)
			QNP1 R 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 36, 2)
			QNP1 Q 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 40, 2)
			QNP1 P 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 44, 2)
			QNP1 O 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 48, 2)
			QNP1 N 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 52, 2)
			QNP1 M 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 56, 2)
			QNP1 L 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 60, 2)
			QNP1 K 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 64, 2)
			QNP1 J 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 68, 2)
			QNP1 I 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 72, 2)
			QNP1 H 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 76, 2)
			QNP1 G 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 80, 2)
			QNP1 F 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 84, 2)
			QNP1 E 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 88, 2)
			QNP1 D 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 92, 2)
			QNP1 C 6 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 96, 2)
			QNP1 B 6 Bright
			Goto FlashFinish
			QNP1 A 6 Bright
		    FlashFinish:
			TNT1 A 0 A_Light0
			Goto LightDone
			FlashB:
			TNT1 A 0 A_Light1
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 4, 2)
			TNT1 A 4
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 8, 2)
			QNP2 X 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 12, 2)
			QNP2 W 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 16, 2)
			QNP2 V 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 20, 2)
			QNP2 U 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 24, 2)
			QNP2 T 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 28, 2)
			QNP2 S 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 32, 2)
			QNP2 R 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 36, 2)
			QNP2 Q 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 40, 2)
			QNP2 P 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 44, 2)
			QNP2 O 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 48, 2)
			QNP2 N 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 52, 2)
			QNP2 M 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 56, 2)
			QNP2 L 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 60, 2)
			QNP2 K 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 64, 2)
			QNP2 J 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 68, 2)
			QNP2 I 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 72, 2)
			QNP2 H 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 76, 2)
			QNP2 G 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 80, 2)
			QNP2 F 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 84, 2)
			QNP2 E 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 88, 2)
			QNP2 D 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 92, 2)
			QNP2 C 4 Bright
			Goto FlashFinish
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 96, 2)
			QNP2 B 4 Bright
			Goto FlashFinish
			QNP2 A 4 Bright
			Goto FlashFinish
		FlashC:
			TNT1 A 0 A_Light0
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 4, 2)
			TNT1 A 6
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 8, 2)
			QNP1 X 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 12, 2)
			QNP1 W 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 16, 2)
			QNP1 V 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 20, 2)
			QNP1 U 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 24, 2)
			QNP1 T 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 28, 2)
			QNP1 S 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 32, 2)
			QNP1 R 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 36, 2)
			QNP1 Q 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 40, 2)
			QNP1 P 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 44, 2)
			QNP1 O 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 48, 2)
			QNP1 N 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 52, 2)
			QNP1 M 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 56, 2)
			QNP1 L 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 60, 2)
			QNP1 K 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 64, 2)
			QNP1 J 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 68, 2)
			QNP1 I 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 72, 2)
			QNP1 H 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 76, 2)
			QNP1 G 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 80, 2)
			QNP1 F 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 84, 2)
			QNP1 E 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 88, 2)
			QNP1 D 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 92, 2)
			QNP1 C 6 Bright
			Stop
			TNT1 A 0 A_JumpIfInventory("PlasmaOverheat", 96, 2)
			QNP1 B 6 Bright
			Stop
			QNP1 A 6 Bright
			Stop
	}
}

Actor PlasmaOverheatCooldown : PowerDamage {
	damagefactor "normal", 1.0
	powerup.duration -3
}

Actor PlasmaBallX : DnD_BaseProjectile {
	Radius 8
	Height 16
	Speed 25
	+RANDOMIZE
	RenderStyle Add
	Alpha 0.75
	Decal "PlasmaScorchX"
	Translation "0:255=%[0.00,0.00,0.00]:[1.05,1.05,2.00]", "4:4=4:4", "224:229=224:229"
	SeeSound "weapons/plasmaf"
	DeathSound "weapons/plasmax"
	
	Damage(
		DND_WEAPON_PLASMARIFLE |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	States {
		SpawnState:
			PLSS AAABBB 2 Bright A_SpawnItemEx("BlueParticleNoGravityFastVanish",Random(-12,12),Random(-12,12),Random(-12,12),Random(-2,2),Random(-2,2),Random(-2,2),Random(-20,20),128)
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			PLSE ABCDE 4 Bright
		Stop
	}
}

Actor NewPlasmaBall : DnD_ExplosiveBase {
	Radius 8
	Height 16
	Speed 25
	+RANDOMIZE
	Decal "PlasmaScorchX"
	SeeSound "Weapons/newplasmafire"
	Alpha 0.85
	Renderstyle Add
	Scale 0.15
	Deathsound "weapons/plasmahit"
	
	Damage(
		DND_WEAPON_NUCLEARPLASMARIFLE |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FORCERADIUSDMG
	States {
		SpawnState:
			BFLR AB 2 Bright A_SpawnItemEx("BlueParticleNoGravityFastVanish",Random(-12,12),Random(-12,12),Random(-12,12),Random(-2,2),Random(-2,2),Random(-2,2),Random(-20,20),128)
		Loop
		Death:
			TNT1 A 0 A_SpawnItemEx ("PlasmaFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_NUCLEARPLASMARIFLE |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 48)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_HALFDMGSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 5 A_SpawnItem("NewPlasmaExplosion")
		Goto Stop
	}
}

actor PlasmaSparkFX : ExplosiveSpark {
	Renderstyle Add
	Alpha 0.8
    States {
		Spawn:
			DXSK B 1 BRIGHT A_FadeOut(0.01)
		loop
    }
}

Actor NewPlasmaExplosion {
	Radius 1
	Height 1
	Alpha 0.85
	Renderstyle Add
	Scale 0.35
	+NOINTERACTION
	+CLIENTSIDEONLY
	States {
		Spawn:
			TNT1 A 0 A_SetTranslucent(0.75)
			TNT1 A 0 A_SpawnDebris("PlasmaSparkFX")
			TXP1 ABCD 1 Bright A_Fadeout(0.05)
			TNT1 A 0 A_SpawnDebris("PlasmaSparkFX")
			TXP1 EFGH 1 Bright A_Fadeout(0.05)
			TNT1 A 0 A_SpawnDebris("PlasmaSparkFX")
			TXP1 IJKL 1 Bright A_Fadeout(0.05)
			TNT1 A 0 A_SpawnDebris("PlasmaSparkFX")
			TXP1 MNOP 1 Bright A_Fadeout(0.05)
		Stop
	}
}

Actor "Upgraded Plasma Rifle2" : Weapon {
    Weapon.Slotnumber 6
    Weapon.SelectionOrder 300
    +INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.35
	Weapon.BobRangeX 0.6
	Weapon.AmmoGive 0
	Weapon.AmmoUse1 2
	Weapon.AmmoUse2 2
	Weapon.AmmoType1 "Cell"
	Weapon.AmmoType2 "Cell"
	Tag "$WEP_6_2_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			TURL X -1
		Stop
		Ready:
			TURL A 1 A_WeaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
			TNT1 A 0 A_TakeInventory("DnD_UsingEnergy", 1)
			TURL A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 A_GiveInventory("DnD_UsingEnergy", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 80, 0, DND_WEAPON_TURELCANNON)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 135, 0, DND_WEAPON_TURELCANNON)
	    SelectLoop:
			TURL A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_TURELCANNON, 0), "FireConfirmed")
			TURL A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TURL BC 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/turelfire")
			TNT1 A 0 A_GunFlash
			TNT1 AAA 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20,2 + random(0, 3),27+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 Radius_Quake (1, 4, 0, 1, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TURELCANNON, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TURL DEFG 1 Bright
			TURL H 2
			TURL A 3 A_Refire
		Goto Ready
		Hold:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_TURELCANNON, 0), "HoldConfirmed")
			TURL A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		HoldConfirmed:
			TURL BC 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/turelfire")
			TNT1 A 0 A_GunFlash
			TNT1 AAA 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20,2 + random(0, 3),27+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 Radius_Quake (1, 4, 0, 1, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TURELCANNON, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TURL DEFG 1 Bright
			TURL H 2
			TURL A 3 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_TURELCANNON, 0), "AltFireConfirmed")
			TURL A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			TURL A 1 Offset(2, 33)
			TNT1 A 0 A_PlayWeaponSound("weapons/plasmacharge")
			TURL A 1 Offset(0, 34)
			TURL A 1 Offset(-2, 33)
			TURL A 1 Offset(-3, 32)
			TURL A 1 Offset(1, 34)
			TURL A 1 Offset(0, 33)
			TURL A 1 Offset(2, 34)
			TURL A 1 Offset(-3, 32)
			TURL A 1 Offset(1, 32)
			TURL A 1 Offset(-1, 34)
			TURL BC 1 Bright Offset(0, 32)
			TNT1 A 0 A_PlayWeaponSound("weapons/turelfire")
			TNT1 A 0 A_GunFlash
			TNT1 AAA 0 A_SpawnItemEx ("PlasmaSmoke",cos(-pitch)*20,2 + random(0, 3),27+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 Radius_Quake (1, 4, 0, 1, 0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_TURELCANNON, DND_ATK_SECONDARY, DND_AMMOSLOT_CELL | (AMMO_CELL << 16), 0)
			TURL DEFG 1 Bright
			TURL H 2
			TURL A 10
		Goto Ready
	   Flash:
		  TNT1 A 1 A_Light1
		  TNT1 A 1 A_Light2
		  TNT1 A 1 A_Light1
		  TNT1 A 1 A_Light0
		  stop
	}
}

Actor TurelShooter1 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_TURELCANNON |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0, 1, "", "", RGF_SILENT | RGF_FULLBRIGHT, 0, "TurelPuff1", 0, 0, 1024, 27, 3.5, 1.0, "TurelParticle", 4
			)
		Stop
	}
}

Actor TurelShooter2 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_TURELCANNON |
				(DND_DMGID_0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0, 1, "", "", RGF_SILENT | RGF_FULLBRIGHT, 64, "TurelPuff1", 6.4 * (1.0 - accuracy * accuracy_factor), 3.2 * (1.0 - accuracy * accuracy_factor), 1024, 27, 3.5, 1.0, "TurelParticle", 4
			)
		Stop
	}
}

Actor TurelShooter3 : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_RailAttack(
				DND_WEAPON_TURELCANNON |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT), 
				0, 1, "", "", RGF_SILENT | RGF_FULLBRIGHT, 0, "TurelPuff2", 0, 0, 1576, 27, 3.5, 1.0, "TurelParticle", 4
			)
		Stop
	}
}

Actor TurelPuff1 : DnD_BaseRailPuff {
	Height 24
	Radius 12
	Renderstyle Add
	Alpha 0.75
	Scale 0.8
	
	Stamina 536875008
	
	+FORCEXYBILLBOARD
	States {
		Spawn:
		Crash:
			TNT1 AAAA 0
			LTNG AABBCCDDEEFFGG 1 Bright A_FadeOut(0.05)
		Stop
		HitNoBlood:
		Goto Crash
	}
}

Actor TurelPuff2 : TurelPuff1 {
	Stamina 4096
}

Actor TurelParticle {
	Height 10
	Radius 6
	Renderstyle Add
	Alpha 0.75
	+NOGRAVITY
	+NOTELEPORT
	+CLIENTSIDEONLY
	Scale 0.375
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_Recoil(-9.6)
			TNT1 A 1
			TNT1 A 0 A_Stop
			LPUF AABB 1 Bright A_FadeOut(0.075)
			LPUF CDE 1 Bright A_FadeOut(0.075)
		Stop
	}
}

Actor NailCounter : DND_Boolean { }

Actor "Nailgun" : Weapon {
	Weapon.Slotnumber 6
	Weapon.SelectionOrder 315
	Weapon.AmmoType "NailgunAmmo"
	Weapon.AmmoType2 "NailgunAmmo"
	Weapon.AmmoGive 15
	Weapon.Ammouse 0
	Weapon.AmmoUse2 2
    Inventory.PickupSound "weapons/pickup"
    Inventory.PickupMessage "You got the nailgun!"
	Obituary "%o was nailed by %k's nailgun."
	+INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Tag "$WEP_6_9_TAG"
	+WEAPON.NOAUTOAIM
	States
	{
		Spawn:
			NAIG A -1
		Stop
		Ready:
			DNLG A 1 A_weaponReady
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
			DNLG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 1, 13 | (21 << 16), DND_WEAPON_NAILGUN)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 20, 0, DND_WEAPON_NAILGUN)
	    SelectLoop:
			DNLG A 1 A_Raise
			TNT1 A 0 A_Raise		
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_NAILGUN, 0), "FireConfirmed")
			DNLG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_JumpIfInventory("NailCounter", 1, "Fire2")
			DNLG BC 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/nailfire")
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,-3,36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NAILGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_NAIL << 16), 0)
			DNLG DE 1 Bright
			DNLG K 3 A_Refire
		Goto Ready
		Fire2:
			DNLG FG 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/nailfire")
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,3,36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NAILGUN, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_NAIL << 16), 0)
			DNLG HI 1 Bright
			DNLG J 3 A_Refire
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_NAILGUN, 1), "AltFireConfirmed")
			DNLG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			TNT1 A 0 A_JumpIfInventory("NailCounter", 1, "AltFire2")
			DNLG BC 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/nailfire")
			TNT1 AA 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,-3,36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NAILGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_CELL | (AMMO_NAIL << 16), 0)
			DNLG DE 1 Bright
			DNLG K 3 A_Refire
			TNT1 A 0 A_PlaySound("Weapons/lavanail")
		Goto Ready
		AltFire2:
			DNLG FG 1 Bright
			TNT1 A 0 A_PlayWeaponSound("weapons/nailfire")
			TNT1 AA 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,3,36+(sin(-pitch)*20),0,0,2,0,0,0)
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_NAILGUN, DND_ATK_SECONDARY, DND_AMMOSLOT_CELL | (AMMO_NAIL << 16), 0)
			DNLG HI 1 Bright
			DNLG J 3 A_Refire
			TNT1 A 0 A_PlaySound("Weapons/lavanail")
		Goto Ready
	    Flash:
		    TNT1 A 3 A_Light1
		    TNT1 A 4 A_Light2
		    TNT1 A 3 A_Light1
		    TNT1 A 2 A_Light0
		stop
	}
}

Actor NailProjectile : DnD_BaseProjectile {
	Radius 3
	Height 4
	Speed 40
	Scale 0.5
	
	Damage(
		DND_WEAPON_NAILGUN |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULT << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+RIPPER
	+MTHRUSPECIES
	+BloodSplatter
	+DONTREFLECT
	+NODAMAGETHRUST
	+THRUGHOST
	SeeSound ""
	DeathSound ""
	Decal "BulletChip"
	States {
		SpawnState:
			NAIL AAAA 1 A_SpawnItemEx("NailBlur", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			NLPJ A 0 A_PlaySound("Weapons/NailRic")
			NLPJ BCDEFG 2
		Stop
	}
}

Actor NailProjectile_GhostHitter : NailProjectile {
	-THRUGHOST
}

Actor NailExplosion : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FOILINVUL
	+FORCERADIUSDMG
	+THRUGHOST
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 1
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_NAILGUN |
				(DND_DMGID_1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 32)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1
		Stop
	}
}

Actor NailExplosion_GhostHitter : NailExplosion {
	-THRUGHOST
}

Actor NailExplosion_Crit : NailExplosion {
	Accuracy 69
}

Actor NailExplosion_GhostHitter_Crit : NailExplosion_GhostHitter {
	Accuracy 69
}

Actor LavaNailProjectile : NailProjectile {
	+FOILINVUL
	States {
		SpawnState:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
		Crit:
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
		
	    Death:
			TNT1 AAAAAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "CritExp")
			TNT1 A 0 A_CustomMissile("NailExplosion", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		FinishAnim:
			NLPJ A 0 A_PlaySound("Weapons/NailRic")
			NLPJ BCDEFG 2
		Stop
		CritExp:
			TNT1 A 0 A_CustomMissile("NailExplosion_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
		Goto FinishAnim
	}
}

Actor LavaNailProjectile_GhostHitter : LavaNailProjectile {
	-THRUGHOST
	States {
		SpawnState:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
		Crit:
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			NAI2 A 1 Bright A_SpawnItemEx("NailBlur2", 0, 0, 0, 1, 0, 0, 180, 128)
			TNT1 A 0 A_CustomMissile("NailExplosion_GhostHitter_Crit", 0, 0, 0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_PlaySound("Weapons/NailFlight")
		Loop
	}
}

Actor NailBlur {
	Height 8
	Radius 1
	Damage 0
	Scale 0.6
	Speed 0.2
	RenderStyle Translucent
	Alpha 0.75
	+NoGravity
	+DropOff
	+NoTeleport
	+CLIENTSIDEONLY
	States {
		Spawn:
			NAIL A 1 A_FadeOut(0.35)
		Loop
	}
}

Actor NailBlur2 : NailBlur {
	States {
		Spawn:
			NAI2 A 1 A_FadeOut(0.35)
		Loop
	}
}

ACTOR Basilisk : Weapon {
	Inventory.PickupMessage "You got the basilisk!"
	Obituary "%k toasted %o with the basilisk."
	Weapon.AmmoType1 "BasiliskAmmo"
	Weapon.AmmoType2 "LoadedBasilisk"
	Weapon.AmmoUse2 1
	Weapon.AmmoGive 25
	Weapon.SelectionOrder 375
	Weapon.SlotNumber 6
	Weapon.AmmoUse1 1
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.4
	Weapon.BobRangeX 0.7
	Tag "$WEP_6_10_TAG"
	+ALT_AMMO_OPTIONAL
	+WEAPON.NOAUTOAIM
	+NOALERT
	States {
		Spawn:
			WBAS A -1 Bright
		Loop
		Ready:
			BASG A 3 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
			BASG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 6, 3 | (8 << 16), DND_WEAPON_BASILISK)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 12, 6 | (12 << 16), DND_WEAPON_BASILISK)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_2, 96, 0, DND_WEAPON_BASILISK)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_3, 32, 0, DND_WEAPON_BASILISK)
	    SelectLoop:
			BASG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BASILISK, 0), "FireConfirmed")
			BASG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			TNT1 A 0 A_AlertMonsters
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_JumpIfInventory("LoadedBasilisk", 1, "Fire2")
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG E 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG F 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG G 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG H 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 A_Refire
			BASG IJKL 2 Bright
			BASG A 2
			BASG B 3
			BASG C 4
			BASG D 5
		Goto Ready
		Fire2:
			BASG E 2 Bright
			TNT1 A 0 Radius_Quake(6,4,0,1,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG F 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 A_TakeInventory("LoadedBasilisk", 1)
			BASG G 2 Bright
			TNT1 A 0 Radius_Quake(6,4,0,1,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_BASILISK, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_CELL | (AMMO_LAVA << 16), 0)
			BASG H 2 Bright A_SetPitch(pitch - 0.5)
			TNT1 A 0 A_Refire("Fire")
			BASG IJKL 2 Bright
			BASG A 2
			BASG B 3
			BASG C 4
			BASG D 5
		Goto Ready
		AltFire:
		Reload:
			TNT1 A 0 A_JumpIfInventory("LoadedBasilisk", 0, "Full")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_BASILISK, 1), "LoadConfirmed")
			BASG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		LoadConfirmed:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFast")
			BASG A 2 Offset(6, 35)
			BASG A 2 Offset(12, 38)
			BASG A 2 Offset(18, 41)
			BASG A 2 Offset(24, 44)
			BASG A 2 Offset(30, 47)
			BASG A 2 Offset(32, 50)
			TNT1 A 0 A_PlaySound("weapons/basiliskload", 6)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Ammo Gain Chance", 0, DND_AMMOSLOT_CELL, AMMO_LAVA, 8)
			TNT1 A 0 A_JumpIfInventory("ArtemisCheck", 1, "NoTake")
			TNT1 A 0 A_TakeInventory("BasiliskAmmo", 8)
		NoTake:
			TNT1 A 0 A_GiveInventory("LoadedBasilisk", 1)
			BASG A 2 Offset(32, 44)
			BASG A 2 Offset(32, 48)
			BASG A 2 Offset(28, 44)
			BASG A 2 Offset(24, 40)
			BASG A 2 Offset(20, 36)
			BASG A 2 Offset(16, 35)
			BASG A 2 Offset(12, 34)
			BASG A 2 OFfset(8, 33)
			BASG A 2 Offset(2, 32)
		Goto Ready
		
		
		ReloadFast:
			BASG A 1 Offset(6, 35)
			BASG A 1 Offset(12, 38)
			BASG A 1 Offset(18, 41)
			BASG A 1 Offset(24, 44)
			BASG A 1 Offset(30, 47)
			BASG A 1 Offset(32, 50)
			TNT1 A 0 A_PlaySound("weapons/basiliskload", 6)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Ammo Gain Chance", 0, DND_AMMOSLOT_CELL, AMMO_LAVA, 8)
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Take Ammo From Weapon", 0, DND_WEAPON_BASILISK, 0, 8)
		NoTake_Fast:
			TNT1 A 0 A_GiveInventory("LoadedBasilisk", 1)
			BASG A 1 Offset(32, 44)
			BASG A 1 Offset(32, 48)
			BASG A 1 Offset(28, 44)
			BASG A 1 Offset(24, 40)
			BASG A 1 Offset(20, 36)
			BASG A 1 Offset(16, 35)
			BASG A 1 Offset(12, 34)
			BASG A 1 OFfset(8, 33)
			BASG A 1 Offset(2, 32)
		Goto Ready
		Full:
			BASG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		Flash:
			TNT1 A 1
			TNT1 A 1 A_Light1
			TNT1 A 1 A_Light2
			TNT1 A 1 A_Light0
		stop   
   }
}

ACTOR BasiliskBall : DnD_BaseFastProjectile {
	Radius 5
	Height 8
	Speed 96
	RenderStyle ADD
	PROJECTILE
	
	Damage(
		DND_WEAPON_BASILISK |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FOILINVUL
	+FORCEXYBILLBOARD
	+MTHRUSPECIES
	+DONTBLAST
	SeeSound "weapons/magic1"
	DeathSound "weapons/firex5"
	States {
		SpawnState:
			BMIS A -1 Bright
		Stop
		Death:
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			IMFX QRSTUVW 3 Bright
		stop
	}
}

ACTOR BasiliskBall2 : DnD_ExplosiveBase {
	Speed 25
	Radius 8
	Height 16
	SeeSound "weapons/basiliskfire2"
	DeathSound "weapons/basiliskexpl2"
	Species "Player"
	
	Damage(
		DND_WEAPON_BASILISK |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+FOILINVUL
	+FORCERADIUSDMG
	States {
		SpawnState:
			BASF AB 3 Bright A_SpawnItemEx("BasiliskPuff",0,0,0,0,0,0,0,8)
		loop
		Death:
			TNT1 A 0 A_SetTranslucent(0.85, 1)
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 0 A_SpawnItemEx("YellowParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_BASILISK |
				(DND_DMGID_2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 96)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			BASF C 3 Bright
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,30,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,90,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,150,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,210,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,270,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3",0,0,0,35,0,0,330,0,0)
		FinishAnim:
			BASF DEFGH 3 Bright
		stop
		Crit:
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,30,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,90,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,150,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,210,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,270,0,0)
			TNT1 A 0 A_SpawnItemEx("BasiliskBall3_Crit",0,0,0,35,0,0,330,0,0)
		Goto FinishAnim
	}
}

ACTOR BasiliskBall3 : BasiliskBall2 {
	Radius 3
	Height 5
	DeathSound "weapons/basiliskexpl3"
	
	Damage(
		DND_WEAPON_BASILISK |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+THRUACTORS
	+FOILINVUL
	+FORCERADIUSDMG
	States {
		SpawnState:
			HIB1 A 3 Bright
			HIB1 B 3 Bright A_ChangeFlag("THRUACTORS", 0)
		SpawnLoop:
			HIB1 AB 3 Bright
		Loop
		Death:
			TNT1 A 0 A_SetTranslucent(0.75,1)
			TNT1 AAA 0 A_CustomMissile("FireballSmoke", 0, 0, random(0,360), 2, random(0,360))
			TNT1 A 0 A_SpawnItemEx("YellowParticleSpawner", 0, 0, 0, 0, 0, 0, 0, 128)
			TNT1 A 0 A_SpawnItemEx ("SunFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 A 0 A_SetDamageType("MagicFireExp")
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				DND_WEAPON_BASILISK |
				(DND_DMGID_3 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_OCCULTFIRE << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 32)
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			HIB1 C 3 Bright
			HIB1 DEFG 3 Bright
		stop
	}
}

Actor BasiliskBall3_Crit : BasiliskBall3 {
	Accuracy 69
}

ACTOR BasiliskPuff {
   RENDERSTYLE ADD
   ALPHA 0.75
   +NOGRAVITY
   +CLIENTSIDEONLY
   States {
	  Spawn:
		TNT1 A 3 Bright
		HLBL CDEFGHI 3 BRIGHT
      Stop 
   }
}

Actor "Upgraded Plasma Rifle3" : Weapon {
   Weapon.Slotnumber 6
   Weapon.SelectionOrder 300
   +INVENTORY.UNDROPPABLE
	Weapon.BobStyle InverseSmooth
	Weapon.BobSpeed 1.8
	Weapon.BobRangeY 0.5
	Weapon.BobRangeX 0.8
	Weapon.AmmoGive 0
	Weapon.AmmoUse 0
	Weapon.AmmoType "EverIce"
	Tag "$WEP_6_3_TAG"
	+WEAPON.NOAUTOAIM
	States {
		Ready:
			FSTF B 0 A_Jump(1, "Glow")
			FSTF B 1 A_WeaponReady
		Loop
		Glow:
			FSTF CCCCCCCCCC 1 A_WeaponReady
			FSTF CCCCCCCCC 1 A_WeaponReady
			FSTF CCCCCCCC 1 A_WeaponReady
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 5, 3 | (6 << 16), DND_WEAPON_FROSTFANG)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_1, 3, 2 | (3 << 16), DND_WEAPON_FROSTFANG)
		SelectLoop:
			FSTF B 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Deselect:
		    TNT1 A 0 A_TakeInventory("P_PlasmaFire", 1)
			TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
		DeselectLoop:
			FSTF B 1 A_Lower
			TNT1 A 0 A_lower
		Loop
		Fire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FROSTFANG, 0, 5), "FireConfirmed")
			FSTF B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		FireConfirmed:
			FSTF B 3
			FSTF C 4
			FSTF D 5
		Hold:
			TNT1 A 0 A_PlayWeaponSound("FrostFang/Fire1")
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			FSTF E 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF E 2 Bright Offset(1, 33) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF E 1 Bright Offset(-1, 35) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF E 2 Bright Offset(0, 36) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF E 1 Bright Offset(1, 38) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_PRIMARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF D 2 Offset(0, 36)
			FSTF D 2 Offset(0, 34)
			FSTF D 2 Offset(1, 32)
			FSTF D 3 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FROSTFANG, 2, 5), "Hold")
			FSTF C 4 Offset(1, 33)
			FSTF B 3 Offset(1, 33)
		Goto Ready
		AltFire:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_FROSTFANG, 1, 0), "AltFireConfirmed")
			FSTF B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		AltFireConfirmed:
			FSTF B 3
			FSTF C 4
			FSTF D 5
			FSTF D 1 Offset(1, 33)
			FSTF D 1 Offset(-1, 35)
			FSTF D 1 Offset(0, 36)
			FSTF D 1 Offset(1, 38)
			TNT1 A 0 A_PlayWeaponSound("Frostfang/Altfire")
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 16, 0, 32, 0.5, 0, frandom(-0.5, 0.5), frandom(-50, 50), 128)
			FSTF E 1 Bright Offset(0, 32) ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_FROSTFANG, DND_ATK_SECONDARY, DND_AMMOSLOT_CELL | (AMMO_EVERICE << 16), 0)
			FSTF E 2 Bright Offset(1, 33)
			FSTF E 1 Bright Offset(-1, 35)
			FSTF E 2 Bright Offset(0, 36)
			FSTF E 1 Bright Offset(1, 38)
			FSTF D 2 Offset(0, 36)
			FSTF D 2 Offset(0, 34)
			FSTF D 2 Offset(1, 32)
			FSTF D 3
			FSTF C 4 Offset(1, 33)
			FSTF B 3 Offset(0, 32)
			FSTF B 20 Offset(0, 32)
		Goto Ready
		Spawn:
			FSTF A -1
		Loop
	}
}

Actor FrostFangShard : DnD_BaseProjectile {
	Speed 40
	Radius 6
	Height 8
	DeathSound "FrostFang/Hit1"
	Scale 0.75
	RenderStyle Translucent
	Alpha 0.8
	
	Damage(
		DND_WEAPON_FROSTFANG |
		(DND_DMGID_0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	+THRUGHOST
	States {
		SpawnState:
			FFSD AAABBBCCC 1 Bright A_SpawnItemEx("FrostFangFog", -(MomX/1.4), -(MomY/1.4), (MomZ/1.4*-1), (MomX/1.4), (MomY/1.4), (MomZ/1.4), -Angle, 138)
		Loop
		Death:
			FFSD DEFGH 5 Bright
		Stop
	}
}

Actor FrostFangShard_GhostHitter : FrostFangShard {
	-THRUGHOST
}

Actor FrostFangShard_Glowing : FrostFangShard {
	Speed 28
	Renderstyle Add
	States {
		Spawn:
			FX39 HIJ 3 Bright
		Loop
		Death:
			FX39 DEFG 3 Bright
		Stop
	}
}

Actor FrostFangShard_Glowing_GhostHitter : FrostFangShard_Glowing {
	-THRUGHOST
}

Actor FrostFangShard_Glowing_Crit : FrostFangShard_Glowing {
	Accuracy 69
}

Actor FrostFangShard_Glowing_GhostHitter_Crit : FrostFangShard_Glowing_GhostHitter {
	Accuracy 69
}

Actor FrostFangBall : DnD_BaseProjectile {
	Radius 10
	Height 16
	+RIPPER
	+BLOODLESSIMPACT
	+THRUGHOST
	+MTHRUSPECIES
	Speed 8
	RenderStyle Add
	Alpha 1.0
	Scale 2.25
	Projectile
	DeathSound "FrostFang/Hit2"
	ReactionTime 45
	
	Damage(
		DND_WEAPON_FROSTFANG |
		(DND_DMGID_1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	var int user_count;
	states {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 AAA 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 BBB 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 CCC 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Crit:
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 AAA 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 BBB 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 CCC 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Death:
			FFBL CDEFG 4 Bright
		Stop
	}
}

Actor FrostFangBall_GhostHitter : FrostFangBall {
	-THRUGHOST
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
		SpawnLoop:
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 AAA 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 BBB 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 CCC 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Crit:
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 AAA 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 BBB 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 0 A_SpawnItemEx("FrostFangFog2", 0, 0, 0, Random(1, 2), 0, Random(-1, 1), Random(-30, 30), 128)
			FX39 CCC 1 Bright
			TNT1 A 0 A_SpawnItemEx("FrostFangBallParticle", 0, 0, 0, Random(3, 4), 0, Random(-0.5, 0.5), Random(-15, 15), 128)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 45 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 90 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 135 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 180 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 225 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 270 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_CustomMissile("FrostFangShard_Glowing_GhostHitter_Crit", 0, 0, 335 + user_count * 5.0, CMF_AIMDIRECTION | CMF_TRACKOWNER)
			TNT1 A 0 A_Countdown
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
	}
}

Actor FrostFangBallParticle {
	+NOINTERACTION
	+CLIENTSIDEONLY
	RenderStyle Add
	Alpha 0.8
	Scale 0.6
	States {
		Spawn:
			FFFG A 1 A_FadeOut(0.05)
		Loop
	}
}

Actor FrostFangFog : FrostFangBallParticle {
	Alpha 0.1
	XScale 0.4
	YScale 0.2
	States {
		Spawn:
			FFFG A 1 A_FadeOut(0.025)
		Loop
	}
}

Actor FrostFangFog2 : FrostFangBallParticle {
	XScale 0.6
	YScale 0.4
	States {
		Spawn:
			FFFG A 1 A_FadeOut(0.0066)
		Loop
	}
}

Actor RhinoRifle : Weapon
{
	Weapon.SelectionOrder 400
	Weapon.SlotNumber 6
    Inventory.PickupSound "weapons/pickup"
	Weapon.AmmoType1 "Clip"
	Weapon.AmmoType2 "MGClip7"
	Weapon.AmmoUse2 0
	Weapon.AmmoUse1 0
	Weapon.AmmoGive1 0
	Decal "BulletChip"
	+WEAPON.NOALERT
	AttackSound ""
	+INVENTORY.UNDROPPABLE
	+WEAPON.NOAUTOFIRE
	Tag "$WEP_6_8_TAG"
	Weapon.BobStyle InverseSmooth
    Weapon.BobSpeed 1.9
    Weapon.BobRangeY 0.3
    Weapon.BobRangeX 0.6
	+WEAPON.NOAUTOAIM
	States {
		Spawn:
			MAXP A -1
		Stop
		Ready:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "ReadyZoomed")
			MARG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		ReadyZoomed:
			MAZG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
		Loop
		Deselect:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "UnZoomDeselect")
		DeselectContinue:
		    TNT1 A 0 A_TakeInventory("H_WeaponSlot6", 1)
		DeselectLoop:
			MARG A 1 A_Lower
			TNT1 A 0 A_Lower
		Loop
		Select:
			TNT1 A 0 A_GiveInventory("H_WeaponSlot6", 1)
			TNT1 A 0 ACS_NamedExecuteWithResult("DND Weapon Damage Cache", DND_DMGID_0, 75, 0, DND_WEAPON_RHINORIFLE)
	    SelectLoop:
			MARG A 1 A_Raise
			TNT1 A 0 A_Raise
		Loop
		Fire:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "FireZoomed")
			TNT1 A 0 A_JumpIfInventory("SpecialAmmoMode_6", AMMO_GRENADE, "FireGrenade")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RHINORIFLE, 1), "FireConfirmed")
			MARG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Reload
		FireConfirmed:
			MARF A 1 Bright
			TNT1 A 0 A_GunFlash
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RHINORIFLE, DND_ATK_SECONDARY, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP7 << 16), 0)
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 18 * cos(-pitch), 2, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("RhinoCasing",cos(pitch)*28,-2,32+(sin(-pitch)*20),0,-8,random(4,10),0,0,0)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke",cos(-pitch)*20,5,36+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 A_PlaySound("RhinoRifle/Fire", CHAN_7)
			MARF A 1 Bright
			TNT1 A 0 A_SetPitch(pitch - 0.75)
			MARF BC 2
			MARG A 1 A_Refire
			MARG A 1 A_Refire
		Goto Ready
		FireZoomed:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RHINORIFLE, 1), "FireZoomConfirmed")
			MAZG A 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto UnzoomReload
		FireZoomConfirmed:
			MAZF A 1 Bright
			TNT1 A 0 A_GunFlash
			TNT1 A 0 A_SpawnItemEx("GunSmokeSmaller", 10 + 18 * cos(-pitch), 0, 32 * (1 + sin(-pitch)), 2, 0, 1)
			TNT1 A 0 A_SpawnItemEx ("RhinoCasing", 10 + cos(pitch)*28,-2,32+(sin(-pitch)*20),0,-8,random(4,10),0,0,0)
			TNT1 A 0 A_SpawnItemEx ("chaingunsmoke", 10 + cos(-pitch)*20,0,36+(sin(-pitch)*20),cos(-pitch)*0,0,2,0,0,0)
			TNT1 A 0 ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RHINORIFLE, DND_ATK_SECONDARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP7 << 16), 0)
			TNT1 A 0 A_PlaySound("RhinoRifle/Fire", CHAN_7)
			MAZF A 1 Bright
			TNT1 A 0 A_SetPitch(pitch - 1.5)
			MAZF BBC 1 A_SetPitch(pitch + 0.5)
			MAZF C 1
			MAZG A 2
		Goto Ready
		
		Reload:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Can Fire Weapon", DND_WEAPON_RHINORIFLE, 0), "ContinueReload")
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_ONLYBIGNADE, SPWEP_SLOT6), "DoModeSwitch")
			MARG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ContinueReload:
			TNT1 A 0 A_JumpIfInventory("MGClip7", 0, "ModeSwitch")
			TNT1 A 0 A_JumpIfInventory("MGClip7", 1, "NoCock")
			TNT1 A 0 A_GiveInventory("HadFullEmptyClip", 1)
		NoCock:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "UnzoomReload")
		ReloadZoomCont:
			TNT1 A 0 A_JumpIfInventory("Ability_Reloader", 1, "ReloadFaster")
			MAYR A 2
			MAYR B 5
			MAYR CDE 2
			MAYR F 2 A_PlaySound("RhinoRifle/ClipOut")
			TNT1 A 0 A_FireCustomMissile("RhinoClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			MAYR GH 3
			MAYR I 28
			MAYR JK 3
			MAYR LM 2
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Handle Reload", 0, DND_WEAPON_RHINORIFLE)
			TNT1 A 0 A_PlaySound("RhinoRifle/Clipin")
			MAYR N 3
			MAYR OPQ 2
			TNT1 A 0 A_JumpIfInventory("HadFullEmptyClip", 1, "Cock")
		Goto Ready
		Cock:
			TNT1 A 0 A_TakeInventory("HadFullEmptyClip", 1)
			MARC AB 4
			MARC C 5 A_PlaySound("RhinoRifle/Cock")
			MARC DEFG 3
		Goto Ready
		Failed:
			MARG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ReloadFaster:
			MAYR A 1
			MAYR B 2
			MAYR CDE 1
			MAYR F 1 A_PlaySound("RhinoRifle/ClipOut")
			TNT1 A 0 A_FireCustomMissile("RhinoClipDrop", frandom(-12.0, 12.0), 0, 0, 0)
			MAYR GH 2
			MAYR I 14
			MAYR JK 1
			MAYR LM 1
			TNT1 A 0 ACS_ExecuteAlways(998, 0, 7)
			TNT1 A 0 A_PlaySound("RhinoRifle/Clipin")
			MAYR N 1
			MAYR OPQ 1
			TNT1 A 0 A_JumpIfInventory("HadFullEmptyClip", 1, "CockFaster")
		Goto Ready
		CockFaster:
			TNT1 A 0 A_TakeInventory("HadFullEmptyClip", 1)
			MARC AB 2
			MARC C 3 A_PlaySound("RhinoRifle/Cock")
			MARC DEFG 1
		Goto Ready

		ModeSwitch:
			TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("DnD Weapon Can Switch Mode", AMMO_TYPE_ONLYBIGNADE, SPWEP_SLOT6), "DoModeSwitch")
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "ZoomedWait")
			MARG A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ZoomedWait:
			MAZG A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		DoModeSwitch:
			TNT1 A 0 A_JumpIfInventory("AmmoSwitchCooldown", 1, "Nothing")
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "ZoomModeSwitch")
			MARG 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_ONLYBIGNADE, SPWEP_SLOT6)
			MARG A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			MARG A 1 Offset(0, 50)
			MARG A 1 Offset(0, 59)
			MARG A 1 Offset(0, 68)
			MARG A 12 Offset(0, 77)
			MARG A 1 Offset(0, 68)
			MARG A 1 Offset(0, 56)
			MARG A 1 Offset(0, 44)
			MARG A 1 Offset(0, 32)
		Goto Ready
		ZoomModeSwitch:
			MAZG 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_ONLYBIGNADE, SPWEP_SLOT6)
			MAZG A 1 Offset(0, 41)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0)
			MAZG A 1 Offset(0, 50)
			MAZG A 1 Offset(0, 59)
			MAZG A 1 Offset(0, 68)
			MAZG A 12 Offset(0, 77)
			MAZG A 1 Offset(0, 68)
			MAZG A 1 Offset(0, 56)
			MAZG A 1 Offset(0, 44)
			MAZG A 1 Offset(0, 32)
		Goto Ready
		
		AltFire:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "UnZoom")
			MARZ A 1
			MARZ B 1
			MARZ C 1 Offset(0, 35) A_ZoomFactor(2.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope", CHAN_WEAPON)
			MARZ D 1 Offset(0, 32) A_GiveInventory("RhinoZoomed", 1)
			MARZ E 1 
			MARZ F 1 Offset(0, 35)
			MAZG A 1 Offset(0, 33)
		Goto Ready
		UnZoom:
			MARZ F 1 A_ZoomFactor(1.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope", CHAN_WEAPON)
			MARZ E 1 Offset(0, 35) A_TakeInventory("RhinoZoomed", 1)
			MARZ D 1 Offset(0, 32)
			MARZ C 1 Offset(0, 35)
			MARZ B 1
			MARZ A 1
		Goto Ready
		
		UnZoomDeselect:
			MARZ F 1 A_ZoomFactor(1.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope", CHAN_WEAPON)
			MARZ E 1 Offset(0, 35) A_TakeInventory("RhinoZoomed", 1)
			MARZ D 1 Offset(0, 32)
			MARZ C 1 Offset(0, 35)
			MARZ B 1
			MARZ A 1
		Goto DeselectContinue
		UnZoomReload:
			MARZ F 1 A_ZoomFactor(1.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope", CHAN_WEAPON)
			MARZ E 1 Offset(0, 35) A_TakeInventory("RhinoZoomed", 1)
			MARZ D 1 Offset(0, 32)
			MARZ C 1 Offset(0, 35)
			MARZ B 1
			MARZ A 1
		Goto ReloadZoomCont
		
		Nothing:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "ZoomNothing")
			MARG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		ZoomNothing:
			MAZG A 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
		Goto Ready
		
		FireGrenade:
			TNT1 A 0 A_JumpIfInventory("RhinoZoomed", 1, "FireGrenadeZoomed")
			MARF X 1 Bright
			TNT1 A 0 A_PlaySound("GenericGL/Fire", 6)
			TNT1 A 0 A_PlaySound("GenericGL/FireAdd", 7)
			MARF X 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RHINORIFLE, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP7 << 16), 0)
			MARD A 6
			MARD BC 3
			MARG A 1
			MARQ AB 2
			TNT1 A 0 A_PlaySound("GenericGL/Open", 6)
			MARQ C 2
			MARQ D 27 A_PlaySound("GenericGL/Insert", 7)
			MARQ D 8 A_PlaySound("GenericGL/Close", 7)
			MARQ CBA 2
			MARG AA 2 A_Refire
		Goto Ready
		FireGrenadeZoomed:
			MZYF A 1 Bright
			TNT1 A 0 A_PlaySound("GenericGL/Fire", 6)
			TNT1 A 0 A_PlaySound("GenericGL/FireAdd", 7)
			MZYF A 1 Bright ACS_NamedExecuteWithResult("DnD Fire Weapon", DND_WEAPON_RHINORIFLE, DND_ATK_PRIMARY | DND_ATK_OTHER_DIR, DND_AMMOSLOT_MAGAZINE | (DND_MAGAZINE_MGCLIP7 << 16), 0)
			MZYF B 3
			MZYF CDE 3
			MAZG A 1
			MARZ F 1 A_ZoomFactor(1.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope")
			MARZ E 1 Offset(0, 35) A_TakeInventory("RhinoZoomed", 1)
			MARZ D 1 Offset(0, 32)
			MARZ C 1 Offset(0, 35)
			MARZ B 1
			MARZ A 1
			MARQ AB 2
			TNT1 A 0 A_PlaySound("GenericGL/Open", 6)
			MARQ C 2
			MARQ D 27 A_PlaySound("GenericGL/Insert", 7)
			MARQ D 8 A_PlaySound("GenericGL/Close", 7)
			MARQ CBA 2
			MARZ A 1
			MARZ B 1
			MARZ C 1 Offset(0, 35) A_ZoomFactor(2.0)
			TNT1 A 0 A_PlaySound("Weapons/Scope")
			MARZ D 1 Offset(0, 32) A_GiveInventory("RhinoZoomed", 1)
			MARZ E 1 
			MARZ F 1 Offset(0, 35)
			MAZG A 1 Offset(0, 33)
		Goto Ready
		
		Flash:
			TNT1 A 2 A_Light1
			TNT1 A 2 A_Light2
			TNT1 A 2 A_Light1
			TNT1 A 1 A_Light0
		stop
	}
}

Actor RhinoZoomed : DnD_Boolean { }
Actor HadFullEmptyClip : DnD_Boolean { }

Actor RhinoPuff : DnD_BasePuff {
	Stamina 4096

	States {
		HitNoBlood:
		Goto Crash
	}
}