const int DND_SPECIALAMMOMSG_SCRIPT = 902;
const int DND_SPECIALAMMO_SCRIPT = 917;

enum {
	AMMO_TYPE_SHELL,
	AMMO_TYPE_MGGRENADE,
	AMMO_TYPE_GRENADE,
	AMMO_TYPE_SHELL2,
	AMMO_TYPE_ONLYBIGNADE,
	AMMO_TYPE_HEAVYSHELLS
};

enum {
	AMMO_SHELL,
	AMMO_FLECHETTE,
	AMMO_PIERCING,
	AMMO_ELECTRIC,
	
	AMMO_BULLET,
	AMMO_GRENADE,
	AMMO_40MMSONIC,
	AMMO_40MMHEGRENADE,
	
	AMMO_RIOTSHELL,
	AMMO_NITROGENSHELL,
	AMMO_EXPLOSIVESHELL,
	AMMO_SLUGSHELL
};

enum {
	SSAM_FLECHETTE,
	SSAM_MAGNUM,
	SSAM_SHOCK,
	SSAM_NITROSHELL,
	SSAM_SLUG,
	
	SSAM_40MM,
	SSAM_40MMSONIC,
	SSAM_40MMHE
};

enum {
	SPWEP_SG,
	SPWEP_SSG,
	SPWEP_MG,
	SPWEP_GL,
	SPWEP_SLOT6
};

Actor FlechetteHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("FlechetteShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_SHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot3", 1, "SetSG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3X", 0)
		Stop
		SetSG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3", 0)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor FlechettePuff : DnD_BasePuff {
	Scale 0.65
	
	Stamina 136192
	
	+FOILINVUL
	States {
		Spawn:
		Crash:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 AAAAA 0 A_SpawnItemEx("OrangeBallParticle5", 0, 0, frandom(-2.4, 2.4), frandom(-4.8, 4.8), frandom(-4.8, 4.8), frandom(-4.8, 4.8), 0, 128)
			TNT1 A 0 A_JumpIfInTargetInventory("DnD_CritToken", 1, "Crit")
			TNT1 AAA 0 A_CustomMissile("FlechetteShot", random(-4, 4), 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, random(-3, 3))
		FinishAnim:
			MPU9 A 4 A_PlaySound("Shells/FlechetteRic")
			MPU9 B 4
			MPU9 CDE 4
		stop
		Crit:
			TNT1 AAA 0 A_CustomMissile("FlechetteShot_Crit", random(-4, 4), 0, random(0, 360), CMF_TRACKOWNER | CMF_AIMDIRECTION, random(-3, 3))
		Goto FinishAnim
	}
}

Actor FlechetteShot : DnD_BaseProjectile {
	Speed 16
	Radius 4
	Height 4
	Scale 0.2
	+BRIGHT
	RenderStyle Add
	Gravity 0.75
	-NOGRAVITY
	+FOILINVUL
	+THRUACTORS
	States {
		SpawnState:
			SPPJ A 1 A_CustomMissile("FlechetteDamager", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_SpawnItemEx("ScatterPShotTrail", 0, 0, 8, 0, 0, 0, 0, SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlow", 0, 0, 0, 0, 0, 0, 0, 32)
		Loop
		Death:
			TNT1 A 0 A_SetScale(0.20)
			TNT1 AA 0 A_CustomMissile("FlechetteSpark",0,0,random(0,360),CMF_TRACKOWNER | CMF_AIMDIRECTION,random(0,12))
			TNT1 A 1 A_SpawnItem("FlechetteHitSpark")
		Stop
	}
}

Actor FlechetteShot_Crit : FlechetteShot {
	Accuracy 69
	States {
		SpawnState:
			SPPJ A 1 A_CustomMissile("FlechetteDamager_Crit", 0, 0, 0, CMF_TRACKOWNER)
			TNT1 A 0 A_SpawnItemEx("ScatterPShotTrail", 0, 0, 8, 0, 0, 0, 0, SXF_CLIENTSIDE)
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlow", 0, 0, 0, 0, 0, 0, 0, 32)
		Loop
		Death:
			TNT1 A 0 A_SetScale(0.20)
			TNT1 AA 0 A_CustomMissile("FlechetteSpark_Crit",0,0,random(0,360),CMF_TRACKOWNER | CMF_AIMDIRECTION,random(0,12))
			TNT1 A 1 A_SpawnItem("FlechetteHitSpark")
		Stop
	}
}

Actor FlechetteHitSpark {
	Scale 0.15
	+CLIENTSIDEONLY
	+NOINTERACTION
	States {
		Spawn:
			MPU9 A 4
			MPU9 B 4
			MPU9 CDE 4
		stop
	}
}

ACTOR FlechetteSpark : DnD_BaseProjectile {
	Speed 8
	Radius 4
	Height 4
	Scale 0.125
	Gravity 0.3
	+BRIGHT
	-NOGRAVITY
	+DROPOFF 
	+THRUACTORS
	RenderStyle Add
	States {
		SpawnState:
			SPPJ A 1
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlowSmall", 0, 0, 0, 0, 0, 0, 0, 32)
			TNT1 A 0 A_CustomMissile("FlechetteDamagerTiny", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		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 FlechetteSpark_Crit : FlechetteSpark {
	Accuracy 69
	States {
		SpawnState:
			SPPJ A 1
			TNT1 A 0 A_SpawnItemEx("ScatterShotGlowSmall", 0, 0, 0, 0, 0, 0, 0, 32)
			TNT1 A 0 A_CustomMissile("FlechetteDamagerTiny_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Loop
	}
}

Actor FlechetteDamager : DnD_BaseProjectile {
	Radius 4
	Height 4
	Speed 8
	
	Damage(
		SSAM_FLECHETTE |
		(1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 132096
	
	+PAINLESS
	+FOILINVUL
	States {
		SpawnState:
			TNT1 A 1
		Stop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor FlechetteDamager_Crit : FlechetteDamager {
	Accuracy 69
}

ACTOR FlechetteDamagerTiny : FlechetteDamager {
	Damage(
		SSAM_FLECHETTE |
		(2 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 132096

   +NODAMAGETHRUST
   +PAINLESS
   States {
		Death:
			TNT1 A 1
		Stop
	}
}

Actor FlechetteDamagerTiny_Crit : FlechetteDamagerTiny {
	Accuracy 69
}

Actor MagnumShellHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("PiercingShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_SHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot3", 1, "SetSG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3X", 0)
		Stop
		SetSG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3", 0)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

// this doesnt deal damage
Actor MagnumPuff : NewBulletPuff {
	States {
		Spawn:
			PUFF A 0
			TNT1 A 0 A_SpawnDebris("SparkPuff", 1)
			TNT1 A 0 A_SpawnItemEx("MagnumWallHitSpark", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			MPUF A 4 Bright A_PlaySound("puff/ric")
			MPUF B 4 Bright
		Melee:
			MPUF CD 4
		stop
	}
}

Actor MagnumPuff_Rail : DnD_BaseRailPuff {
	Stamina 135168
	States {
		HitNoBlood:
		Goto Crash
	}
}

Actor MagnumPuff_RailHelper : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_RailAttack(
				SSAM_MAGNUM |
				(0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT),
				0,0,"None","None",RGF_SILENT,0,"MagnumPuff_Rail", 5.6 * (1.0 - accuracy * accuracy_factor), 5.6 * (1.0 - accuracy * accuracy_factor), 2048
			)
		Stop
	}
}

Actor MagnumPuff_RailHelper_Circle : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_SetArg(2, ACS_NamedExecuteWithResult("DnD Pellet Count", 10) / 2)
			TNT1 A 0 A_SetArg(3,
				SSAM_MAGNUM |
				(0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_PHYSICAL << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetArg(4, Args[2])
		LoopStart:
			TNT1 A 0 A_JumpIf(Args[4], "LoopContinue")
		Goto Finish
		LoopContinue:
			TNT1 A 0 A_RailAttack(Args[3],0,0,"None","None",RGF_SILENT | RGF_EXPLICITANGLE,0,"MagnumPuff_Rail", (360.0 / Args[2]) * Args[4], 0, 2048)
			TNT1 A 0 A_SetArg(4, Args[4] - 1)
		Goto LoopStart
		Finish:
			TNT1 A 0 A_JumpIf(Args[2] % 2, "FireOneMore")
		Stop
		FireOneMore:
			TNT1 A 0 A_FireBullets((360.0 / Args[2]) * Args[4], 0, -1, 0, "MagnumPuff_Rail", FBF_NORANDOM | FBF_EXPLICITANGLE)
		Stop
	}
}

Actor ShockShellHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("ElectricShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_SHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot3", 1, "SetSG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3X", 0)
		Stop
		SetSG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3", 0)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor ShockShellPuff : DnD_BasePuff {
	Scale 0.65
	Stamina 135168
	States {
		Spawn:
		Crash:
		HitNoBlood:
			TNT1 A 0
			TNT1 AAAAA 0 A_SpawnItemEx("BlueParticle5", 0, 0, frandom(-2.4, 2.4), frandom(-4.8, 4.8), frandom(-4.8, 4.8), frandom(-4.8, 4.8), 0, 128)
			TNT1 A 0 A_JumpIfInTargetInventory("DnD_CritToken", 1, "Crit")
			TNT1 A 0 A_CustomMissile("ShockDamager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		FinishAnim:
			MPU9 A 4 A_PlaySound("puff/ric")
			MPU9 B 4
			MPU9 CDE 4
		stop
		Crit:
			TNT1 A 0 A_CustomMissile("ShockDamager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Goto FinishAnim
	}
}

Actor ShockDamager : DnD_ExplosiveBase {
	const int lim = 5;
	+FOILINVUL
	+FORCEPAIN
	+THRUACTORS
	+NODAMAGETHRUST
	Speed 0
	Height 1
	Radius 1
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				SSAM_SHOCK |
				(1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_LIGHTNING << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 48 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_ISSPECIALAMMO)
		ExplosionLoop:
			TNT1 AAAA 0 A_SpawnItemEx("ShockShellFX", 0, 0, frandom(-4, 4), frandom(-4, 4), frandom(-4, 4), frandom(-2.4, 2.4), 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION)
			TNT1 A 0 A_PlaySound("Shells/ShockHit", CHAN_AUTO, 0.75)
			TNT1 A 7
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 1 A_JumpIf(user_count < lim, "ExplosionLoop")
			TNT1 A 15
		Goto FinishExplosion
	}
}

Actor ShockDamager_Crit : ShockDamager {
	Accuracy 69
}

Actor SlugShellHandler : DnD_Activator {
	States {
			TNT1 A 0 A_JumpIfInventory("SlugShell", 1, "Nothing")
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_SHELL) // 0 is shell position
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot3", 1, "SetSG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3X", 0)
		Stop
		SetSG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_3", 0)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor SlugShellPuff : DnD_BasePuff {
	Stamina 135168

	+ALWAYSPUFF
	+FOILINVUL
	States {
		Spawn:
		Crash:
		HitNoBlood:
			TNT1 AAAA 0
			TNT1 AAA 0 A_SpawnItemEx("BigPuffFX_Main", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_PlaySound("puff/ric")
			TNT1 AA 0 A_SpawnItemEx("BigPuffFX_Flash", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_SpawnItemEx("BigPuffFX_Spark1", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_SpawnItemEx("BigPuffFX_Spark2", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0
			TNT1 AAA 0 A_SpawnItemEx("BigPuffFX_Smoke", 0, 0, 0, frandom(0.15,0.25), 0, frandom(-0.1,0.45), 0, SXF_CLIENTSIDE, 0)
			TNT1 A 0 A_SpawnDebris("SparkPuff", 1)
			TNT1 A 0 A_SpawnItemEx("WallHitSpark", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION | SXF_CLIENTSIDE)
			PUFF A 4 bright
			PUFF B 4
			PUFF CD 4
		Stop
	}
}

Actor HEGrenadeHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("A40MMHEGrenade", 1, "Nothing")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot6", 1, "SetAR")
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot4", 1, "SetMG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_5X", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_5X", AMMO_GRENADE)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_GRENADE)
		Stop
		SetMG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		SetAR:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_6", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_6", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor SonicGrenadeHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("A40mmSonicGrenade", 1, "Nothing")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot6", 1, "SetAR")
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot4", 1, "SetMG")
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_5X", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_5X", AMMO_GRENADE)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_GRENADE)
		Stop
		SetMG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		SetAR:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_6", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_6", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor NormalGrenade_Special : DnD_ExplosiveBase {
	speed 28
	BounceSound "weapons/grenadebounce"
	Scale 1.0
	Radius 8
	Height 16
	+EXPLODEONWATER
	+THRUGHOST
	-NOGRAVITY
	BounceType Doom
	Bouncecount 3
	BounceFactor 0.625
	Gravity 0.84
	DeathSound "Weapons/grenadexpl"
	
	Damage(
		SSAM_40MM |
		(0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 131072
	
	States {
		SpawnState:
			NGLP B 5 A_SpawnItem("GrenadeSmoke")
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random (0, 360), 2, random (0, 360))
		
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				SSAM_40MM |
				(1 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 144 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_ISSPECIALAMMO)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			MISL B 8 Bright
			MISL C 6 Bright
			MISL D 4 Bright	
		Goto FinishExplosion
	}
}

Actor NormalGrenadeHandler : DnD_Activator {
	States {
		Pickup:
			TNT1 A 0 A_JumpIfInventory("Grenades", 1, "Nothing")
			TNT1 A 0 ACS_NamedExecuteAlways("DnD Force Damage Cache Recalculation", 0, -1)
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot6", 1, "SetAR")
			TNT1 A 0 A_JumpIfInventory("H_WeaponSlot4", 1, "SetMG")
		Stop
		SetMG:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_4", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_4", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		SetAR:
			TNT1 A 0 A_TakeInventory("SpecialAmmoMode_6", 0)
			TNT1 A 0 A_GiveInventory("SpecialAmmoMode_6", AMMO_BULLET)
			TNT1 A 0 ACS_ExecuteAlways(DND_SPECIALAMMOMSG_SCRIPT, 0, 1, AMMO_BULLET)
		Stop
		Nothing:
			TNT1 A 0
		Stop
	}
}

Actor NormalGrenade_Special_GhostHitter : NormalGrenade_Special {
	-THRUGHOST
}

Actor HEGrenadeX : DnD_ExplosiveBase {
	Speed 24
	Radius 8
	Height 16
	Scale 0.6
	BounceSound "WeaponGL/40MMHBounce"
	Deathsound "Weapons/grenadexpl2"
	BounceCount 4
	BounceFactor 0.4
	Gravity 0.66
	BounceType Doom
	
	Damage(
		SSAM_40MMHE |
		(0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 131072
	
	+THRUGHOST
	+EXPLODEONWATER
	States {
		SpawnState:
		    TNT1 A 0 A_JumpIf(z-floorz < 8, "Nosmoke")
			NGLP D 6 A_SpawnItem("GrenadeSmoke")
			TNT1 A 0 A_JumpIf(z-floorz < 8, "Nosmoke")
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
		Loop
		NoSmoke:
		    TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
			NGLP D 3
		Goto SpawnState
		Death:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SpawnItem("NewGrenadeExplosion")
		ContinueExp:
			TNT1 A 0 A_SpawnItemEx ("ExplosionFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 AAAAAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 180))
			TNT1 AAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("ExplosionParticleHeavy", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleVeryFast", 0, 0, random (0, 360), 2, random (0, 360))
			TNT1 A 0 Radius_Quake(6, 35, 0, 5, 0)
			
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				SSAM_40MMHE |
				(0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 256 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 0.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 18.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 36.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 54.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 72.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 90.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 108.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 126.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 144.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 162.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 180.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 198.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 216.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 234.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 252.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 270.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 288.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 306.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 324.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails", 8, 0, 342.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			NGLP D 2
			TNT1 A 15
		Goto FinishExplosion
		Crit:
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 0.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 18.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 36.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 54.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 72.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 90.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 108.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 126.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 144.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 162.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 180.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 198.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 216.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 234.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 252.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 270.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 288.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 306.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 324.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_CustomMissile("HEGrenadeTrails_Crit", 8, 0, 342.0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			NGLP D 2
			TNT1 A 15
		Goto FinishExplosion
	}
}

Actor HEGrenadeX_GhostHitter : HEGrenadeX {
	-THRUGHOST
}

Actor HEGrenadeTrailsTrail {
	+NOINTERACTION
	+CLIENTSIDEONLY
	Alpha 0.8
	Renderstyle Add
	Scale 0.4
	States {
		Spawn:
			MEXP MNOP 2 Bright
		Stop
	}
}

Actor HEGrenadeTrails : DnD_ExplosiveBase {
	Radius 5
	Height 8
	Speed 6
	BounceCount 6
	
	Damage(
		SSAM_40MMHE |
		(1 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 131072
	
	+DOOMBOUNCE
	States {
		SpawnState:
			TNT1 A 0
			GRTL A 3 Bright ThrustThingZ(0, random(8,16), 0, 1)
			TNT1 A 0 A_SpawnItem("HEGrenadeTrailsTrail")
			GRTL B 3 Bright ThrustThingZ(0, random(8,16), 0, 1)
			TNT1 A 0 A_SpawnItem("HEGrenadeTrailsTrail")
			GRTL A 3 Bright ThrustThingZ(0, random(8,16), 0, 1)
			TNT1 A 0 A_SpawnItem("HEGrenadeTrailsTrail")
			GRTL B 3 Bright ThrustThingZ(0, random(8,16), 0, 1)
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
		SpawnLoop:
			GRTL AB 3 Bright A_SpawnItem("HEGrenadeTrailsTrail")
		Loop
		Death:
			TNT1 A 0 A_SetUserVar("user_expdmg",
				SSAM_40MMHE |
				(2 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_EXPLOSIVES << DTYPE_SHIFT) |
				(100 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 128 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_BLASTSELF | DND_DAMAGEFLAG_ISSPECIALAMMO)
		Goto DoExplosionDamage
		ContinueFromExplosion:
		    TNT1 A 0 A_PlaySound("WeaponGL/40MMHHit")
			GRTL EFGHI 2 Bright			
		Stop
	}
}

Actor HEGrenadeTrails_Crit : HEGrenadeTrails {
	Accuracy 69
}

Actor SonicGrenade : DnD_BaseProjectile {
	Speed 32
	Radius 8
	Height 16
	BounceSound "WeaponGL/40MMSonicBounce"
	BounceCount 5
	BounceFactor 0.66
	Gravity 0.66
	BounceType Doom
	var int user_count;
	
	Damage(
		SSAM_40MMSONIC |
		(0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ENERGY << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 131072
	
	+THRUGHOST
	+FOILINVUL
	-NOGRAVITY
	+EXPLODEONWATER
	const int lim = 4;
	States {
		SpawnState:
			TNT1 A 0 A_SetUserVar("user_count", 0)
		SpawnLoop:
			CAPS AB 3
		Loop
		Death:
			TNT1 A 0 A_ChangeFlag("NOGRAVITY", 1)
			TNT1 A 0 A_Stop
			TNT1 A 0 A_SetScale(1.275, 1.275)
		Booming:
			TNT1 A 0 A_JumpIf(accuracy == DND_CRITTOKEN, "Crit")
			CAPX D 1 A_CustomMissile("SonicGrenadeExplosion", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		ExplosionLoop:
			TNT1 A 0 A_JumpIf(user_count == lim, "Finish")
			TNT1 A 0 A_PlaySound("WeaponGL/40MMSonicExp")
			TNT1 A 0 A_SpawnItemEx ("GrayFlare", 0, 0, 0, 0, 0, 0, 0, SXF_CLIENTSIDE | SXF_NOCHECKPOSITION, 0)
			TNT1 AAAAA 0 A_CustomMissile("RocketSmoke", 0, 0, random(0, 360), 2, random(0, 180))
			TNT1 A 0 A_SpawnItem("WhiteParticleSpawner")
			CAPX ABC 4
			CAPX DEFG 2
			TNT1 A 0 A_SetUserVar("user_count", user_count + 1)
		Loop
		Finish:
			TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("DnD Check Explosion Repeat"), "Booming")
		Stop
		Crit:
			CAPX D 1 A_CustomMissile("SonicGrenadeExplosion_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
		Goto ExplosionLoop
	}
}

Actor SonicGrenade_GhostHitter : SonicGrenade {
	-THRUGHOST
}

Actor SonicGrenadeExplosion : DnD_ExplosiveBase {
	Speed 0
	+THRUACTORS
	+FOILINVUL
	const int lim = 12;
	States {
		SpawnState:
			TNT1 A 0
		Death:
			TNT1 A 0 A_SetUserVar("user_count", 0)
			TNT1 A 0 A_SetUserVar("user_expdmg", 
				SSAM_40MMSONIC |
				(0 << CACHE_SHIFT) |
				(DND_DAMAGETYPE_ENERGYEXPLOSION << DTYPE_SHIFT) |
				(50 << DPCT_SHIFT)
			)
			TNT1 A 0 A_SetUserVar("user_expradius", 160 * (1.0 + ACS_NamedExecuteWithResult("DND Explosion Radius Retrieve", DND_USETARGET) * exprad_factor))
			TNT1 A 0 A_SetUserVar("user_fullexpradius", 0)
			TNT1 A 0 A_SetUserVar("user_expflags", DND_DAMAGEFLAG_ISSPECIALAMMO)
		ExplosionLoop:
			TNT1 A 3
		Goto DoExplosionDamage
		ContinueFromExplosion:
			TNT1 A 1 A_SetUserVar("user_count", user_count + 1)
			TNT1 A 1 A_JumpIf(user_count < lim, "ExplosionLoop")
			TNT1 A 15
		Goto FinishExplosion
	}
}

Actor SonicGrenadeExplosion_Crit : SonicGrenadeExplosion {
	Accuracy 69
}

Actor ShockShellFX {
	Renderstyle Add
	Alpha 0.875
	Height 2
	Radius 2
	+CLIENTSIDEONLY
	+NOGRAVITY
	States {
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(frandom(0.45, 1.0), frandom(0.45, 1.0))
			TNT1 A 0 A_Jump(256, "1", "2", "3", "4")
		1:
			TSFX ABC 3 Bright
		Stop
		2:
			TSFX DEF 3 Bright
		Stop
		3:
			TSFX GHI 3 Bright
		Stop
		4:
			TSFX JKL 3 Bright
		Stop
	}
}

Actor NitroWind : DnD_BaseProjectile {
	Speed 7
	Radius 5
	Height 10
	
	Damage (1)
	
	Scale 0.5
	Alpha 0.9
	Renderstyle Add
	BounceType "Doom"
	+RIPPER
	+BLOODLESSIMPACT
	+CANBOUNCEWATER
	+NODAMAGETHRUST
	+PAINLESS
	+THRUACTORS
	States {
		SpawnState:
			RF34 J 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 K 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 L 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 M 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 N 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 O 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 P 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 Q 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 R 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 S 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 T 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 U 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 V 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 W 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 X 5 A_CustomMissile("NitroWind_Damager", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
		Loop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor NitroWind_Crit : NitroWind {
	Accuracy 69
	States {
		SpawnState:
			RF34 J 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 K 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 L 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 M 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 N 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 O 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 P 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 Q 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 R 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 S 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 T 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 U 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 V 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 W 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
			RF34 X 5 A_CustomMissile("NitroWind_Damager_Crit", 0, 0, 0, CMF_TRACKOWNER | CMF_AIMDIRECTION)
			TNT1 A 0 A_FadeOut(0.05)
		Loop
	}
}

Actor NitroWind_Damager : DnD_BaseProjectile {
	Radius 3
	Height 4
	Speed 5
	
	Damage(
		SSAM_NITROSHELL |
		(0 << CACHE_SHIFT) |
		(DND_DAMAGETYPE_ICE << DTYPE_SHIFT) |
		(100 << DPCT_SHIFT)
	)
	
	Stamina 131072
	
	+PAINLESS
	+NODAMAGETHRUST
	+BLOODLESSIMPACT
	States {
		SpawnState:
			TNT1 A 1
		Stop
		Death:
			TNT1 A 1
		Stop
	}
}

Actor NitroWind_Damager_Crit : NitroWind_Damager {
	Accuracy 69
}

Actor SpecialAmmoMode_3 : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor SpecialAmmoMode_3X : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor SpecialAmmoMode_4 : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor SpecialAmmoMode_5 : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor SpecialAmmoMode_5X : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor AmmoChangeMessage : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor SpecialAmmoMode_6 : Ammo {
	inventory.maxamount 24
	+IGNORESKILL
}

Actor AmmoSwitchCooldown : PowerDamage {
	powerup.duration 20
	damagefactor "normal", 1.0
}

Actor NoAmmoMessage : PowerDamage {
	powerup.duration 5
	damagefactor "normal", 1.0
}