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

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

	let draw_rot = 0;

	@Initialize
	{
		SetLife(1700);
		StartSetting(30, 0, "");
		SetInvincibility(150);
		SetHitState(0);

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

		LoadGraphic(img_chen);

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

		InitializeAction();
		LoadSE(se_shot1);
		LoadSE(se_shot2);

		T_Main();
		T_DamageRate(100, 100, 150, -1);
		T_HitTest(48);
	}

	@Finalize
	{
		DeleteGraphic(img_chen);
		DeleteSE(se_shot1);
		DeleteSE(se_shot2);
	}

	@DrawLoop
	{
		if( action == ACT_MOVE && absolute(GetSpeed()) >= 0.1 ){
			if( cos( GetAngle() ) <= 0 ){
				draw_rot -= 30;
			}
			else{
				draw_rot += 30;
			}
		}
		else{
			draw_rot = 0;
		}
		SetGraphicAngle(0, 0, draw_rot);
		SetAlpha([255, 128][IsExMode() && OnBomb()]);
		DrawBoss(img_chen);
		SetGraphicAngle(0, 0, 0);
	}

	task T_Main()
	{
		yield;

		StartPlural();

		SetAction(ACT_MOVE, 60);
		Wait(120);
		SetHitState(1);

		T_Move();
		T_ShotA();
	}

	task T_Move()
	{
		Wait(80);
		loop{
			SetAction(ACT_MOVE, 60);
			MoveActOwn(100, 150);
			Wait(150);
		}
	}

	function MoveActOwn(ymin, ymax)
	{
		let x;
		let y;
		let k;
		let min_x = 100;
		let xmin = GetClipMinX() + min_x;
		let xmax = GetClipMaxX() - min_x;

		if( GetX() < xmin + 60 ){
			k = 1;
		}
		else if( GetX() > xmax - 60 ){
			k = -1;
		}
		else if( GetX() < GetPlayerX() ){
			k = 1;
		}
		else{
			k = -1;
		}
		x = max(xmin, min(xmax, GetX() + k * rand(70, 120)));
		y = max(ymin, min(ymax, GetY() + rand(-30, 30)));
		SetMovePositionDC(x, y, 60);
	}

	task T_ShotA()
	{
		loop{
			let angle = GetAngleToPlayer();
			CreateTriangle(11, angle);
			Wait(15);
			CreateTriangle(9, angle - 44);
			CreateTriangle(9, angle + 44);
			Wait(15);
			PlaySE(se_shot1);
			let k = 0;
			ascent( let i in 0..121 ){
				let s_angle = angle + 180 + (i - 60) * 360 / 144;
				CreateShot01(GetX(), GetY(), [3.5, 3.0][k], s_angle, 106, 0);
				CreateShot01(GetX(), GetY(), [2.5, 2.0][k], s_angle, 106, 0);
				k = 1 - k;
			}
			Wait(150 - 30);
		}
	}

	task CreateTriangle(num, angle)
	{
		ascent( let i in 0..num ){
			PlaySE(se_shot1);
			let v = 1.0 + (num - i) * 0.40;
			ascent( let j in 0..(i + 1) ){
				CreateShot02(GetX(), GetY(), v, angle + (j - i / 2) * 12, v / 180, 10.0, 14, 0);
			}
		}
	}

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