#e
#Title[F팶z]
#Text[Bomb{^@_bV
USERL[@E]
SKIPL[@]]
#Player[FREE]
#Image[.]
#BackGround[User]
#ScriptVersion[2]
script_enemy_main {
    let name    = "F팶z";
let csd = GetCurrentScriptDirectory;
    let imgBoss =csd ~ "lib/dot_marisa.png"; 
    let imgFam  = csd ~ "img\familiar.png";
	let imgBorder = csd~"img\border.png";
    let imgPlayer =csd ~ "img/STG_Player01.png"; 
	let imgBG = csd~"img\BG.png";
SetRateScoreSystemEnable(false);

let arrayObj = [];
let PlayerObj = [];
let Judg = [0,0,0,0];
    // ʒu
    let xIni    = GetCenterX;
    let yIni    = GetClipMinY + 64;

let MoveAngle=0;
let MoveSpeed=0;

let PlayerHiSpeed=4.5;
let PlayerLowSpeed=1.5;

let Power=3000;
    @Initialize {
       LoadUserShotData(GetCurrentScriptDirectory~"img\shot_All.txt");
SetShotAutoDeleteClip(612,612,612,612);
ForbidBomb(true);
SetX(xIni);
SetY(yIni);
        SetLife(3300);
        SetDamageRate(5, 5);
        LoadGraphic(imgBoss);
        LoadGraphic(imgFam);
	LoadGraphic(imgBorder);
	LoadGraphic(imgBG);
        SetTexture(imgBoss);
        LoadGraphic(imgPlayer);
	InitializeAction();
        TMain;
    }

    @MainLoop {
	GetBossShadowPosition;
	GetPlayerShadowPosition;
        SetCollisionA(GetX, GetY, 32);
        SetCollisionB(GetX, GetY, 16);
        yield;
    }

    @DrawLoop {
        DrawBossShadow( imgBoss,150,0,0,255);
	DrawPlayerShadow( imgPlayer,150,0,0,255);
	DrawBoss( imgBoss );
    }
	let BGX=0;
	let BGY=0;
	let BGangle=0;

	@BackGround
	{
		SetTexture(imgBG);
		SetGraphicRect(0,0,9600-BGX,9600-BGY);
		SetGraphicAngle(0,0,BGangle);
		SetColor(150,150,150);
		SetAlpha(200);
		DrawGraphic(224, 240);	
	}
    @Finalize {
        DeleteGraphic(imgBoss);
    }

    // C^XN
task TMain 
{
	yield;
	spell;
//	wait(60);
//      SetTimer(40);
	Trate;

//	TMove;
	BGControll;
	PlayerShadowJudg;
	PlayerMareker;
//	standBy;
	Frame;
	Shot;
	EnemyMoveParamater;
	EnemyMove;
	Dash;
	Powerdraw;
	PowerChange;
}

sub spell//[V
{
        CutIn(YOUMU, name, "", 0, 0, 0, 0);
        SetTimer(180);
        SetScore(20000000);
	MagicCircle(false);
	//SetAction(ACT_SPELL,90);
}

let BGA=0;

task BGControll
{
loop
{

if(absolute(BGX)>=960)
{
BGX=0;
}
if(absolute(BGY)>=960)
{
BGY=0;
}
BGX+=1*cos(BGA);
BGY+=1*sin(BGA);

BGA+=0.1;
		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{
		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				BGX+=PlayerHiSpeed*cos(-BGangle);
				BGY+=PlayerHiSpeed*sin(-BGangle);
			}
			else
			{
				BGX+=PlayerLowSpeed*cos(-BGangle);
				BGY+=PlayerLowSpeed*sin(-BGangle);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				BGX-=PlayerHiSpeed*cos(-BGangle);
				BGY-=PlayerHiSpeed*sin(-BGangle);
			}
			else
			{
				BGX-=PlayerHiSpeed*cos(-BGangle);
				BGY-=PlayerHiSpeed*sin(-BGangle);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				BGX-=PlayerHiSpeed*cos(-BGangle-90);
				BGY-=PlayerHiSpeed*sin(-BGangle-90);
			}
			else
			{
				BGX-=PlayerLowSpeed*cos(-BGangle-90);
				BGY-=PlayerLowSpeed*sin(-BGangle-90);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				BGX-=PlayerHiSpeed*cos(-BGangle+90);
				BGY-=PlayerHiSpeed*sin(-BGangle+90);
			}
			else
			{
				BGX-=PlayerLowSpeed*cos(-BGangle+90);
				BGY-=PlayerLowSpeed*sin(-BGangle+90);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			BGangle--;
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			BGangle++;
		}

		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				BGX+=cos(Obj_GetAngle(arrayObj[i])-90-BGangle);
				BGY+=sin(Obj_GetAngle(arrayObj[i])-90-BGangle);
			}
			}
		}
yield;
}
}

task Dash
{
loop
{
if(GetKeyState(VK_BOMB)==KEY_PUSH && Power>=1000  && OnPlayerMissed==false)
{
	SpeedChange;
	wait(10);
}
yield;
}
}

task SpeedChange
{
	Power-=1000;
	SetPlayerInvincibility(30);
	ascent(let i in -15..16)
	{
		PlayerHiSpeed=4.5-0.2*absolute(i)+6.0;
		PlayerLowSpeed=1.5-0.1*absolute(i)+3.0;
		wait(1);
		if(GetKeyState(VK_BOMB)==KEY_PUSH)
		{
			break;
		}
	}
	PlayerHiSpeed=4.5;
	PlayerLowSpeed=1.5;
}

task PowerChange
{
loop
{
if(Power<3000)
{
Power+=5;
}
if(Power>=3000)
{
Power=3000;
}
yield;
}
}

task Trate
{
	wait(120);
        SetDamageRate(100, 100);
}

task Frame
{
	Source(GetCenterX,GetCenterY,0,(GetClipMaxX-GetClipMinX+512)/2);
}

task Source(let x,let y,let angle,let length)
{
		let obj= Obj_Create(OBJ_LASER);
		Obj_SetPosition(obj,x,y);
		ObjLaser_SetWidth(obj,5);
		ObjLaser_SetLength(obj,length);
        	ObjShot_SetGraphic(obj,161); 
		Obj_SetAngle(obj, angle);
		Obj_SetAutoDelete(obj,false);
		ObjLaser_SetSource(obj,false);
		Obj_SetAlpha(obj,0);
		Obj_SetCollisionToPlayer(obj,false);

		LASER2(obj,angle,((GetClipMaxX-GetClipMinX+512)^2+(GetClipMaxY-GetClipMinY+512)^2)^0.5*0.8);
		LASER2(obj,angle+90,((GetClipMaxX-GetClipMinX+512)^2+(GetClipMaxY-GetClipMinY+512)^2)^0.5*0.8);
		LASER2(obj,angle+180,((GetClipMaxX-GetClipMinX+512)^2+(GetClipMaxY-GetClipMinY+512)^2)^0.5*0.8);
		LASER2(obj,angle+270,((GetClipMaxX-GetClipMinX+512)^2+(GetClipMaxY-GetClipMinY+512)^2)^0.5*0.8);
		yield;
		loop
		{
		//ObjShot_SetDelay(obj,100);
		ascent(let i in 0..4)
		{
		if(!Collision_Obj_Obj(PlayerObj[0],arrayObj[i]))
		{
			Judg[i]=0;
		}
		else
		{
			Judg[i]=1;
		}
		}
		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{
		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetAngle(obj,Obj_GetAngle(obj)-1);
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetAngle(obj,Obj_GetAngle(obj)+1);
		}

		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				Obj_SetX(obj, Obj_GetX(obj)+cos(Obj_GetAngle(arrayObj[i])-90));
				Obj_SetY(obj, Obj_GetY(obj)+sin(Obj_GetAngle(arrayObj[i])-90));
			}
			}
		}
			yield;
		}
}

task LASER2(let objP,let angle,let length)
{
		let obj= Obj_Create(OBJ_LASER);
		ObjLaser_SetWidth(obj,8);
		ObjLaser_SetLength(obj,length*2^0.5/2);
        	ObjShot_SetGraphic(obj,161); 
		Obj_SetAngle(obj, angle);
		Obj_SetAutoDelete(obj,false);
	//	ObjLaser_SetSource(obj,false);
		Obj_SetCollisionToPlayer(obj,false);
		arrayObj = arrayObj ~ [obj];
		loop
		{
		Obj_SetAngle(obj,Obj_GetAngle(objP)+angle);
		Obj_SetPosition(obj,Obj_GetX(objP)-cos(Obj_GetAngle(objP)+angle+45)*length/2,Obj_GetY(objP)-sin(Obj_GetAngle(objP)+angle+45)*length/2);
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			Obj_SetAngle(obj,Obj_GetAngle(objP)+angle);
		//ObjLaser_SetLength(obj,length+0.1);
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			Obj_SetAngle(obj,Obj_GetAngle(objP)+angle);
		}
			yield;
		}
}

task PlayerMareker
{
let x=GetCenterX;
let y=GetCenterY+128;
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetSpeed(obj,0);
	Obj_SetAngle(obj, 0);
	ObjShot_SetGraphic(obj, 1);
	ObjShot_SetDelay(obj, 0);
	Obj_SetCollisionToPlayer(obj,false);
	ObjShot_SetBombResist(obj,true);
	PlayerObj = PlayerObj ~ [obj];
		Obj_SetAlpha(obj,0);
	while(!Obj_BeDeleted(obj))
	{
		SetPlayerX(x);
		SetPlayerY(y);
		Obj_SetPosition(obj, x, y);
		yield;
	}
}

task EnemyMove
{
loop
{
	SetX(GetX+MoveSpeed*cos(Obj_GetAngle(arrayObj[0])+MoveAngle));
	SetY(GetY+MoveSpeed*sin(Obj_GetAngle(arrayObj[0])+MoveAngle));
		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{

		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				SetX(GetX+PlayerHiSpeed);
			}
			else
			{
				SetX(GetX+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				SetX(GetX-PlayerHiSpeed);
			}
			else
			{
				SetX(GetX-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				SetY(GetY+PlayerHiSpeed);
			}
			else
			{
				SetY(GetY+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				SetY(GetY-PlayerHiSpeed);
			}
			else
			{
				SetY(GetY-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			SetY(GetPlayerY+Distance(GetX,GetY,GetPlayerX,GetPlayerY)*sin(GetAngleToPlayer+179));
			SetX(GetPlayerX+Distance(GetX,GetY,GetPlayerX,GetPlayerY)*cos(GetAngleToPlayer+179));
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			SetY(GetPlayerY+Distance(GetX,GetY,GetPlayerX,GetPlayerY)*sin(GetAngleToPlayer+181));
			SetX(GetPlayerX+Distance(GetX,GetY,GetPlayerX,GetPlayerY)*cos(GetAngleToPlayer+181));
		}
		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				SetX(GetX+cos(Obj_GetAngle(arrayObj[i])-90));
				SetY(GetY+sin(Obj_GetAngle(arrayObj[i])-90));
			}
			}
		}


yield;
}
}

function Distance(GX,GY,PX,PY)
{
	return(((PY-GY)^2+(PX-GX)^2)^0.5);
}

task EnemyMoveParamater
{
wait(120);
loop
{
MoveAngle=60;
MoveSpeed=5;
wait(90);
MoveAngle=180;
MoveSpeed=0;
wait(90);
MoveAngle=180;
MoveSpeed=5;
wait(90);
MoveAngle=180;
MoveSpeed=0;
wait(90);
MoveAngle=300;
MoveSpeed=5;
wait(90);
MoveAngle=300;
MoveSpeed=0;
wait(90);
wait(60);
}
}


sub standBy//ʒu
{
	SetAction(ACT_MOVE, 60);
	let wIni = 60;
	SetMovePosition02(xIni, yIni, wIni);
	SetInvincibility(wIni);
	wait(wIni);
}


task Shot
{
	wait(30);
CL;
ShotType(rand_int(1,2));
loop
{

	wait(90);
	ShotType2(rand_int(1,4));
	wait(90);
	ShotType2(rand_int(1,4));
	wait(90);
	ShotType2(rand_int(1,4));
	wait(60);
}
}

task CL
{
	wait(540);
	NDLaser(0);
	NDLaser(120);
	NDLaser(240);
loop
{
	wait(600);
	ShotType(rand_int(1,2));
}
}

function ShotType(type)
{
let t=rand_int(0,7);
let dir=rand_int(0,1)*2-1;
if(type==1)
{
	let angle=0;
	let angle2=0;
	ascent(let j in 0..7)
	{
		ascent(let i in -5..6)
		{
			shot(GetX,GetY,1.2+0.2*j,GetAngleToPlayer+20*i+angle,121+t%7,20);
			shot(GetX,GetY,1.2+0.2*j,GetAngleToPlayer+20*i+angle2,129+t%7,20);
		}
		angle+=2*dir;
		angle2-=3*dir;
		t++;
	}
}
if(type==2)
{
	let angle=0;
	let angle2=0;
	ascent(let j in 0..10)
	{
		ascent(let i in -7..8)
		{
			shot(GetX,GetY,1.2+0.2*j,GetAngleToPlayer+16*i+angle2,129+t%7,20);
		}
		angle2-=3*dir;
		t++;
	}
}
}

function ShotType2(type)
{
let t=rand_int(0,7);
if(type==1)
{
	loop(9)
	{
		ascent(let i in -5..6)
		{
			ascent(let j in 0..3)
			{
				shot(GetX,GetY,2.0+0.4*j,GetAngleToPlayer+i*20,121+t%7,5);
			}
		}
		wait(10);
		t++;
	}
}
if(type==2)
{
	loop(18)
	{
		let rangle=rand(0,360);
		ascent(let i in 0..10)
		{
			shot(GetX,GetY,1.5,360*i/10+rangle,121+t%7,5);
		}
		wait(5);
		t++;
	}
}
if(type==3)
{
	loop(9)
	{
		ascent(let i in -5..5)
		{
			ascent(k in -1..2)
			{
				shot(GetX,GetY,7.0-1.0*absolute(i),GetAngleToPlayer+i*3+k*72,121+t%7,5);
			}
		}
		wait(10);
		t++;
	}
}
if(type==4)
{
wait(30);
		ascent(k in 0..8)
		{
			lasershot(GetX,GetY,5,GetAngleToPlayer+k*45,121,5);
		}
wait(60);
}
}

task NDLaser(let angle)
{
		let length=1500;
		let obj= Obj_Create(OBJ_LASER);
		ObjLaser_SetWidth(obj,50);
		ObjLaser_SetLength(obj,length);
        	ObjShot_SetGraphic(obj,BLUE01); 
		Obj_SetAngle(obj, angle);
		Obj_SetAutoDelete(obj,false);
		ObjLaser_SetSource(obj,false);
		ObjShot_SetDelay(obj,60);
		loop
		{
			Obj_SetPosition(obj,GetX,GetY);
			Obj_SetAngle(obj, Obj_GetAngle(arrayObj[0])+angle);
			angle+=0.5;
			yield;
		}
}

task lasershot(let x, let y, let speed,let angle, let graphic, let delay)
{
	let t=rand_int(0,7);
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj, x, y);
	Obj_SetSpeed(obj, speed);
	Obj_SetAngle(obj, angle);
	ObjShot_SetGraphic(obj, graphic);
	ObjShot_SetDelay(obj, delay);
	while(!Obj_BeDeleted(obj))
	{
		ObjShot_SetGraphic(obj, graphic+t%7);
		ascent(let i in 0..length(arrayObj))
		{
			if(Collision_Obj_Obj(arrayObj[i], obj))
			{
				DLaser(Obj_GetX(obj),Obj_GetY(obj),Obj_GetAngle(arrayObj[i])+90,i);
				Obj_Delete(obj);
				break;
			}
		}
		t++;

		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{

		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetAngle(obj,Obj_GetAngle(obj)-1);
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetAngle(obj,Obj_GetAngle(obj)+1);
		}
		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				Obj_SetX(obj, Obj_GetX(obj)+cos(Obj_GetAngle(arrayObj[i])-90));
				Obj_SetY(obj, Obj_GetY(obj)+sin(Obj_GetAngle(arrayObj[i])-90));
			}
			}
		}

	yield;
	}
}

task DLaser(let x,let y,let angle,let i)
{
		let length=1200;
		let obj= Obj_Create(OBJ_LASER);
		Obj_SetPosition(obj,x,y);
		ObjLaser_SetWidth(obj,50);
		ObjLaser_SetLength(obj,length);
        	ObjShot_SetGraphic(obj,161); 
		Obj_SetAngle(obj, angle);
		Obj_SetAutoDelete(obj,false);
		ObjLaser_SetSource(obj,false);
		ObjShot_SetDelay(obj,60);
		loop(120)
		{
			Obj_SetAngle(obj, Obj_GetAngle(arrayObj[i])+90);
		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{
		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetAngle(obj,Obj_GetAngle(obj)-1);
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetAngle(obj,Obj_GetAngle(obj)+1);
		}

		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				Obj_SetX(obj, Obj_GetX(obj)+cos(Obj_GetAngle(arrayObj[i])-90));
				Obj_SetY(obj, Obj_GetY(obj)+sin(Obj_GetAngle(arrayObj[i])-90));
			}
			}
		}
			yield;
		}
		Obj_Delete(obj);
}

task shot(let x, let y, let speed,let angle, let graphic, let delay)
{
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj, x, y);
	Obj_SetSpeed(obj, speed);
	Obj_SetAngle(obj, angle);
	ObjShot_SetGraphic(obj, graphic);
	ObjShot_SetDelay(obj, delay);
	while(!Obj_BeDeleted(obj))
	{
		ascent(let i in 0..length(arrayObj))
		{
			if(Collision_Obj_Obj(arrayObj[i], obj))
			{
				Explosion01(Obj_GetX(obj),Obj_GetY(obj),5,0.1,10);
				Obj_Delete(obj);
				break;
			}
		}

		if(Judg[0]+Judg[1]+Judg[2]+Judg[3]==0)
		{

		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetX(obj, Obj_GetX(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_UP)==KEY_PUSH || GetKeyState(VK_UP)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)+PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_DOWN)==KEY_PUSH || GetKeyState(VK_DOWN)==KEY_HOLD)
		{
			if(GetKeyState(VK_SLOWMOVE)==KEY_FREE)
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerHiSpeed);
			}
			else
			{
				Obj_SetY(obj, Obj_GetY(obj)-PlayerLowSpeed);
			}
		}
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+179));
			Obj_SetAngle(obj,Obj_GetAngle(obj)-1);
		}
		if(GetKeyState(VK_SKIP)==KEY_PUSH || GetKeyState(VK_SKIP)==KEY_HOLD)
		{
			Obj_SetY(obj,GetPlayerY+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*sin(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetX(obj,GetPlayerX+Distance(Obj_GetX(obj),Obj_GetY(obj),GetPlayerX,GetPlayerY)*cos(atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj))+181));
			Obj_SetAngle(obj,Obj_GetAngle(obj)+1);
		}
		}
		else
		{
			ascent(let i in 0..4)
			{
			if(Judg[i]==1)
			{
				Obj_SetX(obj, Obj_GetX(obj)+cos(Obj_GetAngle(arrayObj[i])-90));
				Obj_SetY(obj, Obj_GetY(obj)+sin(Obj_GetAngle(arrayObj[i])-90));
			}
			}
		}


		yield;
    	}

}

task Powerdraw//PowerʉEɕ\GtFNg^XN
{
let R;
let G;
let B;
let dy=-50;
loop{
let Pnum1=truncate(Power%10000/1000);
let Pnum2=truncate(Power%1000/100);
let Pnum3=truncate(Power%100/10);
let Pnum4=truncate(Power%10);
		let bx1=GetClipMaxX+50;
		let by1=GetCenterY-dy;
		let scax=1.5;
		let scay=1.5;
		let scax2=1.0;
		let scay2=1.0;

		if(Power>=1000)
		{
		R=150;
		G=150;
		B=255;
		}
		else
		{
		R=255;
		G=150;
		B=150;
		}
		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, imgBorder);
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj, ADD); 
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -7, -8);
		ObjEffect_SetVertexXY(obj, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj, 2, 7, 8);
		ObjEffect_SetVertexXY(obj, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj, 0,  2+Pnum1*14,  114);
		ObjEffect_SetVertexUV(obj, 1,  14+Pnum1*14, 114);
		ObjEffect_SetVertexUV(obj, 2, 14+Pnum1*14,  131);
		ObjEffect_SetVertexUV(obj, 3, 2+Pnum1*14, 131);

		ObjEffect_SetVertexColor(obj,0,255,R,G,B);
		ObjEffect_SetVertexColor(obj,1,255,R,G,B);
		ObjEffect_SetVertexColor(obj,2,255,R,G,B);
		ObjEffect_SetVertexColor(obj,3,255,R,G,B);
		
		ObjEffect_SetScale(obj, scax,scay);
		Obj_SetPosition(obj,bx1,by1);
		ObjEffect_SetLayer(obj,8);

		let bx2=GetClipMaxX+78;
		let by2=GetCenterY-dy;
		let obj2 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj2, imgBorder);
		ObjEffect_SetPrimitiveType(obj2, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj2, ADD); 
		ObjEffect_CreateVertex(obj2, 4);
		ObjEffect_SetVertexXY(obj2, 0, -7, -8);
		ObjEffect_SetVertexXY(obj2, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj2, 2, 7, 8);
		ObjEffect_SetVertexXY(obj2, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj2, 0,  2+Pnum2*14,  114);
		ObjEffect_SetVertexUV(obj2, 1,  14+Pnum2*14, 114);
		ObjEffect_SetVertexUV(obj2, 2, 14+Pnum2*14,  131);
		ObjEffect_SetVertexUV(obj2, 3, 2+Pnum2*14, 131);
		
		ObjEffect_SetVertexColor(obj2,0,255,R,G,B);
		ObjEffect_SetVertexColor(obj2,1,255,R,G,B);
		ObjEffect_SetVertexColor(obj2,2,255,R,G,B);
		ObjEffect_SetVertexColor(obj2,3,255,R,G,B);

		Obj_SetPosition(obj2,bx2,by2);
		ObjEffect_SetLayer(obj2,8);
		ObjEffect_SetScale(obj2, scax2,scay2);

		let bx3=GetClipMaxX+94;
		let by3=GetCenterY-dy;
		let obj3 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj3, imgBorder);
		ObjEffect_SetPrimitiveType(obj3, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj3, ADD); 
		ObjEffect_CreateVertex(obj3, 4);
		ObjEffect_SetVertexXY(obj3, 0, -7, -8);
		ObjEffect_SetVertexXY(obj3, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj3, 2, 7, 8);
		ObjEffect_SetVertexXY(obj3, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj3, 0,  2+Pnum3*14,  114);
		ObjEffect_SetVertexUV(obj3, 1,  14+Pnum3*14, 114);
		ObjEffect_SetVertexUV(obj3, 2, 14+Pnum3*14,  131);
		ObjEffect_SetVertexUV(obj3, 3, 2+Pnum3*14, 131);

		ObjEffect_SetVertexColor(obj3,0,255,R,G,B);
		ObjEffect_SetVertexColor(obj3,1,255,R,G,B);
		ObjEffect_SetVertexColor(obj3,2,255,R,G,B);
		ObjEffect_SetVertexColor(obj3,3,255,R,G,B);
		
		Obj_SetPosition(obj3,bx3,by3);
		ObjEffect_SetLayer(obj3,8);
		ObjEffect_SetScale(obj3, scax2,scay2);

		let bx5=GetClipMaxX+110;
		let by5=GetCenterY-dy;
		let obj5 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj5, imgBorder);
		ObjEffect_SetPrimitiveType(obj5, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj5, ADD); 
		ObjEffect_CreateVertex(obj5, 4);
		ObjEffect_SetVertexXY(obj5, 0, -7, -8);
		ObjEffect_SetVertexXY(obj5, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj5, 2, 7, 8);
		ObjEffect_SetVertexXY(obj5, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj5, 0,  2+Pnum4*14,  114);
		ObjEffect_SetVertexUV(obj5, 1,  14+Pnum4*14, 114);
		ObjEffect_SetVertexUV(obj5, 2, 14+Pnum4*14,  131);
		ObjEffect_SetVertexUV(obj5, 3, 2+Pnum4*14, 131);

		ObjEffect_SetVertexColor(obj5,0,255,R,G,B);
		ObjEffect_SetVertexColor(obj5,1,255,R,G,B);
		ObjEffect_SetVertexColor(obj5,2,255,R,G,B);
		ObjEffect_SetVertexColor(obj5,3,255,R,G,B);
		
		Obj_SetPosition(obj5,bx5,by5);
		ObjEffect_SetLayer(obj5,8);
		ObjEffect_SetScale(obj5, scax2,scay2);


		let bx4=GetClipMaxX+70;
		let by4=GetCenterY-dy;
		let obj4 = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj4, imgBorder);
		ObjEffect_SetPrimitiveType(obj4, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj4, ADD); 
		ObjEffect_CreateVertex(obj4, 4);
		ObjEffect_SetVertexXY(obj4, 0, -7, -8);
		ObjEffect_SetVertexXY(obj4, 1, 7,  -8);
		ObjEffect_SetVertexXY(obj4, 2, 7, 8);
		ObjEffect_SetVertexXY(obj4, 3,  -7,  8);
		
		ObjEffect_SetVertexUV(obj4, 0,  2+10*14,  114);
		ObjEffect_SetVertexUV(obj4, 1,  14+10*14, 114);
		ObjEffect_SetVertexUV(obj4, 2, 14+10*14,  131);
		ObjEffect_SetVertexUV(obj4, 3, 2+10*14, 131);

		ObjEffect_SetVertexColor(obj4,0,255,R,G,B);
		ObjEffect_SetVertexColor(obj4,1,255,R,G,B);
		ObjEffect_SetVertexColor(obj4,2,255,R,G,B);
		ObjEffect_SetVertexColor(obj4,3,255,R,G,B);
		
		Obj_SetPosition(obj4,bx4,by4);
		ObjEffect_SetLayer(obj4,8);
		ObjEffect_SetScale(obj4, scax2,scay2);

		yield;
		Obj_Delete(obj);
		Obj_Delete(obj2);
		Obj_Delete(obj3);
		Obj_Delete(obj4);
		Obj_Delete(obj5);
}
}

#include_function ".\data.txt"
#include_function ".\lib/lib_anime_Marisa.txt"
}