script_enemy_main {
	#include_function ".\..\ShotSheet\shot_replace.dnh"
	#include_function ".\..\functions.txt"
	#include_function ".\..\s3\y_functions.txt"

	SpellID=74;

	let i=0;
	let frame=0;

    @Initialize {
	StartFunctions(1,0,0);
	Randomize;
        SetLife(3000);
        SetTimer2(45);
	DamageRateScale(20,20,100,100,900);
	MagicCircle(false);
	SetEnemyMarker(true);
	SetBG(5);
	YukariInit;

	shotinit;

	CutIn2(5,"Demon Eyes [Omnipresence]");
	SpellCircle2(6,1,4,250);
	SetShotAutoDeleteClip(80,80,80,80);

	MainTask;
    }


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

task MainTask{
	MainTask2;
	DelayBombTask;
	Wait(60);
	let i=0;
	let maxy=300;
	loop{
		i=0;
		loop(18){
			Eye(rand(GetClipMinX,GetClipMaxX),rand(50,maxy),i*2,120);
			i++;
		}
		maxy=lower(maxy+90,GetClipMaxY-10);
		Wait(300);
	}
}
task MainTask2{
	let angle=0;
	let angle2=0;
	let i=0;
	PrepareBarrier(15);
	let x=GetCenterX;
	let y=150;
	loop{
		SetMovePositionNew(x,y,120);
		loop(rand_int(3,5)){
			Wait(100);
			loop(2){
				CreateExplosionEX(3,GetX,GetY,0.1,[rand(100,255),rand(0,100),rand(0,100)],rand(0.05,0.15),rand(30,110));
				CreateExplosionEX(3,GetX,GetY,0.1,[rand(100,255),rand(0,100),rand(100,255)],rand(0.2,0.3),rand(20,50));
				CreateExplosionFlatEX(3,GetX,GetY,0.1,[rand(100,255),rand(0,100),rand(0,100)],rand(0.05,0.15),rand(30,110));
				CreateExplosionFlatEX(3,GetX,GetY,0.1,[rand(100,255),rand(0,100),rand(100,255)],rand(0.2,0.3),rand(20,50));
			}
			QuadrupleBarrier(GetX,GetY,1,rand(0,90),SP00,PURPLE11,BLUE01,30,6,30);
		}
		x+=rand(-100,100);
		y+=rand(-40,40);
		x=center(GetClipMinX+50,x,GetClipMaxX-50);
		y=center(80,y,180);
	}
}
let angles=[];
let vels=[];
let barriershots=0;
function PrepareBarrier(num){
	//sets the number of shots to use per side for Quadruple Barrier
	angles=[];
	vels=[];
	barriershots=num;
	let k=0;
	let i=-1;
	loop(num){
		angles=angles~[atan2(1,i)];
		vels=vels~[distance(0,0,i,1)^0.5];
		i+=(2/num);
		k++;
	}
}
task QuadrupleBarrier(x,y,v,angle,graphic1,graphic2,graphic3,slowdowntime,initialspeed,accel){
	let k=0;
	let i=barriershots-1;
	let dist=(0.5)*(initialspeed)*slowdowntime;
	let cornerdist=distance(0,0,dist,dist)^0.5;
	dist=cornerdist;
	let transformframe=ceil(slowdowntime/((barriershots/2)))-1;
	let abspos=0;
	slowdowntime++;
	loop(barriershots){
		k=0;
		abspos=absolute(i-(barriershots/2));
		loop(8){
			CreateShotA(0,x,y,0);
			SetShotDataA(0,0,                      vels[i]*initialspeed,angles[i]+k+angle,0,-(vels[i]*initialspeed)/slowdowntime,0,        graphic1);
			SetShotDataA(0,abspos*transformframe+1,NULL,                NULL,             0,-(vels[i]*initialspeed)/slowdowntime,0,        graphic2);
			SetShotDataA(0,slowdowntime,           0,                   NULL,             0,(vels[i]*v)/accel,                   vels[i]*v,NULL);
			SetShotDataA(0,slowdowntime+transformframe*abspos+1,NULL,   NULL,             0,(vels[i]*v)/accel,                   vels[i]*v,graphic3);

			if(Detail(2,1,0)+(i%2)>=2){
				AddShotDelay(0,abspos*transformframe+1,graphic2,15);
				AddShotDelay(0,slowdowntime+transformframe*abspos+1,graphic3,15);
			}

			FireShot(0);
			k+=45;
		}
		i--;
	}
//	Wait(slowdowntime);
//	loop(8){
//		Line(x+cos(k+angle+45)*dist,y+sin(k+angle+45)*dist,x+cos(k+angle+135)*dist,y+sin(k+angle+135)*dist,   4,255,50,7,ADD,[255,150,150]);
//		k+=45;
//	}
}
let eyecheck=0;
task Eye(x,y,delay,firedelay){
	Wait(delay);

	if(Detail(true,true,false)){
		CreateExplosionFlatEX(3,x,y,0.5,[255,100,255],0.02,60);
	}

	let obj1=InitEffect(round(x),round(y),imgYukari1,4,ALPHA,3);
	ObjEffect_SetXYRect(obj1,-16,-16,16,16);
	ObjEffect_SetUVRect(obj1,0,152,32,184);
	let obj2=InitEffect(round(x),round(y),imgYukari1,4,ALPHA,3);
	ObjEffect_SetXYRect(obj2,-16,-16,16,16);
	ObjEffect_SetUVRect(obj2,32,152,64,184);
	let scale=0;
	loop(10){
		scale+=1/10;
		ObjEffect_SetScale(obj1,1,scale);
		ObjEffect_SetScale(obj2,1,scale);
		AdjustEye(obj2,x,y,scale);
		yield;
	}
	loop(firedelay-delay){
		AdjustEye(obj2,x,y,1);
		frame++;
		yield;
	}
	let k=0;
	loop(3){
		DelayNew(x,y,rand(0,360),50,30,SP05,60,20);
		k++;
	}
	scale=1;
	loop(20){
		ObjEffect_SetScale(obj1,1,scale);
		ObjEffect_SetScale(obj2,1,scale);
		AdjustEye(obj2,x,y,scale);
		scale-=1/20;
		yield;
	}
	Obj_Delete(obj1);
	Obj_Delete(obj2);
	Wait(40);
	k=1;
	loop(1){
		CreateShot02(x,y,0,atan2(GetPlayerY-y,GetPlayerX-x),(1.5+k/3)/60,1.5+k/3,SP05,0);
		k++;
	}
}
function AdjustEye(obj,x,y,scale){
	eyecheck++;
	if(eyecheck%5==0){
		x+=center(-2,(GetPlayerX-x)/40,2);
		y+=center(-2,(GetPlayerY-y)/40,2)*scale;
		Obj_SetPosition(obj,x,y);
	}

}

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

	YukariDrawLogic;
	eyecheck++;
	yield;
}
    @DrawLoop {
	YukariDrawLoop;
}

    @Finalize {
	YukariFinalize;
	PointItems(GetX,GetY,3,1);
	EndingFunc(3);
    }
}