#e
#Title[̓d]
#ScriptVersion[2]
#BackGround[Default]
#Player[FREE]
#ScriptVersion[2]

script_enemy_main{
	let name="u̓dv";
    let imgBoss = "script\img\ExRumia.png"; 
	let rate=5;

	let shot0=[WHITE03,RED03,GREEN03,BLUE03,AQUA03,YELLOW03,PURPLE03,ORANGE03];
	let shot1=[WHITE02,RED02,GREEN02,BLUE02,AQUA02,YELLOW02,PURPLE02,ORANGE02];
	let shot2=[WHITE01,RED01,GREEN01,BLUE01,AQUA01,YELLOW01,PURPLE01,ORANGE01];
	let shot3=[WHITE05,RED05,GREEN05,BLUE05,AQUA05,YELLOW05,PURPLE05,ORANGE05];
	let shot4=[WHITE23,RED23,GREEN23,BLUE23,AQUA23,YELLOW23,PURPLE23,ORANGE23];
	let shot5=[WHITE12,RED12,GREEN12,BLUE12,AQUA12,YELLOW12,PURPLE12,ORANGE12];
	let shot6=[WHITE11,RED11,GREEN11,BLUE11,AQUA11,YELLOW11,PURPLE11,ORANGE11];
	let shot7=[WHITE32,RED32,GREEN32,BLUE32,AQUA32,YELLOW32,PURPLE32,ORANGE32];
	let shot8=[WHITE21,RED21,GREEN21,BLUE21,AQUA21,YELLOW21,PURPLE21,ORANGE21];
	let shot9=[WHITE31,RED31,GREEN31,BLUE31,AQUA31,YELLOW31,PURPLE31,ORANGE31];
	let shot10=[WHITE22,RED22,GREEN22,BLUE22,AQUA22,YELLOW22,PURPLE22,ORANGE22];

	@Initialize{
		CutIn(YOUMU, name, "", 0, 0, 0, 0);
		SetTimer(33);
		SetScore(1000000);
		LoadGraphic(imgBoss);
		SetTexture(imgBoss);
		setGraphicPose;

		SetShotAutoDeleteClip(128, 16, 128, 16);
		SetShotAutoDeleteClip(128, 64, 128, 16);

		t_move;
		t_dmg;
	}

	@MainLoop{
		SetCollisionA(GetX, GetY, 24);
		SetCollisionB(GetX, GetY, 24);
		yield; 
	}

	task t_move
	{
		SetX(GetCenterX);
		SetY(GetClipMinY);
		SetMovePosition02(GetCenterX, GetClipMinY+100,120);

		wait(180);

		t_shot;

		loop
		{
			wait(1);
		}
	}

	task t_dmg
	{
		let tr=30;
		let dr=100;

		SetDamageRate(0, 0);
		SetLife(1000);
		wait(180);
		SetDamageRate(dr/4, dr/4);

		loop
		{
			if(GetTimer<=tr/2)
			{
				SetDamageRate(dr/2, dr/2);
			}
			else if(GetTimer<=10)
			{
				SetDamageRate(dr, dr);
			}
			wait(1);
		}
	}

	task t_shot
	{
		loop
		{
			let r=rand(-80,-40);
			t_shot0(r);
			t_shot1(r);
			wait(rate*30);
		}
	}

	// llen:̉/ca
	let llenx=80;
	let lleny=llenx/4;

	let spd=2;
	let llf=150;

	task t_shot0(let len)
	{
		// ̊px
		let ang=get_tpang;
		// e|Cg̊px
		let lang=30;
		// lf:̎
		let lf=llf;

		// o:̊_
		let ox=GetX;
		let oy=GetY;

		ox=ox+cos(ang)*len;
		oy=oy+sin(ang)*len;

		// d:_̈ړx
		let dx=cos(ang)*spd;
		let dy=sin(ang)*spd;


		loop
		{
			let tx=cos(lang)*llenx;
			let ty=sin(lang)*lleny;

			// b:e|Cg
			let bx=ox+turn_x(tx,ty,ang-90);
			let by=oy+turn_y(tx,ty,ang-90);

			tx=-cos(lang+ang-90)/2+dx;
			ty=-sin(lang+ang-90)/2+dy;

			// b:e/px
			let bspd=getlen(0,0,tx,ty);
			let bang=getang(0,0,tx,ty);

			CreateShotA(0, bx, by, 30);
			SetShotDataA(0, 0, 0, bang, 0, 0, 0, shot5[3]);
			SetShotDataA(0, 60, 0, bang, 0, bspd/30, bspd, shot5[3]);
			FireShot(0);

			wait(1);

			lang+=rate*2;
			ox=ox+dx;
			oy=oy+dy;

			if(lf<0)
			{
				break;
			}
			lf--;
		}

	}

	task t_shot1(let len)
	{
		let ox=GetX;
		let oy=GetY;
		let ang=get_tpang;

		ox=ox+cos(ang)*len;
		oy=oy+sin(ang)*len;

		let dx=cos(ang)*spd;
		let dy=sin(ang)*spd;
		let lang=210;
		let lf=llf;

		loop
		{
			let tx=cos(lang)*llenx;
			let ty=sin(lang)*lleny;

			let bx=ox+turn_x(tx,ty,ang-90);
			let by=oy+turn_y(tx,ty,ang-90);

			tx=cos(lang+ang-90)*2+dx/3;
			ty=sin(lang+ang-90)*2+dy/3;

			let bspd=getlen(0,0,tx,ty);
			let bang=getang(0,0,tx,ty);

			CreateShotA(0, bx, by, 30);
			SetShotDataA(0, 0, 0, bang, 0, 0, 0, shot5[1]);
			SetShotDataA(0, 60, 0, bang, 0, bspd/30, bspd, shot5[1]);
			FireShot(0);

			wait(1);

			lang+=rate*2;
			ox=ox+dx;
			oy=oy+dy;

			if(lf<0)
			{
				break;
			}
			lf--;
		}

	}

	@DrawLoop{
		DrawGraphic(GetX, GetY);
	}

	@Finalize{
		DeleteGraphic(imgBoss);
	}

	function wait(let tim) { loop(tim) { yield; } }
	function getlen(let x, let y, let px, let py) { return(((py-y)^2+(px-x)^2)^0.5); }
	function get_plen(let x, let y) { return(((GetPlayerY-y)^2+(GetPlayerX-x)^2)^0.5); }
	function get_tplen { return(((GetPlayerY-GetY)^2+(GetPlayerX-GetX)^2)^0.5); }
	function getang(let x, let y, let px, let py) { return(atan2(py-y,px-x)); }
	function get_pang(let x, let y) { return(atan2(GetPlayerY-y,GetPlayerX-x)); }
	function get_tpang { return(atan2(GetPlayerY-GetY,GetPlayerX-GetX)); }

	function turn_x(let x, let y, let ang)
	{
		let a=getang(0,0,x,y);
		let l=getlen(0,0,x,y);
		return(cos(a+ang)*l);
	}

	function turn_y(let x, let y, let ang)
	{
		let a=getang(0,0,x,y);
		let l=getlen(0,0,x,y);
		return(sin(a+ang)*l);
	}

	function modang(let ang, let base)
	{
		ang-=base;

		while(ang>180)
		{
			ang-=360;
		}
		while(ang<=-180)
		{
			ang+=360;
		}
		return(ang+base);
	}

    sub setGraphicStop  { SetGraphicRect(  0,   0,  64,  64); }
    sub setGraphicPose  { SetGraphicRect( 64,   0, 128,  64); }
    sub setGraphicLeft  { SetGraphicRect(128,   0, 192,  64); }
    sub setGraphicRight { SetGraphicRect(192,   0, 256,  64); }
}
