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

	SpellID=29;

	let i=0;
	let frame=0;

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

	shotinit;

	CutIn2(1,"Noise [Echo Blaster]");
	SpellCircle2(3,1,4,250);

	MainTask;
    }


function Wait(frames){loop(frames){yield;}}
let colors=[RED56,ORANGE56,YELLOW56,GREEN56,AQUA56,BLUE56,PURPLE56];

let angles=[-999,-999,-999];

task MainTask{
	SetMovePositionNew(GetCenterX,GetCenterY,60);
	DelayBombTask;
	Wait(60);
	let a=0;
	let color=0;
	let a2=0;
	MainTask2;
	loop{
		angles=[-999,-999,-999];
		SE("shot3");
		BigWave(GetX,GetY,a+a2,color%7,240);
		angles[0]=a;
		if(CheckAngles(-a)){
			BigWave(GetX,GetY,-a+a2,color%7,240);
		}
		angles[1]=a;
		if(CheckAngles(a+180)){
			BigWave(GetX,GetY,a+180+a2,color%7,240);
		}
		angles[2]=a;
		if(CheckAngles(-a+180)){
			BigWave(GetX,GetY,-a+180+a2,color%7,240);
		}
		color++;
		a+=90/(240/60);
		a2+=1;
		Wait(60);
	}
}
task MainTask2{
	Wait(120);
	let angle=0;
	let k=0;
	loop{
		SE("shot1");
		OrbitShot(GetX,GetY,rand(60,90)*RandDir,GetAngleToPlayer+180,rand(50,upper(240,distance(GetX,GetY,GetPlayerX,GetPlayerY)^0.5)),RED02);
		Wait(15);
	}
}
task OrbitShot(x,y,v,a,d,g){

	let color=rand_int(0,6);
	DelayNew(x+cos(a)*d,y+sin(a)*d,0,70,30,g+color,20,50);
	Wait(20);
	v/=d;
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetAutoDelete(obj,false);
	let time=absolute(360/v);
	let frame=0;
	let lastcolor=0;
	while(!Obj_BeDeleted(obj)&&frame<time){
		if(frame%3==0){
			color++;
			ObjShot_SetGraphic(obj,g+color%7);
		}
		Obj_SetPosition(obj,x+cos(a)*d,y+sin(a)*d);
		a+=v;
		frame++;
		yield;
	}
	ObjShot_FadeDelete(obj);
}
function CheckAngles(a){
	a=Range360(a);
	let k=0;
	let ret=true;
	loop(3){
		if(angles[k]!=-999&&Range360(angles[k])==a){
			ret=false;
		}
		k++;
	}

	return ret;

	function Range360(a){
		while(a<0){a+=360;}
		while(a>=360){a-=360;}
		return a;
	}	
}
task BigWave(x,y,angle,color,turntime){
	let v=2;
	if(distance(GetPlayerX,GetPlayerY,GetX,GetY)^0.5>turntime){
		v=2.5;
	}
	Sound(x,y,v,angle,  20,35,3,RED56+color,8,turntime);
	Wait(4);
	Sound(x,y,v,angle+4,20,30,2,RED56+color,8,turntime);
	Sound(x,y,v,angle-4,20,30,2,RED56+color,8,turntime);
	Wait(4);
	Sound(x,y,v,angle+8,20,30,1,RED56+color,8,turntime);
	Sound(x,y,v,angle-8,20,30,1,RED56+color,8,turntime);
}
task Sound(x,y,v,a,l,w,s,g,d,turntime){
	let widthadd=(w/s);
	loop(s){
		MainShot(x,y,v,a,l,w,g,turntime);
		w-=widthadd;
		Wait(d);
	}
}

    let speed=1.2;

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

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


	EmpeghDrawLogic;
	yield;
}
    @DrawLoop {
	EmpeghDrawLoop;
}

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


task MainShot(x,y,v,a,l,w,g,turntime){
    let obj = Obj_Create(OBJ_LASER);
    let frame=0;
    let timer=0;
    let bounces=0;

    // initial settings
    Obj_SetPosition   (obj, x,y);
    Obj_SetSpeed      (obj, v);
    ObjShot_SetGraphic(obj, g);
    ObjShot_SetDelay  (obj, 10);
    Obj_SetAngle(obj, a);
    ObjLaser_SetSource(obj,false);
    ObjLaser_SetWidth(obj,w);
    ObjLaser_SetLength(obj,l);
    ObjShot_SetBombResist(obj,false);
    Obj_SetAutoDelete(obj,false);

    let vadd=v/turntime;
    let turned=0;
    let xoffset=cos(a)*l*0.5;
    let yoffset=sin(a)*l*0.5;
    while(! Obj_BeDeleted(obj)&&frame<=turntime*2) {
	x+=cos(a)*v;
	y+=sin(a)*v;
	v-=vadd;
	if(v<=0&&turned==0){
		Obj_SetAngle(obj,a+180);
		xoffset=cos(a+180)*l*0.5;
		yoffset=sin(a+180)*l*0.5;
		turned=1;
	}

	frame++;

	Obj_SetPosition(obj,x-xoffset,y-yoffset);
        yield;
    }
    Obj_Delete(obj);

}
}