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

    SpellID=500;

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

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

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


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

task MainTask{
	DelayBombTask;
	let pattern;
	let subpattern;
	let timing=35;

	let flag=0;
	let past=[0,0,0];
	let current=0;
	let i2=0;
	let timelife=0;

	let attacks=0;

	CutIn2(3,"Dream [Multichromatic Trance]");

//	MainLaser(GetX,GetClipMinY,90);
//	Wait(600);

	let waitadd=10;
	loop{
		flag=0;
		while(flag==0){
			pattern=rand_int(0,4);
			flag=1;
			i2=0;
			loop(2){
				if(pattern==past[i2]){flag=0;}
				i2++;
			}
		}
		past[current%2]=pattern;
		current++;


		if(pattern==0){
			SetMovePositionNew(GetCenterX+RD,100+RD,60);
			Wait(100+waitadd);
			MainLaser(GetX,GetY,50);
			MainLaser(GetX,GetY,130);
			Wait(40);
			MainLaser(GetX,GetY,0);
			MainLaser(GetX,GetY,180);
			Wait(40);
			MainLaser(GetX,GetY,45);
			MainLaser(GetX,GetY,-45);
			MainLaser(GetX,GetY,135);
			MainLaser(GetX,GetY,-135);
			Wait(30);
		}
		if(pattern==1){
			SetMovePositionNew(GetCenterX-100+RD,100+RD,60);
			Wait(100+waitadd);
			i2=0;
			loop(6){
				MainLaser(GetX,GetY,0+i2*10);
				i2++;
				Wait(20-i2*2);
			}

		}
		if(pattern==2){
			SetMovePositionNew(GetCenterX+100+RD,100+RD,60);
			Wait(80+waitadd);
			i2=-4;
			loop(6){
				MainLaserQuiet(GetX,GetY,180+i2*10);
				i2++;
			}
			LaserSound2;
			Wait(60);
		}
		if(pattern==3){
			SetMovePositionNew(GetCenterX+rand(-50,50),100+rand(-20,20),60);
			Wait(100+waitadd);
			loop(8){
				MainLaser(GetX,GetY,-90+rand(-40,40));
				SetMovePositionNew(GetCenterX+rand(-10,10),100,10);
				Wait(14);
			}
		}
		if(pattern==4){
			SetMovePositionNew(GetCenterX,100+rand(-70,70),60);
			Wait(100+waitadd);
			loop(5){
				MainLaser(GetX,GetY,rand(-10,10));
				MainLaser(GetX,GetY,rand(-10,10)+180);
				SetMovePositionNew(GetCenterX,100+rand(-70,70),60);
				Wait(19);
			}
			Wait(30);
		}
	}
}

function RD{return rand(-10,10);}

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

	IddyeaDrawLogic;

	yield;
}

@DrawLoop {
	IddyeaDrawLoop;
}

@Finalize {
	IddyeaFinalize;
}
function MainLaser(x,y,a){
	LaserSound2;
	MainLaserTask(x,y,a);
}
function MainLaserQuiet(x,y,a){
	MainLaserTask(x,y,a);
}
task MainLaserTask(x,y,a){
	let graphicindex=rand_int(0,6);

	let obj=Obj_Create(OBJ_LASER);
	ObjLaser_SetSource(obj,false);
	Obj_SetAutoDelete(obj,false);
	Obj_SetSpeed(obj, 0);
	ObjShot_SetGraphic(obj, WHITE22);
	ObjShot_SetDelay(obj, 0);
	Obj_SetAngle(obj, a);
	ObjShot_SetBombResist(obj,true);
	ObjLaser_SetWidth(obj,10);														///////
	ObjLaser_SetLength(obj,0);
	Obj_SetPosition(obj,x,y);
	let l=0;
	let loopnum=0;
	let randlength=0;
	let endx=x+cos(a)*l;
	let endy=y+sin(a)*l;
	while(loopnum<60&&!OffScreen(endx,endy,10)&&!Obj_BeDeleted(obj)){
		l+=5;
		ObjLaser_SetLength(obj,l);
		loop(2){
			randlength=rand(l*0.2,l*0.8);
			AppearEffectAngle(x+cos(a)*randlength,y+sin(a)*randlength,a,10);
		}
		endx=x+cos(a)*l;
		endy=y+sin(a)*l;
		loopnum++;
		yield;
	}
	while(!OffScreen(endx,endy,10)&&!Obj_BeDeleted(obj)){
		x+=cos(a)*5;
		y+=sin(a)*5;
		Obj_SetPosition(obj,x,y);
		loop(3){
			randlength=rand(l*0.2,l*0.8);
			AppearEffectAngle(x+cos(a)*randlength,y+sin(a)*randlength,a,10);
		}
		endx=x+cos(a)*l;
		endy=y+sin(a)*l;
		yield;
	}
	let a2=90;
	let frame=0;
	let ladd=l/loopnum;
	LaserSound;
	loop(60){
		x+=cos(a)*5;
		y+=sin(a)*5;
		Obj_SetPosition(obj,x,y);
		l-=ladd;
		ObjLaser_SetLength(obj,l);
		loop(2){
			randlength=rand(l*0.2,l*0.8);
			AppearEffectAngle(x+cos(a)*randlength,y+sin(a)*randlength,a,10);
		}
		frame++;
		if(frame%9==0&&!Obj_BeDeleted(obj)){
			MainLaser2(ObjLaser_GetEndX(obj),ObjLaser_GetEndY(obj),3,a+a2,graphicindex%7);
			MainLaser2(ObjLaser_GetEndX(obj),ObjLaser_GetEndY(obj),3,a-a2,graphicindex%7);
//			MainLaser2(ObjLaser_GetEndX(obj),ObjLaser_GetEndY(obj),2,a+a2,graphicindex%7);
//			MainLaser2(ObjLaser_GetEndX(obj),ObjLaser_GetEndY(obj),2,a-a2,graphicindex%7);
			graphicindex++;
		}
		a2+=9.4/6;
		yield;
	}
	Obj_Delete(obj);
}
task MainLaser2(x,y,v,a,graphicindex){
	let obj=Obj_Create(OBJ_LASER);
	ObjLaser_SetSource(obj,false);
	Obj_SetAutoDelete(obj,false);
	Obj_SetSpeed(obj, 0);
	ObjShot_SetGraphic(obj, RED23+graphicindex);
	ObjShot_SetDelay(obj, 0);
	Obj_SetAngle(obj, a);
	ObjShot_SetBombResist(obj,true);
	ObjLaser_SetWidth(obj,10);
	ObjLaser_SetLength(obj,0);
	Obj_SetPosition(obj,x,y);
	let l=0;
	loop(30){
		l+=v;
		ObjLaser_SetLength(obj,l);
		yield;
	}
	v=v*0.7;
	while(!OffScreen(x,y,25)&&!Obj_BeDeleted(obj)){
		x+=cos(a)*v;
		y+=sin(a)*v;
		Obj_SetPosition(obj,x,y);
		yield;
	}
	Obj_Delete(obj);
}
}