
script_shot BurstReturnShot{//バースト反応弾
       let out=false;
	let Speed=rand(3,6);
	let StandradSpeed=Speed;
	let TimeCounter=0;
	let SRange=GetCommonData("MagicAbsorbShortRange");
	let LRange=GetCommonData("MagicAbsorbLongRange");
       @Initialize{
	SetDefault(5);
	SetBombResist;
	SetSpeed(Speed);
	SetAngle(GetAngleToPlayer-180+rand(-45,45));
	Tmain;
       }
	@MainLoop
	{
		SRange=GetCommonData("MagicAbsorbShortRange");
		LRange=GetCommonData("MagicAbsorbLongRange");
		SetCollisionB(GetX,GetY,1);
		yield;
	}
       @DrawLoop {
       DrawGraphicDefault();
       }
       @Finalize{

	}

task Tmain
{
	Move;
	loop(30)	
	{
		if(GetKeyState(VK_USER)==KEY_PUSH)
		{
			End;
		}
		yield;
	}
	Eraze;
	BulletToItem;
}

task Move
{
loop(30)
{
SetSpeed(Speed);
Speed-=StandradSpeed/30;
yield;
}

let mo=2.5*4;
loop
{       
SetSpeed(Speed);
if(Speed<1.5)
{
Speed+=1/60;
}
if(Speed<3.75)
{
Speed+=1/60;
}
if(TimeCounter>=120 && TimeCounter<300)
{
	SetDefault(2);
}
else if(TimeCounter>=300)
{
	SetDefault(1);
}
	//SetAngle(GetAngleToPlayer);

	loop(1)
	{
        if(sin(GetAngleToPlayer-GetAngle)>0){
            SetAngle(GetAngle+mo);
        }
        else{
            SetAngle(GetAngle-mo);
        }
	}

	if(GetDistanceToPlayer<=SRange)
	{
		TimeCounter+=3;
	}
	else if(GetDistanceToPlayer<=LRange)
	{
		TimeCounter+=1+2*(GetDistanceToPlayer-LRange)/(SRange-LRange);
	}
	else
	{
		TimeCounter+=1;
	}
yield;
}

}

task BulletToItem
{
loop
{
	if(GetKeyState(VK_USER)==KEY_PUSH)
	{
		if(TimeCounter<120)
		{
			ItemSet(GetX,GetY,6);
			ItemSet(GetX,GetY,6);
			ItemSet(GetX,GetY,6);
		}
		else if(TimeCounter>=120 && TimeCounter<300)
		{
			ItemSet(GetX,GetY,61);
			ItemSet(GetX,GetY,61);
			ItemSet(GetX,GetY,61);
		}
		else if(TimeCounter>=300)
		{
			ItemSet(GetX,GetY,62);
			ItemSet(GetX,GetY,62);
			ItemSet(GetX,GetY,62);
		}
		End;
		break;
	}
	if(GetCommonData("BURSTLEVEL")==0)
	{
		if(TimeCounter<120)
		{
			ItemSet(GetX,GetY,4);
			ItemSet(GetX,GetY,4);
			ItemSet(GetX,GetY,4);
		}
		else if(TimeCounter>=120 && TimeCounter<300)
		{
			ItemSet(GetX,GetY,41);
			ItemSet(GetX,GetY,41);
			ItemSet(GetX,GetY,41);
		}
		else if(TimeCounter>=300)
		{
			ItemSet(GetX,GetY,42);
			ItemSet(GetX,GetY,42);
			ItemSet(GetX,GetY,42);
		}
		End;
		break;
	}
	yield;
}
}

task Eraze
{
loop
{
	if(GetX<GetClipMinX-64||GetX>GetClipMaxX+64||GetY<GetClipMinY-64||GetY>GetClipMaxY+64)
	{
		End;
	}
	if(OnBomb)
	{
		if(TimeCounter<120)
		{
			ItemSet(GetX,GetY,4);
			ItemSet(GetX,GetY,4);
			ItemSet(GetX,GetY,4);
		}
		else if(TimeCounter>=120 && TimeCounter<300)
		{
			ItemSet(GetX,GetY,41);
			ItemSet(GetX,GetY,41);
			ItemSet(GetX,GetY,41);
		}
		else if(TimeCounter>=300)
		{
			ItemSet(GetX,GetY,42);
			ItemSet(GetX,GetY,42);
			ItemSet(GetX,GetY,42);
		}
		End;
	}
	if(GetCommonData("Playermissed"))
	{
		End;
	}
	if(TimeCounter>=750)
	{
		CreateShotA(0,GetX,GetY,15);
		SetShotKillTime(0,0);
		FireShot(0);
		End;
	}
yield;
}
}

function GetDistanceToPlayer
{
	let dis=((GetX-GetPlayerX)^2+(GetY-GetPlayerY)^2)^0.5;
	return(dis);
}

function ItemSet(x,y,type)//アイテム生成関数
{
	let XY=GetCommonDataDefault("ItemXY",[]);//共通データ内容を変数に渡す
	XY=XY~[x,y,type];//
	SetCommonData("ItemXY",XY);//共通データに変更後の配列を渡す
}

}
//////////////////////////////////////////////////////////////////////////////

script_shot PowerReturnShot{//マジック反応弾
       let out=false;
	let Speed=rand(3,6);
	let StandradSpeed=Speed;
	let TimeCounter=0;
       @Initialize{
	SetDefault(38);
	SetBombResist;
	SetSpeed(Speed);
	SetAngle(GetAngleToPlayer-180+rand(-10,10));

	Tmain;
       }
       @MainLoop {
	SetCollisionB(GetX,GetY,2);
		yield;
          }
       @DrawLoop {
          DrawGraphicDefault();
       }
       @Finalize{

	}

task Tmain
{

	Move;
	Eraze;
	loop(30){yield;}
	BulletToItem;
}


task Move
{
loop(30)
{
SetSpeed(Speed);
Speed-=StandradSpeed/30;
yield;
}

loop
{       
SetSpeed(-Speed);
if(Speed<2)
{
Speed+=2/60;
}
else
{
break;
}

yield;
}

}


task BulletToItem
{
loop
{
	if(GetCommonData("BURSTLEVEL")==3)
	{
		ItemSet(GetX,GetY,66);
		ItemSet(GetX,GetY,66);
		ItemSet(GetX,GetY,66);
		End;
		break;
	}

	if(GetCommonDataDefault("SlowMoveSwitch",false))
	{
		ItemSet(GetX,GetY,7);
		ItemSet(GetX,GetY,7);
		ItemSet(GetX,GetY,7);
		End;
		break;
	}	
	yield;
}
}

task Eraze
{
loop
{
	if(GetX<GetClipMinX-64||GetX>GetClipMaxX+64||GetY<GetClipMinY-64||GetY>GetClipMaxY+64)
	{
		End;
	}
	if(OnBomb)
	{
		End;
	}
	if(GetCommonData("Playermissed"))
	{
		End;
	}
yield;
}
}

function GetDistanceToPlayer
{
	let dis=((GetX-GetPlayerX)^2+(GetY-GetPlayerY)^2)^0.5;
	return(dis);
}

function ItemSet(x,y,type)//アイテム生成関数
{
	let XY=GetCommonDataDefault("ItemXY",[]);//共通データ内容を変数に渡す
	XY=XY~[x,y,type];//
	SetCommonData("ItemXY",XY);//共通データに変更後の配列を渡す
}

}