/*
	メッセージウィンドウ
	フェイス無し＆名前テキストバージョン

	$850 $851	: 変数取得用

	\50			: 名前ID（音声再生用名前ボタンの有効・無効などに使用）
	\52			: ウィンドウ表示、非表示状態
	\53			: 1ならQSave完了演出中

	\60			: ウィンドウフレームの描画設定

	\94			: メッセージウィンドウプレーンのX座標
	\95			: 同Y座標

	\100		: 1ならkeywait表示を行う
	\101		: 1ならkeywait表示完了

	\110		: メッセージスピード

	// ボタン有効状態
	\200		: 既読スキップ
	\201		: オート
	\202		: 履歴
	\203		: ジャンプ
	\204		: 前選択肢に戻る
	\205		: システム（環境設定）
	\206		: セーブ
	\207		: ロード
	\208		: ウィンドウＯＦＦ
	\209		: Ｑセーブ
	\210		: Ｑロード
	\211		: ボイス再生

	// ボタン押下状態
	\250		: 既読スキップ
	\251		: オート
	\252		: 履歴
	\253		: ジャンプ
	\254		: 前選択肢に戻る
	\255		: システム（環境設定）
	\256		: セーブ
	\257		: ロード
	\258		: ウィンドウＯＦＦ
	\259		: Ｑセーブ
	\260		: Ｑロード
	\261		: ボイス再生

	\300		: スクリーンシフトの計算で一時使用

*/

////////////////////////////////
// マクロ（定数）定義
#MACRO
	// 初期座標
	PX	0
	PY	460
	// ビューサイズ
	VX	0
	VY	720


////////////////////////////////
// 他スクリプトを挿入
#INCLUDE
	motion.h		// 各種オブジェクトモーションの定義
	btncode.h		// システムへコマンドを送信する為のサブルーチン集


////////////////////////////////
// 予め読んでおく画像
#PRELOAD
	$str900		// 基本画像


////////////////////////////////
// オブジェクト定義
#DEFINE
	PLANE	pl			// 基本プレーン

	IMAGE	bg			// ベース（ウィンドウ）画像

	STRING	str			// 文章表示
	IMAGE	uf			// ユーザーフォント

	STRING	name		// 名前表示

	BUTTON	btn[12]		// システムボタン
	IMAGE	help[12]	// 各システムボタンのバルーンヘルプ

	IMAGE	qsave_ok	// Qセーブした時の Complete エフェクト画像

	IMAGE	keywait		// キー入力待ち画像

	PLANE	fpl				// フェイス用プレーン
	DIFIMAGE	face[3]		// フェイス画像
	IMAGE	fmask			// フェイスマスク



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

// 基本プレーン
#OBJECT	SIZE2		VRAM	DISP	PRI
pl		$str900:0	0,0		0		60000

// 背景（メインウィンドウ）
#OBJECT	FILE		ID.0	PRI		DISP	PL
bg		$str900		1		0		1		pl

// システムボタン
#OBJECT	FILE	DISP	PL	PARENT	ENABLE	PRI
btn		$str900	1		pl	pl		0		100

#OBJECT	ID.0	ID.1	ID.2	ID.3
btn[0]	1000	1100	1200	1300		// スキップ
btn[1]	1001	1101	1201	1301		// オート
btn[2]	1002	1102	1202	1302		// 履歴
btn[3]	1003	1103	1203	1303		// ジャンプ
btn[4]	1004	1104	1204	1304		// 前の選択肢
btn[5]	1005	1105	1205	1305		// 環境設定
btn[6]	1006	1106	1206	1306		// セーブ
btn[7]	1007	1107	1207	1307		// ロード
btn[8]	1008	1108	1208	1308		// ウィンドウ消去
btn[9]	1009	1109	1209	1309		// クイックセーブ
btn[10]	1010	1110	1210	1310		// クイックロード
btn[11]	1011	1111	1211	1311		// 音声再生

// バルーンヘルプ
#OBJECT	FILE	DISP	PRI
help	$str900	0		250

#OBJECT		ID.0	PL
help[0]		1400	pl		// スキップ
help[1]		1401	pl		// オート
help[2]		1402	pl		// 履歴
help[3]		1403	pl		// ジャンプ
help[4]		1404	pl		// 前の選択肢
help[5]		1405	pl		// 環境設定
help[6]		1406	pl		// セーブ
help[7]		1407	pl		// ロード
help[8]		1408	pl		// ウィンドウ消去
help[9]		1409	pl		// クイックセーブ
help[10]	1410	pl		// クイックロード
help[11]	1411	pl		// 音声再生

// キー入力待ち
#OBJECT	FILE		IDN	DISP	PL	PRI		POS2
keywait	sys_click	-1	0		pl	300		$str900:50

// Qセーブ時の[Complete]画像
#OBJECT		FILE	ID.0	DISP	PL	PRI
qsave_ok	$str900	60		0		pl	200


// 文章
#OBJECT	VRAM	POS2		SIZE2		PRI		DISP	PARENT
str		0,4352	$str900:10	$str900:10	60300	0		pl

// 文章用のユーザーフォント
#OBJECT	FILE			IDN
uf		sys_userfont	-1


// 名前
#OBJECT	VRAM	POS2		SIZE2		PRI		DISP	PARENT
name	0,4552	$str900:100	$str900:100	60400	0		pl


// フェイスプレーン
#OBJECT	SIZE2		VRAM	POS2		DISP	PRI		PARENT
fpl		$str900:30	0,500	$str900:30	1		61000	pl

// フェイス画像
#OBJECT	POS2		DISP	PL	PRI
face	$str902:1	0		fpl	150

// フェイスマスク
#OBJECT	FILE	ID.0	DISP	PL	PRI		MASK
fmask	$str902	0		1		fpl	160		4



////////////////////////////////
// スクリプトスタート
#START
	// ベースボタン（自動的に作成される最下位ボタン）があるとシステムが
	// ボタン処理出来ないので、最初に削除してしまう。
	deletebgbutton

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

	// メッセージ速度を取得
	getconf 850 messpd
	\110 = $850

	// アニメーションセット
	keywait setanm sys_click

	// ボタン有効・無効
	\200 = 1	// 既読スキップ
	\201 = 1	// オート
	\202 = 1	// 履歴
	\203 = 1	// ジャンプ
	\204 = 1	// 前選択肢に戻る
	\205 = 1	// システム（環境設定）
	\206 = 1	// セーブ
	\207 = 1	// ロード
	\208 = 1	// ウィンドウＯＦＦ
	\209 = 1	// Ｑセーブ
	\210 = 1	// Ｑロード
	\211 = 1	// ボイス再生

	// ボタン押下状態
	\250 = 0	// 既読スキップ
	\251 = 0	// オート
	\252 = 0	// 履歴
	\253 = 0	// ジャンプ
	\254 = 0	// 前選択肢に戻る
	\255 = 0	// システム（環境設定）
	\256 = 0	// セーブ
	\257 = 0	// ロード
	\258 = 0	// ウィンドウＯＦＦ
	\259 = 0	// Ｑセーブ
	\260 = 0	// Ｑロード
	\261 = 0	// ボイス再生
	call SETBUTTON

	// ここで一旦decode
	// このタイミングで初期化時に指定された画像などがロードされる
	// #START直後はこれをやらないとgetposやgetpos2で正しい値が取得できない
	// wait等でも可。1フレーム以上経過させないと取得できない
	// decodeはフレーム経過を行わず、現状までにスタックされている処理を行うコマンド
	decode

	// 文章表示設定
	call STRLAYOUT

	// ウィンドウ不透明度処理
	call WNDALPHA

	// 変数初期化
	\100 = 0	// keywait表示
	\50 = -1	// 名前ID
	\53 = 0		// Qセーブ時[Complete]表示状態

	// ユーザーフォント設定
	str userfontobj	uf
	str userfont 0x8740 1
	str userfont 0x8741 2
	str userfont 0x8742 3
	str userfont 0x8743 4
	str userfont 0x8744 5
	str userfont 0x8745 6
	str userfont 0x8746 7
	str userfont 0x8747 8
	str userfont 0x8748 9

	// フェイス表示座標を取得
	face[0] getpos 850 851
	\120 = $850
	\121 = $851

	// プレーン座標を取得
	pl getpos 850 851
	\94 = $850
	\95 = $851

	next WAIT	// 入力待ちへ


////////////////////////////////
// 入力待ち
#WAIT
	///////////////////////////////////
	// ボタン処理
	if( \52 )	// メッセージウィンドウが表示されている時のみ処理する
		if( _CLICK_L_ == btn[0] ) call _SYS_SKIP		// 既読スキップ
		if( _CLICK_L_ == btn[1] ) call _SYS_AUTO		// オートモード
		if( _CLICK_L_ == btn[2] ) next GO_LOG			// ログ表示
		if( _CLICK_L_ == btn[3] ) call _SYS_JUMP		// 次の選択肢までジャンプ
		if( _CLICK_L_ == btn[4] ) call _SYS_RETURN		// 前の選択肢に戻る
		if( _CLICK_L_ == btn[5] ) next GO_CONFIG		// 環境設定を開く
		if( _CLICK_L_ == btn[6] ) next GO_SAVE			// セーブ画面を開く
		if( _CLICK_L_ == btn[7] ) next GO_LOAD			// ロード画面を開く
		if( _CLICK_L_ == btn[8] ) next GO_WND			// メッセージウィンドウ非表示
		if( _CLICK_L_ == btn[9] ) call _SYS_QSAVE		// Qセーブを行う
		if( _CLICK_L_ == btn[10] ) call _SYS_QLOAD		// Qロードを行う
		if( _CLICK_L_ == btn[11] )	call _SYS_VOICE		// ボイスを再再生
	endif

	if( \100 && \52 )
		// keywait表示 & メッセージウィンドウ表示中
		if( \101 == 0 )
			// まだ表示していない場合は表示
			keywait disp 1
			keywait anm 1
			keywait fade 10 0 255
			\101 = 1	// 表示完了フラグ
		endif
	endif


////////////////////////////////
// ログを開く
#GO_LOG
	call DISABLE_ALL_BUTTON
	call _SYS_LOG
	wait 1
	call SETBUTTON
	next WAIT


////////////////////////////////
// 環境設定を開く
#GO_CONFIG
	call _SYS_CONFIG
	wait 1
	next WAIT


////////////////////////////////
// セーブ画面を開く
#GO_SAVE
	call DISABLE_ALL_BUTTON
	wait 1
	call _SYS_SAVE
	wait 120
	next WAIT


////////////////////////////////
// ロード画面を開く
#GO_LOAD
	call DISABLE_ALL_BUTTON
	wait 1
	call _SYS_LOAD
	wait 120
	next WAIT


////////////////////////////////
// ウィンドウ表示・非表示切り替え
#GO_WND
	call _SYS_WND
	wait 1
	next WAIT


////////////////////////////////
// Ｑセーブ完了演出を行う
#QSAVE
	\53 = 1		// Qセーブ演出中フラグON
	\0 = 0
	call DISABLE_ALL_BUTTON
	call _SYS_ENABLESYSBTN	// システム系操作（キーボードショートカットを含む）を一時無効化

	help disp 0

	qsave_ok stop

	qsave_ok disp 1
	qsave_ok pos 0 10
	qsave_ok move 6 0 0
	qsave_ok fade 4 0 255
	wait
	wait 20
	qsave_ok fade 16 255 0
	wait

	\53 = 0		// Qセーブ演出中フラグOFF

	call SETBUTTON
	call _SYS_ENABLESYSBTN	// システム系操作（キーボードショートカットを含む）を有効化
	\0 = 1

	next WAIT


////////////////////////////////
// ボタン処理

#btn.FOCUS
	@ setid 2
	help[@] setid 0
	help[@] disp 1

#btn.UNFOCUS
	@ setid 0
	help disp 0

#btn.PUSH_L
	@ setid 3
	help disp 0


////////////////////////////////
// ボタン状態の設定
#SETBUTTON
	// 名前ボタンはボイス再生が有効(\211)かつ、名前が表示されていている(\50)場合に有効化
	namebtn enable (\211!=0)&&(\50!=-1)

	\0 = 0			// 既読スキップ
	call _SETBUTTON
	\0 = 1			// オートモード
	call _SETBUTTON
	\0 = 2			// ログ表示
	call _SETBUTTON
	\0 = 3			// 次の選択肢までジャンプ
	call _SETBUTTON
	\0 = 4			// 前の選択肢に戻る
	call _SETBUTTON
	\0 = 5			// 環境設定を開く
	call _SETBUTTON
	\0 = 6			// セーブ画面を開く
	call _SETBUTTON
	\0 = 7			// ロード画面を開く
	call _SETBUTTON
	\0 = 8			// メッセージウィンドウ非表示
	call _SETBUTTON
	\0 = 9			// Qセーブを行う
	call _SETBUTTON
	\0 = 10			// Qロードを行う
	call _SETBUTTON
	\0 = 11			// 音声再生
	call _SETBUTTON


#_SETBUTTON
	if( \52 )
		// メッセージウィンドウが表示されている場合
		if( \(200+\0) )
			// ボタンが有効の場合
			if( \(250+\0) )
				// 押下状態の場合
				btn[\0] setid 3
				btn[\0] enable 1
			else
				// 通常の場合
				btn[\0] setid 0
				btn[\0] enable 1
			endif
		else
			// ボタンが無効の場合
			btn[\0] setid 1
			btn[\0] enable 0
			help[\0] disp 0
		endif
	else
		// メッセージウィンドウが非表示の場合 → 設定に関わらず強制でボタン無効化
		btn[\0] enable 0
		help[\0] disp 0
	endif


////////////////////////////////
// 全てのボタンを無効化
#DISABLE_ALL_BUTTON
	btn enable 0
	btn setid 1
	help disp 0


////////////////////////////////
// 文章表示レイアウトの設定
#STRLAYOUT	//文字レイアウト
	// 文章
	str reset	// まずはresetでデフォルト設定にする
	str layout vdraw 1		// VRAM(文字列用プレーン)に描画する場合は1
	str layout size 18 20 22 25 28	//フォントサイズ(左からSS,S,M,L,LL)
	str layout rsize 8	//ルビサイズ
	str layout margin 0 10 48 0	// 文字表示領域内のマージン(左,上,右,下)
	str layout frame \110	// 文字スクロールスピード
	str layout move 0 10	// 文字間隔・横,縦
	str layout ruby 0		// ルビの位置（ルビが乗る文字からの相対）
	str layout color 255 255 255  0 0 0  255 255 255	// 文字色 普通,影,ルビ色
	str layout scrolltype 1		// 文字スクロール方法(0:1文字ずつ 1:ワイプ)
	str layout wipewidth 100	// ワイプスクロールの時のワイプ幅
	str layout indent 1	//カギカッコが付いたときの２行目以降のインデントの有効・無効

	// 名前
	name reset	// まずはresetでデフォルト設定にする
	name layout vdraw 1		// VRAM(文字列用プレーン)に描画する場合は1
	name layout size 24		//フォントサイズ(1つだけ指定されている場合はSS,S,M,L,LL全てこのサイズ)
	name layout margin 0 3 0 0	// 文字表示領域内のマージン(左,上,右,下)
	name layout frame 0		// 文字スクロールスピード
	name layout color 255 255 255  0 0 0  255 255 255	// 文字色 普通,影,ルビ色


////////////////////////////////
// ウィンドウの不透明度の設定
#WNDALPHA
	// 環境設定からフレームを描画するか取得
	getconf 850 wndframe
	bg disp $850
	\60 = $850		// 設定を保存

	// ウィンドウ色（不透明度）を取得
	getconf 850 wndcolor
	$850 = ($850>>24) * 255 / 100	// αのみ変化させる場合の計算
									// 得られる値は0〜100(%)なので、0〜255に変換する
	bg blend $850	// ウィンドウ不透明度を変更


////////////////////////////////
// 環境設定が変更された時の処理
#CHANGECONFIG
	// 文章表示レイアウトを再設定
	call STRLAYOUT

	// ウィンドウ不透明度を設定
	call WNDALPHA

	// 文章を再描画
	str draw \51
	str skip	// 文字スクロールスキップ

	help disp 0

	if( \50 != -1 && \52 )
		name draw -1
	endif

	next WAIT




//////////////////////////////////////////////////////////////
// シーンスクリプト処理エンジン(sscript.kcs)からの情報を受け取るヘッダ

// 文章セット
// in : $str1000	セットする文章
#MES_SETSTRING
	str apend $str1000

// 文章表示
// in : \0	マーク
#MES_DRAW
	if( \52 )
		str disp 1
		str draw \0
		\51 = \0
		if( \50 != -1 )
			name disp 1
			name draw -1
		endif
	endif

// 文章クリア
#MES_CLEAR
	str clear
	str disp 0
	name clear
	name disp 0
	\50 = -1
	keywait anm 0
	keywait disp 0
	\100 = 0

	// 文字カラーを元に戻す
	str layout color 255 255 255  0 0 0  255 255 255


// マークセット
#MES_SETMARK
	str apendmark

// 描画中か
// out : \0		1なら描画中
#MES_ISDRAW
	str isdraw

// マーク位置まで描画中か
// out : \0		1なら描画中
#MES_ISDRAWMARK
	str isdrawmark

// 文章スクロールスキップ
#MES_SKIP
	str skip

// 名前セット
// in : $str1001	名前
//      \0			名前ID
#MES_SETNAME
	\50 = \0
	name apend $str1001
	btn[11] enable (\211!=0)


// ウィンドウ表示
// in : \0	0:非表示  1:表示
#MES_SHOW
	\52 = \0

	pl disp \52			// メインプレーン
	str disp \52		// 文章
	name disp \52		// 名前
	if( \60 )
		// ウィンドウフレームを描画する場合
		bg disp \52
	else
		// ウィンドウフレームを描画しない場合
		bg disp 0
	endif

	fpl disp \52	// フェイスプレーン
	face disp \52	// フェイス画像
	fmask disp \52	// フェイスマスク

	btn disp \52	// 各種ボタン
	call SETBUTTON	// ボタン有効・無効を再設定

	if( \52 == 0 )	// 非表示状態
		help disp 0
		qsave_ok disp 0
	endif

	// キー入力待ちアイコンを一度消す
	keywait anm 0
	keywait disp 0
	if( \100 )
		// キー入力待ちアイコン表示中の場合は、一度消してから再表示化
		\101 = 0
	endif

	// 画像を強制再描画
	force_redraw


// キー入力待ちアイコン表示
#MES_WAITINPUT
	if( \52 )
		keywait anm 0
		\101 = 0
	endif
	\100 = \0


// ボタン有効・無効設定
// in : \0〜\11	ボタン状態
#MES_SETSTATE
	\200 = \0	// 既読スキップ
	\201 = \1	// オート
	\202 = \2	// 履歴
	\203 = \3	// ジャンプ
	\204 = \4	// 前選択肢に戻る
	\205 = \5	// システム（環境設定）
	\206 = \6	// セーブ
	\207 = \7	// ロード
	\208 = \8	// ウィンドウＯＦＦ
	\209 = \10	// Ｑセーブ
	\210 = \11	// Ｑロード
	\211 = \9	// ボイス再生
	if( \53 == 0 ) call SETBUTTON	// Qセーブ演出中でなければ即適用

// 環境設定変更
#MES_CHANGECONFIG
	next CHANGECONFIG

// ウィンドウ透明度変更
// in : \0	不透明度
#MES_ALPHA
	pl blend \0
	fpl blend \0

// クイックセーブ完了マーク表示
#MES_COMP_QSAVE
	\53 = 1
	next QSAVE

// ボタンを押下状態にする
// in : \0	ボタンNo
//      \1	1なら押下
#MES_PUSH
	\(250+\0) = \1
	call SETBUTTON

// メッセージスクロールスピードの設定
// in : \0	スクロールスピード
#MES_SCROLLSPD
	\110 = \0
	call STRLAYOUT
	str skip

// フェイスセット
// in : \0	フェイスNo（0〜2）
//      \1	フェイスオブジェクト
//      \2	X座標
//      \3	Y座標
//      \4	不透明度
#MES_SETFACE
	face[\0] refex \1
	face[\0] disp (\1!=0)&&(\52)
	face[\0] pos \120+\2 \121+\3
	face[\0] blend \4


// 名前表示位置変更
// in : \0	フェイス状態 (0>無し 1>有り)
#MES_NAMEPOS


// モード変更
// in : \0	0:通常 1:オート 2:スキップ
#MES_MODE


// 選択肢
// in : \0	0:通常 1:選択肢
#MES_SELECT



// ドラッグ強制解除
#MES_DRAGRELEASE


// ウィンドウ位置セット
// in : \0	X座標
//		\1	Y座標
#MES_POS
	\94 = \0
	\95 = \1
	pl pos \94 \95

// ウィンドウ位置取得
// in : \0	X座標をセット
//		\1	Y座標をセット
#MES_GETPOS
	\0 = \94
	\1 = \95

// スクリーンシフト
// in : \0	ウィンドウ表示場所 0:標準 1:下合わせ 2:上合わせ
//      \1	Xシフト量
//		\2	Yシフト量
#MES_SHIFT
	if( \0 == 0 )
		\94 = PX
		\95 = PY
	else
		if( \0 == 1 )
			\94 = PX
			\300 = VY-PY
			\95 = \2-\300
			if( \95 > VY )	\95 = VY
		else
			\94 = PX
			\300 = -(VY-PY)
			if( \2 < \300 )
				\95 = \300
			else
				\95 = \2
			endif
		endif
	endif
	pl pos \94 \95

// 文章表示スピード倍率設定
// in : \0	表示倍率
#MES_SETMAG


// オート倍率表示
// in : \0	オート倍率
#MES_AUTOMAG


// 名前色変更
// in : \0	変更先の色(R)
//		\1	変更先の色(G)
//		\2	変更先の色(B)
#MES_SETNAMECOLOR


