let imgboss = GetCurrentScriptDirectory~"flandoll.png";

//Ăяoie͊e֐̑ÕRgAEgɂ܂j
//STASKLqł̂ŁA@MainloopɁuyield;vȂƎg܂

//P񂾂NΎԈtJԂĂ܂B
//BreakShot(wait,minangle,addangle,way,atk);
//CatadyOfTrickShot(firstwait,speed,minangle,addangle,way,wait);
//AroundKoteiHard();
//AroundAllHard();
//AroundKoteiEasy();
//AroundAllEasy();

//艺objeŏoĂׁAtaskLqł[v܂
//DefenceBombShot01(x,y,speed,angle,bullet,delay);
//DefenceBombBreakShotA(x,y,speed,angle,bullet,delay,breaktime,atk,bullet2);



//苗Ŕj􂷂e
//wait@@@UԊu
//minangle@Œpx
//addangle@pxipxԊuj
//way @@@v
//atk @@@j̒e̐

task BreakShot(wait,minangle,addangle,way,atk){
let i=minangle;
loop(60){yield;}
loop{
loop(way){
CreateShotA(1,GetX(),GetY(),30);
SetShotDataA(1,0,1.5,i,0,0,0,RED03);
let j = 0;
	while(j<= atk){
	CreateShotA(2,0,0,10);
	SetShotDataA(2,0,rand(0.1,0.3),rand(0,360),0,rand(0,0.05),3,RED04);
	j++;
	AddShot(45,1,2,0);}
SetShotKillTime(1,46);
FireShot(1);
i+=addangle;}
loop(wait){yield;}
}
}

//J^fBIugbN̒eB蔽˂܂
//firstwait@ҋ@
//speed@@@x
//minangle @px
//addangle @pxԊu
//way@@@@v
//wait @@@UԊu

task CatadyOfTrickShot(firstwait,speed,minangle,addangle,way,wait){
let time = round((speed * 4) / 3);
let angle = minangle;
loop(firstwait){yield;}
loop{
angle = minangle;
loop(way){
ReflectShot(GetX,GetY,speed,angle,9,true,true,true,false,BLUE03,0);
angle += addangle;}
angle = minangle;
loop(time){yield;}
loop(way){
ReflectShot(GetX+3,GetY-4,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
ReflectShot(GetX+1,GetY+8,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
ReflectShot(GetX,GetY-7,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
ReflectShot(GetX-4,GetY+1,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
ReflectShot(GetX+6,GetY,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
ReflectShot(GetX-6,GetY+2,speed-rand(0,0.1),angle,9,true,true,true,false,BLUE02,0);
angle += addangle;}
loop(time){yield;}
loop(36){angle = minangle;
loop(way){
ReflectShot(GetX + rand(-18,18),GetY + rand(-18,18),speed-rand(0.1,0.4),angle,9,true,true,true,false,BLUE01,0);
angle += addangle;}
}
loop(wait){yield;}
}
}


task CranberryTrapKoteiA(){
let x = GetClipMinX();
let y = GetClipMinY();
loop{
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y-=2;yield;}}
}
}

task CranberryTrapKoteiB(){
let x = GetClipMaxX();
let y = GetClipMaxY();
loop{
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y+=2;yield;}}
}
}

task CranberryTrapAllA(){
let x = GetClipMinX();
let y = GetClipMinY();
loop{
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y-=2;yield;}}
SetShotDirectionType(PLAYER);
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(14){y+=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(14){y-=2;yield;}}
SetShotDirectionType(ABSOLUTE);
}
}

task CranberryTrapAllB(){
let x = GetClipMaxX();
let y = GetClipMaxY();
loop{
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y-=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(14){y+=2;yield;}}
SetShotDirectionType(PLAYER);
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(12){x-=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(14){y-=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(12){x+=2;yield;}}
loop(16){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(14){y+=2;yield;}}
SetShotDirectionType(ABSOLUTE);
}
}


//Œê݉iɑł^XN
//ex̓[gUA2.45xŁA͂܂
task AroundKoteiHard(){
CranberryTrapKoteiA();
CranberryTrapKoteiB();
loop{yield;}
}

//́ÂɎ@
task AroundAllHard(){
CranberryTrapAllA();
CranberryTrapAllB();
loop{yield;}
}

task CranberryTrapKoteiC(){
let x = GetClipMinX();
let y = GetClipMinY();
loop{
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y-=2;yield;}}
}
}

task CranberryTrapKoteiD(){
let x = GetClipMaxX();
let y = GetClipMaxY();
loop{
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y+=2;yield;}}
}
}

task CranberryTrapAllC(){
let x = GetClipMinX();
let y = GetClipMinY();
loop{
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y-=2;yield;}}
SetShotDirectionType(PLAYER);
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(28){y+=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(28){y-=2;yield;}}
SetShotDirectionType(ABSOLUTE);
}
}

task CranberryTrapAllD(){
let x = GetClipMaxX();
let y = GetClipMaxY();
loop{
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y-=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot11(x,y,(GetCenterX-x)/120,(GetCenterY-y)/120,PURPLE01,0);
loop(28){y+=2;yield;}}
SetShotDirectionType(PLAYER);
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(24){x-=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(28){y-=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(24){x+=2;yield;}}
loop(8){CreateShot01(x,y,2.45,0,BLUE01,0);
loop(28){y+=2;yield;}}
SetShotDirectionType(ABSOLUTE);
}
}


//Œê݉iɑł^XN(Easyo[W)
//ex̓[gUA2.45xŁA͂܂B
//Ăяo
task AroundKoteiEasy(){
CranberryTrapKoteiC();
CranberryTrapKoteiD();
loop{yield;}
}

//́ÂɎ@
task AroundAllEasy(){
CranberryTrapAllC();
CranberryTrapAllD();
loop{yield;}
}

//{ϐCreateShot01BCreateShot01ƑSB
//ꉞIuWFNgełB[vȂ̂functionƓlȊŌĂׂ܂
task DefenceBombShot01(x,y,speed,angle,bullet,delay){
let obj = Obj_Create(OBJ_SHOT);
Obj_SetX(obj, x);
Obj_SetY(obj, y);
Obj_SetSpeed(obj, speed);
Obj_SetAngle(obj, angle);
ObjShot_SetGraphic(obj, bullet);
ObjShot_SetDelay(obj, delay);
ObjShot_SetBombResist(obj,true);
			
while( !Obj_BeDeleted(obj) ){yield;}
}

//O̒ê݃{ϐBreakShotB
//BreakShotƈႢAWay͂PŒŒe摜Ȃǂ͌ŒŖȂĂ܂
//܂AspeedAbreaktime傫ƉʊOŔj􂵂ĈӖ̂Œ
//x		wW
//y		xW
//speed		x
//angle		px
//bullet	ẻ摜
//delay		x
//breaktime	j܂ł̃t[
//atk		j̒e̐
//bullet2	j̒ẻ摜

//IuWFNgełB[vȂ̂functionƓlȊŌĂׂ܂
task DefenceBombBreakShotA(x,y,speed,angle,bullet,delay,breaktime,atk,bullet2){
let obj = Obj_Create(OBJ_SHOT);
Obj_SetX(obj, x);
Obj_SetY(obj, y);
Obj_SetSpeed(obj, speed);
Obj_SetAngle(obj, angle);
ObjShot_SetGraphic(obj, bullet);
ObjShot_SetDelay(obj, delay);
ObjShot_SetBombResist(obj,true);
			
loop(breaktime){yield;}
let x1 = Obj_GetX(obj);
let y1 = Obj_GetY(obj);
loop(atk){
CreateShot02(x1,y1,rand(0.1,0.3),rand(0,360),rand(0,0.05),3,bullet2,0);
}
}



//艺͑fނł̂ŁAL̒eȊOł̎gp֎~

function Allshot(speed,dir,way,bullet,delay){

ascent(let i in 0..way){
CreateShot01(GetX,GetY,speed,dir+(360/way*i),bullet,delay);
}
}

function ReflectShot(x,y,speed,angle,reflectNum,reflectL,reflectU,reflectR,reflectD,graphic,delay){
	
let minX = GetClipMinX();
let maxX = GetClipMaxX();
let minY = GetClipMinY();
let maxY = GetClipMaxY();
let totalFrame = 0;
CreateShotA( 0, x, y, delay );
SetShotDataA( 0, 0, speed, angle, 0, 0, 0, graphic );
while( reflectNum >= 1 ){
	while( angle < 0 ){ angle += 360; }
	if( angle >= 360 ){ angle %= 360; }
	let angleLU = atan2( y - minY, x - minX ) + 180;
	let angleRU = atan2( y - minY, x - maxX ) + 180;
	let angleLD = atan2( y - maxY, x - minX ) + 180;
	let angleRD = atan2( y - maxY, x - maxX ) + 180;
	if( angleRU == 0 ){ angleRU = 360; }
	if( angleRD == 360 ){ angleRD = 0; }
	let reflectLength = 0;
	let reflectX = 0;
	let reflectY = 0;
	let reflectAngle = 0;
	let reflect = false;
	if( angle >= angleRU || angle < angleRD ){
		reflectLength = ( maxX - x ) / cos( angle );
		reflectX = maxX;
		reflectY = y + reflectLength * sin( angle );
		reflectAngle = 180 - angle;
		reflect = reflectR;}
	else if( angle >= angleLD && angle < angleLU ){
	reflectLength = ( minX - x ) / cos( angle );
	reflectX = minX;
	reflectY = y + reflectLength * sin( angle );
	reflectAngle = 180 - angle;
	reflect = reflectL;}
	else if( angle >= angleLU && angle < angleRU ){
	reflectLength = ( minY - y ) / sin( angle );
	reflectX = x + reflectLength * cos( angle );
	reflectY = minY;
	reflectAngle = - angle;
	reflect = reflectU;}
	else{reflectLength = ( maxY - y ) / sin( angle );
	reflectX = x + reflectLength * cos( angle );
	reflectY = maxY;
	reflectAngle = - angle;
	reflect = reflectD;}
	if( !reflect ){ break; }
	x = reflectX;
	y = reflectY;
	angle = reflectAngle;
	totalFrame += reflectLength / speed;
	SetShotDataA( 0, totalFrame, NULL, angle, 0, 0, 0, graphic );
	reflectNum --;}
	FireShot( 0 );}