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

	SpellID=26;

	let i=0;
	let frame=0;

    @Initialize {
	StartFunctions(1,1,0);
	Randomize;
        SetLife(1500);
        SetTimer2(25);
	SetDamageRate(100,100);
	MagicCircle(false);
	SetEnemyMarker(true);
	EmpeghInit;

	shotinit;
	SetShotAutoDeleteClip(20,20,20,20);

	MainTask;
    }

let globaltimer=0;
let beatnum=0;
let beattime=0;

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

task MainTask{
	SetMovePositionNew(GetCenterX,GetCenterY-50,60);
	WaitEvent(10);
	DelayBombTask;
	Wait(60);
	while(EventActive){
		yield;
	}
	let a=0;
	let color=0;
	let i=0;
	let dir=1;
	loop{
		SE("shot2");
		ExpandShot(GetX+rand(-150,150),GetY+rand(-100,100),rand(120,140),RED01,RED50,color%7,8,dir);
		color++;
		dir=-dir;
		Wait(20);
	}
}
task ExpandShot(x,y,v,g,g2,color,num,dir){
	let xtarget=rand(0,192/num)*RandDir;
	let colorarr=RainbowArray(color*(360/7),170,85);
	g+=color;
	g2+=color;
	NewChargeShrink_XY(x,y,30,10,0.5,colorarr[0],colorarr[1],colorarr[2]);
	Wait(30);
	CreateExplosionEX(0,x,y,1,colorarr,0.2,40);
	let k=rand_int(0,3)+100;
	let target=GetClipMinX;
	loop(num){
		CreateShot11B(x,y,(target+xtarget-x),(GetClipMinY-y),g,g2,0,v,k%4,1);
		target+=(GetClipMaxX-GetClipMinX)/num;
		k+=dir;
	}
	target=GetClipMinY;
	loop(num){
		CreateShot11B(x,y,(GetClipMaxX+xtarget-x),(target-y),g,g2,0,v,k%4,0);
		target+=(GetClipMaxY-GetClipMinY)/num;
		k+=dir;
	}
	target=GetClipMaxX;
	loop(num){
		CreateShot11B(x,y,(target+xtarget-x),(GetClipMaxY-y),g,g2,0,v,k%4,1);
		target-=(GetClipMaxX-GetClipMinX)/num;
		k+=dir;
	}
	target=GetClipMaxY;
	loop(num){
		CreateShot11B(x,y,(GetClipMinX+xtarget-x),(target-y),g,g2,0,v,k%4,0);
		target-=(GetClipMaxY-GetClipMinY)/num;
		k+=dir;
	}

}
task CreateShot11B(x,y,xv,yv,g,g2,d,time,id,dir){
	time+=rand_int(0,20);
	xv/=time;
	yv/=time;
	let obj=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj,g);

	let obj2;

	let deletetime=0;
	let matching=false;
	while(deletetime<60){
		if(Obj_BeDeleted(obj)){deletetime++;}

		Obj_SetPosition(obj,x,y);
		if(beatnum==(id+3)%4&&beattime>0.8&&!matching){
			obj2=Obj_Create(OBJ_LASER);
			ObjShot_SetGraphic(obj2,g2);
			Obj_SetAngle(obj2,dir*90);
			ObjLaser_SetSource(obj2,false);
			ObjLaser_SetLength(obj2,40);
			ObjLaser_SetWidth(obj2,40);
			LinkShot(obj,obj2);
			matching=true;
		}else if(beatnum==id&&matching){
			Obj_SetAlpha(obj2,lower((1-beattime)*400,255));
			Obj_SetPosition(obj2,x-20*(1-dir),y-20*dir);
		}else if(beatnum!=id&&beatnum!=(id+3)%4&&matching){
			matching=false;
			Obj_Delete(obj2);
		}
		x+=xv;
		y+=yv;
		yield;
	}
	ObjShot_FadeDelete(obj);
}

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

	if(GetCommonDataDefault("BeatNum",-1)!=-1){

		beatnum=GetCommonDataDefault("BeatNum",-1);
		beattime=GetCommonDataDefault("BeatTime",-1);

	}else{

		beattime+=1/22;
		if(beattime>=1){
			beattime--;
			beatnum++;
			if(beatnum>3){
				beatnum=0;
			}
		}
	}
	yield;
	EmpeghDrawLogic;
}


    @DrawLoop {
	EmpeghDrawLoop;	
}


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

}