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

    SpellID=510;

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


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

task MainTask{
	DelayBombTask;
	yield;
	PatchyElement(0,GetCenterX,90,20,9, 170,180);
	SetMovePositionNew(GetCenterX,150,60);
	Wait(60);

	let angle=0;
	let dir=RandDir;
	loop{
		SE("shot2");
		angle=0;
		while(angle<360){
			SE("shot1");
			//MainShot(angle*-dir-90,-dir,1);
			BlockShot(angle*dir-90,dir);
			MainShot(angle*-dir-90,dir,2,1);
			MainShot(angle*-dir-90,-dir,3,-1);
			CreateExplosionEX(0,GetX,GetY,1,[255,180,50],rand(0.3,0.5),rand(5,10));
			yield;
			angle+=rand(2,10);
		}
		dir=-dir;
		Wait(40);
	}
}
task MainShot(angle,dir,v,offset){
	let x=GetX+cos(angle)*5-18*offset;
	let y=GetY+sin(angle)*5+14;
	let obj=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj,SP01);
	Obj_SetPosition(obj,x,y);

	let obj2=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj2,WHITE21);
	Obj_SetPosition(obj2,x,y);
	LinkShot(obj,obj2);

	let frame=0;
	loop(60){
		Obj_SetAngle(obj,angle);
		Obj_SetAngle(obj2,angle);
		angle+=dir*3;
		Obj_SetSpeed(obj, v*(cos(frame*(90/60)+90)+2) );
		Obj_SetSpeed(obj2, v*(cos(frame*(90/60)+90)+2) );
		frame++;
		yield;
	}
	let accel=(v*rand(-0.5,0.2))/60;
	loop(60){
		Obj_SetSpeed(obj,v);
		Obj_SetSpeed(obj2,v);
		v+=accel;
		yield;
	}
}
task BlockShot(angle,dir){
	let x=GetX+cos(angle)*15;
	let y=GetY+sin(angle)*15;
	let obj=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj,SP01);
	Obj_SetPosition(obj,x,y);
	Obj_SetAngle(obj,angle);
	let v=rand(4,5);
	let vadd=v/30;
	loop(60){
		Obj_SetSpeed(obj,v);
		v-=vadd;
		yield;
	}
	Obj_SetSpeed(obj,2);
	ObjShot_FadeDelete(obj);
}

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


	PatchyDrawLogic;

	yield;
}

@DrawLoop {
	PatchyDrawLoop;
}

@Finalize {
	EndingFunc(6);
	PatchyFinalize;
	PointItems(GetX,GetY,7,0);

}

}