e
#Title[f́udep[hv]
#Text[]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

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

	@Initialize
	{
		StartPlural();

		SetLife(800);
		StartSetting(50, 1000000, "f́udep[hv");
		SetInvincibility(210);

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

		LoadGraphic(img_mystia);

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

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

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

	@Finalize
	{
		if( GotSpellCardBonus() ){
			SetCommonData("mid_item", 1);
		}
		CreateItemCircle(GetX(), GetY(), 20, 50);
		DeleteGraphic(img_mystia);
		DeleteSE(se_shot1);
		DeleteSE(se_shot2);
		ClearBG();
	}

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

	task T_Main()
	{
		yield;

		SetAction(ACT_SPELL, 60);

		Wait(210);

		T_Shot();
	}

	function MoveAct()
	{
		let x;
		let y;
		let direction = 0;

		if( GetX() < GetClipMinX() + 120 ){
			direction = 1;
		}
		else if( GetX() > GetClipMaxX() - 120 ){
			direction = -1;
		}
		else if( GetX() < GetPlayerX() ){
			direction = 1;
		}
		else{
			direction = -1;
		}
		x = GetX() + direction * rand(70, 140);
		if( x < GetClipMinX() + 64 ){
			x = GetClipMinX() + 64;
		}
		else if( x > GetClipMaxX() - 64 ){
			x = GetClipMaxX() - 64;
		}
		y = GetY();
		SetAction(ACT_MOVE, 30);
		SetMovePositionDC(x, y, 30);
	}

	task T_Shot()
	{
		let k = 1;

		loop{
			let angle = GetAngleToPlayer();
			PlaySE(se_shot1);
			ascent( let i in 0..18 ){
				CreateBirdShot(GetX(), GetY(), angle + i * 360 / 18, k, [1, 6][(k + 1) / 2]);
			}
			k = -k;
			Wait(120);
			MoveAct();
			Wait(120);
		}
	}

	task CreateBirdShot(x, y, angle, k, f)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, x, y);
		Obj_SetSpeed(obj, 2.5);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, 130 + f);

		Wait(15);
		loop(3){
			if( !Obj_BeDeleted(obj) ){
				PlaySE(se_shot1);
				CreateBombShot(Obj_GetX(obj), Obj_GetY(obj), angle + 180, k, f);
			}
			Wait(15);
		}
	}

	task CreateBombShot(x, y, angle, k, f)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, x, y);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, 45);
		Wait(60);

		if( !Obj_BeDeleted(obj) ){
			PlaySE(se_shot2);
			ascent( let i in 0..11 ){
				CreateShot01(x, y, 0.9 + (i - 5) * k * 0.08, angle + (i - 5) * 17, [100 + f, 8][i % 2], 0);
			}
			Obj_Delete(obj);
		}
	}

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