#e
#Title[u[hANZ[Vv]
#Text[WtE Last Word]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

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

	@Initialize
	{
		SetLife(1300);
		StartSetting(99, 1000000, "u[hANZ[Vv");
		SetInvincibility(300);
		SetHitState(0);

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

		LoadGraphic(img_range);

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

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

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

	@Finalize
	{
		DeleteGraphic(img_range);
		DeleteSE(se_shot1);
		DeleteSE(se_shot2);
		DeleteSE(se_shot4);
		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()
	{
		CreateCircle(GetX(), GetY(), 0.1,  1, 14);
		Wait(180);
		CreateCircle(GetX(), GetY(), 0.15, -1, 13);
		Wait(160);
		CreateCircle(GetX(), GetY(), 0.2,  1, 14);
		Wait(140);
		CreateCircle(GetX(), GetY(), 0.25, -1, 13);
		Wait(120);
		CreateCircle(GetX(), GetY(), 0.3,  1, 14);
		Wait(100);
		CreateCircle(GetX(), GetY(), 0.35, -1, 13);
		Wait(80);
		loop{
			CreateCircle(GetX(), GetY(), 0.4,  1, 14);
			Wait(60);
			if( GetLife() < 450 ){
				break;
			}
			CreateCircle(GetX(), GetY(), 0.4, -1, 13);
			Wait(60);
			if( GetLife() < 450 ){
				break;
			}
		}
		loop{
			CreateCircle(GetX(), GetY(), 0.4,  1, 14);
			Wait(40);
			CreateCircle(GetX(), GetY(), 0.2, 1 - 2 * rand_int(0, 1), 26);
			Wait(40);
			CreateCircle(GetX(), GetY(), 0.4, -1, 13);
			Wait(40);
		}
	}

	task CreateCircle(cx, cy, db, k, type)
	{
		PlaySE(se_shot2);

		let obj = [];
		let n = 36;
		let wh_rate = 0.8;

		ascent( let i in 0..n ){
			obj = obj ~ [Obj_Create(OBJ_SHOT)];
			ObjShot_SetGraphic(obj[i], type);
		}

		let r = 0;
		let dr = 2.0;
		let b_angle = rand(0, 360);
		let c_angle = rand(0, 360);
		let i_angle = 360 / n;
		let dc_angle = 1.0 * k;
		let db_angle = db * k;

		loop{
			c_angle += dc_angle;
			b_angle += db_angle;
			r += dr;

			let rw = r;
			let rh = r * wh_rate;
			let x;
			let y;
			let f_exit = 1;

			ascent( let i in 0..n ){
				if( !Obj_BeDeleted(obj[i]) ){
					f_exit = 0;
					x = rw * cos(b_angle + i * i_angle);
					y = rh * sin(b_angle + i * i_angle);
					Obj_SetPosition(obj[i], cx + GetRotateX(x, y, c_angle), cy + GetRotateY(x, y, c_angle));
				}
			}
			if( f_exit ){
				break;
			}
			yield;
		}
	}

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