#e[Player]	//@XNvgł邱Ƃ܂
#ScriptVersion[2]	//XNvgo[W2K{ł
#Menu[[~A?]		//@Iʂŕ\郁j[ł
#Text[vC[TvłBŕ]	//@Iʂŕ\eLXgł
#Image[.\RumiaSelect.png]	//@Iʂŕ\摜t@Cւ̃pXł
#ReplayName[cRumia]	//vCIɕ\镶łB8ȓłB

script_player_main
{
	let current = GetCurrentScriptDirectory();//JgfBNg擾
	let imgRumia = current ~ "player_rumia.png";
	let imgRumiaCutIn = current~"RumiaCutIn.png";
	let imgShot = current~"RumiaShot.png";
	let shotCount = 4;//őe
	let objShot = NULL;//potonshot
	let sFlg = false;
	let slowAlpha = 0;
	let op_r = 0;
	let opos = [[0,0],[0,0]];
	let invTime = 180;
	let opshot = true;
	let seShot = current~"se\sePlayerShot01.wav";
	
	@Initialize
	{	
		//@̏Ɉ񂾂Ăяo镔ł
		SetRebirthFrame(0);
		SetAutoEffect(false);
		SetPlayerLifeImage(imgRumia, 0, 0, 48, 48);//c@̉摜
		LoadGraphic(imgRumia);
		LoadGraphic(imgShot);
		SetSpeed(4, 1.6);//ړxݒ
		LoadPlayerShotData(current~"RumiaShotData.txt");
		LoadSE(seShot);
		SetItemCollectLine(168);//ACeCݒ
		SetCommonData("icLine", 168);
		SetColor(255, 255, 255);
		SetRenderState(ALPHA);
		SetTexture(imgRumia);
		mainShot();
	}
	
	@MainLoop
	{
		if(invTime > 0){
			SetPlayerInvincibility(invTime);
			invTime = 0;
		}
		if(OnBomb()){CollectItems();}
		if(GetKeyState(VK_USER) == KEY_PUSH){opshot = !opshot;}
		SetIntersectionCircle(GetPlayerX, GetPlayerY, 1);//蔻o^
		yield;
	}
	@Missed{
		if(!OnBorderOfLife()){
			if(sFlg){
				Obj_Delete(objShot);
				objShot = NULL;
				sFlg = false;
			}
			op_r = 0;
			slowAlpha = 0;
			invTime = 180;
		}
	}
	@SpellCard
	{
		//XyJ[h𔭓uԂɌĂ΂镔ł
		//GetKeyStateňړԂ𔻒f肵
		//ĂяoXyIт܂	
		/*if(GetKeyState(VK_SLOWMOVE)==KEY_PUSH || GetKeyState(VK_SLOWMOVE)==KEY_HOLD)
		{	
			//ᑬړ
			UseSpellCard("Demarcation", true);
		}
		else
		{*/
			//ړ
			UseSpellCard("Demarcation", false);
		//}
		
		//JbgC
		CutIn(KOUMA,"ŕufB}[PCVv", imgRumiaCutIn);
	}
	
	@DrawLoop
	{
		let px = GetPlayerX();
		let py = GetPlayerY();
		SetTexture(imgRumia);
		//`惋[vBXLbvȂ1t[1s܂
		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
			SetGraphicRect( 0, 96, 48, 144 );
		}
		else if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
			SetGraphicRect( 0, 48, 48, 96 );
		}
		else 
		{
			SetGraphicRect( 0, 0, 48, 48 );
		}
		DrawGraphic(px, py);
		if(opshot){
			opDraw();
		}else{
			calc_oPos();
		}
		if(OnBomb() || GetTimeOfPlayerInvincibility() > 0){
			SetRenderState(ADD);
			SetTexture(imgShot);
			SetGraphicRect(0, 32, 48, 80);
			SetGraphicScale(1.5,1.5);
			SetAlpha(224);
			SetColor(32, 255, 128);
			DrawGraphic(px, py);
			SetColor(255, 255, 255);
			if(!OnBomb()){
				if(!IsBossExisting()){
					AddGraze(GetEnemyShotCountEx(px, py, 24, ALL)*2);
				}
			}
			DeleteEnemyShotImmediatelyInCircle(SHOT, px, py, 24);
			SetAlpha(255);
			SetGraphicScale(1.0,1.0);
			SetRenderState(ALPHA);
		}
		if(slkc || slowAlpha > 0){SlowEffect();}
	}
	
	task opDraw(){
		SetRenderState(ADD);
		SetTexture(imgShot);
		SetGraphicRect(0, 0, 31, 31);
		SetColor(32, 32, 240);
		calc_oPos();
		ascent(i in 0..2){
			DrawGraphic(opos[i][0], opos[i][1]);
		}
		SetColor(255, 255, 255);
		SetRenderState(ALPHA);
	}
	
	function calc_oPos(){
		if(slkc){
			if(op_r < 12){op_r += 1.2;}
		}else{
			if(op_r > 0){op_r -= 1.2;}
		}
		let ofs = 1;
		let px = GetPlayerX();
		let py = GetPlayerY();
		ascent(i in 0..2){
			let x = (px-24*ofs)+op_r*cos(45+i*90);
			let y = py+24+op_r*sin(45+i*90);
			opos[i] = [x,y];
			ofs *= -1;
		}
	}
	
	task SlowEffect(){
		if(slkc){
			if(slowAlpha < 255){
				slowAlpha += 8.5;
			}
		}else{
			if(slowAlpha > 0){
				slowAlpha -= 8.5;
			}
		}
		if(slowAlpha == 0){return;}
		SetTexture(imgRumia);
		SetGraphicRect(0, 144, 48, 192);
		SetAlpha(slowAlpha);
		DrawGraphic(GetPlayerX(), GetPlayerY());
		SetAlpha(255);
	}
	
	task mainShot(){
		let frame = -1;
		while(!OnMissed){
			if(GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD)
			{
				if(GetKeyState(VK_SHOT)==KEY_HOLD){
					if(slkc){sShot;}
					if(frame % 8 == 0 || (IsBossExisting() && frame % 4 == 0)){
						mShot();
					}
				}else{
					if(slkc){sShot;}
					mShot();
					frame = 0;
				}
			}
			frame++;
			yield;
		}
	}
	
	function uskc(){
		if(GetKeyState(VK_USER)==KEY_PUSH || GetKeyState(VK_USER)==KEY_HOLD){return true;}
		return false;
	}
	function slkc(){
		if(GetKeyState(VK_SLOWMOVE)==KEY_PUSH || GetKeyState(VK_SLOWMOVE)==KEY_HOLD){return true;}
		return false;
	}
	
	task slowShot()
	{
		sFlg = true;
		if(!Obj_BeDeleted(objShot)){return;}//1݂Ȃ
		objShot = Obj_Create(OBJ_SHOT);
		let alp = 255;
		Obj_SetX(objShot, GetPlayerX);//xWݒ
		Obj_SetY(objShot, GetPlayerY);//yWݒ
		Obj_SetAngle(objShot, 270);
		Obj_SetSpeed(objShot, 3);//xݒ
		ObjShot_SetGraphic(objShot, 3);//摜ݒ
		ObjShot_SetDamage(objShot, 1);//_[Wݒ
		ObjShot_SetPenetration(objShot, 1000000);//ђʗ͓͂Kɑ傫
		loop(45){
			let v = Obj_GetSpeed(objShot) * 0.97;
			alp-=4;
			Obj_SetSpeed(objShot, v);
			Obj_SetAlpha(objShot, alp);
			yield;
		}
		let sh = Shot_Create(Obj_GetX(objShot), Obj_GetY(objShot), 0.5, -90, 3, 0);
		Obj_SetAlpha(sh, 75);
		ObjShot_SetDamage(sh, 7);
		ObjShot_SetPenetration(sh, 1000000);
		Obj_Delete(objShot);
		loop(15){ alp-= 5; Obj_SetAlpha(sh, alp); yield; }
		Obj_Delete(sh);
		sFlg = false;
	}
	function Shot_Create(x, y, v, angle, view, delay){
		let sh = Obj_Create(OBJ_SHOT);
		Obj_SetPosition(sh, x, y);
		Obj_SetSpeed(sh, v);
		Obj_SetAngle(sh, angle);
		ObjShot_SetGraphic(sh, view);
		ObjShot_SetDelay(sh, delay);
		return sh;
	}
	sub sShot{
		if(!sFlg){
			slowShot();
		}
	}
	task mShot(){
		if(shotCount > 0 || IsBossExisting()){
			let p = [7.5,[4.5,2.25][opshot]][IsBossExisting()];
			let x = GetPlayerX()-8;
			let y = GetPlayerY();
			let view = [4,5];
			let sh = [0,0,0,0];
			shotCount--;
			ascent(i in 0..2){
				sh[i] = CreatePlayerShot01(x, y, 15, 270, p, 2, view[i]);
				x+=16;
			}
			if(opshot){
				ascent(i in 2..4){
					sh[i] = CreatePlayerShot01(opos[i%2][0], opos[i%2][1]+8, 15, 270, p, 2, view[3-i]);
				}
			}
			if(shCheck){PlaySE(seShot);}
			while(shCheck()){ yield; }
			shotCount++;
			function shCheck(){
				if(!Obj_BeDeleted(sh[0]) || !Obj_BeDeleted(sh[1]) ||
				   !Obj_BeDeleted(sh[2]) || !Obj_BeDeleted(sh[3]))
				{ return true; }
				return false;
			}
		}
	}
	@Finalize
	{
		//XNvgIɈ񂾂Ăяo镔ł
		DeleteCommonData("icLine");
		DeleteSE(seShot);
		DeleteGraphic(imgShot);
		DeleteGraphic(imgRumia);
	}
}

script_spell Demarcation
{
	//ᑬړ́AG̍Wɒɏo
	//ړ́A@̎͂ɏo
	let bSlowMove = GetArgument();//ᑬړtO
	let current = GetCurrentScriptDirectory();
	let imgEffect = current~"RumiaSpell.png";

	@Initialize
	{
		LoadGraphic(imgEffect);
		SetPlayerInvincibility(300);//GԂݒ
		run();
	}
	@MainLoop
	{
		yield;
	}
	@Finalize
	{
		DeleteGraphic(imgEffect);
	}
	task run()
	{
		loop(48){yield;}//gݍ݂̃JbgCI܂őҋ@
		effect(0);
		effect(1);
		loop(220){;yield;}
		End();
	}

	task effect(num)
	{	//GtFNgp^XN
		let tv=0;
		let angle=0;
		let alpha=0;	
		task alphaState
		{	//lύX邽߂̃^XN
			alpha=0;
			loop(256/3){alpha+=3; yield;}
			loop(90){yield;}
			loop{alpha-=8; yield;}
		}
		task lineEffect
		{
			loop(120){concentrationLine();loop(1){yield;}}
		}
		alphaState;
		if(bSlowMove==true){lineEffect;}
		
		let obj = Obj_Create(OBJ_SPELL);//XyIuWFNg쐬
		ObjEffect_SetTexture(obj, imgEffect);//eNX`ݒ
		ObjEffect_SetRenderState(obj, ADD);//`@ݒ
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);//v~eBu^Cvݒ
		ObjEffect_CreateVertex(obj, 10);//_10
		
		ascent(i in 0..5)
		{
			let angle = -45+i*90;
			let x;
			let y;
			if(bSlowMove)
			{
				//ᑬړ͔͈͂
				x = 192*cos(angle);
				y = 192*sin(angle);
			}
			else
			{
				//ړ͍L͈
				x = 512*cos(angle);
				y = 512*sin(angle);
			}
			ObjEffect_SetVertexXY(obj, i*2, x, y);//_̍Wݒ
			ObjEffect_SetVertexXY(obj, i*2+1, 0, 0);
			ObjEffect_SetVertexColor(obj, i*2, 0, 255, 255, 255);//_J[ݒ
		}
		
		while(!Obj_BeDeleted(obj))
		{
			tv-=1;
			if(num == 0){angle+=1;}
			else if(num == 1){angle-=1;}
			ObjEffect_SetAngle(obj, 0, 0, angle);//`pxݒ
			if(bSlowMove)
			{	//ᑬړ
				if(GetEnemyNum() > 0){
					Obj_SetPosition(obj, GetEnemyX, GetEnemyY);
					SetIntersectionCircle(GetEnemyX, GetEnemyY, 81, 5, true);//蔻o^
				}else{
					Obj_SetPosition(obj, GetPlayerX, GetPlayerY);
					SetIntersectionCircle(GetEnemyX, GetEnemyY, 81, 5, true);//蔻o^
				}
			}
			else 
			{	//ړ
				Obj_SetPosition(obj, GetPlayerX, GetPlayerY);//Wݒ
				SetIntersectionCircle(GetPlayerX, GetPlayerY, 256, 2, true);//蔻o^
			}
			ascent(i in 0..5)
			{
				ObjEffect_SetVertexUV(obj, i*2,   16*i,tv);//eNX`̍Wݒ
				ObjEffect_SetVertexUV(obj, i*2+1 ,32,  64+tv);
				
				ObjEffect_SetVertexUV(obj, i*2,   16*i, tv);	
				ObjEffect_SetVertexUV(obj, i*2+1, 32,   64+tv);
				
				ObjEffect_SetVertexColor(obj, i*2+1, alpha, 255, 255, 255);		
			}
			yield;
		}
		
	}
	
	task concentrationLine()
	{	//W܂銴̃GtFNg
		if(GetEnemyNum()>0){
		let angle=rand(0, 360);
		let alpha=0;
		let scale=3;
		
		let obj = Obj_Create(OBJ_SPELL);//XyIuWFNg쐬
		ObjEffect_SetTexture(obj, imgEffect);//eNX`ݒ
		ObjEffect_SetRenderState(obj, ADD);//`@ݒ
		ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);//v~eBu^Cvݒ
		ObjEffect_CreateVertex(obj, 3);//_3
		ObjEffect_SetAngle(obj, 0, 0, angle);//`pxݒ
		
		//_Wݒ
		ObjEffect_SetVertexXY(obj, 0,  0,  10);
		ObjEffect_SetVertexXY(obj, 1, -10, 50);
		ObjEffect_SetVertexXY(obj, 2, 10,  50);
		
		//_UVlݒ
		ObjEffect_SetVertexXY(obj, 0, 10,  10);
		ObjEffect_SetVertexXY(obj, 1,  0,  50);
		ObjEffect_SetVertexXY(obj, 2, 20,  50);
		
		//Fݒ
		ObjEffect_SetVertexColor(obj, 0, alpha, 255, 0, 255);
		ObjEffect_SetVertexColor(obj, 1, 0, 255, 0, 255);
		ObjEffect_SetVertexColor(obj, 2, 0, 255, 0, 255);
		
		loop(60)
		{
			scale-=3/60;
			alpha+=5;
			ObjEffect_SetVertexColor(obj, 0, alpha, 255, 0, 255);
			ObjEffect_SetScale(obj, scale, scale*3);
			Obj_SetPosition(obj, GetEnemyX, GetEnemyY);
			yield;
		}
		Obj_Delete(obj);
		}
	}


}
