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

	SpellID=63;

    @Initialize {
	StartFunctions(1,0,0);
	Randomize;
        SetLife(3000);
        SetTimer2(45);
	SetDamageRate(0,0);
	MagicCircle(false);
	SetEnemyMarker(true);
	YukariInit;

	shotinit;

	MainTask;
    }

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

task MainTask{
	SetMovePosition03(GetCenterX,160,10,5);
	Wait(30);
	WaitEvent(30);
	while(EventActive){yield;}
	let i=0;
	let i2=0;
	let angle=0;
	let speed=[2.9,2.1,1.2];
	let graphic=[RED31,PURPLE31,BLUE31];
	let totalangle=0;
	SetShotAutoDeleteClip(20,20,20,20);
	loop(47){
		i2=2;
		loop(3){
			i=0;
			loop(3){
				CreateShot02(GetX,GetY,5,i+angle-90+totalangle,-0.12,speed[i2],graphic[i2],0);
				CreateShot02(GetX,GetY,5,i-angle-90+totalangle,-0.12,speed[i2],graphic[i2],0);
				i+=360/3;
			}
			i2--;
		}
		angle+=rand(5.5,6.5);
		totalangle++;
		if(totalangle%2==0){
			SE("shot1");
		}
		Wait(4);
	}
	ShotSounds;
	ClearBullets(80,120);
	SetDamageRate(80,80);
	SetBG(5);
	CutIn2(5,"Arcanum [Border of Vision]");
	SpellCircle2(6,1,4,250);

	MainTask2;
	let dir=1;
	graphic=[YELLOW21,PURPLE21,GREEN21];
	let graphic2=[YELLOW56,PURPLE56,GREEN56];
	i=0;
	let delay;
	loop{
		Wave(GetCenterX+200*dir,GetClipMinY,dir,graphic[i%3],graphic2[i%3],i-1);
		dir=-dir;
		i++;
		delay=0;
		while(delay<100){
			delay+=1-Percentage*0.45; //(130+Percentage*90)/1000;
			yield;
		}
	}
}
function Percentage{
	return lower(GetLife/3000,GetTimer2/45);
}
task MainTask2{
	SetMovePosition03(GetCenterX,100,10,5);
	Wait(60);
	let denominatoooor=500;
	loop{
		SetX(GetX+(GetPlayerX-GetX)/denominatoooor);
		denominatoooor-=1;
		if(denominatoooor<80){
			denominatoooor=80;
		}
		yield;
	}
}
task Wave(x,y,dir,graphic,graphic2,id){
	let angle=0;
	angle=90+dir*90;
	let anglechanges=0;
	let num=0;
	let size=180;
	while(anglechanges<3){
		while((x<GetClipMaxX&&angle==0)||(x>GetClipMinX&&angle==180)||(y<GetClipMaxY&&angle==90)||(y>GetClipMinY&&angle==270)){
			WavePart(x,y,angle+90*dir,60,size,graphic,graphic2,num+id);
			x+=10*cos(angle);
			y+=10*sin(angle);
			if(id>=0){	//don't shoot with the first wave
				num++;
			}
			Wait(3);
		}
		angle-=90*dir;
		while(angle<0){angle+=360;}
		while(angle>=360){angle-=360;}
		anglechanges++;
		if(anglechanges==2){
			size=140;
		}
	}
}
task WavePart(x,y,angle,time,size,graphic,graphic2,num){
	let obj2=Obj_Create(OBJ_LASER);
	ObjShot_SetGraphic(obj2,WHITE60);
	Obj_SetAngle(obj2,angle);
	ObjLaser_SetWidth(obj2,20);
	Obj_SetAutoDelete(obj2,false);
	ObjLaser_SetSource(obj2,false);
	Obj_SetAlpha(obj2,0);	//hitbox only
	ObjShot_ToItem(obj2,false);
	ObjShot_SetBombResist(obj2,true);
	let size2=size*0.7;
	size*=rand(0.8,1);


	let obj=Obj_Create(OBJ_LASER);
	ObjShot_SetGraphic(obj,graphic);
	Obj_SetAngle(obj,angle+rand(-2,2));
	ObjLaser_SetWidth(obj,rand(16,18));
	Obj_SetAutoDelete(obj,false);
	ObjLaser_SetSource(obj,false);
	Obj_SetAlpha(obj,255);
	Obj_SetCollisionToPlayer(obj,false);
	ObjShot_ToItem(obj,false);
	ObjShot_SetBombResist(obj,true);

	let xv=cos(angle);
	let yv=sin(angle);
	let len;
	let frame=0;

	angle+=180+rand(-5,5);
	let xv2=cos(angle);
	let yv2=sin(angle);

	let shotdelay=rand_int(0,time/2);

	loop(time){
		if(frame>shotdelay&&num%4==0&&shotdelay>-1&&size>150){
			SE("shot1");
			CreateShotA(0,x,y,0);
			SetShotDataA_XY(0,0,xv2*2.5,yv2*2.5,xv/110,yv/110,-xv2*2.5,-yv2*2.5,graphic2);
			FireShot(0);
			shotdelay=-1;
		}
		len=sin(frame*(180/time));
		ObjLaser_SetLength(obj,len*size*2);
		Obj_SetPosition(obj,x-xv*len*size,y-yv*len*size);
		ObjLaser_SetLength(obj2,len*size2*2);
		Obj_SetPosition(obj2,x-xv*len*size2,y-yv*len*size2);

		frame++;
		yield;
	}
	Obj_Delete(obj);
	Obj_Delete(obj2);
}

task ShotSounds{
	SE("shot2");
	SE("shot3");
	let delay=0;
	loop{
		SE("exattack");
		while(delay<5){
			delay+=1-Percentage*0.5; //(130+Percentage*90)/1000;
			yield;
		}
		delay-=5;
	}
}


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

	yield;
	YukariDrawLogic;
}

    @DrawLoop {
	YukariDrawLoop;	
}


    @Finalize {
	YukariFinalize;
	EndingFunc(3);
	PointItems(GetX,GetY,3,0);
	SetShotAutoDeleteClip(64,64,64,64);
    }

}