

ファイル構成

	①	_index			ステージ形式の実行用ファイルです。
	②	[dir]INCLUDE		_indexから呼ばれる全てのインクルードファイルが入っています。
	③	STAGE_INI		_indexから呼ばれるインクルードファイルのリストです。
	④	CONSTANT		システム定数（ステージの各状態の番号）のリストです。
	⑤	VALUABLE		システム変数（ステージの現在の状態）のリストです。
	⑥	SE			効果音の読み込みリストです。
	⑦	[dir]STAGE		各ステージの内容物が格納されます。ただしスペカ等はホームディレクトリに配置する。
	⑧	menu			メニュー画面のステージファイルです。
	⑨	spell			スペル画面のステージファイルです。



読み込む順番

	・_index
		・STAGE_INI
			・CONSTANT
			・VALUABLE
			・SE
			・各ステージ


説明

	①_index
		All_Mainタスクで、プログラム本体が終わるまでステージタスクを呼び出し続けます。
		All_Mainのloopでは、メニュー画面含めて１ステージあたり１ループで回ってきて、
		VALUABLEに存在する「nStageState」という変数をCONSTANTに存在するステージ定数で場合分けして呼び出します。
		Stagetask_***();を動かした直後でAll_Mainはwhile(fStageStateNext == false){ yield; }で一旦動作を停止します。
		呼ばれたステージタスクを満了したときに、fStageStatenextがトグルされて次のループへと以降されます。
	②[dir]INCLUDE
		インクルードディレクトリです。ステージ内容およびスペカが入ってます。
	③STAGE_INI
		SetDefaultStatusVisible(false);は、メニュー画面描画のために一旦グレイズや得点を非表示にさせておく役割があります。
		また、ここで④以降のインクルードファイルを読み出しています。
	④CONSTANT
		ここらへんが実はメニュー画面を書くうえで重要になっていきますが、4000番台の値を持っている定数を見て下さい。
		SELECT_STATE_****とか書いてますが、この****の部分が要するに「メニュー画面でどれを選択している状態か？」という判断に使われます。
		これらの接頭語を持つ状態定数に対応する変数は後述の通りVALUABLEの「nMenuSelect」で、この変数に何が入ってるかどうかを判断しながら
		メニュー画面にそれっぽい描写の変化を与えるとあたかもカーソルキーでメニュー画面が変わってるように見えるんですね。不思議です。
		今はメニュー画面は本家よりかなり少ないですが、状態定数の数を増やして描写も変化させればちゃんと拡張できます。
		そのほか、自機をスタート位置や選択した難易度・スペカの種類とかを設けています。
		本家っぽく書くなら、「今どのステージにいるか？」とか「今どの自機を選択しているか？」いう状態定数を設ければいいと思います。
	⑤VALUABLE
		書いていることの説明は概ね④にあります。
		CONSTANTは「メニュー画面のリストアップ」（いわゆるカタログ）でしたが、VALUABLEは「現在の状態」を格納しておく変数になります。
		たとえば、「nMenuSelectがSELECT_STATE_ALLなら→全てのスペカを再生する」みたいな感じで使います。
	⑥SE
		let fSELoad = false;
		fSELoad = GetCommonDataDefault("fSELoad",false);
		if(fSELoad == false){
			/* 省略 */
			
			fSELoad = true;
			SetCommonData("fSELoad",fSELoad);
		}
		と書いてあるところは、音声ファイルの二重読み込みを防止する部分です。説明が面倒で大して重要でもないのでわかる人だけ。
		ここで定義されている音声ファイルをこのスクリプトには入れてないため、実際には読み込み失敗が大量に出ています。
	⑦[dir]stage
		各ステージの内容物が入ってます。
		今回はこの中にスペカ等も格納してしまいましたが、実際にスペカを設置するときは、
		煩雑でもカレントディレクトリに設置した方が良いです。（←実際に作るときはすごく重要）
	⑧menu
		今回のメインディッシュとも言えるスクリプト部分。
		STAGE_STATE_MENUと書いてあるように、ここも１面や２面とかと同じように一つのステージとして扱われます。
		LoadGraphic_Menu();は、メニュー画面の描画に使う画像の読み込みを行っています。このファイルの下にあります。
		MenuBG();は、メニュー画面の背景を常に描画しておくタスクです。同じ優先度のエフェクトオブジェクトを使っているので、どのオブジェクトよりも先に呼びます。
		SelectObject();は、メニュー画面で選択リストを描画し、さらに現在何が選択されているのかを視覚的に表したものになります。
		ForbidShot(true);ForbidBomb(true);は、ボムやショットを打たせないように一時的に禁止しているだけです。
		
		while(nStageState == STAGE_STATE_MENU)の中身は、キーボード入力による動作を定義しています。
		例えば、①↑キーが押されたとき　②nMenuStateがMENU_STATE_INIT（最初の画面）なら　③一番上（ALL）が選択されていなければ　④選択状態を一つ上に進める
		のような感じです。Zキー（選択）Xキー（キャンセル）のときも同様に定義していきます。ここの作業が最も面倒ですね＾＾；
		特に、○○を押したら○○の画面に飛ぶといった処理は、状態遷移図を紙か何かに書いてから作ると作業効率がアップします。
		というかこの規模を超えると間違いなく状態遷移図は書かないときついでしょう。状態遷移図が分からない人はググれ。
		
		SelectObjectのタスクは、エフェクトオブジェクトの固まりです。
		ここばっかりは初心者ではどうしようもならないので勉強を要求されます。
		まず、SObjが選択項目一つ一つのオブジェクトになっていて、配列として扱われます。
		if(nMenuSelect == i + SYS_STATE + 1)では、現在選択されている状態の部分だけをイエローで表示し、それ以外をグレーで表示させることで、
		nMenuSelectを視覚かできる（つまり、現在の選択状態を目に見える形で表示できる）ということになります。
		（たとえばの話ですが、ポケモンを選択する画面で、６体いる中で一匹だけがアニメーションしていて他のより少し前に出ていたら、
		　なんとなくそのポケモンが選択状態にあると思いませんか？それと同じ原理です）
		
		let nRight = 255;
			：
		let length3 = length - length2;
		この辺はエフェクトオブジェクトを扱う際に座標打ちがちょっとだけ便利になるのでコピペでもいいから使ってみるといいかもしれません。
		
		あとは・・・まぁ、なんか見た目がごついですがかなりパターン化された書き方をしているため、
		まさに「弾幕」のようなものだととらえれば解くのは比較的容易であるはず。コメントも結構入れてるから分かりにくいことはないと思うけど…
	⑨spell
		menuで決定したスペカ・難易度をただ再生するだけです。
		再生し終わるとメニュー画面に飛ばされます。
