task Tfairy(posX,posY,arg)
{
let op=Obj_Create(OBJ_EFFECT);
LoadGraphic(GCP~".\option01.png");
ObjEffect_SetTexture(op,GCP~".\option01.png");
ObjEffect_SetPrimitiveType(op,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(op,4);
ObjEffect_SetVertexXY(op,0,-12,-12);
ObjEffect_SetVertexXY(op,1,12,-12);
ObjEffect_SetVertexXY(op,2,-12,12);
ObjEffect_SetVertexXY(op,3,12,12);
ObjEffect_SetVertexUV(op,0,0,0);
ObjEffect_SetVertexUV(op,1,24,0);
ObjEffect_SetVertexUV(op,2,0,24);
ObjEffect_SetVertexUV(op,3,24,24);
Obj_SetAngle(op,270);
Obj_SetSpeed(op,6);

let OX=GetCenterX+(posX-GetCenterX)*1.2;
let OY=posY+250;
let TX=posX;
let TY=posY;
let Oangle=270;
let life=3;
let Ocount=trunc(rand(2,44));
let pat=0;
let pause=0;


Obj_SetPosition(op,OX,OY);
let pitch=(posX-OX)/80;
loop(80)
	{
	Obj_SetX(op,Obj_GetX(op)+pitch);
	Obj_SetSpeed(op,Obj_GetSpeed(op)-0.1);
	yield;
	}
OX=Obj_GetX(op);
OY=Obj_GetY(op);
Obj_SetSpeed(op,0);

loop(4)
	{
	pause=(pause+1)%4;
	ObjEffect_SetVertexUV(op,0,0+24*trunc(pat),0+24*pause);
	ObjEffect_SetVertexUV(op,1,24+24*trunc(pat),0+24*pause);
	ObjEffect_SetVertexUV(op,2,0+24*trunc(pat),24+24*pause);
	ObjEffect_SetVertexUV(op,3,24+24*trunc(pat),24+24*pause);
	loop(6){yield;}
	}

loop
	{
	TX=GetPlayerX;
	TY=GetPlayerY;
	Oangle=270;
	let id=0;
//---------------------------G-------------------------
	if(GetEnemyNum>0)
		{
		ascent(enemy in EnumEnemyBegin..EnumEnemyEnd)
			{
			let enemyID = EnumEnemyGetID(enemy);
			let enemyX=GetEnemyInfoDefault(enemyID, ENEMY_X,OX);
			let enemyY=GetEnemyInfoDefault(enemyID, ENEMY_Y,OY);
			if(GetDistance(OX,OY,TX,TY)>GetDistance(OX,OY,enemyX,enemyY)||TX==GetPlayerX)
				{
				id=enemyID;
				TX= enemyX;			//GX
				TY= enemyY;	//GY
				}
			}
		Oangle=atan2(TY-OY,TX-OX);				//Gւ̊px(l)
		}
//--------------------------e------------------------
	if(life>0&&GetEnemyShotCountEx(OX,OY,5,ALL)>=1)
		{
		life=life-GetEnemyShotCountEx(OX,OY,3,ALL);
		DeleteEnemyShotToItemInCircle(SHOT,OX,OY,3);
		}
//--------------------------life------------------------
	if(life<=0)		//񂾂ӂ
		{
		DeleteSE("seEnemyExplode01.wav");
		PlaySE("seEnemyExplode01.wav");
		Oangle=0;
		loop(12)
			{
			Topshot(OX,OY,Oangle,id);
			Oangle=Oangle+30;
			}
		Obj_SetSpeed(op,2);
		Obj_SetAngle(op,Obj_GetAngle(op)+180+arg);

		ObjEffect_SetVertexUV(op,0,0,0+24*4);
		ObjEffect_SetVertexUV(op,1,24,0+24*4);
		ObjEffect_SetVertexUV(op,2,0,24+24*4);
		ObjEffect_SetVertexUV(op,3,24,24+24*4);
		ObjEffect_SetVertexColor(op,0,180,255,255,255);
		ObjEffect_SetVertexColor(op,1,180,255,255,255);
		ObjEffect_SetVertexColor(op,2,180,255,255,255);
		ObjEffect_SetVertexColor(op,3,180,255,255,255);
		loop(40)
			{
			Obj_SetSpeed(op,Obj_GetSpeed(op)-0.05);
			yield;
			}

		loop(120){yield;}

		ObjEffect_SetVertexColor(op,0,255,255,255,255);
		ObjEffect_SetVertexColor(op,1,255,255,255,255);
		ObjEffect_SetVertexColor(op,2,255,255,255,255);
		ObjEffect_SetVertexColor(op,3,255,255,255,255);

		OX=Obj_GetX(op);
		OY=Obj_GetY(op);
		life=3;
		}
	else			//Ă
		{
		if(shotCount>=0){Ocount=(Ocount+1)%55;}
		if(Ocount==1){Topshot(OX,OY,Oangle,id);Ocount=(Ocount+1)%55;}
		let speed=0.3;
		if(GetDistance(OX,OY,TX,TY)<=70)	//ڕW_(pos)܂1.5ȓ̏ꍇ
			{
			Obj_SetAngle(op,atan2(TY-OY,TX-OX));
			OX=OX+speed*cos(Obj_GetAngle(op)+180);
			OY=OY+speed*sin(Obj_GetAngle(op)+180);
			}	
		else						//ȊO
			{
			Obj_SetAngle(op,atan2(TY-OY,TX-OX));
			OX=OX+speed*cos(Obj_GetAngle(op)+arg);
			OY=OY+speed*sin(Obj_GetAngle(op)+arg);
			}
		Obj_SetPosition(op,OX,OY);

		if((Obj_GetAngle(op)+360)%360>=225&&(Obj_GetAngle(op)+360)%360<=315)	{pause=0;}
		else if((Obj_GetAngle(op)+360)%360>135&&(Obj_GetAngle(op)+360)%360<225)	{pause=1;}
		else if((Obj_GetAngle(op)+360)%360>=45&&(Obj_GetAngle(op)+360)%360<=135){pause=2;}
		else							{pause=3;}
		pat=(pat+0.125)%2;
		ObjEffect_SetVertexUV(op,0,0+24*trunc(pat),0+24*pause);
		ObjEffect_SetVertexUV(op,1,24+24*trunc(pat),0+24*pause);
		ObjEffect_SetVertexUV(op,2,0+24*trunc(pat),24+24*pause);
		ObjEffect_SetVertexUV(op,3,24+24*trunc(pat),24+24*pause);

		yield;
		}
//------------------------------------------------------------------
	}
}

task Topshot(OX,OY,Oangle,id)
{
let shot=CreatePlayerShot01(OX,OY,1,Oangle,4,3,2);
loop(240)
	{
	if(Obj_GetSpeed(shot)<5){Obj_SetSpeed(shot,Obj_GetSpeed(shot)+0.05);}
	let X=GetEnemyInfoDefault(id,ENEMY_X,Obj_GetX(shot));
	let Y=GetEnemyInfoDefault(id,ENEMY_Y,GetClipMinY-200);
	Oangle=atan2(Y-Obj_GetY(shot),X-Obj_GetX(shot));
	if(absolute(Oangle-Obj_GetAngle(shot))<=4)
		{Obj_SetAngle(shot,Oangle);}
	else
		{
		if(Oangle-Obj_GetAngle(shot)>180)	{Oangle=Oangle-360;}
		else if(Oangle-Obj_GetAngle(shot)<-180) {Oangle=Oangle+360;}
		if(Oangle>Obj_GetAngle(shot))	{Obj_SetAngle(shot,Obj_GetAngle(shot)+4);}
		else				{Obj_SetAngle(shot,Obj_GetAngle(shot)-4);}
		}
	yield;
	if(Obj_BeDeleted(shot)==true){break;}
	}
}

function GetDistance(X1,Y1,X2,Y2)
{
let answer=((X1-X2)^2+(Y1-Y2)^2)^0.5;
return(answer);
}
