#e[Player]	//@XNvgł邱Ƃ܂
#ScriptVersion[2]	//XNvgo[W2K{ł
#Menu[얲]	//@Iʂŕ\郁j[ł
#Text[K[_̗@ubN[xp@]
#ReplayName[reimu]	//vCIɕ\镶łB8ȓłB

script_player_main
{
	let current = GetCurrentScriptDirectory();//JgfBNg擾
	let imgplayer = current~"reimu.png";
	let system = current~"system.png";
	let imgRumiaCutIn = current~"RumiaCutIn.png";
	let senshot = current~"nshot.wav";
	let sesshot = current~"sshot.wav";
	let shotCount = 1;//eAŔ˂邽߂̕ϐ
	let bNextShot = false;//񉟂łeA˂邽߂̕ϐ(Â炢)
	let objShot = NULL;//Ue
        let grad = 0;
        let atk = 1;
        let time = 0;
      let kakusei = false;
      let kirikae = 0;
      let gensyo = 0;
      SetCommonData("kakusei",0);
      SetCommonData("bombchip",20);
      SetCommonData("kakuseikinsi",true);
      SetCommonData("aura",0);

      let option = 0;
      let teisoku = false;
      let shotnum = 0;
      let auranum = 0;


	task miss{
           SetPlayerInvincibility(180);
        }
        task sshot2(let x,let y,let o){
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, GetPlayerX+x);
	   Obj_SetY(objShot, y);
           ObjShot_SetGraphic(objShot, 2);
	   ObjShot_SetDamage(objShot, 1);    
	   ObjShot_SetPenetration(objShot, 1);
	   Obj_SetAngle(objShot, 270);
	   Obj_SetSpeed(objShot,15);
	   while( !Obj_BeDeleted(objShot) && (GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD)){
		Obj_SetX(objShot,GetPlayerX+x+option*o);
		yield;
	   }
	   Obj_Delete(objShot);
	}
        task nshot(let x,let y,let ang,let gr){
           shotnum+=1;
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, GetPlayerX+x);
	   Obj_SetY(objShot, y);
           ObjShot_SetGraphic(objShot, 1);
	   ObjShot_SetDamage(objShot, 1);    
	   ObjShot_SetPenetration(objShot, 2);
	   Obj_SetAngle(objShot, ang);
	   Obj_SetSpeed(objShot,15);
	   while( !Obj_BeDeleted(objShot) ){
		yield;
	   }
	   Obj_Delete(objShot);
           shotnum-=1;
	}
        task hadou1{
           PlaySE(GetCurrentScriptDirectory()~"hadou.wav");
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, GetPlayerX);
	   Obj_SetY(objShot, GetPlayerY);
           ObjShot_SetGraphic(objShot, 3);
	   ObjShot_SetDamage(objShot, 10.01);    
	   ObjShot_SetPenetration(objShot, 100000);
	   Obj_SetAngle(objShot, 270);
	   Obj_SetSpeed(objShot,4);
	   while( !Obj_BeDeleted(objShot) ){
                hadou2(Obj_GetX(objShot),Obj_GetY(objShot));
		loop(8){yield;}
	   }
	   Obj_Delete(objShot);
	}
        task hadou2(let x,let y){
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, x);
	   Obj_SetY(objShot, y);
           ObjShot_SetGraphic(objShot, 4);
	   ObjShot_SetDamage(objShot, 1.01);    
	   ObjShot_SetPenetration(objShot, 100000);
	   Obj_SetAngle(objShot, 270);
	   Obj_SetSpeed(objShot,0);
	   loop(420){
              DeleteEnemyShotImmediatelyInCircle(SHOT, x, y, 48);
	      yield;
	   }
	   Obj_Delete(objShot);
	}
        task bomber(let x,let y){
           PlaySE(GetCurrentScriptDirectory()~"bomb.wav");
           aura;
           let a=GetCommonData("bombchip");
           if(a>10){a=10;}
           SetCommonData("bombchip",GetCommonData("bombchip")-a);
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, x);
	   Obj_SetY(objShot, y);
           ObjShot_SetGraphic(objShot, 5);
	   ObjShot_SetDamage(objShot, 10.01);
	   ObjShot_SetPenetration(objShot, 100000);
	   Obj_SetAngle(objShot, 270);
	   Obj_SetSpeed(objShot,0);
           DeleteEnemyShotImmediatelyInCircle(SHOT, x, y, 160);
           let b=0;
	   loop(30+a*10){
              if(b==2){
                 SetCommonData("prerank",0);
                 /*SetCommonData("prerank",GetCommonData("prerank")-2);
                 if(GetCommonData("prerank")<0){SetCommonData("prerank",0);}*/
              }
              DeleteEnemyShotImmediatelyInCircle(SHOT, x, y, 80);
              b++;
	      yield;
	   }
	   Obj_Delete(objShot);
	}
        task aura{
           SetPlayerInvincibility(60);
	   let objShot= Obj_Create(OBJ_SHOT);
	   Obj_SetX(objShot, GetPlayerX);
	   Obj_SetY(objShot, GetPlayerY);
           ObjShot_SetGraphic(objShot, 6);
	   ObjShot_SetDamage(objShot, 10.01);
	   ObjShot_SetPenetration(objShot, 100000);
	   Obj_SetAngle(objShot, 270);
	   Obj_SetSpeed(objShot,0);
	   loop(30){
              DeleteEnemyShotImmediatelyInCircle(SHOT, GetPlayerX, GetPlayerY, 48);
	      Obj_SetX(objShot,GetPlayerX);
	      Obj_SetY(objShot,GetPlayerY);
	      yield;
	   }
	   Obj_Delete(objShot);
	}




	@Initialize
	{	
		//@̏Ɉ񂾂Ăяo镔ł
		SetPlayerLifeImage(imgplayer, 0, 0, 50, 50);//c@̉摜
		LoadGraphic(imgplayer);
		LoadGraphic(system);
		SetSpeed(3.7, 1.8);//ړxݒ
		LoadPlayerShotData(current~"ShotData.txt");
		SetItemCollectLine(120);//ACeCݒ
                SetInitialBombCount(0);
                SetGrazeCircle(0);
                SetRebirthFrame(0);
	}
	
	@MainLoop
	{	
		//t[s镔ł	
      if(GetCommonData("aura")>0){aura;SetCommonData("aura",0);}
      if(GetKeyState(VK_USER)==KEY_PUSH && GetCommonData("bombchip")>=20){
         SetCommonData("bombchip",GetCommonData("bombchip")-20);
         hadou1;
      }
      if(GetKeyState(VK_BOMB)==KEY_PUSH && GetCommonData("bombchip")>0){
         bomber(GetPlayerX,GetPlayerY-80);
      }
      if(GetKeyState(VK_SLOWMOVE)==KEY_PUSH || GetKeyState(VK_SLOWMOVE)==KEY_HOLD){
         teisoku=true;
         if(option<10){option+=1;}
      }
      else{
         teisoku=false;
         if(option>0){option-=1;}
      }
                        //ᑬړ̎e
                        if(option>=5&&shotCount == 0){
                           let a=2+trunc(GetCommonData("power")/2);
                           let b=-(a-1)/2;
                           loop(a){
                              nshot(b*(22-a*2), GetPlayerY(),270,5);
                              b++;
                           }
                           PlaySE("sePlayerShot01.wav");
                           shotCount=3;
                        }
		
			//ړ̎e
                        if(option<5&&shotCount == 0){
                           let a=2+trunc(GetCommonData("power")/2);
                           let b=-(a-1)/2;
                           loop(a){
                              nshot(-0, GetPlayerY(),270+b*(17-a),5);
                              b++;
                           }
                           PlaySE("sePlayerShot01.wav");
                           shotCount=3;
                        }

		if(GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD)
		{
                   if(GetCommonData("option")>0){
                      sshot2(40,GetPlayerY-option*3,-3.2);
                   }
                   if(GetCommonData("option")>1){
                      sshot2(-40,GetPlayerY-option*3,3.2);
                   }
                   if(GetCommonData("option")>2){
                      sshot2(-80,GetPlayerY-option*3,5.6);
                   }
                   if(GetCommonData("option")>3){
                      sshot2(80,GetPlayerY-option*3,-5.6);
                   }
	           if(shotCount > 0){shotCount-=1;}
		   bNextShot = true;
		}
                else{bNextShot = false;}
		
                if(OnMissed && GetPlayerBomb>0){CallSpellCard;}

		SetIntersectionCircle(GetPlayerX, GetPlayerY, 0);//蔻o^	
		yield;time++;
	}
	@Missed
	{
            bNextShot = false;
            SetPlayerInvincibility(180);
	    yield;
        }

	@SpellCard
	{
		//XyJ[h𔭓uԂɌĂ΂镔ł
		//GetKeyStateňړԂ𔻒f肵
		//ĂяoXyIт܂	
                if(OnMissed==true){UseSpellCard("Demarcation", 50);}
                else{UseSpellCard("Demarcation", 130);}
		
	}
	
	@DrawLoop
	{
		//`惋[vBXLbvȂ1t[1s܂

		SetColor(255, 255, 255);
		SetRenderState(ALPHA);
		SetTexture(imgplayer);
		if(GetKeyState(VK_LEFT)==KEY_PUSH || GetKeyState(VK_LEFT)==KEY_HOLD)
		{
		   SetGraphicRect(0, 48, 48, 96);
		}
		else if(GetKeyState(VK_RIGHT)==KEY_PUSH || GetKeyState(VK_RIGHT)==KEY_HOLD)
		{
		   SetGraphicRect(0, 96, 48, 144);
		}
                else{
		   SetGraphicRect(0, 0, 48, 48);
                }
                SetGraphicAngle(0,0,0);
		DrawGraphic(GetPlayerX(), GetPlayerY());
	
		SetGraphicRect(0, 160, 20, 180);
                if(GetCommonData("option")>0){
                   SetGraphicAngle(0,0,-time*4);
		   DrawGraphic(GetPlayerX()+40-option*3.2, GetPlayerY()+10-option*3);
                }
                if(GetCommonData("option")>1){
                   SetGraphicAngle(0,0,time*4);
		   DrawGraphic(GetPlayerX()-40+option*3.2, GetPlayerY()+10-option*3);
                }
                if(GetCommonData("option")>2){
                   SetGraphicAngle(0,0,time*4);
		   DrawGraphic(GetPlayerX()-80+option*5.6, GetPlayerY()+10-option*3);
                }
                if(GetCommonData("option")>3){	
                   SetGraphicAngle(0,0,-time*4);
		   DrawGraphic(GetPlayerX()+80-option*5.6, GetPlayerY()+10-option*3);
                }


           if(GetCommonData("kakusei")>0){
              SetTexture( system );
              SetGraphicAngle(0,0,0);
              let a=GetPoint/10;
              SetGraphicRect( 0, 48, 50, 64 );
              DrawGraphic( GetPlayerX, GetPlayerY+20 );
              SetGraphicRect( 0, 64, a, 80 );
              DrawGraphic( GetPlayerX+a/2-25, GetPlayerY+20 );
           }
	}
	
	@Finalize
	{
		//XNvgIɈ񂾂Ăяo镔ł
		DeleteGraphic(imgplayer);
	}
}

script_spell Demarcation
{
	//ᑬړ́AG̍Wɒɏo
	//ړ́A@̎͂ɏo
	let koukazikan = GetArgument();
	let current = GetCurrentScriptDirectory();
	let imgEffect = current~"Spell.png";
	let sebomb = current~"bomb.wav";

	@Initialize
	{
		LoadGraphic(imgEffect);
		SetPlayerInvincibility(koukazikan+40);//GԂݒ
                PlaySE(sebomb);
		run();
	}
	@MainLoop
	{
		yield;
	}
	@Finalize
	{
		DeleteGraphic(imgEffect);
	}
	task run()
	{
		effect(0);
		effect(1);
		loop(koukazikan){;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;
		
		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;
				//ړ͍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ݒ
				Obj_SetPosition(obj, GetCenterX, GetCenterY);//Wݒ
				SetIntersectionCircle(GetCenterX, GetCenterY, 300, 1.01, 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
		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);
	}


}
