task BlackOut(long){
let id       = Obj_Create(OBJ_EFFECT);
let sca      = 0;
let alpha    = 150;
let rgb      = [0,0,0];
let die      = 0;

ObjEffect_SetTexture(id,imgba);
ObjEffect_SetRenderState(id,ALPHA);
ObjEffect_SetPrimitiveType(id,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_SetLayer(id,2);
ObjEffect_CreateVertex(id,4);
ObjEffect_SetVertexXY(id,0,400/-2,400/-2);
ObjEffect_SetVertexXY(id,1,400/-2,400/2);
ObjEffect_SetVertexXY(id,2,400/2,400/-2);
ObjEffect_SetVertexXY(id,3,400/2,400/2);
ObjEffect_SetVertexUV(id,0,0,0);
ObjEffect_SetVertexUV(id,1,0,400);
ObjEffect_SetVertexUV(id,2,400,0);
ObjEffect_SetVertexUV(id,3,400,400);

loop{
die++;
if(sca<3){sca+=0.05;}
Obj_SetPosition(id,GetPlayerX,GetPlayerY);
ObjEffect_SetScale(id,sca,sca);
ObjEffect_SetVertexColor(id,0,alpha,rgb[0],rgb[1],rgb[2]);
ObjEffect_SetVertexColor(id,1,alpha,rgb[0],rgb[1],rgb[2]);
ObjEffect_SetVertexColor(id,2,alpha,rgb[0],rgb[1],rgb[2]);
ObjEffect_SetVertexColor(id,3,alpha,rgb[0],rgb[1],rgb[2]);

if(die>long){
if(alpha>0){alpha-=15;}
if(alpha<=0){Obj_Delete(id);}
}

yield;
}
}


task BombEffect{
let obj      = [Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT),
		Obj_Create(OBJ_SHOT)];//8
let id       = [Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT),
		Obj_Create(OBJ_EFFECT)];//8
let i        = 0;
let cc       = 0;
let cc2      = 0;
let frame    = 0;
let dis      = 0;
let disA     = 0;
let spin1    = 0;
let spinA    = 0;
let alpha    = 0;
let an       = 0;
let sca      = 0.7;
let rgb      = [0,50,100,150,200,255];
let se	= ".\script\TheLastComer\player\se\tan.wav";

loop(8){
Obj_SetAlpha(obj[i],0);
ObjShot_SetBombResist(obj[i],true);
ObjShot_SetGraphic(obj[i],1);
ObjShot_SetDamage(obj[i],0);
Obj_SetAutoDelete(obj[i],false);
ObjShot_SetPenetration(obj[i],100);

ObjEffect_SetTexture(id[i],imgb1);
ObjEffect_SetRenderState(id[i],ADD);
ObjEffect_SetPrimitiveType(id[i],PRIMITIVE_TRIANGLESTRIP);
ObjEffect_SetLayer(id[i],2);
Obj_SetAutoDelete(id[i],false);
ObjEffect_SetScale(id[i],sca,sca);
ObjEffect_CreateVertex(id[i],4);
ObjEffect_SetVertexXY(id[i],0,128/-2,128/-2);
ObjEffect_SetVertexXY(id[i],1,128/-2,128/2);
ObjEffect_SetVertexXY(id[i],2,128/2,128/-2);
ObjEffect_SetVertexXY(id[i],3,128/2,128/2);
ObjEffect_SetVertexUV(id[i],0,0,0);
ObjEffect_SetVertexUV(id[i],1,0,128);
ObjEffect_SetVertexUV(id[i],2,128,0);
ObjEffect_SetVertexUV(id[i],3,128,128);
i++;
}
i=0;

loop{
let exy = LockTarget(Obj_GetX(obj),Obj_GetY(obj),Obj_GetAngle(obj));
let ea  = [	atan2(exy[1]-Obj_GetY(id[0]),exy[0]-Obj_GetX(id[0])),
			atan2(exy[1]-Obj_GetY(id[1]),exy[0]-Obj_GetX(id[1])),
			atan2(exy[1]-Obj_GetY(id[2]),exy[0]-Obj_GetX(id[2])),
			atan2(exy[1]-Obj_GetY(id[3]),exy[0]-Obj_GetX(id[3])),
			atan2(exy[1]-Obj_GetY(id[4]),exy[0]-Obj_GetX(id[4])),
			atan2(exy[1]-Obj_GetY(id[5]),exy[0]-Obj_GetX(id[5])),
			atan2(exy[1]-Obj_GetY(id[6]),exy[0]-Obj_GetX(id[6])),
			atan2(exy[1]-Obj_GetY(id[7]),exy[0]-Obj_GetX(id[7]))];
frame++;
if(spin1<1500){spinA+=0.6;}
spin1=1500.0*sin(spinA);
if(dis<100){disA+=1;}
dis=100.0*sin(disA);
if(frame<283){
if(alpha<255){alpha+=15;}
}

if(frame>=283){
if(alpha>0){alpha-=15;}
}

if(frame<150){
loop(8){
SetIntersectionCircle(Obj_GetX(obj[i]),Obj_GetY(obj[i]),50,4,true);
Obj_SetPosition(obj[i],GetPlayerX+dis*sin(spin1+an),GetPlayerY+dis*cos(spin1+an));
Obj_SetPosition(id[i],Obj_GetX(obj[i]),Obj_GetY(obj[i]));
ObjEffect_SetAngle(id[i],0,0,frame*50);
i++;
an+=45;
}
an=0;
i=0;
}
else if(frame>=150){
cc2+=0.01;
if(cc<10){cc+=cc2;}
loop(8){
ObjShot_SetPenetration(obj[i],1);
ObjShot_SetDamage(obj[i],50);
if(GetEnemyNum!=0&&exy[0]!=0&&exy[1]!=0){
Obj_SetAngle(obj[i],ea[i]);
}else{
Obj_SetAngle(obj[i],spin1-an);
}
Obj_SetSpeed(obj[i],cc);
Obj_SetPosition(id[i],Obj_GetX(obj[i]),Obj_GetY(obj[i]));
ObjEffect_SetAngle(id[i],0,0,frame*50);
i++;
an+=45;
}
an=0;
i=0;
}
ObjEffect_SetVertexColor(id[0],0,alpha,rgb[5],rgb[0],rgb[0]);
ObjEffect_SetVertexColor(id[0],1,alpha,rgb[5],rgb[0],rgb[0]);
ObjEffect_SetVertexColor(id[0],2,alpha,rgb[5],rgb[0],rgb[0]);
ObjEffect_SetVertexColor(id[0],3,alpha,rgb[5],rgb[0],rgb[0]);
ObjEffect_SetVertexColor(id[1],0,alpha,rgb[5],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[1],1,alpha,rgb[5],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[1],2,alpha,rgb[5],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[1],3,alpha,rgb[5],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[2],0,alpha,rgb[0],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[2],1,alpha,rgb[0],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[2],2,alpha,rgb[0],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[2],3,alpha,rgb[0],rgb[0],rgb[5]);
ObjEffect_SetVertexColor(id[3],0,alpha,rgb[0],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[3],1,alpha,rgb[0],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[3],2,alpha,rgb[0],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[3],3,alpha,rgb[0],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[4],0,alpha,rgb[0],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[4],1,alpha,rgb[0],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[4],2,alpha,rgb[0],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[4],3,alpha,rgb[0],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[5],0,alpha,rgb[5],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[5],1,alpha,rgb[5],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[5],2,alpha,rgb[5],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[5],3,alpha,rgb[5],rgb[5],rgb[0]);
ObjEffect_SetVertexColor(id[6],0,alpha,rgb[5],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[6],1,alpha,rgb[5],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[6],2,alpha,rgb[5],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[6],3,alpha,rgb[5],rgb[5],rgb[5]);
ObjEffect_SetVertexColor(id[7],0,alpha,rgb[5],rgb[2],rgb[0]);
ObjEffect_SetVertexColor(id[7],1,alpha,rgb[5],rgb[2],rgb[0]);
ObjEffect_SetVertexColor(id[7],2,alpha,rgb[5],rgb[2],rgb[0]);
ObjEffect_SetVertexColor(id[7],3,alpha,rgb[5],rgb[2],rgb[0]);

if(Obj_BeDeleted(obj[0])==true&&Obj_BeDeleted(id[0])==false){Obj_Delete(id[0]);PlaySE(se);}
if(Obj_BeDeleted(obj[1])==true&&Obj_BeDeleted(id[1])==false){Obj_Delete(id[1]);PlaySE(se);}
if(Obj_BeDeleted(obj[2])==true&&Obj_BeDeleted(id[2])==false){Obj_Delete(id[2]);PlaySE(se);}
if(Obj_BeDeleted(obj[3])==true&&Obj_BeDeleted(id[3])==false){Obj_Delete(id[3]);PlaySE(se);}
if(Obj_BeDeleted(obj[4])==true&&Obj_BeDeleted(id[4])==false){Obj_Delete(id[4]);PlaySE(se);}
if(Obj_BeDeleted(obj[5])==true&&Obj_BeDeleted(id[5])==false){Obj_Delete(id[5]);PlaySE(se);}
if(Obj_BeDeleted(obj[6])==true&&Obj_BeDeleted(id[6])==false){Obj_Delete(id[6]);PlaySE(se);}
if(Obj_BeDeleted(obj[7])==true&&Obj_BeDeleted(id[7])==false){Obj_Delete(id[7]);PlaySE(se);}

if(frame>=299){
loop(8){
Obj_Delete(id[i]);
Obj_Delete(obj[i]);
i++;
}

break;
}

yield;
}
}

function LockTarget(sx,sy,sa){
	let EnemyID = 0;
	let TargetX = 0;
	let TargetY = 0;
	let d = 0;
	let d_max = 100000;
	if( GetEnemyNum == 0 ){
		TargetX = 0;
		TargetY = 0;
	}
	ascent(let enemy in EnumEnemyBegin..EnumEnemyEnd){
		let EnemyID = EnumEnemyGetID(enemy);
		let ex = GetEnemyInfo(EnemyID, ENEMY_X);
		let ey = GetEnemyInfo(EnemyID, ENEMY_Y);
		if( ey >= GetClipMinY ){
			let d = (ex-sx)^2 + (ey-sy)^2;
			if(d < d_max){
				TargetX = ex;
				TargetY = ey;
				d_max = d;
			}
			
		}
	}
	return [TargetX,TargetY];
}