script_enemy_main {
	#include_function ".\..\ShotSheet\shot_replace.dnh"
	#include_function ".\..\functions.txt"
	#include_function ".\..\s2\em_functions.txt"

	SpellID=32;

	let i=0;
	let frame=0;

    @Initialize {
	StartFunctions(1,0,0);
	Randomize;
        SetLife(2500);
        SetTimer2(35);
	SetDamageRate(100,100);
	SetBG(2);
	MagicCircle(false);
	SetEnemyMarker(true);
	EmpeghInit;
	SetInvincibility(100);
	EmpeghPushbackEffect;

	shotinit;

	CutIn2(1,"Disruption [Panic Wind]");
	SpellCircle2(3,1,4,250);

	MainTask;
    }

let globaltimer=0;

function Wait(frames){loop(frames){yield;}}

task MainTask{
	Move;
	DelayBombTask;
	Wait(100);
	let color=0;
	let i=0;
	let i2=0;
	let dir=1;
	loop{
		i=rand(0,360);
		i2=0.05;
		SE("guitar");
		loop(4){
			CreateExplosionFlatEX(3,GetX,GetY,1,RainbowArray(i,170,55),i2,60);
			CreateExplosionFlatEX(3,GetX,GetY,1,RainbowArray(i,100,0),i2,180);
			i+=360/4;
			i2+=0.03;
		}
		ExpandShot(GetX,GetY,rand_int(100,120),RED22,22,dir);
		dir=-dir;
		Wait(rand_int(120,150));
	}
}
task Move{
	Move2;
	Wait(80);
	let frame=0;
	loop(120){
		SetX(GetCenterX+50-(cos((frame/120)*180)*50));
		frame++;
		yield;
	}

	frame=90;
	loop{
		SetX(GetCenterX+sin(frame)*100);
		frame++;
		yield;
	}
}
task Move2{
	SetMovePositionNew(GetCenterX,140,80);
}

task ExpandShot(x,y,v,g,num,dir){
	let k=0;
	let target=GetClipMaxY;
	loop(num){
		CreateShot11B(x,y,(GetClipMinX-x),(target-y),g,0,v,k,0);
		target-=(GetClipMaxY-GetClipMinY)/num;
		k+=dir;
	}
	target=GetClipMinX;
	loop(num/2){
		CreateShot11B(x,y,(target-x),(GetClipMinY-y),g,0,v,k,0);
		target+=((GetClipMaxX-GetClipMinX)/num)*2;
		k+=dir*2;
	}
	target=GetClipMinY;
	loop(num+1){
		CreateShot11B(x,y,(GetClipMaxX-x),(target-y),g,0,v,k,0);
		target+=(GetClipMaxY-GetClipMinY)/num;
		k+=dir;
	}
//	target=GetClipMaxX;
//	loop(num){
//		CreateShot11B(x,y,(target-x),(GetClipMaxY-y),g,0,v,k,1);
//		target-=(GetClipMaxX-GetClipMinX)/num;
//		k++;
//	}

}
task CreateShot11B(x,y,xv,yv,g,d,time,id,dir){
//	time+=rand_int(0,20);
	xv/=time;
	yv/=time;
	let obj=Obj_Create(OBJ_SHOT);
	let deletetime=0;
	let matching=false;
	let bounces=0;
	ObjShot_SetGraphic(obj,g+trunc(globaltimer/10+id)%7);
	Obj_SetAngle(obj,atan2(yv,xv));
	let lastcolor=-1;
	while(deletetime<60){
		if(trunc(globaltimer/10+id/4)%7!=lastcolor){
			lastcolor=trunc(globaltimer/10+id/4)%7;
			ObjShot_SetGraphic(obj,g+lastcolor);
		}

		if(Obj_BeDeleted(obj)){deletetime++;}

		x+=xv;
		y+=yv;
		if(x<=GetClipMinX&&bounces<2){x+=(GetClipMinX-x)*2;xv=-xv;bounces++;Obj_SetAngle(obj,atan2(yv,xv));}
		if(x>=GetClipMaxX&&bounces<2){x+=(GetClipMaxX-x)*2;xv=-xv;bounces++;Obj_SetAngle(obj,atan2(yv,xv));}
		if(y<=GetClipMinY&&bounces<2){y+=(GetClipMinY-y)*2;yv=-yv;bounces++;Obj_SetAngle(obj,atan2(yv,xv));}

		Obj_SetPosition(obj,x,y);
		yield;
	}
	ObjShot_FadeDelete(obj);
}

    let speed=1;
    let framef=0;

    @MainLoop {
        SetCollisionA(GetX, GetY, 40);
	SetCollisionB(GetX, GetY, 20);

	globaltimer++;

	SetPlayerX(GetPlayerX+cos(GetAngleToPlayer)*speed);
	SetPlayerY(GetPlayerY+sin(GetAngleToPlayer)*speed);

	EmpeghDrawLogic;
	yield;
}
    @DrawLoop {
	EmpeghDrawLoop;
}

    @Finalize {
	EmpeghFinalize;
	EndingFunc(2);
	PointItems(GetX,GetY,2,1);
    }

}