e
#Title[ru܁EE܂̎Odv]
#Text[]
#BackGround[DEFAULT]
#Player[FREE]
#ScriptVersion[2]

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

	@Initialize
	{
		SetLife(800);
		StartSetting(65, 1000000, "ru܁EE܂̎Odv");
		SetInvincibility(120);
		SetExMode();
		SetHitState(0);

		InitPosition(GetCenterX(), GetCenterY());

		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, 660, -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_Shot();
	}

	task T_Shot()
	{
		let wait = 420;
		let k = 0;
		loop{
			SetAction(ACT_SHOT_A, 60);
			PlaySE(se_shot1);
			SetAction(ACT_SHOT_B, 240);
			let angle = GetAngleToPlayer();
			ascent( let i in 0..5 ){
				if( k == 0 ){
					CreateCircleShotA(GetX(), GetY(), angle, 192, 43, 58);
				}
				else{
					CreateCircleShotA(GetX(), GetY(), angle, 195, 44, 58);
				}
				angle += 360 / 5;
			}
			k = 1 - k;
			Wait(wait);
		}
	}

	task CreateCircleShotA(x, y, angle, type1, type2, type3)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, x, y);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, type1);

		let v = 4.0;
		let a = -v / 90;
		loop(90){
			v += a;
			Obj_SetSpeed(obj, v);
			yield;
		}

		if( !Obj_BeDeleted(obj) ){
			x = Obj_GetX(obj);
			y = Obj_GetY(obj);
			PlaySE(se_shot2);
			ascent( let i in 0..7 ){
				CreateCircleShotB(x, y, angle + i * 360 / 7, type2, type3);
			}
			Wait(60 + 60 + 60);
			let v = 0;
			let a = 1.8 / 120;
			Obj_SetAngle(obj, GetSnipeAngle(x, y));
			loop(120){
				v += a;
				Obj_SetSpeed(obj, v);
				yield;
			}
		}
	}

	task CreateCircleShotB(x, y, angle, type2, type3)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, x, y);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, type2);

		let v = 2.6;
		let a = -v / 60;
		loop(60){
			v += a;
			Obj_SetSpeed(obj, v);
			yield;
		}

		if( !Obj_BeDeleted(obj) ){
			x = Obj_GetX(obj);
			y = Obj_GetY(obj);
			PlaySE(se_shot2);
			ascent( let i in 0..5 ){
				CreateCircleShotC(x, y, angle + i * 360 / 5, type3);
			}
			Wait(60 + 60);
			let v = 0;
			let a = 2.4 / 120;
			loop(120){
				v += a;
				Obj_SetSpeed(obj, v);
				yield;
			}
		}
	}

	task CreateCircleShotC(x, y, angle, type3)
	{
		let obj = Obj_Create(OBJ_SHOT);

		Obj_SetPosition(obj, x, y);
		Obj_SetAngle(obj, angle);
		ObjShot_SetGraphic(obj, type3);

		let v = 0.8;
		let a = -v / 60;
		loop(60){
			v += a;
			Obj_SetSpeed(obj, v);
			yield;
		}
		Wait(60);
		let v = 0;
		let a = 1.5 / 120;
		loop(120){
			v += a;
			Obj_SetSpeed(obj, v);
			yield;
		}
	}

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