function N_way(way,speed,angle,pitch,dspeed,lspeed,type,delay)
{
angle=angle-pitch*(way-1)/2;
loop(way)
	{
	CreateShot02(GetX,GetY,speed,angle,dspeed,lspeed,type,delay);
	angle=angle+pitch;
	}
}

function N_around(way,speed,angle,dspeed,lspeed,type,delay)
{
loop(way)
	{
	CreateShot02(GetX,GetY,speed,angle,dspeed,lspeed,type,delay);
	angle=angle+(360/way);
	}
}

function pattern(pat)
{
SetGraphicRect(0+32*pat,0,32+32*pat,40);
}

task Twing
{
Tmagic;
let ang=0;
loop
	{
	Teffect(ang);
	Teffect((ang+20)%160);
	loop(8){yield;}
	ang=(ang+20)%160;
	}
}

task Teffect(ang)
{
MagicCircle(false);
LoadGraphic(GC~".\wing.png");
let lw=Obj_Create(OBJ_EFFECT);
ObjEffect_SetTexture(lw,GC~".\wing.png");
ObjEffect_SetPrimitiveType(lw,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(lw,4);
ObjEffect_SetVertexXY(lw,0,-90,-40);
ObjEffect_SetVertexXY(lw,1,-10,-40);
ObjEffect_SetVertexXY(lw,2,-90,40);
ObjEffect_SetVertexXY(lw,3,-10,40);
ObjEffect_SetVertexUV(lw,0,0,0);
ObjEffect_SetVertexUV(lw,1,64,0);
ObjEffect_SetVertexUV(lw,2,0,64);
ObjEffect_SetVertexUV(lw,3,64,64);
ObjEffect_SetLayer(lw,1);
ObjEffect_SetRenderState(lw,ADD);
let rw=Obj_Create(OBJ_EFFECT);
ObjEffect_SetTexture(rw,GC~".\wing.png");
ObjEffect_SetPrimitiveType(rw,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(rw,4);
ObjEffect_SetVertexXY(rw,0,10,-40);
ObjEffect_SetVertexXY(rw,1,90,-40);
ObjEffect_SetVertexXY(rw,2,10,40);
ObjEffect_SetVertexXY(rw,3,90,40);
ObjEffect_SetVertexUV(rw,0,64,0);
ObjEffect_SetVertexUV(rw,1,0,0);
ObjEffect_SetVertexUV(rw,2,64,64);
ObjEffect_SetVertexUV(rw,3,0,64);
ObjEffect_SetLayer(rw,1);
ObjEffect_SetRenderState(rw,ADD);
loop(1)
	{
	let alpha=230;
	loop(23)
		{
		ObjEffect_SetAngle(lw,0,0,60-ang+alpha/20);
		ObjEffect_SetAngle(rw,0,0,-60+ang-alpha/20);
		Obj_SetPosition(lw,GetX,GetY);
		Obj_SetPosition(rw,GetX,GetY);
		if(OnBomb==false||OnEnemySpell==false)
			{
			ObjEffect_SetVertexColor(lw,0,alpha,255,255,255);
			ObjEffect_SetVertexColor(lw,1,alpha,255,255,255);
			ObjEffect_SetVertexColor(lw,2,alpha,255,255,255);
			ObjEffect_SetVertexColor(lw,3,alpha,255,255,255);
			ObjEffect_SetVertexColor(rw,0,alpha,255,255,255);
			ObjEffect_SetVertexColor(rw,1,alpha,255,255,255);
			ObjEffect_SetVertexColor(rw,2,alpha,255,255,255);
			ObjEffect_SetVertexColor(rw,3,alpha,255,255,255);
			}
		else
			{
			ObjEffect_SetVertexColor(lw,0,0,255,255,255);
			ObjEffect_SetVertexColor(lw,1,0,255,255,255);
			ObjEffect_SetVertexColor(lw,2,0,255,255,255);
			ObjEffect_SetVertexColor(lw,3,0,255,255,255);
			ObjEffect_SetVertexColor(rw,0,0,255,255,255);
			ObjEffect_SetVertexColor(rw,1,0,255,255,255);
			ObjEffect_SetVertexColor(rw,2,0,255,255,255);
			ObjEffect_SetVertexColor(rw,3,0,255,255,255);
			}
		yield;
		alpha=alpha-10;
		}
	}
Obj_Delete(lw);
Obj_Delete(rw);
}

task Tmagic
{
LoadGraphic(GC~".\magic.png");
let mg=Obj_Create(OBJ_EFFECT);
ObjEffect_SetTexture(mg,GC~".\magic.png");
ObjEffect_SetPrimitiveType(mg,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(mg,4);
ObjEffect_SetVertexXY(mg,0,-60,-60);
ObjEffect_SetVertexXY(mg,1,60,-60);
ObjEffect_SetVertexXY(mg,2,-60,60);
ObjEffect_SetVertexXY(mg,3,60,60);
ObjEffect_SetVertexUV(mg,0,0,0);
ObjEffect_SetVertexUV(mg,1,74,0);
ObjEffect_SetVertexUV(mg,2,0,74);
ObjEffect_SetVertexUV(mg,3,74,74);
ObjEffect_SetLayer(mg,1);
ObjEffect_SetScale(mg,1.2,1.2);
ObjEffect_SetRenderState(mg,ADD);
let angle=0;
loop
	{
	ObjEffect_SetAngle(mg,0,0,angle);
	Obj_SetPosition(mg,GetX,GetY);
	angle=angle+1;
	yield;
	}
}

task Tbat
{
let bat=Obj_Create(OBJ_EFFECT);
LoadGraphic(GC~".\bat.png");
ObjEffect_SetTexture(bat,GC~".\bat.png");
ObjEffect_SetPrimitiveType(bat,PRIMITIVE_TRIANGLESTRIP);
ObjEffect_CreateVertex(bat,4);
ObjEffect_SetVertexXY(bat,0,-16,-16);
ObjEffect_SetVertexXY(bat,1,16,-16);
ObjEffect_SetVertexXY(bat,2,-16,16);
ObjEffect_SetVertexXY(bat,3,16,16);
ObjEffect_SetVertexUV(bat,0,0,0);
ObjEffect_SetVertexUV(bat,1,32,0);
ObjEffect_SetVertexUV(bat,2,0,32);
ObjEffect_SetVertexUV(bat,3,32,32);
let pat=0;
let alpha=255;
loop
	{
	if(OnBomb==true&&OnEnemySpell==true){alpha=255;}
	else{alpha=0;}
	pat=(pat+1)%18;
	ObjEffect_SetVertexUV(bat,0,0,0+32*trunc(pat/6));
	ObjEffect_SetVertexUV(bat,1,32,0+32*trunc(pat/6));
	ObjEffect_SetVertexUV(bat,2,0,32+32*trunc(pat/6));
	ObjEffect_SetVertexUV(bat,3,32,32+32*trunc(pat/6));
	ObjEffect_SetVertexColor(bat,0,alpha,255,255,255);
	ObjEffect_SetVertexColor(bat,1,alpha,255,255,255);
	ObjEffect_SetVertexColor(bat,2,alpha,255,255,255);
	ObjEffect_SetVertexColor(bat,3,alpha,255,255,255);
	Obj_SetPosition(bat,GetX,GetY);
	yield;
	}
}