//------------------------------------------------------------
// Shotgun ammo class
//------------------------------------------------------------
Actor ShotgunAmmo : Ammo
{
	+SERVERNETID
	Inventory.MaxAmount 4
}

//------------------------------------------------------------
// Shotgun Alt-Fire cooldown class
//------------------------------------------------------------
Actor ShotgunAltCD : Ammo
{
	+SERVERNETID 
	Inventory.MaxAmount 140
}

//------------------------------------------------------------
// Particle Splitter weapon class
//------------------------------------------------------------
Actor ParticleSplitter : LSWeaponBase
{
	// Shotgun pellet spread multipliers / variables
	const float SPREAD = 1.0;
	const float ALT_SPREAD = 0.6;
	const int RING_COUNT_INNER = 5;       // Inner ring
	const int RING_COUNT_OUTER = 10;      // Both outer rings
	const int ALT_RING_COUNT_INNER = 6;   // Inner ring (alt fire)
	const int ALT_RING_COUNT_OUTER = 12;  // Both outer rings (alt fire)
	args 0  // Variable used in spread calculations
	
	// Properties
	Tag "Particle Splitter"
	Weapon.AmmoType1 "ShotgunAmmo"
	Weapon.AmmoType2 "ShotgunAmmo"
	Weapon.AmmoUse1 1
	Weapon.AmmoUse2 1
	Weapon.SlotNumber 1
	Inventory.Icon "PSGPA0"

	// States
	States
	{
	Spawn:
		PSGP A 1 bright A_SetAngle(angle + 1.0)
		loop

	Ready:
		PSGR A 1 A_WeaponReady
		loop

	Deselect:
		TNT1 A 0 A_ZoomFactor(1.0)
		TNT1 AA 0 A_Lower
		PSGR A 1 A_Lower
		loop

	Select:
		TNT1 AA 0 A_Raise
		PSGR A 1 A_Raise
		loop
		
	Fire:
		TNT1 A 0 A_GiveInventory("MainAmmoRegenCD", 999)
		TNT1 A 0 A_FireCustomMissile("PurpleLightShoot", 0, false)
		TNT1 A 0 A_SetArg(0, 0)
		TNT1 A 0 A_FireCustomMissile("None", 0.0, true, 3.0, -1.0, 0, 0.0)
		goto FireNormal1

	FireNormal1:
		TNT1 A 0 A_FireCustomMissile("SGPellet", SPREAD * 1.0 * cos(args[0] * 360 / RING_COUNT_INNER), false, 3.0, 6.0, 0, SPREAD * 1.0 * sin(args[0] * 360 / RING_COUNT_INNER))
		//TNT1 A 0 A_FireBullets(SPREAD * 1.0 * cos(args[0]* 360 / RING_COUNT_INNER), SPREAD * 1.0 * sin(args[0] * 360 / RING_COUNT_INNER), -1, 4, "PSGPuff", !FBF_USEAMMO|FBF_EXPLICITANGLE, 16384)
		TNT1 A 0 A_SetArg(0, args[0] + 1)
		TNT1 A 0 A_JumpIf(args[0] < RING_COUNT_INNER, "FireNormal1")
		TNT1 A 0 A_SetArg(0, 0)
		goto FireNormal2

	FireNormal2:
		TNT1 A 0 A_FireCustomMissile("SGPellet", SPREAD * 2.0 * cos(args[0] * 360 / RING_COUNT_OUTER), false, 3.0, 6.0, 0, SPREAD * 2.0 * sin(args[0] * 360 / RING_COUNT_OUTER))
		TNT1 A 0 A_FireCustomMissile("SGPellet", SPREAD * 3.0 * cos(args[0] * 360 / RING_COUNT_OUTER), false, 3.0, 6.0, 0, SPREAD * 3.0 * sin(args[0] * 360 / RING_COUNT_OUTER))
		//TNT1 A 0 A_FireBullets(SPREAD * 2.0 * cos(args[0]* 360 / RING_COUNT_OUTER), SPREAD * 2.0 * sin(args[0] * 360 / RING_COUNT_OUTER), -1, 4, "PSGPuff", !FBF_USEAMMO|FBF_EXPLICITANGLE, 16384)
		//TNT1 A 0 A_FireBullets(SPREAD * 3.0 * cos(args[0]* 360 / RING_COUNT_OUTER), SPREAD * 3.0 * sin(args[0] * 360 / RING_COUNT_OUTER), -1, 4, "PSGPuff", !FBF_USEAMMO|FBF_EXPLICITANGLE, 16384)
		TNT1 A 0 A_SetArg(0, args[0] + 1)
		TNT1 A 0 A_JumpIf(args[0] < RING_COUNT_OUTER, "FireNormal2")
		TNT1 A 0 A_SetArg(0, 0)
		goto FireAnimNormal

	FireAnimNormal:
		TNT1 A 0 A_PlaySound("ParticleSplitter/Fire", CHAN_WEAPON)
		TNT1 A 0 A_PlaySound("ParticleSplitter/FireFar", CHAN_6)
		PSGF ABC 4
		PSGF C 2
		TNT1 A 0 A_PlaySound("ParticleSplitter/Pump1", CHAN_7)
		PSGF DEFGHIJKL 1
		PSGF MMMMMM 1 A_SpawnItemEX("RailgunExhaustSpawner", 8.0, 0.0, 32.0, frandom(-1.0, 1.0), frandom(-1.0, 1.0), frandom(-1.0, 1.0))
		TNT1 A 0 A_PlaySound("ParticleSplitter/Pump2", CHAN_7)
		PSGF NOPQRSTUV 1
		PSGR A 2
		goto Ready

		
	AltFire:
		TNT1 A 0 A_JumpIfInventory("MainAltCD", 1, "AltFireFail")
		Goto AltFireSuccess
	
	AltFireFail:
		TNT1 A 0 ACS_NamedExecuteAlways("AltFireFail")
		PSGR A 1 A_WeaponReady(WRF_NOPRIMARY|WRF_NOSECONDARY)
		Goto Ready

	AltFireSuccess:
		TNT1 A 0 A_GiveInventory("MainAmmoRegenCD", 999)
		TNT1 A 0 A_GiveInventory("MainAltCD", 4)
		TNT1 A 0 A_SpawnItemEX("PurpleLightShoot", 0, 0, 0)
		TNT1 A 0 A_SetArg(0, 0)
		TNT1 A 0 A_FireCustomMissile("None", 0.0, true, 3.0, -1.0, 0, 0.0)
		goto FireAlt1

	FireAlt1:
		TNT1 A 0 A_FireCustomMissile("SGAltPellet", ALT_SPREAD * 1.0 * cos(args[0] * 360 / ALT_RING_COUNT_INNER), false, 3.0, 6.0, 0, ALT_SPREAD * 1.0 * sin(args[0] * 360 / ALT_RING_COUNT_INNER))
		TNT1 A 0 A_SetArg(0, args[0] + 1)
		TNT1 A 0 A_JumpIf(args[0] < ALT_RING_COUNT_INNER, "FireAlt1")
		TNT1 A 0 A_SetArg(0, 0)
		goto FireAlt2

	FireAlt2:
		TNT1 A 0 A_FireCustomMissile("SGAltPellet", ALT_SPREAD * 2.0 * cos(args[0] * 360 / ALT_RING_COUNT_OUTER), false, 3.0, 6.0, 0, ALT_SPREAD * 2.0 * sin(args[0] * 360 / ALT_RING_COUNT_OUTER))
		TNT1 A 0 A_FireCustomMissile("SGAltPellet", ALT_SPREAD * 3.0 * cos(args[0] * 360 / ALT_RING_COUNT_OUTER), false, 3.0, 6.0, 0, ALT_SPREAD * 3.0 * sin(args[0] * 360 / ALT_RING_COUNT_OUTER))
		TNT1 A 0 A_SetArg(0, args[0] + 1)
		TNT1 A 0 A_JumpIf(args[0] < ALT_RING_COUNT_OUTER, "FireAlt2")
		TNT1 A 0 A_SetArg(0, 0)
		goto FireAnimNormal

	AltFail:
		TNT1 A 0 ACS_NamedExecuteAlways("AltFireFail")
		PSGR A 1 A_WeaponReady(WRF_NOSECONDARY)
		goto Ready
	}
}

/*Actor PSGPuff : BulletPuff
{
	// Properties
	Renderstyle Add
	Alpha 0.8
	Vspeed 0
	Mass 0
	
	// Flags
	-ALLOWPARTICLES
	-RANDOMIZE
	+BRIGHT
	
	// States
	States
	{
	Spawn:
		PSPK AA 4
	Melee:
		PSPK A 1 A_FadeOut(0.1)
		loop
	}
}*/

//------------------------------------------------------------
// Single shotgun pellet / projectile
//------------------------------------------------------------
Actor SGPellet
{
	// Properties
	Projectile
	Radius 2
	Height 2
	Speed 72
	Scale 0.5
	Damage (4)
	RenderStyle add
	Decal "ShotgunMainDecal"
	Obituary "%k > \ctParticle Splitter\c- > %o"

	// Flags
	+DONTSPLASH
	+BRIGHT

	// States
	States
	{
	Spawn:
		PSPK A 5
		goto Despawn

	Despawn:
		PSPK AAAAA 1 A_SetScale(scalex * 0.8, scaley * 0.8)
		Goto Death

	XDeath:
		TNT1 A 0 A_GiveToTarget("HitSoundMedium", 1)
		Goto Death

	Death:
		TNT1 AA 0 A_SpawnItemEx("SGPelletFX", 0.0, 0.0, 0.0, frandom(-4.0, 4.0), frandom(-4.0, 4.0), frandom(-4.0, 4.0), 0)//, SXF_NOUNLAGGED|SXF_SKIPOWNER)
		stop
	}
}

//------------------------------------------------------------
// Death effects for shotgun pellets
//------------------------------------------------------------
Actor SGPelletFX : LSParticleBase
{
	// Properties
	Scale 0.1
	
	// States
	States
	{
	Spawn:
		PSPK A 3
	Spawn1:
		PSPK A 1 A_FadeOut(0.1)
		loop
	}
}

//------------------------------------------------------------
// Single alt-fire pellet / projectile
//------------------------------------------------------------
Actor SGAltPellet : SGPellet
{
	Obituary "%k > \ctParticle Splitter (Alt)\c- > %o"
	// States
	States
	{
	Spawn:
		PSPK A 6
		goto Despawn
	}
}