
let DamageRate=100;
let BombDamageRate=100;

// w フレームだけ待つ
function wait(w) 
{
    loop(w) { yield; }
}

function WaitForZeroEnemy()//敵数が0になるまで待機する関数
{
	while(GetEnemyNum() != 0){yield;}
}

function MSDSetCollisionB(x,y,Radius)
{
	if(GetCommonData("BURSTLEVEL")==0)
	{
		if(GetDistanceToPlayer<=Radius && GetTimeOfPlayerInvincibility==0)
		{
			ItemSet(GetX,GetY,-1);
		}
	}
}

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

task OutDamageRateZero
{
let DamegeCoefficient=0;
//let SRange=GetCommonData("MagicAbsorbShortRange");
//let LRange=GetCommonData("MagicAbsorbLongRange");
let SRange=60;
let LRange=150;
loop
{
	if(GetX<GetClipMinX-16 || GetClipMaxX+16<GetX || GetY<GetClipMinY-16 || GetClipMaxY+16<GetY)
	{
		SetDamageRate(0,0);
	}
	else
	{
		if(GetDistanceToPlayer<=SRange)
		{
			DamegeCoefficient=1.2;
		}
		else if(GetDistanceToPlayer<=LRange)
		{
			DamegeCoefficient=1+0.2*(GetDistanceToPlayer-LRange)/(SRange-LRange);
		}
		else
		{
			DamegeCoefficient=1.0;
		}
		SetDamageRate(DamageRate*DamegeCoefficient,BombDamageRate);
	}

yield;
}
}

task GetDamege
{
MagicCircle(false);
GetDamegeItem;
loop
{
	if(GetHitCount!=0)
	{
		ZakoColor=[150,150,255];
		SetColor(150,150,255);
		wait(10);
	}
	else
	{
		ZakoColor=[255,255,255];
		SetColor(255,255,255);
	}
yield;
}
}

task GetDamegeItem
{
//let SRange=GetCommonData("MagicAbsorbShortRange");
let SRange=60;
loop
{
		if(GetHitCount!=0 && GetDistanceToPlayer<=SRange)
		{
			if(GetCommonData("BURSTLEVEL")==0)
			{
				loop(2)
				{
				ItemSet(GetX,GetY,2);
				}
			}
			if(GetCommonData("BURSTLEVEL")==3)
			{
				loop(2)
				{
				ItemSet(GetX,GetY,8);
				}
			}
		}
yield;
}
}

function FinalizeItemSet(num)
{
let type;
alternative(GetCommonData("BURSTLEVEL"))
case(0)
{
	type=3;
}
case(3)
{
	type=5;
}
		if(!BeVanished)
		{
		loop(num)
		{
			ItemSet(GetX,GetY,type);
			if(GetCommonData("MAGICCOUNTER")>=10000)
			{
				ItemSet(GetX,GetY,type);
			}
			if(GetDistanceToPlayer<=GetCommonData("MagicAbsorbShortRange"))
			{
				ItemSet(GetX,GetY,1);
			}
			if(GetDistanceToPlayer<=GetCommonData("MagicAbsorbLongRange"))
			{
				ItemSet(GetX,GetY,1);
			}
			if(GetCommonData("MAGICPOWER")>=1000)
			{
				ItemSet(GetX,GetY,1);
			}
			if(GetCommonDataDefault("SELECTEDDIFFICULT","None")=="Apocalypse")
			{
				ItemSet(GetX,GetY,9);
			}
		}
		}
}

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

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

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

sub SpellDrawStop
{
	SetCommonData("SpellDrawStop",true);
}

function MoveToPlayer02(xMove, yAdd, frame, left, top, right, bottom)
{
	let x;
	let y;

	if(GetPlayerX < GetX)
	{
		x = GetX - xMove;
		if(x < left)
		{
		x = GetX + xMove;
		}
	}
	else
	{
		x = GetX + xMove;
		if(right < x)
		{
			x = GetX - xMove;
		}
	}

	y = GetY + yAdd;
	if(y < top)
	{
		y = top;
	}
	else if(bottom < y)
	{
		y = bottom;
        }

        SetMovePosition02(x, y, frame);
	SetAction(ACT_MOVE,60);
}

function MoveToPlayer03(xMove, yAdd, weight,maxspeed, left, top, right, bottom)
{
	let x;
	let y;

	if(GetPlayerX < GetX)
	{
		x = GetX - xMove;
		if(x < left)
		{
		x = GetX + xMove;
		}
	}
	else
	{
		x = GetX + xMove;
		if(right < x)
		{
			x = GetX - xMove;
		}
	}

	y = GetY + yAdd;
	if(y < top)
	{
		y = top;
	}
	else if(bottom < y)
	{
		y = bottom;
        }

        SetMovePosition03(x, y, weight,maxspeed);
	SetAction(ACT_MOVE,60);
}


///////////////////////////////////////////////////////////////////////////////////////////
	let csd = GetCurrentScriptDirectory;
	let imgLetter =csd ~ "img/border.png"; 
	let BulletNum;
	let ZakoColor=[255,255,255];
	let ZakoMagicColor=[255,255,255];
////////////////////////////////////////////////////////////////////////////////////////////
task Concentration03(x,y,frame,R,G,B)
{
//Concentration03CircleEffect(frame,R,G,B);

if(frame<31){return;}
loop(frame-30)
{
	Concentration03Effect(x,y,R,G,B);
	Concentration03Effect(x,y,R,G,B);
	yield;
}

}

task Concentration03Effect(x,y,R,G,B)
{
		let Rudius=rand(100,250);
		let StandardRudius=Rudius;
		let Angle=rand(0,360);
		let RotateAngle=rand(2,10);
		let Zangle=rand(0,360);
		let dir=rand_int(0,1)*2-1;
		let MinScale=0.5;
		let Scale=rand(0.5,2.0);
		let StandardScale=Scale;
		let Alpha=40;

		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, GetCurrentScriptDirectory~"..\img/effect_tiny.png");
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj, ADD); 
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -15, -15);
		ObjEffect_SetVertexXY(obj, 1, 15,  -15);
		ObjEffect_SetVertexXY(obj, 2, 15, 15);
		ObjEffect_SetVertexXY(obj, 3,  -15,  15);
		
		ObjEffect_SetVertexUV(obj, 0,  2,  24);
		ObjEffect_SetVertexUV(obj, 1,  32, 24);
		ObjEffect_SetVertexUV(obj, 2, 32,  55);
		ObjEffect_SetVertexUV(obj, 3, 2, 55);
		ObjEffect_SetLayer(obj,4);
		ObjEffect_SetScale(obj, Scale,Scale);
		
		ObjEffect_SetVertexColor(obj,0,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,1,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,2,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,3,Alpha,R,G,B);

		Obj_SetPosition(obj,GetX+Rudius*cos(Angle),GetY+Rudius*sin(Angle));
		Obj_SetAngle(obj,Angle);

		ascent(let i in 0..30)
		{
			ObjEffect_SetVertexColor(obj,0,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,1,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,2,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,3,Alpha,R,G,B);
			Obj_SetPosition(obj,x+Rudius*cos(Angle),y+Rudius*sin(Angle));
			ObjEffect_SetAngle(obj,0,0,Zangle);
			ObjEffect_SetScale(obj, Scale+MinScale,Scale+MinScale);
			Rudius-=StandardRudius/35;
			Zangle+=RotateAngle*dir;
			Scale-=StandardScale/35;
			if(i>20)
			{
			Alpha-=4;
			}
			yield;
		}
		Obj_Delete(obj);
}

task Concentration03CircleEffect(let frame,R,G,B)
{
		let Scale=0.8;
		let StandardScale=Scale;
		let Alpha=80;

		let obj = Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj, csd~"..\img\CircleEffect.png");
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetRenderState(obj, ADD); 
		ObjEffect_CreateVertex(obj, 4);
		ObjEffect_SetVertexXY(obj, 0, -256, -256);
		ObjEffect_SetVertexXY(obj, 1, 256,  -256);
		ObjEffect_SetVertexXY(obj, 2, 256, 256);
		ObjEffect_SetVertexXY(obj, 3,  -256,  256);
		
		ObjEffect_SetVertexUV(obj, 0,  0,  0);
		ObjEffect_SetVertexUV(obj, 1,  48, 0);
		ObjEffect_SetVertexUV(obj, 2, 48,  48);
		ObjEffect_SetVertexUV(obj, 3, 0, 48);
		ObjEffect_SetLayer(obj,4);
		ObjEffect_SetScale(obj, Scale,Scale);
		
		ObjEffect_SetVertexColor(obj,0,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,1,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,2,Alpha,R,G,B);
		ObjEffect_SetVertexColor(obj,3,Alpha,R,G,B);

		Obj_SetPosition(obj,GetX,GetY);

		ascent(let i in 0..frame)
		{
			ObjEffect_SetVertexColor(obj,0,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,1,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,2,Alpha,R,G,B);
			ObjEffect_SetVertexColor(obj,3,Alpha,R,G,B);
			ObjEffect_SetScale(obj, Scale,Scale);
			Scale-=StandardScale/frame;
			yield;
		}
		Obj_Delete(obj);
}