//Guidance
class LasersightPuff : Actor
{
	Default
	{
		Renderstyle "Add";
		Scale 0.1;
		+ALWAYSPUFF
		+PUFFGETSOWNER
		+BLOODLESSIMPACT
		+PUFFONACTORS
		+SKYEXPLODE
		+DONTSPLASH
		+NOTRIGGER
		+NOTONAUTOMAP
		-ALLOWPARTICLES
		+NOTIMEFREEZE
	}
	States
	{
		Spawn:
		Crash:
		Death:
		XDeath:
			RTIN A 2 Bright;
			Stop;
	}
}

//Rocket
class EmperorRocket : FastProjectile
{
	Default
	{
		Radius 7;
		Height 11;
		Speed 40;
		DamageFunction (200);
		Projectile;
		ProjectileKickback 125;
		Obituary "%o bowed down to might of %k's ''Golden Emperor''.";
		DamageType "Matriarch";
		DeathSound "";
		Scale 1.25;
		SeeSound "GoldenEmperor/Fire";
		MissileType "EmperorTrailSpawner";
		MissileHeight 8;
		Decal "DreadfulScorch";
		+NOGRAVITY
		+THRUGHOST
		+DONTSPLASH
		+EXPLODEONWATER
		+FORCERADIUSDMG
		+DONTREFLECT
		+MTHRUSPECIES
		+FORCEXYBILLBOARD
		//+SKYEXPLODE
		+GETOWNER
	}
	
	override void OnDestroy () {
		GuncasterSeeker.RemoveControlled(self, target);
	}
	
	double attnmod, attnmod2;
	double rangemod;
	int timemod;
	int dmgmod;
	int lifespan;
	
	States
	{
	Spawn:
		MPRM A 0 NoDelay {
			dmgmod = (200);
			timemod = 0;
			attnmod = 1.0;
			attnmod2 = 0.7;
			A_SpawnItemEx("EmperorMissileFlare",-24,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR);
			A_PlaySound("GoldenEmperor/Loop",5,1.0,1);
			if(CountInv("EmperorStrat",AAPTR_TARGET)) { GuncasterSeeker.MakeControlled(self, target, 40, 6); }
		}
		MPRM A 1 {
			if(timemod < 1536) {
				timemod = timemod + 4;
				rangemod = rangemod + 0.035;
				attnmod = attnmod - 0.001;
				attnmod2 = attnmod2 - 0.001;
				dmgmod = dmgmod + 2;
				SetDamage(dmgmod);
			}
		}
		Wait;
  Death:
		TNT1 A 0 {
			if(Target && Target.GetCvar("GC_Kaboom")) { A_PlaySound("Demoman/Kaboom",1); } //GC_Kaboom
			A_Stop();
			lifespan = 14;
			A_StopSound(4);
			A_PlaySound("TNT/Explosion",5,0.9,0,attnmod * 0.25);
			//A_PlaySound("TNT/Add",5,1.0,0,attnmod * 0.25);
			A_PlaySound("TNT/Far",6,0.8,0,attnmod2);
			A_PlaySound("GoldenEmperor/Explode",7,1.0,0,attnmod * 0.25);
			A_SpawnItemEx("EmperorExplosionMain",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
			A_SpawnItemEx("EmperorFlare",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
			A_SpawnItemEx("EmperorFlare2",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
			A_SpawnItemEx("EmperorFX",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
			A_SpawnItemEx("EmperorShockwave",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
			if(!GetCvar("GC_ToasterMode"))
			{
				for(int user_c = 0; user_c < 5; user_c++)
				{
					A_SpawnItemEx("EmperorTiltwave",0,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR|SXF_TRANSFERPOINTERS);
				}
			}
			A_QuakeEx(3,3,3,55,0,768 + timemod * 8,"none",QF_SCALEDOWN);
			A_QuakeEx(7,7,7,55,0,384 + timemod * 8,"none",QF_SCALEDOWN);
			A_QuakeEx(3,3,3,55,0,768 + timemod * 8,"none",QF_SCALEDOWN|QF_WAVE);
			A_QuakeEx(7,7,7,55,0,384 + timemod * 8,"none",QF_SCALEDOWN|QF_WAVE);
			A_RemoveChildren(1,RMVF_EVERYTHING,"EmperorMissileFlare");
			A_AlertMonsters();
			A_Explode(100 + timemod * 3, 256 + timemod * 3,0);
			A_Explode(150 + timemod * 2, 256 + timemod * 2);
			bEXTREMEDEATH = 0;
			OnDestroy();
		}
	DeathLoop:
		TNT1 A 4 {
			lifespan--;
			A_Explode(30 + timemod * 2,256 + timemod * 3);
			Return A_JumpIf(lifespan <= 0, 1);
		}
		Loop;
		TNT1 A 100;
		Stop;
	}
}

class EmperorBase : Actor
{ 
	Default
	{
		+NOINTERACTION
		+NOTONAUTOMAP
		+FORCEXYBILLBOARD
	}
}

//Trail
class EmperorMissileFlare : EmperorBase
{
	Default
	{
		RenderStyle "Add";
		Scale 0.0; //Scale 0.6;
		+ROLLSPRITE
		+ROLLCENTER
	}
	
	States
	{
	Spawn:
		FLER A 0 NoDelay {
			A_SetRoll(frandom(0.0,360.0));
		}
		FLER A 1 Bright {
			if(master) { A_SetScale(EmperorRocket(master).rangemod * 0.5); }
			A_SetRoll(Roll + 5.0, SPF_INTERPOLATE);
			A_Warp(AAPTR_MASTER,-24,0,0,0,WARPF_INTERPOLATE);
			Return A_JumpIf(IsPointerEqual(AAPTR_MASTER,AAPTR_NULL) == True, "Null");
		}
		Wait;
	}
}

class EmperorTrailSpawner : EmperorBase
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			A_SpawnItemEx("EmperorMissileFlare2",-24,0,0,0,0,0,0,SXF_SETMASTER|SXF_ORIGINATOR);
			A_SpawnItemEx("EmperorTrailCloud",
				-24+frandom(8.0,-8.0),frandom(8.0,-8.0),frandom(8.0,-8.0),
				frandom(0.2,-0.2),frandom(0.2,-0.2),frandom(0.2,-0.2),
				frandom(3.0,-3.0),SXF_CLIENTSIDE,20);
			A_SpawnItemEx("EmperorTrailSmoke",
				-24+frandom(8.0,-8.0),frandom(8.0,-8.0),frandom(8.0,-8.0),
				frandom(0.2,-0.2),frandom(0.2,-0.2),frandom(0.2,-0.2),
				frandom(3.0,-3.0),SXF_CLIENTSIDE,20);
		}
		Stop;
	}
}

class EmperorMissileFlare2 : EmperorMissileFlare
{
	Default
	{
		Scale 0.3;
	}
	
	States
	{
	Spawn:
		FLER A 0 NoDelay {
			A_SetRoll(frandom(0.0,360.0));
		}
		FLER A 1 Bright {
			A_FadeOut(0.1);
			A_SetScale(Scale.X - 0.05);
			Return A_JumpIf(Scale.X <= 0, "Null");
		}
		Wait;
	}
}


class EmperorTrailSmoke : EmperorBase
{
	Default
	{
		Renderstyle "Translucent";
		Alpha 0.0;
	}
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_SetScale(frandom(0.15, 0.2));
			//TNT1 A 0 A_ScaleVelocity(frandom(0.8,1.1));
		SetupSprite:
			TNT1 A 0 A_Jump(256, "SpriteE", "SpriteF", "SpriteG", "SpriteH",
								 "SpriteI", "SpriteJ", "SpriteK", "SpriteL",
								 "SpriteM", "SpriteN", "SpriteO", "SpriteP");
		SpriteE:
			DYMI E 0 A_Jump(256,"FadeIn");
		SpriteF:
			DYMI F 0 A_Jump(256,"FadeIn");
		SpriteG:
			DYMI G 0 A_Jump(256,"FadeIn");
		SpriteH:
			DYMI H 0 A_Jump(256,"FadeIn");
		SpriteI:
			DYMI I 0 A_Jump(256,"FadeIn");
		SpriteJ:
			DYMI J 0 A_Jump(256,"FadeIn");
		SpriteK:
			DYMI K 0 A_Jump(256,"FadeIn");
		SpriteL:
			DYMI L 0 A_Jump(256,"FadeIn");
		SpriteM:
			DYMI A 0 A_Jump(256,"FadeIn");
		SpriteN:
			DYMI B 0 A_Jump(256,"FadeIn");
		SpriteO:
			DYMI C 0 A_Jump(256,"FadeIn");
		SpriteP:
			DYMI D 0 A_Jump(256,"FadeIn");
		FadeIn:
			"####" "#" 1 {
				A_FadeIn(frandom(0.01, 0.04));
				//A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				A_SetScale(Scale.X + frandom(0.002, 0.003));
				Return A_JumpIf(Alpha >= 0.3, "Inter");
			}
			Loop;
		Inter:
			"####" "#" 1 {
				//A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				A_SetScale(Scale.X + frandom(0.002, 0.003));
				Return A_Jump(20,"FadeOut");
			}
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_FadeOut(frandom(0.0125,0.015));
				//A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				A_SetScale(Scale.X + frandom(0.002, 0.003));
			}
			Loop;
	}
}

class EmperorTrailCloud : EmperorBase
{
	Default
	{
		Renderstyle "Add";
	}
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay {
				A_SetScale(frandom(0.4, 0.45));
				Return A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD",
								   "SpriteE", "SpriteF", "SpriteG", "SpriteH");
			}
		SpriteA:
			CLOD A 0 A_Jump(256,"FadeIn");
		SpriteB:
			CLOD B 0 A_Jump(256,"FadeIn");
		SpriteC:
			CLOD C 0 A_Jump(256,"FadeIn");
		SpriteD:
			CLOD D 0 A_Jump(256,"FadeIn");
		SpriteE:
			CLOD E 0 A_Jump(256,"FadeIn");
		SpriteF:
			CLOD F 0 A_Jump(256,"FadeIn");
		SpriteG:
			CLOD G 0 A_Jump(256,"FadeIn");
		SpriteH:
			CLOD H 0 A_Jump(256,"FadeIn");
		FadeIn:
			"####" "#" 1 {
				A_FadeIn(frandom(0.15, 0.1));
				//A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), CVF_RELATIVE);
				A_SetScale(Scale.X + frandom(0.004, 0.006));
				Return A_JumpIf(Alpha >= 0.9, "FadeOut");
			}
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_FadeOut(frandom(0.05,0.02));
				//A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), CVF_RELATIVE);
				A_SetScale(Scale.X + frandom(0.004, 0.006));
			}
			Loop;
	}
}

//Impact
class EmperorFX : EmperorBase
{ 
	States
	{
		Spawn:
			TNT1 A 78;
			Stop;
	}
}

class EmperorSmoke : EmperorBase
{
	Default
	{
		Renderstyle "Translucent";
		Alpha 0.0;
	}
	
	States
	{
		Spawn:
			TNT1 A random(12,17);
			TNT1 A 0 A_SetScale(frandom(0.9, 0.95) + EmperorRocket(master).rangemod); //NoDelay A_ScaleVelocity(frandom(0.8,1.1))
		SetupSprite:
			TNT1 A 0 A_Jump(256, "SpriteE", "SpriteF", "SpriteG", "SpriteH",
			"SpriteI", "SpriteJ", "SpriteK", "SpriteL", "SpriteM", "SpriteN",
			"SpriteO", "SpriteP");
		SpriteE:
			DYMI E 0 A_Jump(256,"FadeIn");
		SpriteF:
			DYMI F 0 A_Jump(256,"FadeIn");
		SpriteG:
			DYMI G 0 A_Jump(256,"FadeIn");
		SpriteH:
			DYMI H 0 A_Jump(256,"FadeIn");
		SpriteI:
			DYMI I 0 A_Jump(256,"FadeIn");
		SpriteJ:
			DYMI J 0 A_Jump(256,"FadeIn");
		SpriteK:
			DYMI K 0 A_Jump(256,"FadeIn");
		SpriteL:
			DYMI L 0 A_Jump(256,"FadeIn");
		SpriteM:
			DYMI A 0 A_Jump(256,"FadeIn");
		SpriteN:
			DYMI B 0 A_Jump(256,"FadeIn");
		SpriteO:
			DYMI C 0 A_Jump(256,"FadeIn");
		SpriteP:
			DYMI D 0 A_Jump(256,"FadeIn");
		FadeIn:
			"####" "#" 1 {
				A_FadeIn(frandom(0.01, 0.04));
				A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				if(master) { A_SetScale(Scale.X + frandom(0.01, 0.02) + EmperorRocket(master).rangemod * 0.08); }
				Return A_JumpIf(Alpha >= 0.4, "Inter");
			}
			Loop;
		Inter:
			"####" "#" 1 {
				A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				if(master) { A_SetScale(Scale.X + frandom(0.01, 0.02) + EmperorRocket(master).rangemod * 0.08); }
				Return A_Jump(24,"FadeOut");
			}
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_FadeOut(frandom(0.015,0.02));
				A_ChangeVelocity(frandom(-0.02, 0.02), frandom(-0.02, 0.02), frandom(-0.02, 0.03), CVF_RELATIVE);
				if(master) { A_SetScale(Scale.X + frandom(0.01, 0.02) + EmperorRocket(master).rangemod * 0.08); }
			}
			Loop;
	}
}

class EmperorCloud : EmperorBase
{
	Default
	{
		Renderstyle "Add";
		Alpha 0.2;
	}
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay {
				if(master) { A_SetScale(frandom(1.1, 1.25) + EmperorRocket(master).rangemod); }
				Return A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD",
								   "SpriteE", "SpriteF", "SpriteG", "SpriteH");
			}
		SpriteA:
			CLOD A 0 A_Jump(256,"FadeIn");
		SpriteB:
			CLOD B 0 A_Jump(256,"FadeIn");
		SpriteC:
			CLOD C 0 A_Jump(256,"FadeIn");
		SpriteD:
			CLOD D 0 A_Jump(256,"FadeIn");
		SpriteE:
			CLOD E 0 A_Jump(256,"FadeIn");
		SpriteF:
			CLOD F 0 A_Jump(256,"FadeIn");
		SpriteG:
			CLOD G 0 A_Jump(256,"FadeIn");
		SpriteH:
			CLOD H 0 A_Jump(256,"FadeIn");
		FadeIn:
			"####" "#" 1 {
				A_FadeIn(frandom(0.15, 0.1));
				A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), CVF_RELATIVE);
				if(master) { A_SetScale(Scale.X + frandom(0.01, 0.025) + EmperorRocket(master).rangemod * 0.1); }
				Return A_JumpIf(Alpha >= 0.8, "FadeOut");
			}
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_FadeOut(frandom(0.05,0.02));
				A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), CVF_RELATIVE);
				if(master) { A_SetScale(Scale.X + frandom(0.025, 0.05) + EmperorRocket(master).rangemod * 0.1); }
			}
			Loop;
	}
}

class EmperorBlast : EmperorBase
{
	Default
	{
		RenderStyle "Add";
	}
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD",
										 "SpriteE", "SpriteF", "SpriteG", "SpriteH");
		SpriteA:
			EXBS A 0 A_Jump(256,"SetupScale");
		SpriteB:
			EXBS B 0 A_Jump(256,"SetupScale");
		SpriteC:
			EXBS C 0 A_Jump(256,"SetupScale");
		SpriteD:
			EXBS D 0 A_Jump(256,"SetupScale");
		SpriteE:
			EXBS E 0 A_Jump(256,"SetupScale");
		SpriteF:
			EXBS F 0 A_Jump(256,"SetupScale");
		SpriteG:
			EXBS G 0 A_Jump(256,"SetupScale");
		SpriteH:
			EXBS H 0 A_Jump(256,"SetupScale");
		SetupScale:
			"####" "#" 0 A_SetScale(frandom(1.1, 1.25) + EmperorRocket(master).rangemod);
		FadeIn:
			"####" "#" 1 {
				A_FadeIn(frandom(0.15, 0.1));
				A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), 0);
				if(master) { A_SetScale(Scale.X + frandom(0.02, 0.01) + EmperorRocket(master).rangemod * 0.1); }
				Return A_JumpIf(Alpha >= 0.8, "FadeOut");
			}
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_FadeOut(frandom(0.05,0.02));
				A_ChangeVelocity(frandom(-0.06, 0.06), frandom(-0.06, 0.06), frandom(-0.06, 0.07), 0);
				if(master) { A_SetScale(Scale.X + frandom(0.02, 0.01) + EmperorRocket(master).rangemod * 0.1); }
			}
			Loop;
	}
}

class EmperorEmber : EmperorBase
{
	Default
	{
		RenderStyle "Add";
	}
	
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "SpriteA", "SpriteB", "SpriteC");
		SpriteA:
			EMBR A 0 A_Jump(256, "SetupScale");
		SpriteB:
			EMBR B 0 A_Jump(256, "SetupScale");
		SpriteC:
			EMBR C 0 A_Jump(256, "SetupScale");
		SetupScale:
			"####" "#" 0 { if(master) { A_SetScale(frandom(0.04, 0.1) + EmperorRocket(master).rangemod * 0.1); } }
		FadeIn:
			"####" "#" 1 A_FadeIn(frandom(0.99, 0.9));
		Intern:
			"####" "#" 3 Bright A_Jump(200, "FadeOut");
			Loop;
		FadeOut:
			"####" "#" 1 {
				A_Weave(frandom(0.9, 1.0), frandom(0.9, 1.0),
									frandom(70, 90), frandom(70, 90));
				A_ChangeVelocity(Vel.X * frandom(0.97, 0.99),
								 Vel.Y * frandom(0.97, 0.99),
								 Vel.Z - frandom(0.1, 0.2),
								 CVF_REPLACE);
				A_FadeOut(0.02);
				A_SetScale(Scale.X - frandom(0.002, 0.001));
				Return A_JumpIf(Scale.X <= 0.0, "Null");
			}
			Loop;
	}
}

class EmperorShockwave : EmperorBase
{
	Default
	{
		RenderStyle "Add";
		Alpha 0.99;
		Scale 0.6;
	}
	
	States
	{
	Spawn:
		SHCK A 0 NoDelay {
			if(master) { A_SetScale(Scale.X + EmperorRocket(master).rangemod * 1.5); }
		}
		SHCK A 1 Bright {
			A_FadeOut(frandom(0.02,0.03));
			if(master) { A_SetScale(Scale.X + frandom(0.12, 0.09) + EmperorRocket(master).rangemod * 0.2); }
		}
		Wait;
	}
}

class EmperorTiltwave : EmperorBase
{
	Default
	{
		Projectile;
		Renderstyle "Add";
		Scale 0.6;
		Alpha 0;
		+FLATSPRITE
		+ROLLSPRITE
		+ROLLCENTER
		+DONTFLIP
		+SPRITEANGLE
		//+NOTIMEFREEZE
	}
	
	States
	{
	Spawn:
		SHCK A 0;
	Setup:
		"####" "#" 0
		{
			A_SetAngle(frandom(0.0,360.0));
			A_SetSpriteAngle(frandom(0.0,360.0));
			if(master) { A_SetScale(frandom(0.85,0.9) + EmperorRocket(master).rangemod * 1.5); }
			A_FadeIn(frandom(0.9,0.99));
			A_SetPitch(frandom(-90.0,90.0));
		}
	Main:
		"####" "#" 1 Bright {
			if(master) { A_SetScale(Scale.X + frandom(0.13, 0.11) + EmperorRocket(master).rangemod * 0.2); }
			A_FadeOut(frandom(0.02,0.03));
			A_SetSpriteRotation(Angle + frandom(20.0,15.0));
		}
		Loop;
	}
}

class EmperorFlare : EmperorBase
{
	Default
	{
		RenderStyle "Add";
		Alpha 0.99;
		Scale 6.5;
	}
	
	States
	{
	Spawn:
		FLER A 0 NoDelay {
			if(master) { A_SetScale(Scale.X + EmperorRocket(master).rangemod * 3.5); }
		}
		FLER A 1 Bright {
			A_FadeOut(0.015);
			A_SetScale(Scale.X - frandom(0.05, 0.15));
			Return A_JumpIf(Scale.X <= 0.0, "Null");
		}
		Wait;
	}
}

class EmperorFlare2 : EmperorFlare
{
	Default
	{
		Scale 5.5;
	}
	
	States
	{
	Spawn:
		YAE3 A 0 NoDelay {
			if(master) { A_SetScale(Scale.X + EmperorRocket(master).rangemod * 3.5); }
		}
		YAE3 ABCDEFGHIJKLMNOPQRS 3 Bright;
		Stop;
	}
}

class EmperorExplosionMain : EmperorBase
{
	int user_counter;
	int user_tm;
	
	States
	{
	Spawn:
		TNT1 A 0 NoDelay {
			user_counter = 20;
			If(GetCvar("GC_ToasterMode"))
			{
				user_tm = 164;
			}
			Else { user_tm = 40; }
		}
		Goto Emit;
	Emit:
		TNT1 A random(1,2) {
			if(master) { 
			for(int norsemorse = 0; norsemorse < ceil(EmperorRocket(master).rangemod); norsemorse++)
			{
				A_SpawnItemEx("EmperorCloud",
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					frandom(1.0, 5.5) + EmperorRocket(master).rangemod, 0,
					frandom(-1.0, 5.5) + EmperorRocket(master).rangemod * frandom(1,-1),
					frandom(0.0,360.0), SXF_TRANSFERPOINTERS, user_tm);
				A_SpawnItemEx("EmperorBlast",
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					frandom(1.0, 3.5), 0,
					frandom(-2.0, 2.5) + EmperorRocket(master).rangemod * frandom(1,-1),
					frandom(0.0,360.0), SXF_TRANSFERPOINTERS, user_tm);
				A_SpawnItemEx("EmperorSmoke",
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					frandom(0.5, 2.5) + EmperorRocket(master).rangemod, 0,
					frandom(-2.0, 2.5) + EmperorRocket(master).rangemod * frandom(1,-1),
					frandom(0.0,360.0), SXF_TRANSFERPOINTERS, user_tm);
				A_SpawnItemEx("EmperorEmber",
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					EmperorRocket(master).rangemod * 160 * random(1,-1),
					frandom(7.0, 21.0) + EmperorRocket(master).rangemod * 4, 0,
					frandom(2.0, 9.0) + EmperorRocket(master).rangemod * 4 * frandom(1,-1),
					frandom(0.0,360.0), SXF_TRANSFERPOINTERS, user_tm);
			}
			}
			user_counter--;
			Return A_JumpIf(user_counter <= 0,"Null");
		}
		Loop;
	}
}