e
#Title[􉽁uEӂ̕⏕v]
#Text[]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

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

	let bit_d_angle = 0;

	@Initialize
	{
		SetLife(800);
		StartSetting(50, 1000000, "􉽁uEӂ̕⏕v");
		SetInvincibility(240);
		SetExMode();
		SetHitState(0);

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

		LoadGraphic(img_range);

		LoadUserShotData(shot_00);
		SetShotAutoDeleteClip(128, 128, 128, 128);

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

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

	@Finalize
	{
		CreateItemCircle(GetX(), GetY(), 20, 50);
		DeleteGraphic(img_range);
		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_Circle();
	}

	task T_Circle()
	{
		PlaySE(se_shot1);
		SetAction(ACT_SHOT_B, 120);
		ascent( let i in 0..36 ){
			CreateFrameShot(GetX(), GetY(), -90 - i * 10, 120 - i * 3, i % 3 == 0);
			PlaySE(se_shot1);
			Wait(3);
		}
		Wait(30);
		SetAction(ACT_MOVE, 30);
		SetMovePosition02(GetCenterX(), GetClipMinY() + 80, 30);
		loop{
			bit_d_angle = rand(-2.45, -2.05);
			Wait(120);
		}
	}

	task CreateFrameShot(x, y, angle, wait, f_shot)
	{
		let obj = Obj_Create(OBJ_SHOT);

		let r = 210;
		let tx = GetCenterX() + r * cos(angle);
		let ty = GetCenterY() + r * sin(angle);
		let t_angle = atan2(ty - y, tx - x);
		let v = hypot(ty - y, tx - x) * 2 / 120;
		let a = -v / 120;
		v += a / 2;

		Obj_SetPosition(obj, tx, ty);
		Obj_SetAngle(obj, t_angle);
		ObjShot_SetGraphic(obj, [198, 197][f_shot]);
		ObjShot_SetBombResist(obj, true);
		Obj_SetAutoDelete(obj, false);
		ObjShot_SetDelay(obj, 20);

		Wait(60);

		Obj_SetAngle(obj, angle);
		Wait(wait);
		let d_angle = 0;
		let count = 0;
		loop{
			Obj_SetPosition(obj, GetCenterX() + r * cos(angle), GetCenterY() + r * sin(angle));
			Obj_SetAngle(obj, angle);
			angle += d_angle;
			let l_count = count % 210;
			if( l_count == 0 ){
				d_angle = bit_d_angle;
				PlaySE(se_shot2);
				SetAction(ACT_SHOT_B, 120);
			}
			if( l_count < 60 && count % 2 == 0 ){
				if( f_shot ){
					let sx = Obj_GetX(obj);
					let sy = Obj_GetY(obj);
					CreateShot01(sx, sy, 3.0, angle - 10, 8, 0);
					CreateShot01(sx, sy, 3.0, angle + 10, 8, 0);
				}
			}
			if( l_count == 60 ){
				if( f_shot ){
					let sx = Obj_GetX(obj);
					let sy = Obj_GetY(obj);
					CreateNormalLaser(sx, sy, GetSnipeAngle(sx, sy));
				}
				d_angle = 0;
			}
			count ++;
			yield;
		}
	}

	task CreateNormalLaser(x, y, angle)
	{
		let obj = Obj_Create(OBJ_LASER);

		Obj_SetPosition(obj, x, y);
		Obj_SetAngle(obj, angle);
		ObjLaser_SetWidth(obj, 32);
		ObjLaser_SetSource(obj, false);
		ObjShot_SetGraphic(obj, 227);

		PlaySE(se_shot1);
		let len = 0;
		loop(60){
			len += 1.0;
			ObjLaser_SetLength(obj, len);
			yield;
		}
		PlaySE(se_shot1);
		loop(60){
			len += 12.0;
			ObjLaser_SetLength(obj, len);
			yield;
		}
		while( !Obj_BeDeleted(obj) ){
			Obj_SetPosition(obj, x, y);
			x += 12.0 * cos(angle);
			y += 12.0 * sin(angle);
			yield;
		}
	}

	task FrameShot_ShotTask(obj)
	{
		Wait(30);
		loop{
			let x = Obj_GetX(obj);
			let y = Obj_GetY(obj);
			CreateShot01(x, y, 2.0, GetSnipeAngle(x, y), 207, 0);
			Wait(120);
		}
	}

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