Actor RicochetSpawner
{
	+DONTSPLASH
	+NOGRAVITY
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 0 
		TNT1 A 0 A_SpawnItem("RicochetSparks")
		Stop
	}
}

Actor RicochetSparks
{
	+DOOMBOUNCE
	+NOGRAVITY
	+DONTSPLASH
	+NOBLOCKMAP
	+FORCEXYBILLBOARD
	+CLIENTSIDEONLY
	+Missile
	RenderStyle ADD
	Alpha 0.5
	Speed 10
	Radius 0
	Height 0
	Mass 0
	Scale 0.125
	Gravity 1
	BounceFactor 0.5
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound("ricochet",CHAN_AUTO)
		PUFF A 1 Bright
		PUFF AAAA 1 Bright A_FadeOut(0.09)
		Stop
	}
}

ACTOR ShotPuff : BulletPuff //Shotguns
{
	Decal BulletGlow
	VSpeed 2
	SeeSound "ricochet"
	States
  {
  Spawn:
	TNT1 A 0
    TNT1 AAAA 0 A_CustomMissile("RicochetSparks",1,0,random(0,360),2,random(0,360))
    PUFF A 1 Bright
    PUFF B 2
  Melee:
    PUFF CD 2
    Stop
  }
}

ACTOR AltPuff : BulletPuff //Pistol, MP40
{
	Decal BulletGlow
	+NOEXTREMEDEATH
	VSpeed 2
	SeeSound "ricochet"
	States
  {
  Spawn:
	TNT1 A 0
    TNT1 AAAA 0 A_CustomMissile("RicochetSparks",1,0,random(0,360),2,random(0,360))
    PUFF A 1 Bright
    PUFF B 2
  Melee:
    PUFF CD 2
    Stop
  }
}

ACTOR AltPuff2 : BulletPuff //Rifle, 1911
{
	Decal BulletGlow2
	+NOEXTREMEDEATH
	VSpeed 2
	SeeSound "ricochet"
	States
  {
  Spawn:
	TNT1 A 0
    TNT1 AAAA 0 A_CustomMissile("RicochetSparks",1,0,random(0,360),2,random(0,360))
    PUFF A 1 Bright
    PUFF B 2
  Melee:
    PUFF CD 2
    Stop
  }
}

ACTOR AltPuff3 : BulletPuff //Chaingun
{
	Decal BulletGlow2
	+NOEXTREMEDEATH
	VSpeed 2
	SeeSound "ricochet"
	States
  {
  Spawn:
	TNT1 A 0
    TNT1 AAA 0 A_CustomMissile("RicochetSparks",1,0,random(0,360),2,random(0,360))
    PUFF A 1 Bright
    PUFF B 2
  Melee:
    PUFF CD 2
    Stop
  }
}

ACTOR BulletImpact : BulletPuff Replaces BulletPuff
{
	//Decal BulletChips
	VSpeed 2
	SeeSound "ricochet"
  States
  {
  Spawn:
	TNT1 A 0
	TNT1 AAAAAAAA 0 A_CustomMissile("RicochetSparks",1,0,random(0,360),2,random(0,360))
	PUFF A 1 Bright
    PUFF B 2
  Melee:
    PUFF CD 3
    Stop
  }
}

ACTOR Ricochet : Inventory
{
	Inventory.Maxamount 1
}

//	Smoke
ACTOR GunSmokeSpawner
{
	Speed 20
	+NOCLIP
	States
	{
	Spawn:
		TNT1 A 1
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 AA 0 A_CustomMissile ("GunSmoke", 0, 0, random (0, 360), 2, random (0, 180))
        Stop
	}
}

ACTOR GunSmoke
{
	+NOGRAVITY
	+NOBLOCKMAP
	+FLOORCLIP
	+FORCEXYBILLBOARD
	+NOINTERACTION
	+FORCEXYBILLBOARD
	+MISSILE
	Speed 1
	RenderStyle Add
	Alpha		0.06
	+CLIENTSIDEONLY
	Radius		0
	Height		0
	Scale		0.6
	States
	{
	Spawn:
		TNT1 A 1
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SmokeEffects")==0, 23)
		SMKE AABBCCDDEEFFGGHHIIJJKK 1 A_FadeOut(0.001)
		TNT1 A 0
		Stop
	}
}

ACTOR SmokeSpawner
{
	Speed 20
	+NOCLIP
	States
	{
	Spawn:
		TNT1 A 1
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_SpawnItem("ShotSmoke",0,0)
		Stop
	}
}

ACTOR ShotSmoke
{
	+NOTDMATCH
	+NOINTERACTION
	+FORCEXYBILLBOARD
	VSpeed 1
	RenderStyle Add
	Alpha 0.3
	Scale 0.1
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("SmokeEffects")==0, 18)
		SMOK ABCDEFGHIJKLMNOPQ 1 A_SpawnItem("ShotSmokeTrail")
		TNT1 A 0
		Stop
	}
}

ACTOR ShotSmokeTrail : ShotSmoke
{
	VSpeed 0
	Alpha 0.15
	States
	{
	Spawn:
		SMOK CDEFGHIJKLMNOPQ 1
		Stop
	}
}

ACTOR BlackSmoke : ShotSmoke
{
	RenderStyle Translucent
	Alpha 0.15
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		SMOK ABCDEFGHIJKLMNOPQ 1 A_SpawnItem("BlackSmokeTrail") 
		SMOK Q 1 A_FadeOut(0.02)
		Wait
	}
}

ACTOR BlackSmokeTrail : ShotSmokeTrail
{
	RenderStyle Translucent
	Alpha 0.08
}

ACTOR RocketSmoke
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	RenderStyle Translucent
	Scale 2.0
	Alpha 0.18
	VSpeed 8
	Mass 8
	States
	{
	Spawn:
		PUF2 ABCDEFGHIJKL 1
		PUF2 MNOPQRSTUVWXYZ 2 A_FadeOut(0.002)
		Goto Death
	Death:
		PUF3 ABC 2 A_FadeOut(0.002)
	Stop
	}
}

ACTOR PlasmaSmoke
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	+RANDOMIZE
	RenderStyle Translucent
	Alpha 0.15
	VSpeed 8
	Mass 5
	States
	{
	Spawn:
		SMKE ABCDEFG 2 A_FadeOut(0.001)
		Goto Death
	Death:
		SMKE HIJKLMNOPQRSTUVWXYZ 2 A_FadeOut(0.002)
		Stop
	}
}

// Casings
Actor DebrisColonel
{
	+MISSILE
	+NOBLOCKMAP
	+NOGRAVITY
	+DROPOFF
	+NOTELEPORT
	+FORCEXYBILLBOARD
	+NOTDMATCH
	+GHOST
	Radius 1
	Height 1
	Mass 1
	Damage 0
}

Actor FlareGeneral
{
	+NOINTERACTION
	+NOGRAVITY
	RenderStyle Add
	Radius 1
	Height 1
	Alpha 0.4
	Scale 0.4
}

Actor ParticleFireGeneral
{
	+NOINTERACTION
	+NOCLIP
	Speed 2
	RenderStyle Add
	Scale 0.5
	Alpha 0.5
}

ACTOR 9mmCasingSpawner : DebrisColonel
{
	Speed 20
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("9mmCasing",0,0,random(-80,-100),2,random(45,80))
		TNT1 A 0
		Stop
	}
}

ACTOR MP40CasingSpawner : DebrisColonel
{
	Speed 20
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("9mmCasing",0,0,random(80,100),2,random(45,80))
		TNT1 A 0
		Stop
	}
}

ACTOR 45CasingSpawner : DebrisColonel
{
	Speed 20
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("45Casing",0,0,random(-80,-100),2,random(45,80))
		TNT1 A 0
		Stop
	}
}

ACTOR 9mmCasing : DebrisColonel
{ 
	+DOOMBOUNCE
	-NOBLOCKMAP
	-NOGRAVITY
	Radius 3
	Height 3
	Speed 6
	BounceFactor 0.35
	Scale .18
	RenderStyle Translucent
	Alpha 1.0
	SeeSound "weapons/casing"
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_Jump(256,1,2,3,4,5,6,7,8)
		CAS1 ABCDEFGH 1 
		Goto Spawn+3
	Death:
		TNT1 A 0 
		TNT1 A 0 A_jump(256,"death1","death2","death3","death4","death5","death6")
	Death1:
		CAS1 I 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death2:
		CAS1 J 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death3:
		CAS1 K 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death4:
		CAS1 L 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death5:
		CAS1 M 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death6:
		CAS1 N 1000
		CAS1 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	}
}

ACTOR 45Casing : 9mmCasing
{ 
	SeeSound "1911/casing"
	Scale .25
}

ACTOR ShotgunCasingSpawner : 9mmCasingSpawner
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("ShotgunCasing",0,0,random(-80,-100),2,random(40,60))
		TNT1 A 0
		Stop
	}
}

ACTOR ShotgunCasing : 9mmCasing
{ 
	Scale .25
	SeeSound "weapons/shotgunshells"
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_Jump(256,1,2,3,4,5,6,7,8)
		CAS2 ABCDEFGH 1 
		goto spawn+3
	Death:
		TNT1 A 0 
		TNT1 A 0 A_jump(256,"death1","death2","death3","death4","death5","death6")
	Death1:
		CAS2 I 1000
		CAS2 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death2:
		CAS2 J 1000
		CAS2 J 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death3:
		CAS2 K 1000
		CAS2 K 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death4:
		CAS2 L 1000
		CAS2 L 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death5:
		CAS2 M 1000
		CAS2 M 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death6:
		CAS2 N 1000
		CAS2 N 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	}
}

Actor SSGCasingSpawner : ShotgunCasingSpawner
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 2)
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 1
		Goto Death
	Death:
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 2)
		TNT1 A 0 A_CustomMissile("ShotgunCasing",0,0,random(80,100),2,random(50,70))
		TNT1 A 0
		Stop
	}
}

ACTOR RifleCasingSpawner : DebrisColonel
{
	Speed 24
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("RifleCasing",0,0,random(-80,-100),2,random(45,80))
		TNT1 A 0
		Stop
	}
}

ACTOR RifleCasing : 9mmCasing
{ 
	Scale .18
	SeeSound "chaingun/casing"
	Speed 6
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_Jump(256,1,2,3,4,5,6,7,8)
		CAS3 ABCDEFGH 1 
		Goto Spawn+3
	Death:
		TNT1 A 0
		TNT1 A 0 A_jump(256,"death1","death2","death3","death4","death5","death6")
	Death1:
		CAS3 I 1000
		CAS3 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death2:
		CAS3 J 1000
		CAS3 J 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death3:
		CAS3 K 1000
		CAS3 K 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death4:
		CAS3 L 1000
		CAS3 L 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death5:
		CAS3 M 1000
		CAS3 M 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death6:
		CAS3 N 1000
		CAS3 N 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	}
}

ACTOR ChaingunCasingSpawner : 9mmCasingSpawner
{
	Speed 14
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("ShellCasings")==0, 3)
		TNT1 A 1 Thing_ChangeTID(0,390)
		TNT1 A 0 A_CustomMissile("ChaingunCasing",-2,0,random(80,100),2,random(40,80))
		TNT1 A 0
		Stop
	}
}

ACTOR ChaingunCasing : 9mmCasing
{ 
	Scale .20
	SeeSound "chaingun/casing"
	Speed 3
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 Thing_ChangeTID(0,390)
		TNT1 A 0 A_Jump(256,1,2,3,4,5,6,7,8)
		CAS3 ABCDEFGH 1 
		Goto Spawn+3
	Death:
		TNT1 A 0
		TNT1 A 0 A_jump(256,"death1","death2","death3","death4","death5","death6")
	Death1:
		CAS3 I 1000
		CAS3 I 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death2:
		CAS3 J 1000
		CAS3 J 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death3:
		CAS3 K 1000
		CAS3 K 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death4:
		CAS3 L 1000
		CAS3 L 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death5:
		CAS3 M 1000
		CAS3 M 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	Death6:
		CAS3 N 1000
		CAS3 N 1 A_CheckSight(1)
		Wait
		TNT1 A 1
		Stop
	}
}