e
#Title[]uOEIuETTv]
#Text[]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main
{
	#include_function ".\init.txt"
	#include_function ".\lib\lib_anime_Range.txt"

	@Initialize
	{
		SetLife(1000);
		StartSetting(65, 1000000, "]uOEIuETTv");
		SetInvincibility(300);
		SetExMode();
		SetHitState(0);

		InitPosition(GetCenterX(), GetClipMinY() + 130);

		LoadGraphic(img_range);
		LoadGraphic(img_magic);

		LoadUserShotData(shot_00);
		SetShotAutoDeleteClip(64, 64, 64, 64);

		InitializeAction();
		InitializeBG();
		DeleteEnemyShot(ALL);
		LoadSE(se_shot1);
		LoadSE(se_shot2);

		T_Main();
		T_DamageRate(20, 0, 360, -1);
		T_HitTest(48);
	}

	@Finalize
	{
		CreateItemCircle(GetX(), GetY(), 20, 50);
		DeleteGraphic(img_range);
		DeleteGraphic(img_magic);
		DeleteSE(se_shot1);
		DeleteSE(se_shot2);
		ClearBG();
	}

	@DrawLoop
	{
		SetAlpha([255, 128][IsExMode() && OnBomb()]);
		DrawBoss(img_range);
	}

	task T_Main()
	{
		yield;

		SetAction(ACT_SPELL, 60);

		Wait(120);
		SetHitState(1);

		T_Laser();
		T_Circle();
	}

	task T_Laser()
	{
		PlaySE(se_shot2);
		SetAction(ACT_SHOT_B, 60);
		CreateEnemyFromScript("magic", GetX(), GetY(), 0, 0, [GetClipMinX(), GetClipMinY(),  90, GetClipMaxY() - GetClipMinY()]);
		CreateEnemyFromScript("magic", GetX(), GetY(), 0, 0, [GetClipMinX(), GetClipMaxY(),   0, GetClipMaxX() - GetClipMinX()]);
		CreateEnemyFromScript("magic", GetX(), GetY(), 0, 0, [GetClipMaxX(), GetClipMaxY(), -90, GetClipMaxY() - GetClipMinY()]);
		CreateEnemyFromScript("magic", GetX(), GetY(), 0, 0, [GetClipMaxX(), GetClipMinY(), 180, GetClipMaxX() - GetClipMinX()]);
	}

	task T_Circle()
	{
		Wait(120);
		loop{
			PlaySE(se_shot1);
			SetAction(ACT_SHOT_B, 60);
			let angle = rand(0, 360);
			ascent( let i in 0..45 ){
				CreateLoopShot(GetX(), GetY(), 1.0, angle + i * 360 / 45);
			}
			Wait(300);
			SetAction(ACT_MOVE, 60);
			MoveActA(GetClipMinY() + 100, GetClipMinY() + 160);
			Wait(60);
		}
	}

	task CreateLoopShot(sx, sy, v, angle)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, sx, sy);
		Obj_SetSpeed(obj, v);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, 206);

		let r = 0;
		let d = 4;
		while( !Obj_BeDeleted(obj) ){
			let x = sx + r * cos(angle);
			let y = sy + r * sin(angle);

			r += v;
			angle += -1.3 * 180.0 / (3.14159 * max(r, 20));
			Obj_SetAngle(obj, angle);

			if( x < GetClipMinX() - d ){
				x += GetClipMaxX() - GetClipMinX() + d * 2;
			}
			else if( x > GetClipMaxX() + d ){
				x -= GetClipMaxX() - GetClipMinX() + d * 2;
			}
			if( y < GetClipMinY() - d ){
				y += GetClipMaxY() - GetClipMinY() + d * 2;
			}
			else if( y > GetClipMaxY() + d ){
				y -= GetClipMaxY() - GetClipMinY() + d * 2;
			}
			Obj_SetPosition(obj, x, y);
			yield;
		}
	}

	#include_function ".\f_base.txt"
	#include_function ".\f_enemy.txt"
	#include_function ".\f_boss.txt"
	#include_function ".\f_bg_range.txt"
}

script_enemy magic
{
	#include_function ".\init.txt"

	let arg;
	let rot = 0;
	let ini_x;

	@Initialize
	{
		SetLife(500);
		SetHitState(0);

		ini_x = GetX();
		arg = GetArgument();

		T_Main();
	}

	@Finalize
	{
	}

	@DrawLoop
	{
		SetTexture(img_magic);
		SetGraphicRect(64, 64, 128, 128);
		SetAlpha(128);
		SetGraphicAngle(0, 0, rot);
		DrawGraphic(GetX(), GetY());
		SetGraphicAngle(0, 0, 0);
	}

	task T_Main()
	{
		yield;

		T_Move();
		T_Laser();

		loop{
			rot += 2;
			yield;
		}
	}

	task T_Move()
	{
		let x = GetX();
		let y = GetY();
		let tx = arg[0];
		let ty = arg[1];
		let v = hypot(ty - GetY(), tx - GetX()) / 45;
		let angle = atan2(ty - GetY(), tx - GetX());
		let a = -v / 90;
		v += a / 2;

		loop(90){
			x += v * cos(angle);
			y += v * sin(angle);
			v += a;
			SetX(x);
			SetY(y);
			yield;
		}
	}

	task T_Laser()
	{
		let obj = Obj_Create(OBJ_LASER);

		ObjLaser_SetWidth(obj, 30);
		ObjShot_SetGraphic(obj, 186);
		ObjShot_SetDelay(obj, 90);

		ascent( let i in 0..91 ){
			Obj_SetPosition(obj, GetX(), GetY());
			Obj_SetAngle(obj, arg[2]);
			ObjLaser_SetLength(obj, arg[3] * (1 - (arg[0] - GetX()) / (arg[0] - ini_x)));
			yield;
		}
	}

	#include_function ".\f_base.txt"
	#include_function ".\f_enemy.txt"
}
