/*
	セーブロード画面

	$800	: 0>セーブ  1>ロード  2>Q/Aロード
	$801	: 0>タイトルから  1>その他から
	
	$803	: セーブ・ロード最大パネル数

	\10		: 画面遷移フラグ(0:初回起動 1:画面遷移(セーブ→ロード等))

	\100	: 現在のページNo
	\101	: 選択セルNo

	\110	: 操作モード
			  (0:ロード 1:セーブ 2:Qロード
			   10:削除 11:移動元 12:移動先 13:コピー元 14:コピー先)

	\120	: 最新データNo(通常)
	\121	: 最新データNo(クイック)

	\200	: 開始フラグ

	\400〜	: 一時作業用

*/

#INCLUDE
	motion.h


#PRELOAD	// 先読みファイル定義 (イメージのみ)
	sys_saveload
	sys_saveload_num1
	sys_saveload_num2
	sys_saveload_num3
	sys_saveload_num4
	sys_saveload_num_ex
	sys_saveload_panel
	sys_userfont
	sys_img_helpmes


///////////////////////////
// オブジェクト定義
#DEFINE
	CPLANE		topmask		// ホワイトアウト用の真っ白なプレーン
	CIMAGE		basemask	// スクリプト間のつなぎ用白画像ベースイメージ用

	PLANE		pl			// 表示用プレーン

	IMAGE		img_bg		// 背景画像

	IMAGE		img_page_now[2]	// 現在のページNo
	IMAGE		img_page_max[2]	// 最大ページNo

	BUTTON		btn_sys[13]	// システム系ボタン

	IMAGE		img_help		// ヘルプ画像

	SAVEPANEL	data[12]		// データパネル
	BUTTON		btn_data[12];	// データパネルボタン

	IMAGE		font_num		// フォント−実時間
	IMAGE		font_day		// フォント−ゲーム内日時
	IMAGE		font_week		// フォント−ゲーム内曜日
	IMAGE		font_ex			// フォント−ゲーム内特殊日時（オープニング等）


///////////////////////////
// オブジェクト初期化

// ホワイトアウト用の真っ白なプレーン
#OBJECT		COLOR		PRI		SIZE		DISP
topmask		0x00ffffff	20000	1280,720	0

// スクリプト間のつなぎ用白画像ベースイメージ用
#OBJECT		COLOR		SIZE		PRI		DISP	PL
basemask	0xffffffff	1280,720	1000	0		pl

// 表示用プレーン
#OBJECT	POS		BASE	PRI		VRAM	SIZE		DISP
pl		0,0 	0,0 	5000	0,852	1280,720	0

// 背景画像
#OBJECT		FILE			ID.0	ID.1	ID.2	PRI	PL	DISP
img_bg		sys_saveload	0		1		2		30	pl	0

// ページNo
#OBJECT			FILE						PRI	PL	DISP
img_page_now	sys_saveload_font_page_now	40	pl	0	// 現在値
img_page_max	sys_saveload_font_page_max	50	pl	0	// 最大値

#OBJECT			POS2
img_page_now[0]	sys_saveload:1302
img_page_now[1]	sys_saveload:1303
img_page_max[0]	sys_saveload:1300
img_page_max[1]	sys_saveload:1301

// システム系ボタン
#OBJECT		FILE			PRI	ENABLE	PL	DISP
btn_sys		sys_saveload	100	0		pl	0

#OBJECT		ID.0	ID.1	ID.2	ID.3
btn_sys[0]	100		200		300		400		// ページ追加
btn_sys[1]	101		201		301		401		// 最初のページへ
btn_sys[2]	102		202		302		402		// 前のページへ
btn_sys[3]	103		203		303		403		// 次のページヘ
btn_sys[4]	104		204		304		404		// 最後のページへ
btn_sys[5]	105		205		305		405		// セーブロード画面終了（戻る）
btn_sys[6]	106		206		306		406		// ゲーム終了
btn_sys[7]	107		207		307		407		// ロード画面へ
btn_sys[8]	108		208		308		408		// セーブ画面へ
btn_sys[9]	109		209		309		409		// Ｑロード画面へ
btn_sys[10]	110		210		310		410		// データ削除
btn_sys[11]	111		211		311		411		// データ交換
btn_sys[12]	112		212		312		412		// データコピー

// データパネル
#OBJECT	FILE				PRI	PL	DISP
data	sys_saveload_panel	200	pl	0

#OBJECT		POS2
data[0]		sys_saveload:1100
data[1]		sys_saveload:1101
data[2]		sys_saveload:1102
data[3]		sys_saveload:1103
data[4]		sys_saveload:1104
data[5]		sys_saveload:1105
data[6]		sys_saveload:1106
data[7]		sys_saveload:1107
data[8]		sys_saveload:1108
data[9]		sys_saveload:1109
data[10]	sys_saveload:1110
data[11]	sys_saveload:1111

// データパネルボタン
#OBJECT		FILE			PRI	DISP	ENABLE
btn_data	sys_saveload	300	0		0

#OBJECT			ID.0
btn_data[0]		1100
btn_data[1]		1101
btn_data[2]		1102
btn_data[3]		1103
btn_data[4]		1104
btn_data[5]		1105
btn_data[6]		1106
btn_data[7]		1107
btn_data[8]		1108
btn_data[9]		1109
btn_data[10]	1110
btn_data[11]	1111

// フォント
#OBJECT		FILE
font_num	sys_saveload_font_num	// セーブ日時（実時間）
font_day	sys_saveload_font_day	// ゲーム内日時
font_week	sys_saveload_font_week	// ゲーム内曜日
font_ex		sys_saveload_font_ex	// ゲーム内特殊日時（オープニング等）

// ヘルプ
#OBJECT		FILE		ID.0	PRI		PL	DISP	POS2
img_help	sys_helpmes	0		1000	pl	0		sys_saveload:1000


// キーボード・ジョイパッド入力設定
#KEYBLOCK	5	//(w,h)	上,下,左,右
0				5,1		-1,1,-1,-1
1				3,4		0,2,-1,-1
2				8,1		1,-1,-1,-1
3				1,1		-1,-1,-1,1
4				1,1		-1,-1,1,-1

#OBJECT			KEYBLOCK	// (block,x,y)
btn_sys[1]		0,0,0
btn_sys[2]		0,1,0
btn_sys[3]		0,2,0
btn_sys[4]		0,3,0
btn_sys[0]		0,4,0

btn_data[0]		1,0,0
btn_data[1]		1,0,1
btn_data[2]		1,0,2
btn_data[3]		1,0,3

btn_data[4]		1,1,0
btn_data[5]		1,1,1
btn_data[6]		1,1,2
btn_data[7]		1,1,3

btn_data[8]		1,2,0
btn_data[9]		1,2,1
btn_data[10]	1,2,2
btn_data[11]	1,2,3

btn_sys[8]		2,0,0
btn_sys[7]		2,1,0
btn_sys[9]		2,2,0
btn_sys[6]		2,3,0

btn_sys[10]		2,4,0
btn_sys[11]		2,5,0
btn_sys[12]		2,6,0
btn_sys[5]		2,7,0



///////////////////////////
// スタート
#START
	// キー入力による演出スキップをOFF
	keyskip off

	// カーソルがボタン以外の場所にあった時に矢印キーが押された場合の
	// 移動先ボタンの設定
	btn_data[0] noact 1		// 左上のデータパネル

	// 最新のセーブデータを調べる
	newsave 850 0 1200		// 通常セーブ(最大99ページx12セル=1188個なので、0〜1200としている)
	\120 = $850
	newsave 850 5000 5011	// Qセーブ(5000〜5011の計12個)
	\121 = $850

	// 最新データのページNo
	if( \120 < 0 )
		\100 = 0			// 最新が無い場合は先頭ページとする
	else
		\100 = \120 / 12	// １ページあたりのパネル数で割ってページNoを算出
	endif

	// 初期操作モードを\110に設定
	\110 = $800

	// データ削除・交換・コピー対象を保持するフラグを初期化
	\130 = 131 = -1

	// ヘルプ表示をリセット
	call RESET_HELP

	// タイトル画面から呼ばれた場合は真っ白プレーンで覆う
	if( $801 == 0 )
		// タイトル画面からの処理
		topmask disp 1	// 真っ白プレーンを表示
	else
		// シーンからの処理
		// 黒画面からなので特になにもしない
	endif

	// 一旦ここでwait
	wait

	// パネル設定へ
	next SET_PANNEL


///////////////////////////
// パネル設定
#SET_PANNEL
	// 背景
	data ptype NORM 0	// 通常
	data ptype NORM 1	// フォーカス
	data ptype NORM 2	// 押下

	// サムネイル
	data ptype NORM 10			// データ無し用サムネイル
	data ptype SIMAGE 11 0x100	// データサムネイル

	// 文章表示
	data ptype SSTR 12 0x200 12 14 0xffffffff 3 0xff404040 2 2

	// ゲーム内日時
	data ptype NUM_O 20 font_day 0	// 月
	data ptype NUM_O 21 font_day 0	// 日
	data ptype NUM_O 22 font_week 0	// 曜日
	data ptype NUM_O 23 font_ex 0	// 特殊表示（オープニング・エンディングなど）

	// 日時用の○月○日（○）
	data ptype NORM 30

	// 最新マーク
	data ptype NORM 40	// 通常データ用
	data ptype NORM 41	// Ｑデータ用

	// セーブデータ日時（実時間）
	// 年
	data ptype NUM_O 100 font_num DATE_Y:1000
	data ptype NUM_O 101 font_num DATE_Y:100
	data ptype NUM_O 102 font_num DATE_Y:10
	data ptype NUM_O 103 font_num DATE_Y:1

	// 月
	data ptype NUM_O 110 font_num DATE_M:10
	data ptype NUM_O 111 font_num DATE_M:1

	// 日
	data ptype NUM_O 120 font_num DATE_D:10
	data ptype NUM_O 121 font_num DATE_D:1

	// 時
	data ptype NUM_O 130 font_num DATE_H:10
	data ptype NUM_O 131 font_num DATE_H:1

	// 分
	data ptype NUM_O 140 font_num DATE_N:10
	data ptype NUM_O 141 font_num DATE_N:1

	// 文章表示にユーザーフォントを設定
	data userfont 12 sys_userfont 0x8740 1
	data userfont 12 sys_userfont 0x8741 2
	data userfont 12 sys_userfont 0x8742 3
	data userfont 12 sys_userfont 0x8743 4
	data userfont 12 sys_userfont 0x8744 5
	data userfont 12 sys_userfont 0x8745 6
	data userfont 12 sys_userfont 0x8746 7
	data userfont 12 sys_userfont 0x8747 8
	data userfont 12 sys_userfont 0x8748 9

	// パネル表示処理へ
	next DISP_PANEL


///////////////////////////
// パネル表示
#DISP_PANEL
	// 全てのボタンを無効化
	// 画面が切り替わった時などにも呼ばれるため、切替中にボタンが反応しないようにする
	call DISABLE_ALL_BUTTON

	// パネル表示ループへ
	\0 = 0	// ループカウンタ
	next DISP_PANEL_LOOP


///////////////////////////
// パネル表示ループ
#DISP_PANEL_LOOP
	// １ページ分処理したらループを抜ける
	if( \0 >= 12 )	next DISP

	// セーブデータが存在するか調べる
	if( $800 == 0 || $800 == 1 )	// セーブ・ロードの時
		\400 = \100*12+\0	// セーブデータNo
	else							// Ｑロードの時
		\400 = 5000+\0		// QデータNo(5000から)
	endif
	saveexist \400 870+\0 0x00010000	// $870〜に存在しているかを設定

	// 存在するかどうかで表示内容を変える
	if( $(870+\0) )		call SETDATA_EXIST		// 存在している場合
	if( $(870+\0)==0 )	call SETDATA_NODATA		// 無い場合

	\0++
	next DISP_PANEL_LOOP


///////////////////////////
// セーブデータが存在している場合の処理
#SETDATA_EXIST
	// まずは全部非表示にしてしまう
	data[\0] dispid 0 [0-50]

	// パネル背景
	if( \130 == \400 || \131 == \400 )
		// データ削除・交換・コピーモードで選択されているデータの場合は押下状態にする
		data[\0] dispid 1 2
	else
		// それ以外の場合は通常の状態にする
		data[\0] dispid 1 0
	endif

	data[\0] dispid 1 11 12		// サムネイル・文章
	data[\0] dispid 1 [100-141]	// セーブ時日時

	// 最新マーク
	if( $800 == 0 || $800 == 1 )	// セーブ/ロードの時
		if( \400 == \120 )	data[\0] dispid 1 40	// 最新なら表示
	else							// Ｑロードの時
		if( \400 == \121 )	data[\0] dispid 1 41	// 最新なら表示
	endif

	// 次からの処理でセーブデータ内のフラグ情報を取得する為、一度セーブデータを
	// セットして、フラグ情報を取得出来るようにする
	data[\0] setsave \400 0x00000400 0

	// 特殊日時が設定されているフラグを$850に取得
	data[\0] getflag 104 850

	if( $850 == 0 )		// 特殊日時が設定されていない場合
		// ゲーム中日時を表示
		data[\0] dispid 1 20 21 22 30	// 月・日・曜日とベース（○月○日()）を表示
		data[\0] getflag 101 850		// 月が設定されているフラグを取得
		data[\0] setnum 20 $850			// 値（月）を設定
		data[\0] getflag 102 850		// 同様に日
		data[\0] setnum 21 $850
		data[\0] getflag 103 850		// 同様に曜日
		data[\0] setnum 22 $850
	else
		// 特殊日時を表示
		data[\0] dispid 1 23		// 特殊日時を表示
		data[\0] setnum 23 $850		// 特殊日時に表示する内容(ID)を設定
	endif

	// 再度セーブデータを設定
	// これを行った時点でパネル画像が更新されるため。（やらないと表示異常が出る）
	data[\0] setsave \400 0x00000400 0


///////////////////////////
// セーブデータが無い場合の処理
#SETDATA_NODATA
	// まずは全部非表示にしてしまう
	data[\0] dispid 0 [0-50]
	data[\0] dispid 0 [100-141]

	data[\0] dispid 1 0		// パネル背景

	data[\0] dispid 1 10	// データ無し用サムネイル

	// セーブデータを設定
	// これを行った時点でパネル画像が更新されるため。
	// データが無いからといって省くと正しくパネルが表示されない
	data[\0] setsave \400 0x00000400 0


///////////////////////////
// その他の表示処理
#DISP
	// 背景を設定
	img_bg setid $800	// モード（セーブ・ロード・Ｑロード）によって背景を変える

	// 背景を表示
	img_bg disp 1

	// データパネルを表示
	data disp 1

	// ページ番号を表示
	img_page_max disp 0		// 一旦非表示
	img_page_now disp 0
	if( $800 == 0 || $800 == 1 )
		// セーブ・ロードの時
		// 最大値の設定
		img_page_max[0] settbl 0 $803%10
		img_page_max[1] settbl 0 $803/10
		// 現在値の設定
		img_page_now[0] settbl 0 (\100+1)%10	// 現在のページNoは0スタートなので+1している
		img_page_now[1] settbl 0 (\100+1)/10
		// 十の位は0以外の時だけ表示させる
		if( $803/10 > 0 )		img_page_max[1] disp 1
		if( (\100+1)/10 > 0 )	img_page_now[1] disp 1
		// 一の位は常に表示
		img_page_max[0] disp 1
		img_page_now[0] disp 1
	else
		// Ｑロードの時はページNoは表示しない
	endif

	// settblで書き換えたテーブルを適用するためのsetid
	// これで画像がsettblで設定された内容に書き換わる
	img_page_max setid 0
	img_page_now setid 0

	// システムボタンを表示
	btn_sys disp 1

	// システムボタンの有効・無効（画像）を設定
	btn_sys setid 0		// とりあえず全て有効（通常）に設定
	if( $800 == 0 )
		// セーブの時はセーブ画面に移行ボタンを押下状態にする
		btn_sys[8] setid 3
	endif
	if( $800 == 1 )
		// ロードの時はロード画面に移行ボタンを押下状態にする
		btn_sys[7] setid 3
	endif
	if( $800 == 2 )
		// Qロードの時はQロード画面に移行ボタンを押下状態にする
		btn_sys[9] setid 3
	endif
	if( $801 == 0 )
		// タイトル画面から呼ばれた場合はセーブ画面に移行ボタンをグレーにする
		btn_sys[8] setid 1
	endif
	if( $803 == 99 )
		// 最大ページ数が99(MAX)の場合はページ追加ボタンをグレーにする
		btn_sys[0] setid 1
	endif
	if( \100 == 0 )
		// 現在のページNoが0(先頭)の場合はページ戻る系ボタンをグレーにする
		btn_sys[1] setid 1	// 最初のページへ
		btn_sys[2] setid 1	// 前のページヘ
	endif
	if( \100 == $803-1 )
		// 現在のページNoが最終ページならページ進む系ボタンをグレーにする
		btn_sys[3] setid 1	// 次のページへ
		btn_sys[4] setid 1	// 最後のページヘ
	endif

	// Qロードの時はページ系、パネル操作系のボタンをグレーにする
	if( $800 == 2 )
		btn_sys[0] setid 1		// ページ追加
		btn_sys[1] setid 1		// 最初のページ
		btn_sys[2] setid 1		// 前のページ
		btn_sys[3] setid 1		// 次のページ
		btn_sys[4] setid 1		// 最後のページ
		btn_sys[10] setid 1		// データ削除
		btn_sys[11] setid 1		// データ交換
		btn_sys[12] setid 1		// データコピー
	endif

	// ヘルプ画像を表示
	img_help disp 1

	// 画像更新が大量に入るので、一旦waitして更新してしまう
	// この方が次のフェードイン処理の開始でもたつかない（カクつかない）です
	wait 1

	// 表示用プレーンを表示
	pl disp 1

	// 表示演出
	if( \10 == 0 )	// 画面(スクリプト)が呼ばれたばかりのとき
		if( $801 == 0 )
			// タイトル画面からの処理
			topmask fade 16 255 0	// 真っ白プレーンをフェードアウト
		else
			// シーンからの処理
			pl fade 16 0 255		// 表示用プレーンをフェードイン
		endif
		if( \120 >= 0 )
			// 最新データがある場合はそのパネルにカーソルを自動移動
			automove btn_data[\120%12]
		endif
	endif
	if( \10 == 1 )	// モードが切り替わった時（セーブ⇔ロード⇔Ｑロード）
		pl fade 16 0 255	// 表示用プレーンをフェードイン
	endif

	// 演出（フェードイン）待ち
	wait

	// ベースイメージを削除
	baseimg

	// 表示演出フラグに2を設定して、パネル内容更新時などでフェード演出されないようにする
	\10 = 2

	// ボタンを有効化
	call ENABLE_BUTTON

	// 入力待ち（メインループ）へ
	next WAIT


///////////////////////////
// 入力待ち（メインループ）
#WAIT
	// 右クリックされた時の処理
	if( _CLICK_R_ != 0 )
		// セーブ・ロード・Ｑロードモードの時は終了処理へ
		if( \110 < 10 )		next EXIT

		// それ以外の時はデータ削除・交換・コピーモード
		// この時はそのモードを終了して、セーブ・ロードモードに戻す

		// モードを元に戻す（削除・交換・コピー終了）
		\110 = $800

		// ヘルプ画像を元に戻す
		if( \110 == 0 )		// セーブの時
			img_help settbl 0 120
		else				// ロード・Ｑロードの時
			img_help settbl 0 121
		endif
		img_help setid 0	// settblでの書き換えを適用

		// パネル表示を更新
		next DISP_PANEL
	endif

	// マウスホイールの処理
	if( $800 != 2 )		// Qロード以外の場合
		if( _PAGE_U_!=0 )	next SYS_BEFORE	// ホイール↑の時は前のページへ
		if( _PAGE_D_!=0 )	next SYS_NEXT	// ホイール↓の時は次のページへ
	endif


///////////////////////////
// 終了処理
#EXIT
	// すべてのボタンを無効化
	call DISABLE_ALL_BUTTON

	// ヘルプ画像を消す
	img_help disp 0

	// フェードアウト
	if( $801 == 0 )
		// タイトル画面からの処理
		topmask disp 1			// 真っ白プレーンを表示して...
		topmask fade 30 0 255	// フェード（白で覆う）
	else
		// シーンからの処理
		pl fade 30 255 0		// 表示プレーンをフェードアウト
	endif

	// 演出待ち
	wait

	// 表示用プレーンを消す
	pl disp 0

	if( $801 == 0 )
		// タイトル画面からの処理
		baseimg basemask	// ベースイメージに白画像を設定
	endif

	wait 1

	// 終了
	exit -2		// 終了コード-2で普通に終了(0以上だとその番号をロードしてしまう)

	// 終了後の空ループへ
	next SLEEP


///////////////////////////
// 終了後の空ループ
#SLEEP




///////////////////////////
// 各種ボタンの有効化
#ENABLE_BUTTON
	// とりあえず全てのボタンを有効にする
	btn_sys enable 1		// システム系ボタン
	btn_data enable 1		// データボタン

	if( $800 == 0 )
		// セーブ画面の時は『セーブ画面へ』を無効
		btn_sys[8] enable 0
	endif
	if( $800 == 1 )
		// ロード画面の時は『ロード画面へ』を無効
		btn_sys[7] enable 0
	endif
	if( $800 == 2 )
		// Qロード画面の時は『Qロード画面へ』を無効
		btn_sys[9] enable 0
	endif
	if( $801 == 0 )
		// タイトル画面からの時は『セーブ画面へ』を無効
		btn_sys[8] enable 0
	endif
	if( $803 == 99 )
		// 最大ページ数が99(MAX)の時は『ページ追加』を無効
		btn_sys[0] enable 0
	endif
	if( \100 == 0 )
		// 現在のページが先頭ページの時はページを戻す系を無効
		btn_sys[1] enable 0		// 先頭ページへ
		btn_sys[2] enable 0		// 前のページヘ
	endif
	if( \100 == $803-1 )
		// 現在のページが最終ページの時はページを進む系を無効
		btn_sys[3] enable 0		// 次のページへ
		btn_sys[4] enable 0		// 最後のページヘ
	endif

	if( $800 == 2 )
		// Qロード画面の時はページ操作系・パネル操作系を無効
		btn_sys[0] enable 0		// ページ追加
		btn_sys[1] enable 0		// 先頭ページへ
		btn_sys[2] enable 0		// 前のページヘ
		btn_sys[3] enable 0		// 次のページへ
		btn_sys[4] enable 0		// 最後のページヘ
		btn_sys[10] enable 0	// 削除
		btn_sys[11] enable 0	// 交換
		btn_sys[12] enable 0	// コピー
	endif

	if( \110 >= 10 )
		// 削除・交換・コピーモードの時はシステムボタンを無効化
		call DISABLE_SYS_BUTTON
	endif


///////////////////////////
// すべてのボタンを無効化
#DISABLE_ALL_BUTTON
	btn_sys enable 0
	btn_data enable 0


///////////////////////////
// システムボタンを無効化（ページ移動系は除く）
#DISABLE_SYS_BUTTON
	// ボタンを無効化
	btn_sys[0] enable 0		// ページ追加
	btn_sys[5] enable 0		// 戻る
	btn_sys[6] enable 0		// ゲーム終了
	btn_sys[7] enable 0		// ロード画面へ
	btn_sys[8] enable 0		// セーブ画面へ
	btn_sys[9] enable 0		// Qロード画面へ
	btn_sys[10] enable 0	// 削除
	btn_sys[11] enable 0	// 交換
	btn_sys[12] enable 0	// コピー

	// ボタンをグレー表示
	btn_sys[0] setid 1		// ページ追加
	btn_sys[5] setid 1		// 戻る
	btn_sys[6] setid 1		// ゲーム終了
	btn_sys[7] setid 1		// ロード画面へ
	btn_sys[8] setid 1		// セーブ画面へ
	btn_sys[9] setid 1		// Qロード画面へ
	btn_sys[10] setid 1		// 削除
	btn_sys[11] setid 1		// 交換
	btn_sys[12] setid 1		// コピー

	// 削除モードの時は削除ボタンが選択されている状態にする
	if( \110 == 10 )	btn_sys[10] setid 3

	// 交換モードの時は交換ボタンが選択されている状態にする
	if( \110 == 11 || \110 == 12 )	btn_sys[11] setid 3

	// コピーモードの時はコピーボタンが選択されている状態にする
	if( \110 == 13 || \110 == 14 )	btn_sys[12] setid 3


///////////////////////////
// ヘルプ表示をリセット
#RESET_HELP
	img_help settbl 0 120+\110
	img_help setid 0


////////////////////////////////////////
// イベントハンドラ（ボタン処理）

// システム系ボタン
#btn_sys.FOCUS
	// ボタンの色を変える
	@ setid 2

	// ヘルプ画像を表示
	if( @ == 5 )
		// 『戻る』ボタンの時はモードによって表示画像を変更
		if( $800 == 0 )	img_help settbl 0 5+100		// セーブの時
		if( $800 == 1 )	img_help settbl 0 40+100	// ロードの時
		if( $800 == 2 )	img_help settbl 0 41+100	// Qロードの時
	else
		// 『戻る』以外のボタン
		img_help settbl 0 @+100
	endif
	// IDテーブルを書き換えたのでsetidで適用
	img_help setid 0

#btn_sys.UNFOCUS
	// ボタンの色を元に戻す
	@ setid 0

	// ヘルプを元に戻す
	call RESET_HELP

#btn_sys.PUSH_L
	// ボタンの色を変える
	@ setid 3

	// 押されたボタンに合わせて処理を行う
	if( @ == 0 )	next SYS_PAGE		// ページ追加
	if( @ == 1 )	next SYS_BEGIN		// 最初のページヘ
	if( @ == 2 )	next SYS_BEFORE		// 前のページヘ
	if( @ == 3 )	next SYS_NEXT		// 次のページへ
	if( @ == 4 )	next SYS_END		// 最後のページヘ
	if( @ == 5 )	next SYS_EXIT		// 戻る
	if( @ == 6 )	next SYS_QUIT		// ゲーム終了
	if( @ == 7 )	next SYS_LOAD		// ロード画面へ
	if( @ == 8 )	next SYS_SAVE		// セーブ画面へ
	if( @ == 9 )	next SYS_QLOAD		// Qロード画面へ
	if( @ == 10 )	next SYS_DATA_DEL	// 削除
	if( @ == 11 )	next SYS_DATA_MOVE	// 交換
	if( @ == 12 )	next SYS_DATA_COPY	// コピー


// データボタン
#btn_data.FOCUS
	// パネルの背景を変える
	data[@] dispid 0 0	// 通常用をOFF
	data[@] dispid 1 1	// フォーカス用をON

#btn_data.UNFOCUS
	// パネルの背景を元に戻す
	data[@] dispid 0 1	// 通常用をON
	data[@] dispid 1 0	// フォーカス用をOFF

#btn_data.PUSH_L
	// 押されたパネルNo
	\101 = @

	// 押されたデータNo
	if( \110 == 2 )		// Qロードの時
		\102 = 5000+@
	else				// それ以外の時
		\102 = \100*12+@
	endif

	// パネルの背景を変える
	data[\101] dispid 0 0 1	// 通常用・フォーカス用をOFF
	data[\101] dispid 1 2	// 押下用をON

	// モードによって処理を変える
	if( \110 == 0 )	next SAVE_DATA	// セーブの時はデータセーブ処理へ
	if( \110 == 1 )	next LOAD_DATA	// ロードの時はデータロード処理へ
	if( \110 == 2 )	next LOAD_DATA	// Qロードの時はデータロード処理へ

	if( \110 >= 10 )
		// 削除・交換・コピーの時は、セル選択終了処理へ
		next SEL_SLOT_END
	endif



////////////////////////////////////////
// ページ追加
#SYS_PAGE
	// 最大ページ数に達してなければ処理
	if( $803 < 99 )
		$803++	// ページ数＋１
		if( $803 >= 99 )
			// 最大ページ数に達した時は、ヘルプをリセット
			call RESET_HELP
		endif
		// パネル更新処理へ
		next DISP_PANEL
	endif
	wait 1	// #WAITから呼ばれた場合、これを入れないと永久ループしてしまう
	next WAIT


////////////////////////////////////////
// 先頭ページ
#SYS_BEGIN
	// ヘルプを元に戻す
	call RESET_HELP

	if( \100 > 0 )
		// 現在が先頭ページでなければ先頭ページへ移動
		\100 = 0
		next DISP_PANEL	// パネル更新へ
	endif
	wait 1	// #WAITから呼ばれた場合、これを入れないと永久ループしてしまう
	next WAIT


////////////////////////////////////////
// 前ページ
#SYS_BEFORE
	// 先頭ページでなければ処理
	if( \100 > 0 )
		\100--	// １ページ戻る
		if( \100 == 0 )
			// 先頭ページまで戻った時はヘルプをリセット
			call RESET_HELP
		endif
		next DISP_PANEL	// パネル更新へ
	endif
	wait 1	// #WAITから呼ばれた場合、これを入れないと永久ループしてしまう
	next WAIT


////////////////////////////////////////
// 次ページ
#SYS_NEXT
	// 最終ページでなければ処理
	if( \100 < $803-1 )
		\100++	// １ページ進む
		if( \100 >= $803-1 )
			// 最終ページに達した時はヘルプをリセット
			call RESET_HELP
		endif
		next DISP_PANEL	// パネル更新へ
	endif
	wait 1	// #WAITから呼ばれた場合、これを入れないと永久ループしてしまう
	next WAIT


////////////////////////////////////////
// 最終ページ
#SYS_END
	// ヘルプをリセット
	call RESET_HELP

	if( \100 < $803-1 )
		// 現在が最終ページでなければ、最終ページまで進む
		\100 = $803-1
		next DISP_PANEL	// パネル更新へ
	endif
	wait 1	// #WAITから呼ばれた場合、これを入れないと永久ループしてしまう
	next WAIT


////////////////////////////////////////
// 戻る
#SYS_EXIT
	next EXIT


////////////////////////////////////////
// ゲーム終了
#SYS_QUIT
	// 全てのボタンを無効化
	call DISABLE_ALL_BUTTON
	
	// ゲーム終了確認ダイアログ
	\0 = 0	// 確認内容コード
	strvar 400 SYS_QUIT2	// 確認ダイアログが終了した後の飛び先の設定
	next CONFIRM	// 確認ダイアログへ

// ゲーム終了確認ダイアログ実行後
#SYS_QUIT2
	if( \0 == 0 )	// 『いいえ』が選択された
		// ヘルプをリセット
		call RESET_HELP
		// ゲーム終了ボタンを元に戻す
		btn_sys[6] setid 0
		// ボタン有効化
		call ENABLE_BUTTON
		// 入力待ちループへ
		next WAIT
	endif

	// 『はい』が選択された

	// ヘルプを消す
	img_help disp 0

	// 画面フェードアウト
	if( $801 == 0 )
		// タイトル画面からの処理
		topmask disp 1			// 真っ白プレーンを表示して...
		topmask fade 30 0 255	// フェード
	else
		// シーンからの処理
		pl fade 30 255 0		// 表示用プレーンをフェードアウト
	endif
	// フェード終了待ち
	wait

	// 表示用プレーンを消す
	pl disp 0

	if( $801 == 0 )
		// タイトル画面からの処理
		baseimg basemask	// 真っ白画像をベースイメージに設定
	endif

	// スクリプト終了
	exit -3		// -3はゲーム終了のコード
	next SLEEP


////////////////////////////////////////
// ロード画面
#SYS_LOAD
	// 現在表示されている状態(pl内の画像)をベースイメージ化
	baseimg pl

	// 表示用プレーンを消す
	// 表示用プレーンは消えてもベースイメージで表示されているので
	// この段階では見た目上は画面の変更は起きていない
	pl disp 0

	// ロード画面状態にフラグを設定
	$800 = 1	// ロード画面
	\110 = 1	// ロードモード

	// 画面をフェードインさせるため、\10に1を入れる
	\10 = 1

	// ヘルプをリセット
	call RESET_HELP

	// パネル更新へ
	next DISP_PANEL


////////////////////////////////////////
// セーブ画面
#SYS_SAVE
	// 基本的には#SYS_LOADと同じなのでコメントは割愛します
	baseimg pl
	pl disp 0
	$800 = 0	// セーブ画面
	\110 = 0	// セーブモード
	\10 = 1
	call RESET_HELP
	next DISP_PANEL


////////////////////////////////////////
// クイックロード
#SYS_QLOAD
	// 基本的には#SYS_LOADと同じなのでコメントは割愛します
	baseimg pl
	pl disp 0
	$800 = 2	// Qロード画面
	\110 = 2	// Qロードモード
	\10 = 1
	call RESET_HELP
	next DISP_PANEL


////////////////////////////////////////
// データ削除
#SYS_DATA_DEL
	// 全てのボタンを無効化
	call DISABLE_SYS_BUTTON

	// データ削除ボタンを押下状態に変更する
	btn_sys[10] setid 3

	// 現在のモードを一時退避
	\111 = \110

	// モードを削除モードに変更
	\110 = 10

	// ヘルプ表示をリセット
	call RESET_HELP

	// 削除セル選択後の飛び先を設定
	strvar 400 SYS_DATA_DEL2

	// 一旦更新
	wait 1

	// セル選択へ
	next SEL_SLOT


// セル選択から戻ってきた時の処理
#SYS_DATA_DEL2
	// 選択されたセルをバックアップ
	\130 = \0

	// セルにデータが存在しているか
	if( $(870+(\102%12)) )
		// 存在している場合は削除確認ダイアログを表示

	 	// パネル背景を選択状態に変更
		data[\130%12] dispid 0 0 1	// 通常・フォーカスを非表示
		data[\130%12] dispid 1 2	// 押下状態を表示
		strvar 400 SYS_DATA_DEL3	// 確認ダイアログ終了後の飛び先
		\0 = 3						// 確認内容の設定
		next CONFIRM				// 確認ダイアログ処理へ
	endif
	
	// データが存在していない場合 → 削除をキャンセルして元に戻す

	// モードを元に戻す
	\110 = \111

	// ヘルプリセット
	call RESET_HELP

	// パネル更新へ
	next DISP_PANEL


// 確認ダイアログ終了後の処理
#SYS_DATA_DEL3
	if( \0 == 1 )
		// 『はい』が選択された
		savedelete \130		// セーブデータを削除
		newsave 850 0 1200	// 最新データを再検索
		\120 = $850			// \120 = 最新データNo
	endif

	// モードを元に戻す
	\110 = \111

	// データ削除・交換・コピー対象を保持するフラグを初期化
	\130 = 131 = -1

	// ヘルプリセット
	call RESET_HELP

	// パネル更新へ
	next DISP_PANEL


////////////////////////////////////////
// データ交換
#SYS_DATA_MOVE
	// 全てのボタンを無効化
	call DISABLE_SYS_BUTTON

	// データ交換ボタンを押下状態に変更
	btn_sys[11] setid 3

	// 現在のモードを一時退避
	\111 = \110

	// モードを交換（交換元選択）モードに変更
	\110 = 11

	// ヘルプ表示をリセット
	call RESET_HELP

	// 交換元セル選択後の飛び先を設定
	strvar 400 SYS_DATA_MOVE2

	// 一旦更新
	wait 1

	// セル選択へ
	next SEL_SLOT


// セル選択（交換元選択）から戻ってきた時の処理
#SYS_DATA_MOVE2
	// 選択されたセル（交換元）を保存
	\130 = \0

 	// パネル背景を選択状態に変更
	data[\130%12] dispid 0 0 1	// 通常・フォーカスを非表示
	data[\130%12] dispid 1 2	// 押下状態を表示

	// モードを交換（交換先選択）モードに変更
	\110 = 12

	// ヘルプをリセット
	call RESET_HELP

	// 交換先セル選択後の飛び先を設定
	strvar 400 SYS_DATA_MOVE3

	// 一旦更新
	wait 1

	// セル選択へ
	next SEL_SLOT


// セル選択（交換先選択）から戻ってきた時の処理
#SYS_DATA_MOVE3
	if( \0 == \130 )
		// 選択されたセルが交換元と同じなら、もう一度交換先の選択を行う
		next SYS_DATA_MOVE2
	endif

	// 交換先セルを保存
	\131 = \0

 	// パネル背景を選択状態に変更
	data[\131%12] dispid 0 0 1	// 通常・フォーカスを非表示
	data[\131%12] dispid 1 2	// 押下状態を表示

	// 交換するかの確認ダイアログ処理へ
	strvar 400 SYS_DATA_MOVE4	// 確認ダイアログ終了後の飛び先
	\0 = 5						// 確認内容の設定
	next CONFIRM				// 確認ダイアログ処理へ


// 確認ダイアログ終了後の処理
#SYS_DATA_MOVE4
	if( \0 == 1 )
		// 『はい』が選択された
		saveexchg \130 \131		// データを交換
		newsave 850 0 1200		// 最新データを再検索
		\120 = $850				// \120 = 最新データNo
	endif

	// モードを元に戻す
	\110 = \111

	// データ削除・交換・コピー対象を保持するフラグを初期化
	\130 = 131 = -1

	// ヘルプリセット
	call RESET_HELP

	// パネル更新へ
	next DISP_PANEL


////////////////////////////////////////
// データコピー
#SYS_DATA_COPY
	// 全てのボタンを無効化
	call DISABLE_SYS_BUTTON

	// データコピーボタンを押下状態に変更
	btn_sys[12] setid 3

	// 現在のモードを一時退避
	\111 = \110

	// モードをコピー（コピー元選択）モードに変更
	\110 = 13

	// ヘルプ表示をリセット
	call RESET_HELP

	// コピー元選択へ
	next SYS_DATA_COPY1


// コピー元選択
#SYS_DATA_COPY1
	// コピー元セル選択後の飛び先を設定
	strvar 400 SYS_DATA_COPY2

	// 一旦更新
	wait 1

	// セル選択へ
	next SEL_SLOT


// コピー元選択から戻ってきた時の処理
#SYS_DATA_COPY2
	// 選択されたデータが存在するかチェック
	saveexist \0 850 0x00010000
	if( !$850 )
		// 存在しない場合はコピー元選択をやり直し
		data[\0%12] dispid 1 1		// フォーカス状態を表示
		data[\0%12] dispid 0 0 2	// 通常・押下状態を非表示
		next SYS_DATA_COPY1		// コピー元選択に戻る
	endif

	// コピー元セルを保存
	\130 = \0

	// 選択されたセルを押下状態に変更する
	data[\130%12] dispid 0 0 1	// 通常・フォーカスを非表示
	data[\130%12] dispid 1 2	// 押下状態を表示

	// モードをコピー（コピー先選択）モードに変更
	\110 = 14

	// ヘルプをリセット
	call RESET_HELP

	// コピー先セル選択後の飛び先を設定
	strvar 400 SYS_DATA_COPY3

	// 一旦更新
	wait 1

	// セル選択へ
	next SEL_SLOT


// コピー先選択後の処理
#SYS_DATA_COPY3
	if( \0 == \130 )
		// コピー元とコピー先が同じセルの場合はコピー先を選択しなおし
		next SYS_DATA_COPY2
	endif

	// コピー先セルを保存
	\131 = \0

	// 選択されたセルを押下状態に変更する
	data[\131%12] dispid 0 0 1	// 通常・フォーカスを非表示
	data[\131%12] dispid 1 2	// 押下状態を表示

	// コピーするかの確認ダイアログ処理へ
	strvar 400 SYS_DATA_COPY4	// 確認ダイアログ終了後の飛び先
	\0 = 6						// 確認内容の設定
	next CONFIRM				// 確認ダイアログ処理へ


// 確認ダイアログ終了後の処理
#SYS_DATA_COPY4
	if( \0 == 1 )
		// 『はい』が選択された
		savecopy \130 \131		// データをコピー
		newsave 850 0 1200		// 最新データを再検索
		\120 = $850				// \120 = 最新データNo
	endif

	// モードを元に戻す
	\110 = \111

	// データ削除・交換・コピー対象を保持するフラグを初期化
	\130 = 131 = -1

	// ヘルプリセット
	call RESET_HELP

	// パネル更新へ
	next DISP_PANEL



////////////////////////////////////////
// データセーブ
#SAVE_DATA
	// 全てのボタンを無効化
	call DISABLE_ALL_BUTTON
	wait 1

	// データが既に存在している場合は確認ダイアログを表示
	if( $(870+\101) )
		strvar 400 SAVE_DATA2	// 確認ダイアログ終了後の飛び先
		\0 = 1					// 確認内容の設定
		next CONFIRM			// 確認ダイアログ処理へ
	endif

	// 上書き状態でなければ、上書き確認ダイアログで『はい』が選択されたと設定して
	// セーブ処理へ
	\0 = 1			// 『はい』が選択されたことにする
	next SAVE_DATA2	// 確認ダイアログ終了後の処理へ（ダイアログ表示をスキップ）


// 確認ダイアログ終了後の処理
#SAVE_DATA2
	if( \0 == 1 )
		// 『はい』が選択された

		datasave \102 _SAVEOBJ_	// データセーブ（\102はデータNo）

		newsave 850 0 1200		// 最新データを再検索
		\120 = $850				// \120 = 最新データNo

		// パネル背景を元に戻す（\101はパネルNo）
		data[\101] dispid 0 1 2	// フォーカス・押下を非表示
		data[\101] dispid 1 0	// 通常を表示

		// 一旦更新
		wait 1

		// パネル更新へ
		next DISP_PANEL
	endif

	// 一旦更新
	wait 1

	// パネル背景を元に戻す（\101はパネルNo）
	data[\101] dispid 0 1 2	// フォーカス・押下を非表示
	data[\101] dispid 1 0	// 通常を表示

	// ボタン有効化
	call ENABLE_BUTTON

	// 入力待ち（メインループ）へ
	next WAIT


////////////////////////////////////////
// データロード
#LOAD_DATA
	// 全てのボタンを無効化
	call DISABLE_ALL_BUTTON

	// データが存在している場合はセーブロードを終了
	if( $(870+\101) )
		baseimg				// ベースイメージを消す
		img_help disp 0		// ヘルプを消す
		pl fade 30 255 0	// 表示用プレーンをフェードアウト
		wait	// フェードアウト待ち
		
		exit \102	// ロードするデータNoを設定して終了
		next SLEEP
	endif

	// データが無い場合

	// 一旦更新
	wait 1

	// パネル背景を元に戻す（\101はパネルNo）
	data[\101] dispid 0 1 2	// フォーカス・押下を非表示
	data[\101] dispid 1 0	// 通常を表示

	// ボタン有効化
	call ENABLE_BUTTON

	// 入力待ち（メインループ）へ
	next WAIT


////////////////////////////////////////
// 削除・移動・コピー時のパネル選択
#SEL_SLOT
	// ヘルプをリセット
	call RESET_HELP

	// 入力待ちへ
	next WAIT


// パネルが選択された後の処理
#SEL_SLOT_END
	// 選択されたデータNo
	\0 = \102

	// 指定された処理へ移動
	next $str400


////////////////////////////////////////
// 確認ダイアログ
#CONFIRM
	// 全てのボタンを無効化
	call DISABLE_ALL_BUTTON

	// 念のため、子スクリプトを終了
	endkcs
	endfes
	wait 1

	// ダイアログ実行
	$860 = \0		// 確認内容ID
	execfes conf	// ダイアログ実行

	// ダイアログ終了待ちへ
	next CONFIRM_WAIT


// ダイアログ終了待ち
#CONFIRM_WAIT
	if( _EXITCODE_ != -1 )
		// ダイアログが終了した
		\0 = _EXITCODE_
		next CONFIRM_END	// 終了処理へ
	endif


// ダイアログ終了処理
#CONFIRM_END
	// 子スクリプト（ダイアログ）を終了
	endfes
	wait

	// 指定された処理へ移動
	next $str400

