script_enemy_main
{	
	let imgKilga = GetCurrentScriptDirectory ~ "img/genie/kilgagenie.png";
	
	let frame = 0;
	let move = 0;
	let speed = 0;
	
	@Initialize
	{
		LoadGraphic(imgKilga);
		
		SetLife(1);
		SetTimer(97);
		MagicCircle(false);
		
		PlayMusic(GetCurrentScriptDirectory ~ "bgm/Snow Goose.wav");
	}
	
	@MainLoop
	{
		frame++;
		
		SetMovePosition02(GetCenterX, GetCenterY-100 + (9*sin(move)), 0);
		move += 2;
		
		//First wave
		if(frame==60)
		{
			spamlasers1;
			spamlasers2;
		}
		speed += 2.5;
		
		//Rainbow beats
		if(frame==415){beatlasers;}
		
		//Rockin Kogasa lasers
		if(frame==780){rockinlasers;}
		
		//LET'S GO JUBEAT FUCK YEAH
		if(frame==1350){jubeatlasers;}
		
		//To the heavens!
		if(frame==2580){risinglasers;}
		
		//Middle phase thing
		if(frame==3070){crossinglasers;}
		if(frame==3650){fallinglasers;}
		
		//And again
		if(frame==4300){risinglasersredux;}
		if(frame==4930){rockinlasersredux;}
		if(frame==5150){beatlasersredux;}
		if(frame==5290){crossinglasersredux;fallinglasersredux;}
		
		//BOOM BOOM BOOM
		if(frame==5690){finallasers;}
		
		yield;
	}
	
	@DrawLoop
	{
		SetTexture(imgKilga);
		SetGraphicRect(0, 0, 369, 441);
		SetGraphicScale(0.5, 0.5);
		DrawGraphic(GetX, GetY);
	}
	
	@Finalize
	{
	}
	
	
	function Wait(frames) //Everyone needs this badboy
	{
		loop(frames){yield;}
	}
	
	task spamlasers1
	{
		let r = rand(0, 12);
		ascent(i in 0..60)
		{
			CreateLaser01(GetX+150*sin(speed)*cos(speed), GetY+150*cos(speed)*sin(speed), 3, 360/60*i+r, 100, 8, BLUE01, 30);
			Wait(1);
		}
		if(frame<700){spamlasers1;}
	}
	task spamlasers2
	{
		let r = rand(0, 12);
		ascent(i in 0..60)
		{
			CreateLaser01(GetX+150*sin(-speed)*cos(speed), GetY+150*cos(-speed)*sin(speed), 3, 360/60*i+r, 100, 8, PURPLE01, 30);
			Wait(1);
		}
		if(frame<700){spamlasers2;}
	}
	
	task beatlasers
	{
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, RED21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, ORANGE21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, YELLOW21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, GREEN21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, AQUA21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, BLUE21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, PURPLE21, 5);
		}
		Wait(19);
		if(frame<4700){beatlasers;}
	}
	
	task rockinlasers
	{		
		let r = rand(0, 12);
		let r1 = rand(-3, 3);
		ascent(i in 0..60)
		{
			CreateLaserA(0, GetX - 25 + r1, GetY - 10 + r1, 500, 10, WHITE01, 44);
			SetLaserDataA(0, 0, 360/60*i+r, 2, 0, 0, 0);
			SetLaserDataA(0, 20, NULL, 2, 0, 0, 0);
			SetLaserDataA(0, 25, NULL, 1, 0, 0, 0);
			SetLaserDataA(0, 30, NULL, 0.5, 0, 0, 0);
			SetLaserDataA(0, 35, NULL, 0.25, 0, 0, 0);
			SetLaserDataA(0, 40, NULL, 0, 0, 0, 0);
			SetShotKillTime(0, 90);
			FireShot(0);
		}
		Wait(70);
		let r = rand(0, 12);
		let r1 = rand(-5, 5);
		ascent(i in 0..60)
		{
			CreateLaserA(0, GetX - 25 + r1, GetY - 10 + r1, 500, 10, WHITE01, 44);
			SetLaserDataA(0, 0, 360/60*i+r, -2, 0, 0, 0);
			SetLaserDataA(0, 20, NULL, -2, 0, 0, 0);
			SetLaserDataA(0, 25, NULL, -1, 0, 0, 0);
			SetLaserDataA(0, 30, NULL, -0.5, 0, 0, 0);
			SetLaserDataA(0, 35, NULL, -0.25, 0, 0, 0);
			SetLaserDataA(0, 40, NULL, 0, 0, 0, 0);
			SetShotKillTime(0, 90);
			FireShot(0);
		}
		Wait(70);
		if(frame<1280){rockinlasers;}
	}
	
	task jubeatlasers
	{
		//Oh god yes prepare to jizz yourselves
		let s = 5;
		let d = 20;
		
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(54);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(9);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(9);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(74);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168 , GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(74);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168 , GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(74);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(54);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(9);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(9);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(54);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(3);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(3);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
		}
		Wait(3);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(3);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
		}
		Wait(3);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX + 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(54);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(53);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
		Wait(74);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY - 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY - 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY - 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
		}
		Wait(23);
		ascent(i in 0..d)
		{
			CreateLaser01(GetCenterX - 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX - 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 56, GetCenterY + 56, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 56), GetPlayerX - (GetCenterX + 56)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX - 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX - 168)), 100, 9, WHITE01, 30);
			CreateLaser01(GetCenterX + 168, GetCenterY + 168, s, 360/d*i+atan2(GetPlayerY - (GetCenterY + 168), GetPlayerX - (GetCenterX + 168)), 100, 9, WHITE01, 30);
		}
	}//GodDAMN that was a pain, but so worth it
	
	task risinglasers
	{
		ascent(i in 0..34)
		{
			CreateLaser01(i*17-8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, BLUE01, 10);
			CreateLaser01(i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, BLUE01, 10);
			Wait(1);
		}
		Wait(106);
		ascent(i in 0..34)
		{
			CreateLaser01(458-i*17+8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, PURPLE01, 10);
			CreateLaser01(458-i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, PURPLE01, 10);
			Wait(1);
		}
		Wait(106);
		ascent(i in 0..34)
		{
			CreateLaser01(i*17-8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, BLUE01, 10);
			CreateLaser01(i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, BLUE01, 10);
			Wait(1);
		}
		Wait(36);
		
		let r1 = 4;
		let r2 = 444;
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
	}
	
	task crossinglasers
	{
		ascent(i in 0..10)
		{
			let r = rand (-10, 20);
			CreateLaserA(0, GetX - 46*i, GetY + 60*i - 50, 500, 20, RED01, 60);
			SetLaserDataA(0, 0, 30 + r, 0, 0, 0, 0);
			SetShotKillTime(0, 160);
			FireShot(0);
			
			let r = rand (-10, 20);
			CreateLaserA(1, GetX + 46*i, GetY + 60*i - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(1, 0, 150 + r, 0, 0, 0, 0);
			SetShotKillTime(1, 160);
			FireShot(1);
			
			let r = rand (-10, 20);
			CreateLaserA(0, GetX - 46*i, GetY + 60*i - 50, 500, 20, RED01, 60);
			SetLaserDataA(0, 0, 30 + r, 0, 0, 0, 0);
			SetShotKillTime(0, 160);
			FireShot(0);
			
			let r = rand (-10, 20);
			CreateLaserA(1, GetX + 46*i, GetY + 60*i - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(1, 0, 150 + r, 0, 0, 0, 0);
			SetShotKillTime(1, 160);
			FireShot(1);
			
			Wait(3);
			
			let r = rand (-10, 20);
			CreateLaserA(2, GetX - 46*i - 23, GetY + 60*i + 30 - 50, 500, 20, RED01, 60);
			SetLaserDataA(2, 0, 210 + r, 0, 0, 0, 0);
			SetShotKillTime(2, 160);
			FireShot(2);
			
			let r = rand (-10, 20);
			CreateLaserA(3, GetX + 46*i + 23, GetY + 60*i + 30 - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(3, 0, 330 + r, 0, 0, 0, 0);
			SetShotKillTime(3, 160);
			FireShot(3);
			
			let r = rand (-10, 20);
			CreateLaserA(2, GetX - 46*i - 23, GetY + 60*i + 30 - 50, 500, 20, RED01, 60);
			SetLaserDataA(2, 0, 210 + r, 0, 0, 0, 0);
			SetShotKillTime(2, 160);
			FireShot(2);
			
			let r = rand (-10, 20);
			CreateLaserA(3, GetX + 46*i + 23, GetY + 60*i + 30 - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(3, 0, 330 + r, 0, 0, 0, 0);
			SetShotKillTime(3, 160);
			FireShot(3);
			Wait(3);
			
		}
		Wait(80);
		if(frame<4100){crossinglasers;}
	}
	
	task fallinglasers
	{
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(66);
		
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(66);
		
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(66);
		
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(66);
	}
	
	task risinglasersredux
	{
		ascent(i in 0..34)
		{
			CreateLaser01(i*17-8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, BLUE01, 10);
			CreateLaser01(i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, BLUE01, 10);
			Wait(1);
		}
		Wait(106);
		ascent(i in 0..34)
		{
			CreateLaser01(458-i*17+8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, PURPLE01, 10);
			CreateLaser01(458-i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, PURPLE01, 10);
			Wait(1);
		}
		Wait(106);
		ascent(i in 0..34)
		{
			CreateLaser01(i*17-8.5, GetCenterY-(i*8)-30, 5, 100, 200, 8, BLUE01, 10);
			CreateLaser01(i*17, GetCenterY-(i*8)-30, 5, 80, 200, 8, BLUE01, 10);
			Wait(1);
		}
		Wait(36);
		
		let r1 = 4;
		let r2 = 444;
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 4, 90, 55, 8, BLUE01, 10);
			CreateLaser01(r1+i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, BLUE01, 10);
			if(i%2==0){Wait(1);}
		}
		Wait(2);
		ascent(i in 0..30)
		{
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, 90, 55, 8, PURPLE01, 10);
			CreateLaser01(r2-i*20, GetCenterY-(i*8)-30, 5, -90, 55, 8, PURPLE01, 10);
			if(i%2==0){Wait(1);}
		}
	}
	
	task rockinlasersredux
	{		
		let r = rand(0, 12);
		let r1 = rand(-3, 3);
		ascent(i in 0..60)
		{
			CreateLaserA(0, GetX - 25 + r1, GetY - 10 + r1, 500, 10, WHITE01, 44);
			SetLaserDataA(0, 0, 360/60*i+r, 2, 0, 0, 0);
			SetLaserDataA(0, 20, NULL, 2, 0, 0, 0);
			SetLaserDataA(0, 25, NULL, 1, 0, 0, 0);
			SetLaserDataA(0, 30, NULL, 0.5, 0, 0, 0);
			SetLaserDataA(0, 35, NULL, 0.25, 0, 0, 0);
			SetLaserDataA(0, 40, NULL, 0, 0, 0, 0);
			SetShotKillTime(0, 90);
			FireShot(0);
		}
		Wait(70);
		let r = rand(0, 12);
		let r1 = rand(-5, 5);
		ascent(i in 0..60)
		{
			CreateLaserA(0, GetX - 25 + r1, GetY - 10 + r1, 500, 10, WHITE01, 44);
			SetLaserDataA(0, 0, 360/60*i+r, -2, 0, 0, 0);
			SetLaserDataA(0, 20, NULL, -2, 0, 0, 0);
			SetLaserDataA(0, 25, NULL, -1, 0, 0, 0);
			SetLaserDataA(0, 30, NULL, -0.5, 0, 0, 0);
			SetLaserDataA(0, 35, NULL, -0.25, 0, 0, 0);
			SetLaserDataA(0, 40, NULL, 0, 0, 0, 0);
			SetShotKillTime(0, 90);
			FireShot(0);
		}
		Wait(70);
		if(frame<5500){rockinlasersredux;}
	}
	
	task beatlasersredux
	{
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, RED21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, ORANGE21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, YELLOW21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, GREEN21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, AQUA21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, BLUE21, 5);
		}
		Wait(19);
		let r1 = rand(-40, 40);
		let r2 = rand(-40, 40);
		ascent(i in 0..15)
		{
			CreateLaser01(GetX+r1, GetY+r2, 6, 360/15*i+atan2(GetPlayerY - GetY - r2, GetPlayerX - GetX - r1), 70, 15, PURPLE21, 5);
		}
		Wait(19);
		if(frame<5500){beatlasersredux;}
	}
	
	task crossinglasersredux
	{
		ascent(i in 0..10)
		{
			let r = rand (-10, 20);
			CreateLaserA(0, GetX - 46*i, GetY + 60*i - 50, 500, 20, RED01, 60);
			SetLaserDataA(0, 0, 30 + r, 0, 0, 0, 0);
			SetShotKillTime(0, 160);
			FireShot(0);
			
			let r = rand (-10, 20);
			CreateLaserA(1, GetX + 46*i, GetY + 60*i - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(1, 0, 150 + r, 0, 0, 0, 0);
			SetShotKillTime(1, 160);
			FireShot(1);
			Wait(3);
			
			let r = rand (-10, 20);
			CreateLaserA(2, GetX - 46*i - 23, GetY + 60*i + 30 - 50, 500, 20, RED01, 60);
			SetLaserDataA(2, 0, 210 + r, 0, 0, 0, 0);
			SetShotKillTime(2, 160);
			FireShot(2);
			
			let r = rand (-10, 20);
			CreateLaserA(3, GetX + 46*i + 23, GetY + 60*i + 30 - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(3, 0, 330 + r, 0, 0, 0, 0);
			SetShotKillTime(3, 160);
			FireShot(3);
			Wait(3);
		}
		Wait(80);
		ascent(i in 0..10)
		{
			let r = rand (-10, 20);
			CreateLaserA(0, GetX - 46*i, GetY + 60*i - 50, 500, 20, RED01, 60);
			SetLaserDataA(0, 0, 30 + r, 0, 0, 0, 0);
			SetShotKillTime(0, 160);
			FireShot(0);
			
			let r = rand (-10, 20);
			CreateLaserA(1, GetX + 46*i, GetY + 60*i - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(1, 0, 150 + r, 0, 0, 0, 0);
			SetShotKillTime(1, 160);
			FireShot(1);
			Wait(3);
			
			let r = rand (-10, 20);
			CreateLaserA(2, GetX - 46*i - 23, GetY + 60*i + 30 - 50, 500, 20, RED01, 60);
			SetLaserDataA(2, 0, 210 + r, 0, 0, 0, 0);
			SetShotKillTime(2, 160);
			FireShot(2);
			
			let r = rand (-10, 20);
			CreateLaserA(3, GetX + 46*i + 23, GetY + 60*i + 30 - 50, 500, 20, BLUE01, 60);
			SetLaserDataA(3, 0, 330 + r, 0, 0, 0, 0);
			SetShotKillTime(3, 160);
			FireShot(3);
			Wait(3);
		}
	}
	
	task fallinglasersredux
	{
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(66);
		
		CreateLaserC(0, GetPlayerX+10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-10, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, 90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(70);
		
		CreateLaserC(0, GetPlayerX-50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+50, 500, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 5, -90, 0, 0, 7);
		FireShot(0);
		Wait(66);
		
		CreateLaserC(0, GetPlayerX-150, 0, 30, 40, RED01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+-90, 0, 30, 40, ORANGE01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX-30, 0, 30, 40, YELLOW01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+30, 0, 30, 40, GREEN01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+90, 0, 30, 40, AQUA01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+150, 0, 30, 40, BLUE01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
		CreateLaserC(0, GetPlayerX+210, 0, 30, 40, PURPLE01, 0);
		SetLaserDataC(0, 0, 7, 90, 0, 0, 7);
		FireShot(0);
	}
	
	task finallasers
	{
		let r;
		ascent(i in 0..120)
		{
			r = rand(9, 20);
			CreateLaser01(GetX, GetY, r, 360/120*i+GetAngleToPlayer+2, 70, 10, RED01, 1);
		}
		Wait(5);
		ascent(i in 0..120)
		{
			r = rand(9, 20);
			CreateLaser01(GetX, GetY, r, 360/120*i+GetAngleToPlayer+2, 70, 10, ORANGE01, 1);
		}
		Wait(5);
		ascent(i in 0..120)
		{
			r = rand(9, 20);
			CreateLaser01(GetX, GetY, r, 360/60*i+GetAngleToPlayer+2, 70, 10, YELLOW01, 1);
		}
		Wait(5);
		ascent(i in 0..120)
		{
			r = rand(9, 20);
			CreateLaser01(GetX, GetY, r, 360/60*i+GetAngleToPlayer+2, 70, 10, GREEN01, 1);
		}
		Wait(5);
		ascent(i in 0..120)
		{
			r = rand(9, 20);
			CreateLaser01(GetX, GetY, r, 360/60*i+GetAngleToPlayer+2, 70, 10, BLUE01, 1);
		}
		Wait(30);
		ascent(i in 0..120)
		{
			r = rand(1, 20);
			CreateLaser01(GetX, GetY, r, 360/120*i+GetAngleToPlayer+2, 70, 10, PURPLE01, 1);
		}
	}
}