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

    SpellID=501;

    @Initialize {
	Randomize;
        SetLife(2500);
        SetTimer2(57);
	SetDamageRate(80,40);
	MagicCircle(false);
	SetEnemyMarker(true);
	IddyeaInit;
	MainTask;
	shotinit;

	StartFunctions(1,0,0);
	SetBG(20);

	SpellCircle2(6,1,4,200);
    }


let v=3;
let globaltimer=0;


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

task MainTask{
	DelayBombTask;
	CutIn2(3,"Dream [Multichromatic Trance]");


	let angle=rand(0,360);
	let angle2=rand(0,360);
	let color=0;
	let frame=rand_int(1000,2000);
	let ydiff=GetClipMaxY-GetClipMinY;

	SetMovePositionNew(GetCenterX,200,60);
	Wait(60);

	MoveTask;
	let dir=RandDir;
	loop{
		//MainShot(GetX,GetY,angle*-dir+angle2,dir,color%7);

		if(color%3==0){
			BubbleDrift(rand(GetClipMinX,GetClipMaxX),GetClipMinY-40,rand(0,360),2.5,1);
			SE("shot1");
		}

		MainShot2(GetCenterX-200*dir,frame*8%ydiff+GetClipMinY,1.5+sin(frame*5)*0.5,dir);
		MainShot2(GetCenterX-200*dir,frame*6%ydiff+GetClipMinY,1.5+sin(frame*7)*0.5,dir);

		angle+=100;
		angle2+=0.1;
		frame+=4;
		color++;
		Wait(6);
	}
}
task MoveTask{
	loop{
		MoveRandom(100,50, GetClipMinX+50,50,GetClipMaxX-50,200, 70, 200);
		Wait(330);
	}
}

task BubbleDrift(x,y,xphase,yv1,yv2){
	let coloroffset=[0,2,3,4,5,6];

	let obj=Obj_Create(OBJ_SHOT);
	let obj2=Obj_Create(OBJ_SHOT);
	ObjShot_ToItem(obj2,false);
	ObjShot_SetBombResist(obj2,true);
	Obj_SetCollisionToPlayer(obj2,false);

	ObjShot_SetGraphic(obj,RED03);
	ObjShot_SetGraphic(obj2,RED03);

	let sinx;
	let alpha=1;


	let frame=0;
	let deletedframes=0;

	while(deletedframes<80){
		if(Obj_BeDeleted(obj)){
			if(deletedframes==0){
				ObjShot_FadeDelete(obj2);
			}
			deletedframes++;
		}
		frame=(globaltimer-y/10)/10;
//		frame=globaltimer/60;

		ObjShot_SetGraphic(obj, RED03+trunc(frame+5)%7);
		ObjShot_SetGraphic(obj2,RED03+trunc(frame+5+6)%7);

		alpha=frame%1;

		sinx=x+sin(xphase)*50;
		Obj_SetPosition(obj,sinx,y);
		Obj_SetPosition(obj2,sinx,y);
		Obj_SetAlpha(obj,alpha*255);
		Obj_SetAlpha(obj2,255-alpha*255);
		xphase+=1;
		y+=yv1;
		yv1+=(yv2-yv1)/120;
		yield;
	}
	ObjShot_FadeDelete(obj2);
}

task MainShot(x,y,angle,dir,color){
	let dist=0;
	let obj=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj,RED02+color);
	Obj_SetAutoDelete(obj,false);
	let alpha=0;
	while(dist<300&&!Obj_BeDeleted(obj)){
		if(alpha<255){
			Obj_SetAlpha(obj,alpha);
			alpha+=5;
		}
		dist+=1;
		angle+=0.1*dir;
		Obj_SetPosition(obj,x+cos(angle)*dist,y+sin(angle)*dist);
		yield;
	}
	Obj_Delete(obj);
}

task MainShot2(x,y,v,dir){
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetAngle(obj,(dir-1)*90);
	Obj_SetSpeed(obj,v);

	let obj2=Obj_Create(OBJ_LASER);
	Obj_SetAutoDelete(obj2,false);
	Obj_SetAngle(obj2,(dir-1)*90);
	ObjShot_SetBombResist(obj2,true);
	Obj_SetCollisionToPlayer(obj2,false);
	ObjShot_ToItem(obj2,false);
	ObjLaser_SetSource(obj2,false);
	HandleObjI(obj,obj2,v,dir);


}
task HandleObjI(obj,obj2,v,dir){
	let size;
	let frame=globaltimer-Obj_GetY(obj)/10;
	let frame2=frame%10;

	ObjShot_SetGraphic(obj,RED21+trunc(frame/10)%7);
	ObjShot_SetGraphic(obj2,RED56+trunc(frame/10+5)%7);

	while(!Obj_BeDeleted(obj)){
		frame++;
		frame2++;

		if(frame2>=10){
			ObjShot_SetGraphic(obj,RED21+trunc(frame/10)%7);
			ObjShot_SetGraphic(obj2,RED56+trunc(frame/10+5)%7);
			frame2-=10;
		}


		size=sin(frame*4.5)*3+29;
		Obj_SetPosition(obj2,Obj_GetX(obj)-size/2*dir+(v*dir*2),Obj_GetY(obj));
		ObjLaser_SetWidth(obj2,size);
		ObjLaser_SetLength(obj2,size);
		yield;
	}
	ObjShot_FadeDelete(obj2);
}


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

	IddyeaDrawLogic;

	globaltimer++;

	yield;
}

@DrawLoop {
	IddyeaDrawLoop;
}

@Finalize {
	EndingFunc(6);
	IddyeaFinalize;
	PointItems(GetX,GetY,7,1);
}

}