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

	SpellID=43;

	let i=0;
	let frame=0;
	let position=-1;
	let moving=1;

    @Initialize {
	StartFunctions(1,0,0);
	Randomize;
        SetLife(4000);
        SetTimer2(35);
	SetDamageRate(100,100);
	SetBG(3);
	MagicCircle(false);
	SetEnemyMarker(true);
	OverInit;
	SetInvincibility(100);
	SpellCircle2(3,1,10,200);

	shotinit;

	CutIn2(2,"Trap [Wavering Disk]");

	MainTask;
	HandleShots(10);
    }


function Wait(frames){loop(frames){yield;}}
let colors=[AQUA50,WHITE50,BLUE50,WHITE50];
//let colors=[BLUE50,WHITE50,AQUA50];
//let colors=[YELLOW03,WHITE03,BLUE03,WHITE03];

	let armangle=0;

task MainTask{
	SetMovePosition03(GetCenterX,GetCenterY-150,10,5);
	DelayBombTask;
	let i=0;
	let angle=0;
	Wait(100);
	moving=0;
	FireLazer;
	let angle2=0;
	loop{
		angle=GetAngleToPlayer;
		angle2=prand(0,360);
		FireShots(angle2);
		FireShots(angle2+180);
		Wait(5);
		MagnetShot(GetX,GetY,1,angle+20,225, 300,-0.1);
		MagnetShot(GetX,GetY,1,angle-20,225, 300,0.1);
		Wait(200);
		angle=GetAngleToPlayer;
		angle2=prand(0,360);
		FireShots(angle2);
		FireShots(angle2+180);
		Wait(5);
		MagnetShot(GetX,GetY,1,angle+20,225, 300,0.1);
		MagnetShot(GetX,GetY,1,angle-20,225, 300,-0.1);
		Wait(200);
	}
}
function FireShots(angle){
	let xp=GetPlayerX+cos(angle)*40;
	let yp=GetPlayerY+sin(angle)*40;
	let k=0;
	let i=0;
	angle=0;
	let angleadd=prand(0,90);
	loop(8){
		loop(4){
			angle=k*90-i*(360/60);
			NormalShotDelay(xp+cos(angle+angleadd)*120,yp+sin(angle+angleadd)*120,0,0,colors[prand_int(0,3)],10,2,true);
			if(i>0){//prevent overlapping shots
				angle=k*90+i*(360/60);
				NormalShotDelay(xp+cos(angle+angleadd)*120,yp+sin(angle+angleadd)*120,0,0,colors[prand_int(0,3)],15,2,true);
			}
			k++;
		}
		SE("shot1");
		yield;
		yield;
		i++;
	}
}
let lazercolor=[WHITE54,YELLOW54];
task FireLazer{
	let offset=0;
	loop{
		offset=prand_int(0,70);
		CreateLaser01(GetClipMinX+offset,GetClipMinY,5,90,200,10,lazercolor[offset%2],0);
		CreateLaser01(GetClipMaxX-offset,GetClipMinY,5,90,200,10,lazercolor[offset%2],0);
		Wait(10);
	}
}
task Move(offset){
	if(position!=offset&&moving==0){
		moving=1;
		position=offset;
		let x=(300/40);
		let i=0;
		loop(20){
			SetY(GetCenterY-(300-(20-i)*x)*offset);
			i++;
			yield;
		}
		armposc=[[-1,-1],[-1,-1]];
		SetY(GetCenterY+300*offset);
		SetMovePosition03(GetCenterX,GetCenterY+150*offset,20,5);
		Wait(20);
		moving=0;
	}
}



    let speed=1.8;
    let framef=0;

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

	if(GetPlayerY<GetCenterY-30&&!OnBomb){
		Move(1);
	}
	if(GetPlayerY>GetCenterY+30&&!OnBomb){
		Move(-1);
	}

	OverloadDrawLogic;
	yield;
}
    @DrawLoop {
	OverloadDrawLoop;
}

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

task NormalShotDelay(x,y,v,a,g,d,d2,vulnerability){
	DelayEffect(x,y,g,d);
	Wait(d-d2);
	NormalShot(x,y,v,a,g,vulnerability);
}
}