let SE_Start=GetMainStgScriptDirectory~"se/decide12.wav";
let SE_SelectMove=GetMainStgScriptDirectory~"se/cursor5.wav";
let SE_Decide=GetMainStgScriptDirectory~"se/decide2.wav";
let SE_Cancel=GetMainStgScriptDirectory~"se/cursor3.wav";
let SE_Learn=GetMainStgScriptDirectory~"se/tm2_power001.wav";

let Select=2000;
let Start=2000;
let SpellPractice=2001;
let GameData=2002;
let Achievement=2003;
let Quit=2004;
let Secret=2005;

let Locate="Locate";
let LocateSelect=0;

let Labo="Labo";
let LaboSelect=0;

let SkillTake="SkillTake";
let SkillTakeSelect=0;
let SkillTakeTypeSelect=0;

let Stage="Stage";
let SceneSelect=0;
let ScenePage=0;
let DrawStage="Stage";

let Menu="Menu";
let StageState=Menu;

let MenuState=Menu;
let SelectEffect=false;

let ListAdjust=0;


let SkillTakeTypeAll=["dummy"];

let SkillTakeTypeAttack=["dummy"];
let SkillTakeTypeAssist=["dummy"];
let SkillTakeTypeSpell=["dummy"];

let SkillTakeTypeArray=[SkillTakeTypeAll,SkillTakeTypeAttack,SkillTakeTypeAssist,SkillTakeTypeSpell];

function GetKeyState(key)
{
return(GetVirtualKeyState(key));
}

let MenuSE=[0,0,0];

let Exit="Exit";
	function TASK_MENU
	{

		if(StageState==Menu)
		{
		SetForbidPlayerShot(true);
		SetForbidPlayerSpell(true);
		//	SetPlayerX(DefaultX);
		//	SetPlayerY(DefaultY);
		}
/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////j[//////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
		if(MenuState==Menu)
		{
			if(GetKeyState(VK_LEFT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				Select-=1;
				if(Select<=1999)
				{
					Select=2002;
				}
			}

			if(GetKeyState(VK_RIGHT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				Select+=1;
				if(Select>=2003)
				{
					Select=2000;
				}
			}

			if(GetKeyState(VK_RIGHT) == KEY_PUSH)
			{

			}

			if(GetKeyState(VK_LEFT) == KEY_PUSH)
			{

			}

			if(GetKeyState(VK_CANCEL) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Cancel);
				Select=2000;
			}		

			if(Select==Start && GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Decide);
				MenuState=Locate;
				LocateSelect=0;
				yield;
			}


			if(Select==SpellPractice && GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Decide);
				MenuState=Labo;
				LaboSelect=0;
				yield;
			}

			if(Select==GameData && GetKeyState(VK_SHOT) == KEY_PUSH)
			{
			}

			if(Select==Achievement && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}

			if(Select==Quit && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}

			if(Select==Secret && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}
		}
		if(MenuState==Locate)
		{
			let KeyDir=0;
			if(GetKeyState(VK_UP) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				LocateSelect-=1;
				KeyDir=-1;
				if(LocateSelect<=-1)
				{
					LocateSelect=2;
				}
			}

			if(GetKeyState(VK_DOWN) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				LocateSelect+=1;
				KeyDir=1;
				if(LocateSelect>=3)
				{
					LocateSelect=0;
				}
			}
if(LocateSelect==1 && !GetStageFlag("g"))
{
	if(KeyDir==1){LocateSelect+=1;}
	else{LocateSelect-=1;}
}
if(LocateSelect==2 && !GetStageFlag("_"))
{
	if(KeyDir==1){LocateSelect+=1;}
	else{LocateSelect-=1;}
}
				if(LocateSelect>=3)
				{
					LocateSelect=0;
				}

			if(GetKeyState(VK_RIGHT) == KEY_PUSH)
			{

			}

			if(GetKeyState(VK_LEFT) == KEY_PUSH)
			{

			}

			if(GetKeyState(VK_CANCEL) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Cancel);
				MenuState=Menu;
				Select=2000;
				yield;
			}		

			if(GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Decide);
				if(LocateSelect==0)
				{
					MenuState=Stage;
					DrawStage="@̐X";
					yield;
				}
			}
		}
		if(MenuState==Stage)
		{
/*
DrawText(SceneSelect, 200, 400,20,255,[]);
DrawText(ScenePage, 200, 360,20,255,[]);
DrawText(length(GetStageFlagArray(DrawStage)[trunc(SceneSelect/10)]), 200, 300,20,255,[]);
*/
			let KeyDir_UD=0;
			let KeyDir_LR=0;

			if(GetKeyState(VK_UP) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				let TempSelect=SceneSelect%10;
				KeyDir_UD=-1;
				SceneSelect-=1;
				if(SceneSelect<=-1)
				{
					SceneSelect=length(GetStageFlagArray(DrawStage)[ScenePage])-1;
				}
			}

			else if(GetKeyState(VK_DOWN) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				KeyDir_UD=1;
				SceneSelect+=1;
				if(SceneSelect>=length(GetStageFlagArray(DrawStage)[ScenePage]))
				{
					SceneSelect=0;
				}
			}

			else if(GetKeyState(VK_RIGHT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				KeyDir_LR=1;
				ScenePage+=1;
				if(ScenePage>=length(GetStageFlagArray(DrawStage)))
				{
					ScenePage=0;
				}
			}

			else if(GetKeyState(VK_LEFT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				KeyDir_LR=-1;
				ScenePage-=1;
				if(ScenePage<=-1)
				{
					ScenePage=length(GetStageFlagArray(DrawStage))-1;
				}
			}

			while(GetStageFlagArray(DrawStage)[ScenePage][SceneSelect]==0 && KeyDir_UD!=0)
			{
				SceneSelect+=KeyDir_UD;
				if(SceneSelect<=-1)
				{
					SceneSelect=length(GetStageFlagArray(DrawStage)[ScenePage])-1;
				}
				if(SceneSelect>=length(GetStageFlagArray(DrawStage)[ScenePage]))
				{
					SceneSelect=0;
				}
			}

			while(GetStageFlagArray(DrawStage)[ScenePage][SceneSelect]==0 && KeyDir_LR!=0)
			{
				ScenePage+=KeyDir_LR;
				if(ScenePage<=-1)
				{
					ScenePage=length(GetStageFlagArray(DrawStage))-1;
				}
				if(ScenePage>=length(GetStageFlagArray(DrawStage)))
				{
					ScenePage=0;
				}
			}

			if(GetKeyState(VK_CANCEL) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Cancel);
				MenuState=Locate;
				yield;
			}		

			if(GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Decide);
				SetCommonData("StageName",DrawStage);
				SetCommonData("SceneSelect",IntToString(SceneSelect));
				SetCommonData("ScenePage",IntToString(ScenePage+1));
				StageState=Exit;
			}

			if(Select==SpellPractice && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}

			if(Select==GameData && GetKeyState(VK_SHOT) == KEY_PUSH)
			{
			}

			if(Select==Achievement && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}

			if(Select==Quit && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}

			if(Select==Secret && GetKeyState(VK_SHOT) == KEY_PUSH)
			{

			}
		}
		if(MenuState==Labo)
		{
			if(GetKeyState(VK_UP) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				LaboSelect-=1;
				if(LaboSelect<=-1)
				{
					LaboSelect=1;
				}
			}

			else if(GetKeyState(VK_DOWN) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				LaboSelect+=1;
				if(LaboSelect>=2)
				{
					LaboSelect=0;
				}
			}


			if(GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Decide);
				if(LaboSelect==0)
				{
					MenuState=SkillTake;
					yield;
				}
			}

			if(GetKeyState(VK_CANCEL) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Cancel);
				MenuState=Menu;
				Select=2001;
				yield;
			}
		}
		if(MenuState==SkillTake)
		{
			if(GetKeyState(VK_LEFT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				SkillTakeTypeSelect-=1;
				SkillTakeSelect=0;
				ListAdjust=0;
				if(SkillTakeTypeSelect<=-1)
				{
					SkillTakeTypeSelect=3;
				}
			}

			if(GetKeyState(VK_RIGHT) == KEY_PUSH)
			{
				Obj_PlaySE(SE_SelectMove);
				SkillTakeTypeSelect+=1;
				SkillTakeSelect=0;
				ListAdjust=0;
				if(SkillTakeTypeSelect>=4)
				{
					SkillTakeTypeSelect=0;
				}
			}

	if(GetVirtualKeyState(VK_SLOWMOVE)==KEY_FREE)
	{
		if(GetVirtualKeyState(VK_UP)==KEY_PUSH)
		{
		Obj_PlaySE(SE_SelectMove);
		SkillTakeSelect-=1;
		if(SkillTakeSelect<=-1){SkillTakeSelect=length(SkillTakeTypeArray[SkillTakeTypeSelect])-1;}
		}
		if(GetVirtualKeyState(VK_DOWN)==KEY_PUSH)
		{
		Obj_PlaySE(SE_SelectMove);
		SkillTakeSelect+=1;
		if(SkillTakeSelect>=length(SkillTakeTypeArray[SkillTakeTypeSelect])){SkillTakeSelect=0;}
		}
	}
	else
	{
		if(GetVirtualKeyState(VK_UP)==KEY_PUSH)
		{
		SkillTakeSelect-=8;
		if(SkillTakeSelect<=-1){SkillTakeSelect=0;}
		}
		if(GetVirtualKeyState(VK_DOWN)==KEY_PUSH)
		{
		SkillTakeSelect+=8;
		if(SkillTakeSelect>=length(SkillTakeTypeArray[SkillTakeTypeSelect])){SkillTakeSelect=length(SkillTakeTypeArray[SkillTakeTypeSelect])-1;}
		}
	}

			if(GetKeyState(VK_SHOT) == KEY_PUSH)
			{
				if(length(SkillTakeTypeArray[SkillTakeTypeSelect])>0)
				{
					GetSkill(SkillTakeTypeArray[SkillTakeTypeSelect][SkillTakeSelect]);
					yield;	
				}
				SkillTakeSelect=0;
			}

			if(GetKeyState(VK_CANCEL) == KEY_PUSH)
			{
				Obj_PlaySE(SE_Cancel);
				MenuState=Labo;
				LaboSelect=0;
				yield;
			}
		}
///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////ՓxI///////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
/////////////////////////XyJ[hvNeBX//////////////////////////////
//////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////
///////////////////////////Ug///////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////XRAUg///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////ѕ///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////RtBO///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////CgRtBO///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////̑///////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////

task DrawSelectLocate
{
DrawSelectLocate2;
let alpha=150;
let LX=190;
let BLX=LX;
let LX2=345;
let BLX2=LX2;
loop(15)
{
DrawText("StageSelect",20,10,24,255,[]);
DrawText("Laboratory",LX,10,24,alpha,[]);
DrawText("Shop",LX,10,24,alpha,[]);
LX-=BLX/15;
LX2-=BLX2/15;
alpha-=150/15;
yield;
}

}

task DrawSelectLocate2
{
let name=["@̐X"];
let alpha=0;
let LYplus=0;
let LY=[10];
let LYmax=[50-LY+LYplus];

if(GetStageFlag("g"))
{
LYplus+=20;
name=name~["g"];
LY=LY~[10];
LYmax=LYmax~[50-LY+LYplus];
}

if(GetStageFlag("_"))
{
LYplus+=20;
name=name~["_"];
LY=LY~[10];
LYmax=LYmax~[50-LY+LYplus];
}

loop(15)
{
ascent(i in 0..length(name))
{
DrawText(name[i],20,LY[i],18,alpha,[]);
LY[i]=LY[i]+LYmax[i]/15;
}
alpha+=150/15;
yield;
}

}

}

	task DrawInfoText(let text)
	{
		text=SetInfo(text);

		let obj = ObjText_Create();
		ObjText_SetText(obj, text);
		ObjText_SetFontSize(obj, 18);
		ObjText_SetFontBold(obj, true);
		ObjText_SetFontColorTop(obj, 196, 196, 255);
		ObjText_SetFontColorBottom(obj, 128, 128, 255);
		ObjText_SetFontBorderType(obj, BORDER_NONE);
		ObjText_SetFontBorderColor(obj,255, 255, 255);
		ObjText_SetFontBorderWidth(obj, 0);
		Obj_SetRenderPriorityI(obj, 80);
		ObjRender_SetX(obj, 50);
		ObjRender_SetY(obj, 360);
		ObjText_SetFontType(obj,"lr ");

		ObjText_SetMaxWidth(obj,400);

		let NewText=text;

		loop
		{
		let txtL=length(NewText);
		ascent(i in 0..length(NewText)-2)
		{
			if(NewText[i..i+2]=="nn")
			{
				let FText=NewText[0..i];
				let BText=NewText[i+2..length(NewText)];
				NewText=FText;
				if(i<42)
				{
				loop(21-i/2)
				{
					NewText=NewText~"@";
				}
				}
				else if(i<84)
				{
				loop(42-i/2)
				{
					NewText=NewText~"@";
				}
				}

				NewText=NewText~BText;
				break;
			}
		}
		if(txtL==length(NewText)){break;}
		}


		ObjText_SetText(obj, NewText);

	//	ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
	//	ObjRender_SetAlpha(obj,alpha);
		yield;

		Obj_Delete(obj);
	}

task SkillTakeCheck
{
	SkillTakeTypeAll=["dummy"];

	SkillTakeTypeAttack=["dummy"];
	SkillTakeTypeAssist=["dummy"];
	SkillTakeTypeSpell=["dummy"];

	let SkillAll=GetCommonData("SkillType_All",["}WbNVbg","}WbNip[","_bV","X^[_Xg"]);

	if(!LearnCheck("sbhVbg"))
	{
		SkillTakeTypeAll=SkillTakeTypeAll~["sbhVbg"];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["sbhVbg"];
	}
	else
	{

	}

	if(!LearnCheck("}WbN~TC"))
	{
		SkillTakeTypeAll=SkillTakeTypeAll~["}WbN~TC"];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["}WbN~TC"];
	}

	if(LearnCheck("I[["))
	{
		if(!LearnCheck("R[hCtFm"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["R[hCtFm"];
		SkillTakeTypeAssist=SkillTakeTypeAssist~["R[hCtFm"];
		}
		if(!LearnCheck("VI[[YT"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["VI[[YT"];
		SkillTakeTypeSpell=SkillTakeTypeSpell~["VI[[YT"];
		}
	}

	if(LearnCheck("C[W[U["))
	{
		if(!LearnCheck("CY[U["))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["CY[U["];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["CY[U["];
		}
		if(!LearnCheck("Xg[[U["))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["Xg[[U["];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["Xg[[U["];
		}
	}

	if(LearnCheck("XvbhX^["))
	{
		if(!LearnCheck("eIjbNfu"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["eIjbNfu"];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["eIjbNfu"];
		}
	}

	if(LearnCheck("X[p[V[gEF[u"))
	{
		if(!LearnCheck("AeBbgV[gEF[u"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["AeBbgV[gEF[u"];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["AeBbgV[gEF[u"];
		}
	}

	if(LearnCheck("X^[_Xg"))
	{
		if(!LearnCheck("X^[_Xg@G"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["X^[_Xg@G"];
		SkillTakeTypeSpell=SkillTakeTypeSpell~["X^[_Xg@G"];
		}
	}

	if(LearnCheck("}X^[Xp[N"))
	{
		if(!LearnCheck("_uXp[N"))
		{
		SkillTakeTypeAll=SkillTakeTypeAll~["_uXp[N"];
		SkillTakeTypeAttack=SkillTakeTypeAttack~["_uXp[N"];
		}
	}

	if(SkillTakeTypeAll[0]=="dummy")
	{
	SkillTakeTypeAll=erase(SkillTakeTypeAll,0);
	SkillTakeTypeAttack=erase(SkillTakeTypeAttack,0);
	SkillTakeTypeAssist=erase(SkillTakeTypeAssist,0);
	SkillTakeTypeSpell=erase(SkillTakeTypeSpell,0);
	}
	SkillTakeTypeArray=[SkillTakeTypeAll,SkillTakeTypeAttack,SkillTakeTypeAssist,SkillTakeTypeSpell];

	function LearnCheck(name)
	{
		ascent(i in 0..length(SkillAll))
		{
			if(name==SkillAll[i])
			{
				return(true);
			}
		}
		return(false);
	}
}

	task DrawNeedMana(text,y,color)
	{
		let NewText=IntToString(SetManaInfo(text));

		let obj = ObjText_Create();
		ObjText_SetText(obj, text);
		ObjText_SetFontSize(obj, 18);
		ObjText_SetFontBold(obj, true);
		ObjText_SetFontColorTop(obj, 196, 196, 255);
		ObjText_SetFontColorBottom(obj, 128, 128, 255);
		ObjText_SetFontBorderType(obj, BORDER_NONE);
		ObjText_SetFontBorderColor(obj,255, 255, 255);
		ObjText_SetFontBorderWidth(obj, 0);
		Obj_SetRenderPriorityI(obj, 80);
		ObjRender_SetX(obj, 50);
		ObjRender_SetY(obj, y);
		ObjText_SetFontType(obj,"lr ");

		if(length(color)!=0)
		{
		ObjText_SetFontColorTop(obj, (color[0]+255)/2, (color[1]+255)/2,(color[2]+255)/2);
		ObjText_SetFontColorBottom(obj, color[0], color[1], color[2]);
		}

		ObjText_SetMaxWidth(obj,340);
		ObjText_SetHorizontalAlignment(obj,ALIGNMENT_RIGHT);

		ObjText_SetText(obj, NewText);

	//	ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
	//	ObjRender_SetAlpha(obj,alpha);
		yield;

		Obj_Delete(obj);
	}

function SetManaInfo(name)
{
	alternative(name)
	case("sbhVbg"){return(100);}
	case("}WbN~TC"){return(100);}
	case("R[hCtFm"){return(150);}
	case("Xg[[U["){return(200);}
	case("CY[U["){return(200);}
	case("eIjbNfu"){return(200);}
	case("X^[_Xg@G"){return(100);}
	case("VI[[YT"){return(150);}
	others{return(0)};
}

function GetSkill(name)
{
	alternative(name)
	case("sbhVbg")
	{
		GetSkillProcess(name,1,0,0);
	}
	case("}WbN~TC")
	{
		GetSkillProcess(name,1,0,0);
	}
	case("R[hCtFm")
	{
		GetSkillProcess(name,0,1,0);
	}
	case("VI[[YT")
	{
		GetSkillProcess(name,0,1,1);
	}
	case("X^[_Xg@G")
	{
		GetSkillProcess(name,0,0,1);
	}
	case("CY[U[")
	{
		GetSkillProcess(name,1,0,0);
	}
	case("Xg[[U[")
	{
		GetSkillProcess(name,1,0,0);
	}
	others{return};

	function GetSkillProcess(name,attack,assist,spell)
	{
		if(GetCommonData("Mana",0)>=SetManaInfo(name))
		{
		Obj_PlaySE(SE_Learn);

		let SkillAll=GetCommonData("SkillType_All",[]);
		SkillAll=SkillAll~[name];
		SetCommonData("SkillType_All",SkillAll);

		if(attack)
		{
		let SkillType=GetCommonData("SkillType_Attack",[]);
		SkillType=SkillType~[name];
		SetCommonData("SkillType_Attack",SkillType);
		}

		if(assist)
		{
		let SkillType=GetCommonData("SkillType_Enchant",[]);
		SkillType=SkillType~[name];
		SetCommonData("SkillType_Enchant",SkillType);
		}

		if(spell)
		{
		let SkillType=GetCommonData("SkillType_Spell",[]);
		SkillType=SkillType~[name];
		SetCommonData("SkillType_Spell",SkillType);
		}

		SetCommonData("Mana",GetCommonData("Mana",0)-SetManaInfo(name));

		SkillErase(name);
		SkillTakeCheck;

		}
		else
		{
			Obj_PlaySE(SE_Cancel);
		}
	}

	function SkillErase(name)
	{

	ascent(j in 0..length(SkillTakeTypeArray))
	{
	ascent(i in 0..length(SkillTakeTypeArray[j]))
	{
	if(SkillTakeTypeArray[j][i]==name)
	{
		SkillTakeTypeArray[j]=erase(SkillTakeTypeArray[j],i);
		break;
	}
	}
	}

	}

}

