class PlayerShot : BabelBullet
{
	default
	{
		Height 1;
		Radius 1;
		Speed 200;
		//+NOINTERACTION;
		
		BabelBullet.BaseScale 0.4;
		BabelBullet.HeightCorrection 4.0;
		BabelBullet.TrailLength 1.0;
		BabelBullet.TrailDetail 38;
	}
	override void PostBeginPlay()
	{
		//SpawnTracer();
		super.PostBeginPlay();
		//Console.Printf("Tracking to %s", master.GetClassName());
	}
}

class PlayerShotgunShot : PlayerShot
{
	override void BeginPlay()
	{
		super.BeginPlay();
		baseScale = 0.30;
		heightCorrection = 4.0;
	}
}

class PSMGPlayerShot : BabelBullet
{
	default
	{
		Height 1;
		Radius 1;
		speed 150;
		Damage 0;
		RenderStyle "Add";
		
		BabelBullet.BaseScale 0.15;
		BabelBullet.HeightCorrection 4.0;
		BabelBullet.TrailLength 1.0;
		BabelBullet.TrailDetail 28;
		BabelBullet.TrailSprite "PSMGSpriteTrail";
	}
	override void PostBeginPlay()
	{
		super.PostBeginPlay();
	}
}

class PSMGSpriteTrail : SpriteTrail
{
	States
	{
		Spawn:
			PLSE A 2 NoDelay Bright;
			Stop;
	}
}

class ClassicPlayerShot : FastProjectile
{
	default
	{
		Projectile;
		+DONTSPLASH;
		+FORCEXYBILLBOARD;
		Damage 0;
		Radius 1;
		Height 2;
		Speed 200;
		RenderStyle "None";
		MissileType "ClassicSpriteTrail";
		MissileHeight 12;
		Scale 0.5;
	}
	States
	{
		Spawn:
			CHIP C 1 Bright;
			Loop;
		Crash:
		Death:
		XDeath:
			TNT1 A 0;
			Stop;
	}
}

class ClassicPlayerShotgunShot : ClassicPlayerShot
{
	default
	{
		MissileType "ClassicSpriteTrail";
		MissileHeight 12;
	}
}


class ClassicSpriteTrail : Actor
{
	default
	{
		+NOINTERACTION;
		+NOGRAVITY;
		+FORCEXYBILLBOARD;
		+DONTSPLASH;
		Damage 0;
		Height 1;
		Radius 1;
		Speed 0;
		RenderStyle "Add";
		scale 0.5;
	}
	States
	{
		Spawn:
			CHIP C 1 Bright
			{
				A_FadeOut(0.2);
			}
			CHIP C 1 Bright
			{
				A_FadeOut(0.2);
				A_SetScale(0.2);
			}
			CHIP C 1 Bright
			{
				A_FadeOut(0.2);
				A_SetScale(0.15);
			}
			stop;
	}
}

class ClassicPSMGPlayerShot : ClassicPlayerShot
{
	default
	{
		Speed 150;
		MissileType "ClassicPSMGSpriteTrail";
		MissileHeight 12;
		Scale 0.1;
	}
	States
	{
		Spawn:
			TNT1 A 0 A_SetScale(0.1);
			PLSE A 1 Bright;
			Loop;
		Crash:
		Death:
		XDeath:
			TNT1 A 0;
			Stop;
	}
}

class ClassicPSMGSpriteTrail :  ClassicSpriteTrail
{
	default
	{
		scale 0.10;
	}
	States
	{
		Spawn:
			PLSE A 1 Bright
			{
				A_FadeOut(0.2);
			}
			PLSE A 1 Bright
			{
				A_FadeOut(0.2);
				A_SetScale(0.06);
			}
			PLSE A 1 Bright
			{
				A_FadeOut(0.2);
				A_SetScale(0.04);
			}
			stop;
	}
}

class NewSpritePlayerShot : TracerMover
{
	override void BeginPlay()
	{
		super.BeginPlay();
		renderObj = "NewTracerBeamNormal";	//the object to use for trail rendering
		heightCorrection = 0.0;			//For rendering, this helps to correct the height of the tracer. Usually 0.0 is fine, but some sprites may need minor adjustments
		moveSpeed = CVar.FindCVar("egr_sprite_tracer_speed_player_bullet").GetFloat();				//The "speed" at which the tracer moves, in map units
		length = CVar.FindCVar("egr_sprite_tracer_length_player_bullet").GetFloat();					//The length of the tracer, in map units
		traildef = CVar.FindCVar("egr_sprite_tracer_definition_player_bullet").GetInt();					//How many pieces the tracer has
		
		partScale = CVar.FindCVar("egr_sprite_tracer_scale_bullet").GetFloat();
		partStartRatio = CVar.FindCVar("egr_sprite_tracer_start_size_percent_player_bullet").GetFloat();
		partEndRatio = CVar.FindCVar("egr_sprite_tracer_end_size_percent_player_bullet").GetFloat();
	}
}

class NewSpritePSMGPlayerShot : TracerMover
{
	override void BeginPlay()
	{
		super.BeginPlay();
		renderObj = "NewTracerBeamPSMG";	//the object to use for trail rendering
		heightCorrection = 0.0;			//For rendering, this helps to correct the height of the tracer. Usually 0.0 is fine, but some sprites may need minor adjustments
		moveSpeed = CVar.FindCVar("egr_sprite_tracer_speed_player_psmg").GetFloat();				//The "speed" at which the tracer moves, in map units
		length = CVar.FindCVar("egr_sprite_tracer_length_player_psmg").GetFloat();					//The length of the tracer, in map units
		traildef = CVar.FindCVar("egr_sprite_tracer_definition_player_psmg").GetInt();					//How many pieces the tracer has
		
		partScale = CVar.FindCVar("egr_sprite_tracer_scale_psmg").GetFloat();
		partStartRatio = CVar.FindCVar("egr_sprite_tracer_start_size_percent_player_psmg").GetFloat();
		partEndRatio = CVar.FindCVar("egr_sprite_tracer_end_size_percent_player_psmg").GetFloat();
	}
}

class NewSpritePlayerShotgunShot : NewSpritePlayerShot
{
	override void BeginPlay()
	{
		super.BeginPlay();
		renderObj = "NewTracerBeamSmall";
		moveSpeed = CVar.FindCVar("egr_sprite_tracer_speed_player_pellet").GetFloat();				//The "speed" at which the tracer moves, in map units
		length = CVar.FindCVar("egr_sprite_tracer_length_player_pellet").GetFloat();					//The length of the tracer, in map units
		traildef = CVar.FindCVar("egr_sprite_tracer_definition_player_pellet").GetInt();					//How many pieces the tracer has
		
		partScale = CVar.FindCVar("egr_sprite_tracer_scale_pellet").GetFloat();
		partStartRatio = CVar.FindCVar("egr_sprite_tracer_start_size_percent_player_pellet").GetFloat();
		partEndRatio = CVar.FindCVar("egr_sprite_tracer_end_size_percent_player_pellet").GetFloat();
	}
}

class NewTracerBeamNormal : NewTracerBeam
{
	//This was originally a class that had customization, but I changed it to improve performance. Now it's here because I'm too lazy to remove it.
}

class NewTracerBeamSmall : NewTracerBeam
{
	//This was originally a class that had customization, but I changed it to improve performance. Now it's here because I'm too lazy to remove it.
}

class NewTracerBeamPSMG : NewTracerBeam
{
	States
	{
		Spawn:
			TNT1 A 1 NoDelay
			{
				A_SetScale(bs*Lerp(startRatio, endRatio, s));
			}
		Stay:
			PLSE A 1 Bright;
			loop;
	}
}