ACTOR CasingBase
{
	-NOGRAVITY
	+WINDTHRUST
	+CLIENTSIDEONLY
	+MOVEWITHSECTOR
	+MISSILE
	+NOBLOCKMAP
	+NOTELEPORT
	+FORCEYBILLBOARD
	Height 2
	Radius 2
	Speed 6
	Scale 0.028
	BounceType "Doom"
	BounceSound "weapons/casing"
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A -1 A_Jump(256, "SetSprite")
			Wait
			
		SetSprite:
			TNT1 A 0
			Goto Flying
			
		Flying:
			"####" ABCDEFGHIJKLMNOPQRSTU 1
			Loop
			
		Death:
			"####" "#" -1 A_Jump(256, "SetRestSprite")
			Wait
			
		SetRestSprite:
			"####" V 0 A_Jump(128, "Rest")
			"####" W 0 A_Jump(128, "Rest")
			"####" X 0 A_Jump(128, "Rest")
			"####" Y 0 A_Jump(128, "Rest")
			Goto Rest
			
		Rest:
			"####" "#" 300
			"####" "#" 0 A_CheckSight("TryVanish")
			Loop
			
		TryVanish:
			"####" "#" 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
			Goto Rest
			
		Vanish:
			TNT1 A 1
			Stop
	}
}

ACTOR Empty338 : CasingBase
{
	Scale 0.05
	States
	{
		SetSprite:
			CAS7 A 0
			Goto Super::Flying
	}
}

ACTOR Side338 : Empty338
{
	BounceFactor 0.55
}

ACTOR EmptyPistol : CasingBase
{
	States
	{
		SetSprite:
			CAS6 A 0
			Goto Super::Flying
	}
}

ACTOR EmptyPistol2 : EmptyPistol {}

ACTOR ShotgunCasing : CasingBase
{
	Scale 0.05
	BounceSound "weapons/shell"
	States
	{
		SetSprite:
			RSHL A 0
			Goto Super::Flying
	}
}

ACTOR IntactShotgunCasing : ShotgunCasing
{
	States
	{
		SetSprite:
			RSH2 A 0
			Goto Super::Flying
	}
}

ACTOR DragonCasing : ShotgunCasing
{
	States
	{
		SetSprite:
			RSH3 A 0
			Goto Super::Flying
	}
}

ACTOR IntactDragonCasing : ShotgunCasing
{
	States
	{
		SetSprite:
			RSH4 A 0
			Goto Super::Flying
	}
}

/*
ACTOR EmptyPistol : EmptyRifle
{
	Scale 0.04
   States
   {
	Spawn:
		CAS6 A 0
		CAS6 A 0 A_JumpIf(waterlevel == 2, "Underwater")
		CAS6 ABCDEFGH 2
		Loop
	Underwater:
		CAS6 ABCDEFGHAB 3 A_FadeOut(0.1)
		Stop
    Rest1:
		CAS6 A 2000
		CAS6 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
		Loop
    Rest2:
		CAS6 E 2000
		CAS6 E 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
		Loop
    Rest1GD:
		CAS6 A 250
		Stop
	Rest2GD:
		CAS6 E 250
		Stop
   }
}
ACTOR EmptyPistol2 : EmptyPistol
{
	Scale 0.06
	States
	{
	Spawn:
		CAS6 A 0
		CAS6 A 0 A_JumpIf(waterlevel == 2, "Underwater")
		CAS6 ABCD 2
		CAS6 E 2 A_SetScale(0.05)
		CAS6 F 2 A_SetScale(0.04)
		CAS6 GH 2 
		Loop
	}
}
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

ACTOR CasingSmoke
{
	+CLIENTSIDEONLY
	+MISSILE
	-NOGRAVITY
	-LOWGRAVITY
	+FORCEXYBILLBOARD
	+THRUACTORS
	-SOLID
	Speed 2
	Scale 0.2
	Renderstyle Add
	Alpha 0.2
	Gravity 0.7
	States
	{
	Spawn:
	SMOK A 0
	SMOK ABCDEFGHIJKLMNOPQR 1 bright A_FadeOut(0.03)
	Stop
	}
}

ACTOR CasingSpawner
{
	Speed 20
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 AAAA 0 A_CustomMissile("CasingSpark",5,0,random(-80,-100),2,random(-10,65))
			TNT1 AAA 0 A_CustomMissile("CasingSmoke",5,0,random(-80,-100),2,random(-10,65))
			TNT1 A -1 A_Jump(256, "Spit")
			Wait
			
		Spit:
			TNT1 A 1
			Stop
	}
}

ACTOR RifleCaseSpawn : CasingSpawner
{
	States
	{
		Spit:
			TNT1 A 0 A_CustomMissile("Empty338",-5,0,random(-80,-100),2,random(45,80))
			Stop
	}
}

ACTOR ExplosiveCaseSpawn
{
	Speed 20
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("EmptyExplosive",-5,0,random(-80,-100),2,random(45,80))
		TNT1 AAAA 0 A_CustomMissile("CasingSpark",5,0,random(-80,-100),2,random(-10,65))
		TNT1 AAA 0 A_CustomMissile("CasingSmoke",5,0,random(-80,-100),2,random(-10,65))
		TNT1 A 1
		TNT1 A 1
		Stop
	}
}

ACTOR M1ClipShooter
{
	Speed 20
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("M1Clip",-5,0,random(-80,-100),2,random(65,75))
		TNT1 A 1
		TNT1 A 1
		Stop
	}
}

ACTOR M1FullClipShooter : M1ClipShooter
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("M1FullClip",-5,0,random(-80,-100),2,random(65,75))
		TNT1 A 1
		TNT1 A 1
		Stop
	}
}

ACTOR LongRifleCaseSpawn : CasingSpawner
{
	States
	{
		Spit:
			TNT1 A 0 A_CustomMissile("Empty338",-5,0,random(-80,-100),2,random(45,80))
			Stop
	}
}

ACTOR M16CaseSpawn : CasingSpawner
{
	Speed 15
	States
	{
		Spit:
			TNT1 A 0 A_CustomMissile("Side338",-5,0,random(-80,-100),2,random(25,35))
			Stop
	}
}

ACTOR M16CaseSpawnADS : CasingSpawner
{
	Speed 23
	States
	{
		Spit:
			TNT1 A 0 A_CustomMissile("Side338",2,0,random(-80,-100),2,random(25,35))
			Stop
	}
}

ACTOR PistolCaseSpawn : CasingSpawner
{
	States
	{
		Spit:
			TNT1 A 0 A_CustomMissile("EmptyPistol",-5,0,random(-80,-100),2,random(45,80))
			Stop
	}
}

ACTOR PistolCaseSpawn2 : LongRifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("EmptyPistol2",-5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(45,80))
		TNT1 AAAA 0 A_CustomMissile("CasingSpark",5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(-10,65))
		TNT1 AAA 0 A_CustomMissile("CasingSmoke",5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(-10,65))
		TNT1 A 1
		TNT1 A 1
		Stop
	}
}

ACTOR MP7CaseSpawn : LongRifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("EmptyMP7",-5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(45,80))
		TNT1 AAAA 0 A_CustomMissile("CasingSpark",5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(-10,65))
		TNT1 AAA 0 A_CustomMissile("CasingSmoke",5,0,random(-80,-100),CMF_AIMDIRECTION | CMF_TRACKOWNER,random(-10,65))
		TNT1 A 1
		TNT1 A 1
		Stop
	}
}

ACTOR EmptyRifle
{
   Height 2
   Radius 2
   Speed 6
   Scale 0.0625
   BounceType "Doom"
   - NOGRAVITY
   +WINDTHRUST
   +CLIENTSIDEONLY
   +MOVEWITHSECTOR
   +MISSILE
   +NOBLOCKMAP
   -DROPOFF
   +NOTELEPORT
   +FORCEXYBILLBOARD
   +NOTDMATCH
   +GHOST
   BounceSound "weapons/casing"
   States
   {
   Spawn:
	  CAS3 A 0
      CAS3 A 0 A_JumpIf(waterlevel == 2, "Underwater")
      CAS3 ABCDEFGH 2
      Loop
   Underwater:
      CAS3 ABCDEFGHAB 3 A_FadeOut(0.1)
	  Stop
   Death:
	  LCPJ A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "GhostDeath")
      LCPJ A 0 A_Jump(256,"Rest1","Rest2")
	  Goto Rest1
   GhostDeath:
	  LCPJ A 0 A_Jump(256,"Rest1GD","Rest2GD")
	  Goto Rest1GD
   Rest1:
      CAS3 A 2000
	  CAS3 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
	  Loop
   Rest2:
      CAS3 E 2000
	  CAS3 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
	  Loop
	Rest1GD:
      CAS3 A 250
	  Stop
	Rest2GD:
      CAS3 E 250
	  Stop
	Vanish:
	  TNT1 A 0
	  Stop
   }
}

ACTOR EmptyMP7 : EmptyRifle
{
	Scale 0.035
}

ACTOR EmptyExplosive : EmptyRifle
{
   States
   {
   Spawn:
	  CAS5 A 0
      CAS5 A 0 A_JumpIf(waterlevel == 2, "Underwater")
      CAS5 ABCDEFGH 2
      Loop

   Underwater:
      CAS5 ABCDEFGHAB 3 A_FadeOut(0.1)
	  Stop

    Rest1:
		CAS5 A 2000
		CAS2 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
		Loop
    Rest2:
		CAS5 E 2000
		CAS2 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
		Loop
    Rest1GD:
		CAS5 A 250
		Stop
	Rest2GD:
		CAS5 E 250
		Stop
   }
}

ACTOR ShotCaseSpawn : RifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 AA 0 A_CustomMissile("CasingSpark",5,0,random(-80,-100),2,random(-10,65))
		TNT1 AAA 0 A_CustomMissile("CasingSmoke",5,0,random(-80,-100),2,random(-10,65))
		TNT1 A 1 A_CustomMissile("ShotgunCasing",0,0,random(-80,-100),2,random(40,60))
		Stop
	}
}

ACTOR BlackLinkSpawn : RifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 1 A_CustomMissile("BlackLink",0,0,random(-80,-100),2,random(40,60))
		Stop
	}
}

ACTOR IntactShotCaseSpawn : RifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 1 A_CustomMissile("IntactShotgunCasing",0,0,random(-80,-100),2,random(40,60))
		Stop
	}
}

ACTOR DragonCaseSpawn : RifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 1 A_CustomMissile("DragonCasing",0,0,random(-80,-100),2,random(40,60))
		Stop
	}
}

ACTOR IntactDragonCaseSpawn : RifleCaseSpawn
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 1 A_CustomMissile("IntactDragonCasing",0,0,random(-80,-100),2,random(40,60))
		Stop
	}
}

// -- DESTRUCT LINK ----------------------------------------
ACTOR BlackLink : EmptyRifle
{
   Speed 8
   Scale 0.2
   BounceSound ""
   States
   {
   Spawn:
	  LINK A 0
      LINK A 0 A_JumpIf(waterlevel == 2, "Underwater")
      LINK ABCDEFGH 2
      Loop

   Underwater:
      LINK ABCDEFGH 3 A_FadeOut(0.1)
	  Stop

    Rest1:
      LINK A 2000
	  LINK A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
	Loop
    Rest2:
      LINK A 2000
      LINK A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
    Loop
	Rest1GD:
      LINK A 250
	Loop
    Rest2GD:
      LINK A 250
    Loop
   }
}

//=====================================================================
// M60 BULLET BELTS
//=====================================================================

ACTOR M60Shooter11
{
	Speed 5
	PROJECTILE
	+NOCLIP
	+CLIENTSIDEONLY
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("M60Belt11",-5,0,0,2,90)
		TNT1 A 1
		Stop
	}
}

ACTOR M60Shooter6 : M60Shooter11
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("M60Belt6",-5,0,0,2,90)
		TNT1 A 1
		Stop
	}
}

ACTOR M60Shooter3 : M60Shooter11
{
	States
	{
	Spawn:
        TNT1 A 0
		TNT1 A 0 A_CustomMissile("M60Belt3",-5,0,0,2,90)
		TNT1 A 1
		Stop
	}
}

// 11 bullets
ACTOR M60Belt11
{
	Radius 4
	Height 4
	+MOVEWITHSECTOR
	+CLIENTSIDEONLY
	+THRUACTORS
	Scale 0.5
	States
	{
		Spawn:
			TNT1 A 0
			M60B A 1 A_CheckFloor("Land")
			Loop
		Land:
			M60B D 0 // Play sound here
			Goto OnFloor
		OnFloor:
			M60B D 250
			CAS2 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
			Loop
		Vanish:
			M60B DDDDDDDDDD 1 A_FadeOut(0.1)
			Stop
	}
}

// 6 bullets
ACTOR M60Belt6 : M60Belt11
{
	States
	{
		Spawn:
			M60B B 0
			M60B B 1 A_CheckFloor("Land")
			Loop
	}
}

// 3 bullets
ACTOR M60Belt3 : M60Belt11
{
	States
	{
		Spawn:
			TNT1 A 0
			M60B C 1 A_CheckFloor("Land")
			Loop
		Land:
			M60B D 0 // Play sound here
			Goto OnFloor
		OnFloor:
			M60B E 250
			CAS2 A 0 A_JumpIf(0 == (ACS_ExecuteWithResult(823,0,0,0)), "Vanish")
			Loop
		Vanish:
			M60B EEEEEEEEEE 1 A_FadeOut(0.1)
			Stop
	}
}