class SquarePuff : SquareActor
{
	Default
	{
		+NOGRAVITY;
		+NOBLOCKMAP;
		+NOCLIP;
		+PUFFONACTORS;
		+FORCEXYBILLBOARD;
		Radius 1;
		Height 1;
	}
	States
	{
	Spawn:
		BULT Z 2 Bright;
		BULT Z 0 A_Jump(256,1,2,3);
		BULT B 2 Bright;
		BULT CDEF 3 Bright;
		Stop;
	}
}

class PaintJerkBall : SquareActor
{
	Default
	{
		//Decal 'PaintSpray1'
		Projectile;
		+STRIFEDAMAGE;
		+FORCEXYBILLBOARD;
		Speed 18;
		FastSpeed 24;
		Radius 4;
		Height 4;
		Damage 4;
		SeeSound "weapons/pistol";
		DeathSound "weapons/painthit";
		Translation "198:202=244:248";
		DamageType 'Enemy';
	}
	States
	{
	Spawn:
		BLOB A 1;
		Loop;
	Death:
		BLOB BCDEFG 2;
		Stop;
	}
}

class Cannonball : PaintJerkBall
{
	Default
	{
		Damage 8;
		Scale 0.75;
		Speed 16;
		FastSpeed 22;
		SeeSound "circlejerk/missile";
		DeathSound "weapons/rocklx";
	}
	States
	{
	Spawn:
		CANN A 1;
		Loop;
	Death:
		MISL B 0 A_SetTranslucent(1.0,1);
		MISL BCDEF 3 Bright;
		Stop;
	}
}

class HeavyBall : SquareActor
{
	Default
	{
		Projectile;
		+STRIFEDAMAGE;
		+FORCEXYBILLBOARD;
		Speed 20;
		DamageFunction (1);
		RenderStyle 'Add';
		Radius 4;
		Height 4;
		DeathSound "ovolt/shotx";
		DamageType 'Magic';
	}
	States
	{
	Spawn:
		LASR AB 3 Bright;
		Loop;
	Death:
		LASR CDEF 3 Bright;
		Stop;
	}
}

class CubeBallYellow : HeavyBall
{
	Default
	{
		Speed 18;
		Damage 4;
		Translation "112:127=240:255";
		SeeSound "colorcube/shot/yellow";
		DeathSound "colorcube/shot/death";
	}
	States
	{
	Spawn:
		CBP1 ABCD 4 Bright;
		Loop;
	}
}

class CubeBallRed : HeavyBall
{
	Default
	{
		Speed 16;
		Damage 10;
		Translation "112:127=192:207";
		SeeSound "colorcube/shot/red";
		DeathSound "colorcube/shot/death";
	}
	States
	{
	Spawn:
		CBP2 ABCB 4 Bright;
		Loop;
	Death:
		LASR CDEF 3 Bright;
		Stop;
	}
}

class CubeBallPurple : HeavyBall
{
	Default
	{
		Speed 14;
		Damage 5;
		+SEEKERMISSILE;
		Translation "112:127=32:47";
		SeeSound "colorcube/shot/purple";
		DeathSound "colorcube/shot/death";
	}
	States
	{
	Spawn:
		CBP3 ABCD 4 Bright A_Tracer2();
		Loop;
	}
}

class CylonLaser : FastProjectile
{
	Default
	{
		+FORCEXYBILLBOARD;
		MissileType 'CylonTrail';
		MissileHeight 8;
		SeeSound "cylonder/laser";
		DeathSound "ovolt/shotx";
		RenderStyle 'Add';
		Speed 30;
		DamageFunction (10);
		Radius 6;
		Height 6;
		Scale 0.2;
		DamageType 'Enemy';
	}
	States
	{
	Spawn:
		TNT1 A 1 Bright;
		Loop;
	Death:
		LASR CDEF 3 Bright;
		Stop;
	}
}

class CylonTrail : SquareActor
{
	Default
	{
		+CLIENTSIDEONLY;
		+NOBLOCKMAP
		+NOGRAVITY
		+NOCLIP;
		+FORCEXYBILLBOARD;
		Scale 0.2;
		RenderStyle 'Add';
	}
	States
	{
	Spawn:
		LASR A 1;
		LASR AAAAAA 1 Bright A_FadeOut(0.14);
		Stop;
	}
}

class JetpackJerkLaser : CylonLaser
{
	Default
	{
		Translation "112:127=192:207";
		MissileType 'JetpackJerkTrail';
		Speed 20;
	}
}
class JetpackJerkLaserSilent : JetpackJerkLaser
{
	Default
	{
		SeeSound "";
	}
}

class JetpackJerkTrail : CylonTrail
{
	Default
	{
		Translation "112:127=192:207";
	}
}

class OvoltBall : SquareActor
{
	Default
	{
		Radius 6;
		Height 8;
		Speed 10;
		FastSpeed 20;
		Damage 5;

		Projectile;
		+RANDOMIZE;
		+STRIFEDAMAGE;
		+FORCEXYBILLBOARD;

		RenderStyle 'Add';
		Alpha 1;

		DamageType 'Enemy';
		Scale 0.66;
		SeeSound "ovolt/attack";
		DeathSound "ovolt/shotx";
	}
	States
	{
	Spawn:
		OVBL ABCD 3 Bright;
		Loop;
	Death:
		OVBL EFG 4 Bright;
		Stop;
	}
}

class RevoltBall : OvoltBall
{
	Default
	{
		Speed 16;
		FastSpeed 20;
		Damage 7;
		Translation "96:96=201:201";
	}
	States
	{
	Spawn:
		DOBL ABCD 3 Bright;
		Loop;
	Death:
		DOBL EFG 4 Bright;
		Stop;
	}
}

class SuperHellshellBlur : SquareActor
{
	Default
	{
		+CLIENTSIDEONLY;
		+NOBLOCKMAP;
		+NOCLIP;
		+NOGRAVITY;
		+FORCEXYBILLBOARD;
		RenderStyle 'Add';
		Alpha 0.1;
	}
	States
	{
	Spawn:
		DSRK A 12;
		Stop;
	}
}

class SuperHellshell : SquareActor
{
	Default
	{
		PROJECTILE;
		+SEEKERMISSILE;
		+FORCEXYBILLBOARD;
		Radius 8;
		Height 16;
		Speed 30;
		Damage 20;
		SeeSound "weapons/hellshot";
		DeathSound "weapons/rocklx";
		Decal 'ShellScorch';
		DamageType 'HellDamage';
	}
	States
	{
	Spawn:
		DSRK A 0 A_SpawnProjectile("SuperHellshellBlur", 8);
		DSRK A 2 A_SeekerMissile(30, 30, SMF_PRECISE);
		Loop;
	Death:
		MISL B 0 A_Quake(1, 25, 0, 500, "");
		MISL B 0 A_SetTranslucent(1.0,1);
		MISL B 0 A_NoGravity();
		Stop;
	}
}

class BloodnadeProjectile : SquareActor
{
	Default
	{
		Radius 4;
		Height 8;
		Damage 0;
		Projectile;
		-NOGRAVITY;
		+FORCEXYBILLBOARD;
		Gravity 0.3;
		Speed 30;
		DeathSound "weapons/goonhit";
		Translation "112:127=192:207";
	}
	States
	{
	Spawn:
		GNAD ABCDEFGHIJ 3;
		Loop;
	Death:
		TNT1 A 25 SQ_BloodnadeShatter();
		Stop;
	}

	void SQ_BloodnadeShatter()
	{
		A_RadiusThrust(80);
		A_SpawnItem("RedGooSpawner");
		SQ_SpawnMultiple("BloodnadeProjectileOozeBlob", 30, xvel: (-6, 6), yvel: (-6, 6), zvel: (4, 6), flags: SXF_TRANSFERPOINTERS);
	}
}

class BloodnadeProjectileOozeBlob : SquareActor
{
	Default
	{
		Radius 4;
		Height 8;
		Gravity 0.8;
		DamageFunction (3);
		RenderStyle 'Add';
		Projectile;
		-NOGRAVITY;
		+BOUNCEONWALLS;
		+BOUNCEONCEILINGS;
		+FORCEXYBILLBOARD;
	}
	States
	{
	Spawn:
		BLOB A 3;
		Loop;
	Crash:
	Death:
		TNT1 A 0 A_SpawnItemEx("BloodnadeProjectileOozeBlobPuddle", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS);
		Stop;
	}
}

class BloodnadeProjectileOozeBlobPuddle : SquareActor
{
	Default
	{
		RenderStyle 'Add';
		Radius 12;
		Height 8;
		DamageFunction (3);
		Projectile;
		-NOGRAVITY;
		+DONTBLAST;
		+FORCEXYBILLBOARD;
		Gravity 1.0;
		Speed 0;
		XScale 2.0;
	}
	States
	{
	Spawn:
		BLDP A 525;
	Death:
		BLDP A 0 A_SpawnItemEx("GooVaporRed", frandom(-2.0,2.0), frandom(-2.0,2.0), 4.0, 0, 0, 1, 0, 0, 20);
		BLDP A 1 A_FadeOut(0.05);
		Loop;
	}
}

class DestructiLaser : JetpackJerkLaser
{
	Default
	{
		Radius 14;
		Speed 30;
	}
}

class ShatterboxShard : SquareActor
{
	Default
	{
		Radius 4;
		Height 8;
		Damage 3;
		Speed 16;
		FastSpeed 22;
		BounceType 'Doom';
		Gravity 0.0;
		Projectile;
		+NOGRAVITY;
		+FORCEXYBILLBOARD;
		+RANDOMIZE;
		+NOBOUNCESOUND;
		+BOUNCEONWALLS;
		+BOUNCEONCEILINGS;
	}
	States
	{
	Spawn:
		SHAR ABABABABAB 2;
		SHAR A 2 A_Die();
		Goto Death;
	Death:
		SHAR CD 4;
		Stop;
	}
}

class ShardExplosion : SquareActor
{
	const SHARD_COUNT = 8;

	Default
	{
		+NOBLOCKMAP;
		+NOCLIP;
		+NOGRAVITY;
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 1 {
			for (int i = 0; i < 3; i++)
				SQ_ShardExplode(8 * i + 12);
		}
		Stop;
	}

	void SQ_ShardExplode(int height)
	{
		int angleStep = 360 / SHARD_COUNT;
		for(int i = 0; i < SHARD_COUNT; i++) {
			A_SpawnProjectile("ShatterboxShard", height, 0, angleStep * i, CMF_AIMDIRECTION);
		}
	}
}

class DestructinatorCrosshair : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		RenderStyle 'Translucent';
		Alpha 0.85;
	}
	States
	{
	Spawn:
		LOCK AB 1 A_Fire();
		LOCK C 0 A_PlaySound("destructinator/target");
		LOCK CCCCC 2 Bright A_Fire();
		LOCK C 0 A_PlaySound("destructinator/target");
		LOCK CCCCC 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK DDDDD 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK DDDDD 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK EEEEE 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK EEEEE 2 Bright A_Fire();
		LOCK FG 1 Bright;
		Stop;
	}
}

/**** SPECTRA **********************/

class SpectraBall : HeavyBall
{
	Default
	{
		Scale 0.5;
		DamageFunction (10);
	}
}

class SpectraBallRed : SpectraBall
{
	Default
	{
		DamageFunction (2);
		Translation "116:120=196:200";
	}
}

class SpectraBallOrange : SpectraBall
{
	Default
	{
		DamageFunction (4);
		Translation "116:120=147:151";
	}
}

class SpectraBallYellow : SpectraBall
{
	Default
	{
		DamageFunction (6);
		Translation "116:120=242:246";
	}
}

class SpectraBallGreen : SpectraBall
{
	Default
	{
		DamageFunction (8);
		// Already Green;
	}
}

class SpectraBallBlue : SpectraBall
{
	Default
	{
		DamageFunction (10);
		Translation "116:120=67:71";
	}
}

class SpectraBallPurple : SpectraBall
{
	Default
	{
		DamageFunction (12);
		Translation "116:120=35:39";
	}
}

class SpectraBallCyan : SpectraBall
{
	Default
	{
		DamageFunction (10);
		Translation "116:120=1:5";
	}
}

class SpectraPuff : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+CLIENTSIDEONLY;
		RenderStyle 'Translucent';
		Scale 1.8;
		Alpha 0.9;
		Translation "116:120=10:19";
	}
	States
	{
	Spawn:
		LASR B 0 A_SetScale(scale.x * 0.9);
		LASR B 1 A_FadeOut(0.02);
		Loop;
	}
}

class SpectraPoof : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+CLIENTSIDEONLY;
		RenderStyle 'Translucent';
		Alpha 0.9;
	}
	States
	{
	Spawn:
		SMKE A 3 NoDelay SQ_SpawnMultiple("SpectraPuff", 20, (-6.0,6.0), (-6.0,6.0), (16,32), (-1.0,1.0), (-1.0,1.0), (-1.0,1.0), (2,2));
		SMKE BCDE 3;
		Stop;
	}
}

class DarkSpectraPuff : SpectraPuff
{
	Default
	{
		RenderStyle 'Translucent';
		Alpha 1.0;
		Translation "116:120=0:0";
	}
}

class DarkSpectraPoof : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+CLIENTSIDEONLY;
		Alpha 1.0;
		Translation "10:31=0:0";
	}
	States
	{
	Spawn:
		SMKE A 3 Bright NoDelay SQ_SpawnMultiple("DarkSpectraPuff", 20, (-6.0,6.0), (-6.0,6.0), (16,32), (-1.0,1.0), (-1.0,1.0), (-1.0,1.0), (2,2));
		SMKE BCDE 3 Bright;
		Stop;
	}
}

class SmokePuff : SquareActor
{
	Default
	{
		+CLIENTSIDEONLY;
		+NOGRAVITY;
		+NOBLOCKMAP;
		+NOCLIP;
		+RANDOMIZE;
	}
	States
	{
	Spawn:
		SMKE ABCDE 3;
		Stop;
	}
}

/**** STRONGMAN **********************/

class StrongmanGrappleTrail : SquareActor
{
	Default
	{
		Radius 3;
		Height 6;

		+CLIENTSIDEONLY;
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+FORCEXYBILLBOARD;
	}
	States
	{
	Spawn:
		GRPL B 8;
		Stop;
	}
}

class StrongmanGrappleHook : LoreShot
{
	Default
	{
		Radius 8;
		Height 16;
		Damage 6;
		Speed 25;
		FastSpeed 30;

		PROJECTILE;
		+STRIFEDAMAGE;

		SeeSound "strongman/grapple/throw";
		DeathSound "strongman/grapple/impact";
	}
	States
	{
	Spawn:
		GRPL A 1 A_SpawnItemEx("StrongmanGrappleTrail", -20);
		Loop;
	Death:
		GRPL A 4;
		Stop;
	}
}

/**** EYESCREAMER **********************/

class EyescreamerBall : SquareActor
{
	Default
	{
		Height 18;
		Radius 12;
		Speed 20;
		FastSpeed 26;
		Damage 12;

		Projectile;
		+STRIFEDAMAGE;

		DeathSound "eyescreamer/ball/death";
	}
	States
	{
	Spawn:
		EYSP A 0;
		EYSP A 0 A_SpawnItem("GibSpawnerEyescreamerBallStart");
	Flying:
		EYSP AB 4;
		Loop;
	Death:
		TNT1 A 0 A_SpawnItem("GibSpawnerEyescreamerBallEnd");
		TNT1 A 35; // For sound
		Stop;
	}
}

/**** MINI-DESTRUCTINATOR **********************/

class MiniLaser : DestructiLaser {}

class MiniDestructinatorCrosshair : DestructinatorCrosshair
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		RenderStyle 'Translucent';
		Alpha 0.85;
	}
	States
	{
	Spawn:
		LOCK AB 1 A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK CCCCC 2 Bright A_Fire();
		LOCK C 0 A_PlaySound("destructinator/target");
		LOCK CDDDD 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK DDDEE 2 Bright A_Fire();
		LOCK A 0 A_PlaySound("destructinator/target");
		LOCK EEEEE 2 Bright A_Fire();
		LOCK FG 1 Bright;
		Stop;
	}
}

class MiniDestructinatorMissileTrail : SmokePuff
{
	Default
	{
		Scale 0.25;
	}
}

class MiniDestructinatorMissile : SquareActor
{
	Default
	{
		PROJECTILE;
		+SEEKERMISSILE;

		Speed 14;
		FastSpeed 20;
		DamageFunction (25);
		Radius 8;
		Height 12;

		SeeSound "minidestructinator/rocket";
		DeathSound "minidestructinator/rocket/death";
	}
	States
	{
	Spawn:
		MDSM A 0 A_SpawnItemEx("MiniDestructinatorMissileTrail", -16, 0, -8);
		MDSM A 0 A_SeekerMissile(0, 15, SMF_PRECISE);
		MDSM A 2 Bright;
		MDSM A 0 A_SpawnItemEx("MiniDestructinatorMissileTrail", -16, 0, -8);
		MDSM A 0 A_SeekerMissile(0, 15, SMF_PRECISE);
		MDSM A 2 Bright;
		Loop;
	Death:
		MISL B 0 A_SetTranslucent(1.0, 1);
		MISL B 0 A_Explode(25, 64);
		MISL BCDEF 3 Bright A_SpawnItemEx("LightSmokeRandom", random(-20,20), random(-20,20), 0, 0, 0, random(1, 4) * 0.5, 0, 0, 96);
		Stop;
	}
}

/*** The HEXANS **/

class HexasRangerBall : FastProjectile
{
	Default
	{
		+STRIFEDAMAGE;
		+FORCEXYBILLBOARD;
		Speed 35;
		Radius 4;
		Height 4;
		Damage 3;
		Scale 0.66;
		MissileType "HexasRangerTrail";
		MissileHeight 8;
		SeeSound "hexasranger/shot";
		DeathSound "weapons/painthit";
		Translation "198:202=244:248";
	}
	States
	{
	Spawn:
		BLOB A 1 Bright;
		Loop;
	Death:
		BLOB BCDEFG 2 Bright;
		Stop;
	}
}

class HexasRangerTrail : SquareActor
{
	Default
	{
		+CLIENTSIDEONLY;
		Scale 0.66;
		Alpha 0.75;
		RenderStyle 'Translucent';
		Translation "198:202=244:248";
	}
	States
	{
	Spawn:
		BLOB AAAA 1 Bright A_FadeOut(0.25);
		Stop;
	}
}

class SheriffShot : HexasRangerBall
{
	Default
	{
		Damage 2;
		Scale 0.4;
		MissileType "SheriffTrail";
		SeeSound "";
	}
}

class SheriffTrail : HexasRangerTrail
{
	Default
	{
		Scale 0.4;
		Alpha 0.5;
	}
}

/**** SHADIUS/SHADLING ****/

class ShadlingBall : SpectraBallCyan
{
	Default
	{
		+STRIFEDAMAGE;
		Damage 5;
		Speed 12;
		FastSpeed 20;
	}
}

class ShadiusTriangleShot : CubeBallYellow
{
	Default
	{
		Translation "116:120=1:5", "244:248=2:6";
		Damage 7;
		Speed 25;
		Species "E2Boss";
		+THRUSPECIES;
	}
}
class ShadiusTriangleShotQuiet : ShadiusTriangleShot
{
	Default
	{
		SeeSound "";
	}
}

class ShadiusRoundShot : CubeBallRed
{
	Default
	{
		Translation "116:120=1:5", "198:202=2:6";
		Damage 7;
		Speed 25;
		Species "E2Boss";
		+THRUSPECIES;
	}
}
class ShadiusRoundShotQuiet : ShadiusRoundShot
{
	Default
	{
		SeeSound "";
	}
}

class ShadiusSquareShot : CubeBallPurple
{
	Default
	{
		Translation "116:120=1:5", "34:38=2:6";
		Damage 7;
		Speed 20;
		Species "E2Boss";
		+THRUSPECIES;
	}
}
class ShadiusSquareShotQuiet : ShadiusSquareShot
{
	Default
	{
		SeeSound "";
	}
}

class ShadiusPuff : SpectraPuff
{
	Default
	{
		Alpha 1.0;
		RenderStyle 'Normal';
		Translation "116:120=1:5";
	}
}

class ShadiusPoof : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+CLIENTSIDEONLY;
		Alpha 1.0;
		RenderStyle 'Normal';
		Translation "10:31=1:5";
	}
	States
	{
	Spawn:
		SMKE A 3 Bright NoDelay SQ_SpawnMultiple("ShadiusPuff", 20, (-6.0,6.0), (-6.0,6.0), (16,32), (-1.0,1.0), (-1.0,1.0), (-1.0,1.0), (2,2));
		SMKE BCDE 3 Bright;
		Stop;
	}
}

class ShadiusBigPoof : SquareActor
{
	Default
	{
		+NOBLOCKMAP;
		+NOGRAVITY;
		+NOCLIP;
		+CLIENTSIDEONLY;
		Alpha 1.0;
		Translation "10:31=0:0";
	}
	States
	{
	Spawn:
		SMKE A 0 NoDelay A_PlaySound("shadius/teleport");
		SMKE A 3 Bright SQ_SpawnMultiple("DarkSpectraPuff", 30, (-12.0,12.0), (-12.0,12.0), (16,96), (-1.0,1.0), (-1.0,1.0), (-1.0,1.0), (2,2));
		SMKE BCDE 3 Bright;
		Stop;
	}
}

class ShadeSmoke : Smoke
{
	Default
	{
		RenderStyle 'Normal';
		Alpha 1.0;
		Scale 0.1;
	}
	// [XA] Temporary state override to change the fadeout speed.
	//      I'll refactor this later now that we're in zscriptville.
	States
	{
	Spawn:
		SMOK A 0;
		"####" AAAA 1 A_SetScale(scale.x * 1.6);
	SpawnRest:
		"####" A 20; // [XA] The only changed line. Heh. :P
	Death:
		"####" AAAAA 2 A_SetScale(scale.x * 0.9);
	DeathLoop:
		"####" A 0 A_SetScale(scale.x * 0.9);
		"####" A 2 A_FadeOut(0.05);
		Goto DeathLoop;
	}
}

class ShadeSmoke1 : ShadeSmoke
{
	Default
	{
		Translation "0:0=7:7";
	}
}
class ShadeSmoke2 : ShadeSmoke
{
	Default
	{
		Translation "0:0=6:6";
	}
}
class ShadeSmoke3 : ShadeSmoke
{
	Default
	{
		Translation "0:0=5:5";
	}
}
class ShadeSmoke4 : ShadeSmoke
{
	Default
	{
		Translation "0:0=4:4";
	}
}
class ShadeSmoke5 : ShadeSmoke
{
	Default
	{
		Translation "0:0=3:3";
	}
}

class ShadeSmokeRandom : RandomSpawner
{
	Default
	{
		DropItem 'ShadeSmoke1';
		DropItem 'ShadeSmoke2';
		DropItem 'ShadeSmoke3';
		DropItem 'ShadeSmoke4';
		DropItem 'ShadeSmoke5';
	}
}

class ShadiusSmoke : SquareActor
{
	Default
	{
		Radius 2;
		Height 2;
		+NOINTERACTION;
		RenderStyle 'Translucent';
		Scale 0.5;
	}
	States
	{
	Spawn:
		TNT1 A 0;
		TNT1 A 0 A_Jump (256, "Blot1", "Blot2", "Blot3", "Blot4");
	Blot1:
		BLOT A 4;
		BLOT B 4 A_SetTranslucent (0.4, 0);
		BLOT C 4 A_SetTranslucent (0.3, 0);
		BLOT D 4 A_SetTranslucent (0.2, 0);
		BLOT E 4 A_SetTranslucent (0.1, 0);
		Stop;
	Blot2:
		BLOT F 4;
		BLOT G 4 A_SetTranslucent (0.4, 0);
		BLOT H 4 A_SetTranslucent (0.3, 0);
		BLOT I 4 A_SetTranslucent (0.2, 0);
		BLOT J 4 A_SetTranslucent (0.1, 0);
		Stop;
	Blot3:
		BLOT K 4;
		BLOT L 4 A_SetTranslucent (0.4, 0);
		BLOT M 4 A_SetTranslucent (0.3, 0);
		BLOT N 4 A_SetTranslucent (0.2, 0);
		BLOT O 4 A_SetTranslucent (0.1, 0);
		Stop;
	Blot4:
		BLOT P 4;
		BLOT Q 4 A_SetTranslucent (0.4, 0);
		BLOT R 4 A_SetTranslucent (0.3, 0);
		BLOT S 4 A_SetTranslucent (0.2, 0);
		BLOT T 4 A_SetTranslucent (0.1, 0);
		Stop;
	}
}

// [XA] Moved ShadiusHandBall to shadius.txt (zscript) for now.
//      It should probably be put back in full/projectiles.txt
//      once that's been zscriptified as well.

// [XA] oh hey i should do this shouldn't i :P

class BossFlamer : SquareActor
{
	Default
	{
		+NOGRAVITY;
		+NOBLOCKMAP;
		+NOCLIP;
	}
	States
	{
	Spawn:
		TNT1 A 0 NoDelay SQ_SpawnMultiple("BossFire", 5, (-30, 30), (-30, 30), (20, 80));
		Stop;
	}
}

class BossFlamerRed : BossFlamer
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay SQ_SpawnMultiple("BossFireRed", 5, (-30, 30), (-30, 30), (20, 80));
		Stop;
	}
}

class BossSmokerDeath : SquareActor
{
	Default
	{
		+NOGRAVITY;
		+NOBLOCKMAP;
		+NOCLIP;
	}
	States
	{
	Spawn:
		TNT1 A 0 NoDelay SQ_SpawnMultiple("ShadiusSmoke", 15, (-30, 30), (-30, 30), (20, 80), (-8,8), (-8,8), (-8,8));
		TNT1 A 0 A_SpawnItemEx("BossFire", frandom[SquareEffectRandom](-30.0,30.0), frandom[SquareEffectRandom](-30.0,30.0), frandom[SquareEffectRandom](-16.0,56.0));
		Stop;
	}
}



class BossFire : SquareActor
{
	Default
	{
		+NOGRAVITY;
		+NOBLOCKMAP;
		+NOCLIP;
		RenderStyle 'Add';
	}
	States
	{
	Spawn:
		SGFL ABCDEFGH 3 Bright;
		Stop;
	}
}

class BossFireRed : BossFire
{
	Default
	{
		Translation "1:7=194:207";
	}
}

class BossFireDamaging : SquareActor
{
	Default
	{
		Projectile;
		RenderStyle 'Add';
		Speed 8;
		Radius 2;
		Height 2;
		Damage 1;
		Scale 0.75;
		+RIPPER;
		+BLOODLESSIMPACT;
		+DONTBLAST;
	}
	States
	{
	Spawn:
		FIRE ABCDEFGH 3 Bright;
		Stop;
	}
}
