	#東方弾幕風[Stage]
	#Title[ダブルスポイラー風ver1.00]
	#Text[ダブルスポイラー風ver1.00]
	#Player[.\player\player\AYA.txt,.\player\player\HATATE.txt]
	#BackGround[User]
	#BackGround[Defalt]
	#ScriptVersion[2]

	script_stage_main
	{
	#include_function ".\txt\DifineMenuVariable.txt"//メニュー画面管理用の値の収納先
	#include_function ".\txt/stagedata.txt"

	let StagesnapFile=[];
	if(SelectedCharacter==DefinedPlayer1)
	{
	ascent(let i in 0..20)
	{
		StagesnapFile=StagesnapFile~["DSAya"~NumToStringNoComplete(i)];
	}
	}
	if(SelectedCharacter==DefinedPlayer2)
	{
	ascent(let i in 0..20)
	{
		StagesnapFile=StagesnapFile~["DSHatate"~NumToStringNoComplete(i)];
	}
	}	
	let imgBG=csd ~ "img/MenuBG.png";
	let imgMenuLetter=csd ~ "img/MenuLetter.bmp";
	let imgDifficult=csd ~ "img/letter.png";
	let imgMenuEffect=csd ~ "img/effect_tiny.png";
	let imgSpellName=GetCurrentScriptDirectory ~ "img/SpellName.jpg";
	let imgChargeItem=csd ~ "player/img/border.png";

	let imgBestShot=[];
	let imgBestShotDetail=[];
	let snapFile=[];
	ascent(let i in 0..100)
	{
		snapFile=snapFile~[NumToStringNoComplete(i)];
	}
	ascent(let i in 0..100)
	{
		if(SelectedCharacter==DefinedPlayer1)
		{
			imgBestShot=imgBestShot~[csd ~ "AYABestShot/"~snapFile[i]~".bmp"];
			imgBestShotDetail=imgBestShotDetail~[csd ~ "AYABestShot/"~snapFile[i]~"Detail.bmp"];
		}
		if(SelectedCharacter==DefinedPlayer2)
		{
			imgBestShot=imgBestShot~[csd ~ "HATATEBestShot/"~snapFile[i]~".bmp"];
			imgBestShotDetail=imgBestShotDetail~[csd ~ "HATATEBestShot/"~snapFile[i]~"Detail.bmp"];
		}	
	}

	#include_function ".\settingtxt/SpellCardFile.txt"

	let MenuSE=[csd ~ "se/clock03.wav",csd ~ "se/cursor01.wav"];
	let TitleBGM=[csd ~ "bgm/title.wav"];
	let SelectedDifficult="Difficult";//スペル後のメニューの制御用。名前はおかしいが。

	let ScoreNumber1=0;
	let ScoreNumber2=0;

	let PhotoDrawing=true;//写真表示の有無の切り替え用変数
	let DetailDrawing=true;//スコア詳細表示の有無の切り替え用変数

		task StageTask
		{
			yield;
			//MenuBackDraw;
			ShootFlagTask;
			MenuEffect;
			DefeatEffect;
			PhotoShooting;
		//	UpTimeCount;//起動時間計測
			PlayTimeCount;//プレイ時間計測

			StageTitleDisplay;

			ForbidShot(false);
			ForbidBomb(false);

		}
	
		
		@Initialize()
		{
		//	SetCommonData("ReplayMode",true);
			CreateCommonDataArea(NsScore);
			LoadGraphic(imgBG);
			LoadGraphic(imgMenuEffect);
			LoadGraphic(imgLetter);
			LoadGraphic(imgChargeItem);
			LoadGraphic(imgMenuLetter);
			let isRep = IsReplay();
			if(isRep==false)
			{
				LoadCommonDataEx(NsScore,savePathstage);
			}
			else
			{
				LoadCommonDataFromReplayFile;
				StageState=Loading;
			}
			SetCommonData(NsIsReplay,isRep);
			SetCommonData(NsIsReplayJudgment,isRep);
			SetCommonData("ItemXY",[]);//アイテム位置座標保存用共通データ作成
			StageTask();
		}
	
		@MainLoop()
		{
			yield;
			if(OnPlayerMissed)
			{
				SetCommonData("Playermissed",true);
			}
			else
			{
				SetCommonData("Playermissed",false);
			}

		}
		

		@DrawTopObject
		{
			SetTexture(imgBG);
			SetGraphicScale(1.0,1.0);
			SetGraphicRect(0,0,384,448);
			if(StageState==Menu || StageState==Loading || StageState==Exit)
			{
				SetGraphicAngle(0, 0, 0);
				SetViewTo(0,0,0);
				DrawGraphic(GetCenterX, GetCenterY);
			}
			//DrawText(NumToString(GetCommonDataDefaultEx(NsScore,NsUpTime,0)/60),320,432,12,255);//起動時間の表示
			//DrawText(NumToStringNoComplete(GetCommonDataDefaultEx(NsScore,NsPlayTime,0)/60),320,452,12,255);//プレイ時間の表示
			//DrawText(NumToStringNoComplete(GetCommonDataDefaultEx(NsScore,NsPlayTime,0)/6),320,432,12,255);//プレイ時間の表示
			//DrawText(ToString(100),320,452,12,255);//プレイ時間の表示
			//DrawText(StageState,120,432,12,255);//起動時間の表示
		//	DrawText(SpellSelect,120,452,12,255);//プレイ時間の表示
		//	DrawText(SpellLevel,120,412,12,255);//起動時間の表示
			MenuDraw;
		}

		@Finalize()
		{
			if(GetCommonDataDefault(NsIsReplay,true) == false)
			{
				SaveCommonDataEx(NsScore,savePathstage);
			}
			ClearCommonDataEx(NsScore);
			DeleteCommonData(NsGetSpell);
			DeleteCommonData(NsDefeatFrame);
			DeleteCommonData(NsDefeatPosX);
			DeleteCommonData(NsDefeatPosY);
			DeleteCommonData(NsBossFrame);
			DeleteCommonData(NsIsReplay);
		}
		@BackGround {

			}

///////////////////////////////////////////////////////////////////////////////////////
////////////////////////////ステージエフェクト、残機調整部////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////

task LoadindPhotoImage
{//メニュー表示のための画像をロード
	while(MenuState!=Menu){yield;}
	#include_function ".\settingtxt/SetSpellName.txt"
	LoadGraphic(imgSpellName);
	ascent(let i in 1..100)
	{
	LoadGraphic(imgBestShot[i]);
	LoadGraphic(imgBestShotDetail[i]);
	}
	BestPhotoDraw;
	DetailDraw;
}
//////////////////////////////////////////////////////////////////////////////////////////////
///////////ステージ部、リトライでの制御//////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
let PhotoReload=true;
sub StageTitleDisplay//メニュー画面の表示、SecretSpell部分でも呼び出して再起している。
{
if(PhotoReload==true && GetCommonData(NsIsReplayJudgment) == false && GetCommonDataDefaultEx(NsScore,"SpellNo",1) == 0)
{
	LoadindPhotoImage;//全てのベストショット画像をロード
}

if(GetCommonDataDefaultEx(NsScore,"MenuSpellNo",0)!=0)
{
	SpellSelect=GetCommonDataDefaultEx(NsScore,"MenuSpellNo",0);//savedataからメニュー用のSelectを読み込む
	SpellLevel=GetCommonDataDefaultEx(NsScore,"MenuSpellLevelNo",0);//savedataからメニュー用のLevelを読み込む
}
if(GetCommonDataDefaultEx(NsScore,"SpellNo",0)==0 && GetCommonData(NsIsReplayJudgment) == false)
{
if(MenuState==Menu)
{
PlayMusic(TitleBGM[0]);
}
SetCommonData("DoubleSpoilerStageMenu",true);
	loop
	{
		alternative(StageState)	
		case(Menu)
		{
			TASK_MENU;
		}
		case(Exit)
		{
			StageState=Loading;
			SetCommonDataEx(NsScore,"SpellNo",SpellSelect);
			SetCommonDataEx(NsScore,"SpellLevelNo",SpellLevel);
			SetCommonDataEx(NsScore,"MenuSpellNo",0);
			SetCommonDataEx(NsScore,"MenuSpellLevelNo",0);
			SaveCommonDataEx(NsScore,savePath);//Select&Levelを保存
			wait(5);
SetCommonData("DoubleSpoilerStageMenu",false);
			Retry;
			break;
		 }
		others{}
	yield;
	}
}

else
{

StageState=Start;
if(GetCommonData(NsIsReplayJudgment) == false)
{
	SpellSelect=GetCommonDataDefaultEx(NsScore,"SpellNo",1);
	SpellLevel=GetCommonDataDefaultEx(NsScore,"SpellLevelNo",1);
	SetCommonDataEx(NsScore,"SpellNo",SpellSelect);
	SetCommonData("SpellNo",SpellSelect);
	SetCommonDataEx(NsScore,"SpellLevelNo",SpellLevel);
	SetCommonData("SpellLevelNo",SpellLevel);
	SaveCommonDataInReplayFile;
	SetCommonDataEx(NsScore,"SpellNo",0);
	SetCommonDataEx(NsScore,"SpellLevelNo",0);
}

else
{
	SpellSelect=GetCommonDataDefault("SpellNo",2);
	SpellLevel=GetCommonDataDefault("SpellLevelNo",2);
	SetCommonData(NsIsReplayJudgment,false);
}
}

DisPlayScore(SpellSelect);//スコアを表示

	ForbidShot(false);
	PlayMusic(SceneBGM[SpellSelect+SpellLevel*10]);
	CreateEnemyFromFile(SpellCardScScript[SpellSelect+SpellLevel*10],GetCenterX,GetClipMinY,2,0,0);
	wait(5);
	while(GetCommonDataDefault("BossExist",false)==true || StageState==Menu)
	{
		yield;
	}

if(GetCommonDataDefault("LoseBoss",false)==true)
{
	//wait(15);
}
else
{
	loop(10)
	{
		DeleteEnemyShotImmediatelyInCircle(ALL,GetCenterX,GetCenterY,350);
		yield;
	}
	wait(20);
}
	EndSpellMenu;
}

task EndSpellMenu
{
	Select=3000;
	StageState=Menu;
	MenuState=MenuDifficult;
	SetCommonData("ShootingEnd",true);
	endbunka;
	PhotoReload=false;
	StageTitleDisplay;
}

task endbunka
{
	while(MenuState==MenuDifficult){yield;}
	SetCommonData("PhotoEraze",true);
	StageState=Loading;
	SetCommonDataEx(NsScore,"MenuSpellNo",SpellSelect);
	SetCommonDataEx(NsScore,"MenuSpellLevelNo",SpellLevel);
	SaveCommonDataEx(NsScore,savePath);
	yield;
	Retry;
}
////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////アイテム部////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////


////////////////////////////////////////////////////////////////////////////////////////////
//////////////////時間計測、回数記録部/////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////
		task UpTimeCount//起動時間の計測
		{
			let UpTime=GetCommonDataDefaultEx(NsScore,NsUpTime,0);
			loop
			{
				UpTime++;
				SetCommonDataEx(NsScore,NsUpTime,UpTime);
				yield;
			}
		}

		task PlayTimeCount//プレイ時間の計測
		{
			let PlayTime=GetCommonDataDefaultEx(NsScore,NsPlayTime,0);
			loop
			{
				if(StageState!=Menu)
				{
				PlayTime++;
				}
				SetCommonDataEx(NsScore,NsPlayTime,PlayTime);
				yield;
			}
		}
/////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////スコア表示部、写真の記録も//////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
task DisPlayScore(let SpellNo)//ハイスコアを呼び出し、ハイスコアと現スコアを表示
{
let EachHiScore=0;

while(GetCommonDataDefault("BossExist",false)==false){yield;}
if(SelectedCharacter==DefinedPlayer1)
{
	CreateScore(GetCommonDataDefaultEx(NsScore,Player1Hiscore[SpellNo+SpellLevel*10],0),SpellNo+SpellLevel*10);
}
if(SelectedCharacter==DefinedPlayer2)
{
	CreateScore(GetCommonDataDefaultEx(NsScore,Player2Hiscore[SpellNo+SpellLevel*10],0),SpellNo+SpellLevel*10);
}
}

function CreateScore(let EachHiScore,SpellNo)//
{
loop
{
	ScoreNumber1+=GetScore;
	AddScore(-GetScore);

	DisPlayScoreNumber(GetClipMinX+80,GetClipMinY+20,EachHiScore,ScoreNumber2);//ハイスコア
	DisPlayScoreNumber(GetClipMaxX-10,GetClipMinY+20,ScoreNumber1,ScoreNumber2);//現スコア

	SetCommonData("PlayerHiPhoto",GetCommonDataEx(NsScore,Player2HiPhoto[SpellNo]));

	if(GetCommonDataDefault("BossExist",false)==false)
	{
		break;
	}
yield;
}

	if(SelectedCharacter==DefinedPlayer1)
	{
	let Number=GetCommonDataDefaultEx(NsScore,Player1AllPhoto[SpellNo],0);
	SetCommonDataEx(NsScore,Player1Challenge[SpellNo],GetCommonDataDefaultEx(NsScore,Player1Challenge[SpellNo],0)+1);//挑戦回数を増やす
	SetCommonDataEx(NsScore,Player1AllPhoto[SpellNo],Number+GetCommonDataDefault("AllPhoto",0));//名前空間に枚数を増やして保存
		if(GetCommonDataDefaultEx(NsScore,Player1Hiscore[SpellNo],0)==0)
		{
			SetCommonDataEx(NsScore,Player1FirstClearChallenge[SpellNo],GetCommonDataDefaultEx(NsScore,Player1FirstClearChallenge[SpellNo],0)+1);//挑戦回数を増やす
			SetCommonDataEx(NsScore,Player1FirstClearPhoto[SpellNo],GetCommonDataDefaultEx(NsScore,Player1FirstClearPhoto[SpellNo],0)+GetCommonDataDefault("AllPhoto",0));
		}
	}
	if(SelectedCharacter==DefinedPlayer2)
	{
	let Number=GetCommonDataDefaultEx(NsScore,Player2AllPhoto[SpellNo],0);
	SetCommonDataEx(NsScore,Player2Challenge[SpellNo],GetCommonDataDefaultEx(NsScore,Player2Challenge[SpellNo],0)+1);//挑戦回数を増やす
	SetCommonDataEx(NsScore,Player2AllPhoto[SpellNo],Number+GetCommonDataDefault("AllPhoto",0));//名前空間に枚数を増やして保存
		if(GetCommonDataDefaultEx(NsScore,Player2Hiscore[SpellNo],0)==0)
		{
			SetCommonDataEx(NsScore,Player2FirstClearChallenge[SpellNo],GetCommonDataDefaultEx(NsScore,Player2FirstClearChallenge[SpellNo],0)+1);//挑戦回数を増やす
			SetCommonDataEx(NsScore,Player2FirstClearPhoto[SpellNo],GetCommonDataDefaultEx(NsScore,Player2FirstClearPhoto[SpellNo],0)+GetCommonDataDefault("AllPhoto",0));
		}
	}

if(EachHiScore<=ScoreNumber1 && GetCommonDataDefault("DefeatBoss",false)==true)
{
	if(SelectedCharacter==DefinedPlayer1)
	{
	SetCommonDataEx(NsScore,Player1Hiscore[SpellNo],ScoreNumber1);//名前空間にハイスコア保存
	}
	if(SelectedCharacter==DefinedPlayer2)
	{
	SetCommonDataEx(NsScore,Player2Hiscore[SpellNo],ScoreNumber1);//名前空間にハイスコア保存
	}
}

if(GetCommonDataDefaultEx(NsScore,Player1HiPhoto[SpellNo],0)<=GetCommonDataDefault("HiBasePoint",0))
{
	if(SelectedCharacter==DefinedPlayer1)
	{
	SetCommonDataEx(NsScore,Player1HiPhoto[SpellNo],GetCommonDataDefault("HiBasePoint",0));//名前空間にベストショット保存、最大点は自機側で判断している
	}
}
if(GetCommonDataDefaultEx(NsScore,Player2HiPhoto[SpellNo],0)<=GetCommonDataDefault("HiBasePoint",0))
{
	if(SelectedCharacter==DefinedPlayer2)
	{
	SetCommonDataEx(NsScore,Player2HiPhoto[SpellNo],GetCommonDataDefault("HiBasePoint",0));//名前空間にベストショット保存、最大点は自機側で判断している
	}
}

	AddScore(ScoreNumber1);
	AddScore(SpellLevel*100000000+SpellSelect*10000000);

SavePhoto(SpellNo);

loop
{

	DisPlayScoreNumber(GetClipMinX+80,GetClipMinY+20,EachHiScore,ScoreNumber2);
	DisPlayScoreNumber(GetClipMaxX-10,GetClipMinY+20,ScoreNumber1,ScoreNumber2);
	if(GetCommonDataDefault("PhotoEraze",false)==true)
	{
		break;
	}
yield;
}
}

task SavePhoto(SpellNo)
{
loop
{
	if(GetCommonDataDefault("PhotoSaveReady",false)==true && GetCommonDataDefault(NsIsReplay,true) == false)
	{//写真選択可能時
		if(GetKeyState(VK_SKIP)==KEY_PUSH)
		{
			SetCommonData("DetailShooting",true);
			wait(1);
			SaveSnapShot(imgBestShotDetail[SpellNo],0,0,448,480);
			SetCommonData("DetailShooting",false);
			SetCommonData("SnapShooting",true);
			wait(1);
			SaveSnapShot(imgBestShot[SpellNo],0,0,448,480);
			wait(1);
			SetCommonData("SnapShooting",false);
			DrawKirokusimasita;
			wait(35);
		}
	}
yield;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////インクルード部////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////
#include_function ".\settingtxt/LevelNorma.txt"
#include_function ".\settingtxt/ScoreNorma.txt"
#include_function ".\settingtxt/Topic.txt"
#include_function ".\settingtxt/BGM.txt"
#include_function ".\txt/MENU.txt"
#include_function ".\txt/MENUDRAW.txt"
#include_function ".\txt/DrawMenuLetterData.txt"
#include_function ".\txt/MenuEffectData.txt"
#include_function ".\txt/stagedataforphoto.txt"
}