script_enemy_main{
	#include_function ".\lib\lib_UFO.txt"
	#include_function ".\lib\lib_item.txt"
	#include_function ".\lib\lib_files.txt"

	let UFO_Type = GetArgument();

	let FAILED = 0;
	let ITEM_FLAG = 0;
	let MOVE_FLAG = 0;
	let KILL_FLAG = -1;
	let r_timer = 0;
	
	let E_LIFE = 700;
	let TIMER = 14*60;
	
	let CIRCLE_MOVE = -90;
	let CX = 0;
	let CY = 0;
	
	let DROP_ITEM = 30;

	@Initialize(){
		SetLife(E_LIFE+10000);
		SetScore(0);
		Tmain;
	}

	@MainLoop(){
		if (GetCommonDataDefault("IsBOSS", 0)) { SetLife(10000); }
		if (GetLife > 10000 && TIMER > 30 && KILL_FLAG != -1) {
			SetCommonData("UFO_X", GetX+CX);
			SetCommonData("UFO_Y", GetY+CY);
			
			SetCollisionA(GetX+CX, GetY+CY, 32);
			SetCollisionB(GetX+CX, GetY+CY, 20);
			
			CX = cos(CIRCLE_MOVE)*24;
			CY = sin(CIRCLE_MOVE)*24;
			CIRCLE_MOVE+=1.5;
		}
		
		TIMER--;
		yield;
	}

	@DrawLoop(){
		if (KILL_FLAG != -1)
		{
			DrawUFO(BENTLER_COLOR[UFO_Type]);
			DrawTimer(10, 24);
		}
	}

	@Finalize()
	{
	}
	
	task Tfinal()
	{
		if (!FAILED) {
			Explosion01(GetX+CX, GetY, 10, 0.4, 40);
			StopSE(sndEXPLO);
			PlaySE(sndEXPLO);
			StopSE(sndDROPITEM);
			PlaySE(sndDROPITEM);
			
			let pt = GetCommonDataDefault("UFO_ITEM", 0);
			let p_rate = 1;
			
			if (UFO_Type == 0)
				{ MY_CreateItem(GetX, GetY, ITEMTYPE_1UP); }
			else if (UFO_Type == 1)
				{ p_rate *= 4; if (ITEM_FLAG) { p_rate *= 2; } }
			else if (UFO_Type == 2)
				{ MY_CreateItem(GetX, GetY, ITEMTYPE_BOMB); }
			else
				{ p_rate *= 2; if (ITEM_FLAG) { p_rate *= 2; } }
			
			AddPoint(pt);
			AddScore(pt*GetCommonDataDefault("MAX_SCORE", 0));
			DrawPoint(GetX+CX, GetY+CY+8, pt*GetCommonDataDefault("MAX_SCORE", 0));
			DrawRate(GetX+CX, GetY+CY-10, p_rate*10);

			SetAlpha(0);
			KILL_FLAG = 1;
			
			//xg[
			let tmp = GetCommonDataDefault("BENT3", Bentler_BLANK);
			if (tmp == 0) { tmp = ITEMTYPE_BENT_R_RED; }
			else if (tmp == 1) { tmp = ITEMTYPE_BENT_R_BLUE; }
			else { tmp = ITEMTYPE_BENT_R_GREEN; }
			MY_CreateItem(GetX, GetY, tmp);

			SetCommonData("UFO_ITEM", 0);
			SetCommonData("UFO_STATE", 0);

			SetCommonData("BENT1", Bentler_BLANK);
			SetCommonData("BENT2", Bentler_BLANK);
			SetCommonData("BENT3", Bentler_BLANK);
			
			//Ge폜
			DeleteEnemyShotToItem(ALL);

			loop(60) { yield; }
		}
		else
		{
			SetCommonData("UFO_ITEM", 0);
			SetCommonData("UFO_STATE", 0);
			KILL_FLAG = 1;

			SetCommonData("BENT1", Bentler_BLANK);
			SetCommonData("BENT2", Bentler_BLANK);
			SetCommonData("BENT3", Bentler_BLANK);
		}
		
		VanishEnemy();
	}

	task Tmain(){
		yield;
		
		SetCommonData("UFO_STATE", 1);	//UFOo
		
		DeleteEnemyShotToItemInCircle(SHOT, GetX, GetY, 150);
		//oGtFNg
		StopSE(sndUFO);
		PlaySE(sndUFO);
		loop(3)
		{
			CreateShotA(0, GetX, GetY-16, 60);
			SetShotDataA(0, 0, 0, 0, 0, 0, 0, PURPLE01);
			SetShotKillTime(0, 0);
			FireShot(0);
		}
		
		loop(50)	//Wait
		{
			if (GetCommonDataDefault("IsBOSS", 0)) { Tfinal; return; }
			yield;
		}

		KILL_FLAG = 0;
		SetCommonData("UFO_STATE", 2);	//UFOo
		Animation(BENTLER_COLOR[UFO_Type]);
		FadeIn;
		Draw_UFO_Circle;

		loop
		{
			if (!ITEM_FLAG && GetCommonDataDefault("UFO_ITEM", 0) >= DROP_ITEM)
			{
				StopSE(sndDROPITEM);
				PlaySE(sndDROPITEM);

				if (UFO_Type == 0)
				{
					MY_CreateItem(GetX, GetY, ITEMTYPE_1UP);
				}
				else if (UFO_Type == 2)
				{
					MY_CreateItem(GetX, GetY, ITEMTYPE_BOMB_MAX);
				}
				else if (UFO_Type == 4)
				{
					let tmp = GetCommonDataDefault("BENT3", Bentler_BLANK);
					if (tmp != Bentler_BLANK)
					{
						if (tmp == 0) { tmp = ITEMTYPE_BENT_R_RED; }
						else if (tmp == 1) { tmp = ITEMTYPE_BENT_R_BLUE; }
						else { tmp = ITEMTYPE_BENT_R_GREEN; }
						MY_CreateItem(GetX, GetY, tmp);
					}
				}

				ITEM_FLAG = 1;
			}
			else if (GetLife() <= 10000 || GetCommonDataDefault("IsBOSS", 0))
			{
				Tfinal;
				break;
			}
			else if (TIMER < 30)
			{
				FAILED = 1;
				Tfinal;
				break;
			}
			else if (MOVE_FLAG < 2 && TIMER < 210)
			{
				SetMovePosition02(GetX, -92, 210);
				MOVE_FLAG = 2;
			}
			else if (MOVE_FLAG < 1 && TIMER < 480)
			{
				SetMovePosition02(GetPlayerX, GetY, 120);
				MOVE_FLAG = 1;
			}
			yield;
		}
	}
	
	sub Draw_UFO_Circle()
	{
		let SCALE_X = 100;
		let SCALE_Y = 100;
		let offset_x = SCALE_X/4;
		let offset_y = SCALE_Y/4;
		
		UFO_Circle_sub1;
		UFO_Circle_sub2;
		
		task UFO_Circle_sub1
		{
			//}[J[̐ݒ
			let obj = Obj_Create(OBJ_EFFECT);
			ObjEffect_SetTexture(obj, imgUCIR);
			ObjEffect_SetRenderState(obj, ALPHA);
			ObjEffect_SetLayer(obj, 4);
			ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
			ObjEffect_CreateVertex(obj, 4);
			ObjEffect_SetScale(obj, SCALE_X/2, SCALE_Y/2);
			ObjEffect_SetVertexXY(obj, 0, -1, -1);
			ObjEffect_SetVertexXY(obj, 1,  1, -1);
			ObjEffect_SetVertexXY(obj, 2,  1,  1);
			ObjEffect_SetVertexXY(obj, 3, -1,  1);
			ObjEffect_SetVertexUV(obj, 0,   0,   0);
			ObjEffect_SetVertexUV(obj, 1, 128,   0);
			ObjEffect_SetVertexUV(obj, 2, 128, 128);
			ObjEffect_SetVertexUV(obj, 3,   0, 128);
			ascent (let i in 0 .. 4) {
				ObjEffect_SetVertexColor(obj, i, 200, 255, 255, 255);
			}
			
			while(!KILL_FLAG)
			{
				Obj_SetPosition(obj, GetX+CX+offset_x, GetY+CY+offset_y);
				yield;
			}
			
			Obj_Delete(obj);
		}

		task UFO_Circle_sub2
		{
			// W̐
			let TC = 15;
			// 1`9̊eW
			let TRI_X = [ -1, 0, 1, -1, 0, 1, -1, 0, 1];
			let TRI_Y = [ -1, -1, -1, 0, 0, 0, 1, 1, 1];
			// _ɑΉW
			let TRI = [4, 6, 8, 4, 6, 6, 4, 8, 8, 4, 0, 0, 4, 2, 2];
			
			//}[J[̐ݒ
			let obj = Obj_Create(OBJ_EFFECT);
			ObjEffect_SetTexture(obj, imgUCIR);
			ObjEffect_SetRenderState(obj, ADD);
			ObjEffect_SetLayer(obj, 4);
			ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
			ObjEffect_CreateVertex(obj, 15);
			ObjEffect_SetScale(obj, SCALE_X/2, SCALE_Y/2);
			ascent (let i in 0 .. TC) {
				CutImage(i, TRI_X[TRI[i]], TRI_Y[TRI[i]]);
				ObjEffect_SetVertexColor(obj, i, 128, 255, 255, 255);
			}
			
			// UFO`揈
			let angle = 0;
			while (angle < 45 && !KILL_FLAG)
			{
				angle = GetCommonDataDefault("UFO_ITEM", 0)/DROP_ITEM*180;
				CutImage(1, -tan(angle), 1);
				CutImage(2,  tan(angle), 1);
				Obj_SetPosition(obj, GetX+CX+offset_x, GetY+CY+offset_y);
				yield;
			}
			CutImage(1, -1, 1);
			CutImage(2,  1, 1);

			while (angle < 135 && !KILL_FLAG)
			{
				angle = GetCommonDataDefault("UFO_ITEM", 0)/DROP_ITEM*180;
				CutImage(4, -1, tan(90-angle));
				CutImage(7,  1, tan(90-angle));
				Obj_SetPosition(obj, GetX+CX+offset_x, GetY+CY+offset_y);
				yield;
			}
			CutImage(4, -1, -1);
			CutImage(7,  1, -1);

			while (angle < 180 && !KILL_FLAG)
			{
				angle = GetCommonDataDefault("UFO_ITEM", 0)/DROP_ITEM*180;
				CutImage(10, tan(angle), -1);
				CutImage(13, -tan(angle), -1);
				Obj_SetPosition(obj, GetX+CX+offset_x, GetY+CY+offset_y);
				yield;
			}
			CutImage(10, 0, -1);
			CutImage(13, 0, -1);
			let Animation = 0;
			while(!KILL_FLAG)
			{
				Animation += 0.2;
				if (trunc(Animation) - Animation <= 0.2)
				{
					ascent (let i in 0 .. TC)
						{ ObjEffect_SetVertexColor(obj, i, 128, [255, 128, 128][trunc(Animation)%3], [128, 255, 128][trunc(Animation)%3], [128, 128, 255][trunc(Animation)%3]); }
				}
				Obj_SetPosition(obj, GetX+CX+offset_x, GetY+CY+offset_y);
				yield;
			}

			Obj_Delete(obj);
			
			function CutImage(num, x, y)
			{
				ObjEffect_SetVertexXY(obj, num, x, y);
				ObjEffect_SetVertexUV(obj, num, 64*(x+1), 128+64*(y+1));
			}
		}
	}
	
	function DrawTimer(x, y)
	{
		let tmp = int(TIMER/6);
		let n = [0, 0, 0];
		
		if (tmp < 0) { tmp = 0; }
		else if (tmp > 999) { tmp = 999; }
		
		n[0] = int(tmp/100); tmp -= n[0]*100;
		n[1] = int(tmp/10); tmp -= n[1]*10;
		n[2] = tmp;
		

		let RectL = [512, 520, 528, 536, 544, 552, 560, 568, 576, 584];
		let RectR = [519, 527, 535, 543, 551, 559, 567, 575, 583, 591];

		SetGraphicAngle(0, 0, 0);
		SetTexture(imgUFO);
		ascent (let i in 0 .. 3)
		{
			SetGraphicRect(RectL[n[i]], 128, RectR[n[i]], 137);
			DrawGraphic(GetX+x+i*6+CX+trunc(i/2)*3, GetY+y+CY);
		}
		SetGraphicRect(600, 128, 607, 137);
		DrawGraphic(GetX+x+CX+10, GetY+y+CY);
		
		//CtQ[W
		let tmp = trunc((GetLife()-10000)/E_LIFE * 30);
		if (tmp < 0) { tmp = 0; }
		SetGraphicRect(512, 144, 512+tmp, 149);
		DrawGraphic(GetX+CX-2, GetY+CY-20);
	}
}