//ボム耐性のCreateShot01。引数はCreateShot01と全く同じ。
//一応オブジェクト弾です。ループしないのでfunctionと同様な感じで呼べます
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;}
}

//紅３面雑魚のクナイ弾の挙動のような関数。(暫定)
	//x		発射Ｘ座標
	//y		発射Ｙ座標
	//minspeed	最低速度	
	//maxspeed	最大速度
	//shots		発射数
	//bullet	弾画像

	task LineToPlayerShot(x,y,minspeed,maxspeed,shots,bullet){
	let angle = GetAngleToPlayer;
	let speedA = minspeed + (maxspeed - minspeed) / shots;
	let speed = minspeed;
	loop(shots){
	CreateShot02(x,y,speed,angle,0.3,speedA,bullet,15);
	speedA += (maxspeed - minspeed) / shots;
	yield;
	}
	}

	//地ＥＸの妖精・風５面全方位自機のような弾幕に使える関数
	//応用すればアンカーゴーストや風３面花のような弾にも使えそう
	//地ＥＸのような感じにしたい時はstoptimeを０にして、changeangle
	//をfalseにしてください
	//functionですがobj弾を内部で使っていますのでyield;必須
	//引数は１１。以下詳細
	//cx		中心Ｘ座標
	//cy		中心Ｙ座標
	//radius	中心からの初期距離
	//way		Ｗａｙ数
	//stoptime	停止時間
	//speed		速度
	//angle		初期角度
	//afterangle	変化後の角度
	//changeangle	角度変化の有無をtrue、falseで指定
	//afterchange	変化後角度も変化させるかtrue,falseで指定
	//（changeangleがfalseの場合、afterangle、afterchangeは無視されます。）
	//bullet	弾画像
	//delay		遅延時間

	task StopToMoveShot(x,y,time,speed,angleA,angleB,bullet,delay){
	let obj = Obj_Create(OBJ_SHOT);
	Obj_SetX(obj, x);
	Obj_SetY(obj, y);
	Obj_SetSpeed(obj, 0);
	Obj_SetAngle(obj, angleA);
	ObjShot_SetGraphic(obj, bullet);
	ObjShot_SetDelay(obj, delay);

	loop(time){yield;}
	Obj_SetSpeed(obj, speed);
	Obj_SetAngle(obj, angleB);
	while( !Obj_BeDeleted(obj) ){yield;}
	}

	function AroundToShot(cx,cy,radius,way,stoptime,speed,angle,afterangle,changeangle,afterchange,bullet,delay){
	let Angle = angle;
	let addAngle = 360 / way;
	let x = cx + radius * cos(Angle);
	let y = cy + radius * sin(Angle);
	let AfterAngle = afterangle;
	let angleA;

	loop(way){
	if(changeangle == false){angleA = Angle;}
	else if(changeangle == true){angleA = AfterAngle;}

	StopToMoveShot(x,y,stoptime,speed,Angle,angleA,bullet,delay);
	Angle += addAngle;
	if(afterchange == true&&changeangle == true){AfterAngle += addAngle;}
	x = cx + radius * cos(Angle);
	y = cy + radius * sin(Angle);
	}
	}

	//星３面のくの字になって飛んでいく弾の関数のつもり。微妙に違うかな…
	//x		発射Ｘ座標
	//y		発射Ｙ座標
	//speed		初速度（0.1位が見栄えが良いかと）
	//maxspeed	最高速度
	//angle		発射角度
	//bullet	弾画像
	//delay		遅延時間

	function KunojiShot(x,y,speed,maxspeed,angle,bullet,delay){
	CreateShot02(x,y,speed,angle+1,0.285,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle+2,0.27,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle+3,0.255,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle+4,0.24,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle,0.3,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle-1,0.285,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle-2,0.27,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle-3,0.255,maxspeed,bullet,delay);
	CreateShot02(x,y,speed,angle-4,0.24,maxspeed,bullet,delay);
	}

	//一定時間で停止し、ｎWay弾に分裂する弾を放つ関数（雑魚用？引数…１６）
	//x		発射Ｘ座標
	//y		発射Ｙ座標
	//speed		発射初期速度
	//angle		発射角度
	//bullet	分裂前弾弾画像
	//delay		遅延時間
	//movetime	移動時間
	//（movetimeは減速の時間も含むためstoptotime以下には出来ません）
	//stoptotime	減速時間
	//stoptime	停止時間
	//spway		分裂弾Ｗａｙ数
	//spspeed	分裂弾初期速度
	//spfast	分裂弾加速度
	//spmaxspeed	分裂弾最高速度
	//spangle	分裂弾中心角度
	//spspan	分裂弾間隔角度（spwayが１の時は意味無し）
	//spbullet	分裂弾弾画像

	task SplitShot(x,y,speed,angle,bullet,delay,movetime,stoptotime,stoptime,spway,spspeed,spfast,spmaxspeed,spangle,spspan,spbullet){

	let obj		= Obj_Create(OBJ_SHOT);
	let fullspeed	= movetime - stoptotime;
	let Speed	= speed;
	let decspeed	= speed / stoptotime;
	let Angle	= spangle - spspan * (spway - 1) / 2;

	Obj_SetX(obj, x);
	Obj_SetY(obj, y);
	Obj_SetSpeed(obj, Speed);
	Obj_SetAngle(obj, angle);
	ObjShot_SetGraphic(obj, bullet);
	ObjShot_SetDelay(obj, delay);

	loop(fullspeed){yield;}
	loop(stoptotime){
	Speed-= decspeed;
	Obj_SetSpeed(obj, Speed);
	yield;}
	loop(stoptime){yield;}
	loop(spway){
	CreateShot02(Obj_GetX(obj),Obj_GetY(obj),spspeed,Angle,spfast,spmaxspeed,spbullet,0);
	Angle+= spspan;
	}
	yield;
	Obj_Delete(obj);
	}



task AliceDollsShotA(level){
}

task KeineShotA(level){
}