script_enemy_main {
    let GCSD=GetCurrentScriptDirectory;
    #include_function ".\..\ShotSheet\shot_replace.dnh"
    #include_function ".\..\functions.txt"
    #include_function ".\patchy_functions.txt"

    SpellID=515;

    @Initialize {
        SetLife(4100);
        SetTimer2(60);
	SetDamageRate(80,40);
	MagicCircle(false);
	SetEnemyMarker(true);
	PatchyInit;
	MainTask;
	shotinit;

	CutIn2(7,"Sun and Moon [Royal Eclipse]");
	SpellCircle2(6,1,4,200);
	SetBG(21);
	SetShotAutoDeleteClip(10,10,10,10);
    }

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

let moonobj=-1;
let moonx=-1;
let moony=-1;

task MainTask{
	SetMovePositionNew(GetCenterX,GetCenterY,60);
	DelayBombTaskNoShoot;
	yield;
	let obj=[0,0];
	obj[0]=PatchyElement(5,GetCenterX-60,GetCenterY-40,20,7, 170,120);
	obj[1]=PatchyElement(6,GetCenterX+60,GetCenterY-40,20,7, 170,120);
	ObjEffect_SetLayer(obj[0],2);
	ObjEffect_SetLayer(obj[1],2);
	Wait(120);
	Moon(GetCenterX,230,2,rand(0,360));
	BigSun(GetCenterX,100,6000);
	Wait(70);
	let angle=0;
	let v=1.5;
	let color=0;
	let angle=0;
	let dist=0;
	let k=0;
	let i=0;
	let frame=0;
	let angle2=0;
	let numrand=rand_int(100,300);
//	loop{yield;}
	loop{
		loop(numrand){
			angle++;
			angle2+=5;
			dist=sin(frame*3)*200;
			frame++;
		}

		if(numrand>1){
			loop(7){
				k=0;
				loop(3){
					CreateExplosionEX(0,GetX+cos(angle+k)*dist,GetY+sin(angle+k)*dist,1,[150,255,255],0.2,20);
					k+=120;
				}
				Wait(7);
			}
		}

		numrand=1;

		k=0;
		loop(3){
			i=0;
			loop(3){
				MainShot(GetX+cos(angle+k)*dist,GetY+sin(angle+k)*dist,1,angle2+i+(frame%2)*180,WHITE50,rand(3,7));
				i+=120;
			}
			CreateExplosionEX(0,GetX+cos(angle+k)*dist,GetY+sin(angle+k)*dist,1,[150,255,255],0.2,20);
			k+=120;
		}
		SE("shot1");

		Wait(7);
	}
}
task MainShot(x,y,v,a,g,d){
	SetShotColor(200,200,200);

	let obj1=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj1,g);
	Obj_SetPosition(obj1,x,y);
	Obj_SetAngle(obj1,a);
	Obj_SetSpeed(obj1,v);

	SetShotColor(0,255,255);
	let obj2=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj2,g);
	Obj_SetPosition(obj2,x,y);
	Obj_SetAngle(obj2,a);
	Obj_SetSpeed(obj2,v);
	SetShotColor(255,255,255);
	Obj_SetCollisionToPlayer(obj2,false);
	ObjShot_ToItem(obj2,false);
	Obj_SetAutoDelete(obj2,false);
	let frame=0;
	let alpha;
	while(!Obj_BeDeleted(obj1)){
		if(frame%3==0){
			alpha=sin(frame*d)*0.5+0.5;
			alpha*=255;
			Obj_SetAlpha(obj1,255-alpha);
			Obj_SetAlpha(obj2,alpha);
		}
		frame++;
		yield;
	}
	ObjShot_FadeDelete(obj2);
}

task BigSun(centerx,centery,time){
	SE("nuke4");
	let frame=0;

	let obj=InitEffect(0,0,imgPatchy,4,ADD,7);
	ObjEffect_SetXYRect(obj,-64,-64,64,64);
	ObjEffect_SetUVRect(obj,384,0,512,128);

	let obj2=InitEffect(0,0,imgPatchy,4,ADD,7);
	ObjEffect_SetXYRect(obj2,-64,-64,64,64);
	ObjEffect_SetUVRect(obj2,384,128,512,256);


	let objeclipse=InitEffect(0,0,imgWhite,4,SUBTRACT,6);
	ObjEffect_SetUVRect(objeclipse,0,0,10,10);
	Obj_SetAutoDelete(objeclipse,false);
	ObjEffect_SetPrimitiveType(objeclipse,PRIMITIVE_TRIANGLESTRIP);

//	yield;
//	let objblack=InitEffect(0,0,imgPatchy,4,ALPHA,7);
//	ObjEffect_SetXYRect(objblack,-64,-64,64,64);
//	ObjEffect_SetUVRect(objblack,384-128,128+128,512-128,256+128);


	let angle;
	let dist;
/*
	loop(40){
		angle=rand(0,360);
		dist=rand(0,10);
		NewCharge_XY(centerx+cos(angle)*dist,centery+sin(angle)*dist,15,frame,1,255,255,255);
		frame+=20/40;
		Wait(2);
	}
*/
	loop(10){
		angle=rand(0,360);
		dist=rand(0,60);
		CreateExplosionEX(0,centerx+cos(angle)*dist,centery+sin(angle)*dist,1,[rand(100,200),rand(100,200),rand(100,200)],rand(0.1,0.8),rand(30,120));
	}
	frame=0;

	let scale;
	let x;
	let y;
	let x2;
	let y2;

	let alpha=-0.9;

	loop{
		alpha=lower(alpha+0.02,1);
		x=centerx+sin(frame)*50+sin(frame*0.364)*50;
		y=centery+sin(frame*1.23)*30+sin(frame*1.634)*30;
		Obj_SetPosition(obj,x,y);
		Obj_SetPosition(obj2,x,y);

		scale=sin(frame*8)*0.20+0.20;
		scale=scale+1.2;
		ObjEffect_SetScale(obj,scale,scale);
		ObjEffect_SetAngle(obj,0,0,rand(0,360));
		Obj_SetColor(obj,4,255,255,sin(frame*6)*100+155,sin(frame*6)*100+155);

		ObjEffect_SetAngle(obj2,0,0,rand(0,360));

		//Obj_SetPosition(objblack,moonx,moony);


		NewCharge_XY(x,y,2,rand(3,8),3,255,255,sin(frame*6)*80+175);

		if(moonobj>-1){
			if(frame%2==0){
				Obj_SetColor(objeclipse,4,255*alpha,50+rand(0,50)+(trunc(frame/4)%2)*100+55,255,255);
			}

			x2=moonx;
			y2=moony;

			if(distance(x,y,x2,y2)<20*20){
				ObjEffect_SetScale(obj,scale,scale);
				ObjEffect_SetVertexXY(objeclipse,0,0,0);
				ObjEffect_SetVertexXY(objeclipse,1,0,600);
				ObjEffect_SetVertexXY(objeclipse,2,430,0);
				ObjEffect_SetVertexXY(objeclipse,3,430,600);
				
			}else{
				//angle=atan2(y2-y,x2-x);

				//ObjEffect_SetAngle(objblack,0,0,angle-90);
				//Obj_SetColor(objblack,4,center(50,255-distance(x,y,x2,y2)^0.5,255),255,255,255);

				x2+=cos(angle+90)*27;
				y2+=sin(angle+90)*27;
				angle=atan2(y2-y,x2-x);	//angle to right side

				ObjEffect_SetVertexXY(objeclipse,0,x2,y2);
				ObjEffect_SetVertexXY(objeclipse,1,x2+cos(angle)*800,y2+sin(angle)*800);

				x2=moonx;
				y2=moony;
				angle=atan2(y2-y,x2-x);

				x2+=cos(angle-90)*27;
				y2+=sin(angle-90)*27;
				angle=atan2(y2-y,x2-x);	//angle to left side

				ObjEffect_SetVertexXY(objeclipse,2,x2,y2);
				ObjEffect_SetVertexXY(objeclipse,3,x2+cos(angle)*800,y2+sin(angle)*800);
			}

		}

		if(frame%43==0&&frame>100){
			SE("shot2");
			x2=rand(0,360);
			loop(20){
				SunShot(x,y,rand(1.5,2),x2,YELLOW02,RED01,45,0);
				x2+=360/20;
			}
		}

		frame++;
		yield;
	}
}

task Moon(centerx,centery,v,angle){
	yield;
	let obj=InitEffect(0,0,imgPatchy,4,ALPHA,6);
	let orbitpercent=1;

//	moonarray=moonarray~[obj];
	moonobj=obj;

	ObjEffect_SetXYRect(obj,-64,-64,64,64);
	ObjEffect_SetUVRect(obj,384,128+128,512,256+128);

	let x;
	let y;
	let orbitx;
	let orbity;
	let frame=rand_int(0,1000);
	let alpha=0;
	let orbitframe=0;

	while(!Obj_BeDeleted(obj)){
		if(alpha<1){
			alpha+=1/60;
			Obj_SetColor(obj,4,alpha*255,255,255,255)
		}
		ObjEffect_SetAngle(obj,0,0,frame);
		x=centerx+sin(frame*-1.2452)*50+sin(frame*0.724)*50;
		y=centery+sin(frame*-1.431)*20+sin(frame*-0.238)*20;
		if(orbitframe<220){
			orbitx=GetCenterX+70+cos(orbitframe-90)*130;
			orbity=100+sin(orbitframe-90)*130;
			orbitframe+=2;
			orbitpercent=cos(orbitframe*(180/220))*0.5+0.5;
			x+=(orbitx-x)*orbitpercent;
			y+=(orbity-y)*orbitpercent;
		}
		Obj_SetPosition(obj,x,y);
		moonx=x;
		moony=y;
		x+=cos(angle)*v;
		y+=sin(angle)*v;
		frame++;
		yield;
	}
//	let k=0;
//	while(moonarray[obj]!=k){
//		k++;
//	}
//	moonarray=erase(moonarray,k);
}
@MainLoop {
        SetCollisionA(GetX, GetY, 40);
	SetCollisionB(GetX, GetY, 20);


	PatchyDrawLogic;

	yield;
}

@DrawLoop {
	PatchyDrawLoop;
}

@Finalize {
	EndingFunc(6);
	PatchyFinalize;
	SetShotAutoDeleteClip(64,64,64,64);
	PointItems(GetX,GetY,7,1);
}

}