TACS for Flash 講座#9 「セーブとロードについて その2」


ここではゲーム中のセーブとロードについて説明します。
TACS for Flashのセーブとロード方法は、Ver20.1現在の時点で3種類あります。

1. MENUBAR_ON 命令によるどこでもセーブとロード
2. QUICK_SAVEQUICK_LOAD 命令によるゲーム状況そのもののセーブとロード
3. FLAG_SAVEFLAG_LOAD 命令によるフラグデータのみのセーブとロード

このうち「3. 」は、以前解説した#3「セーブとロードについて」(ポップアップします)わけですが、
その後新たに「1.」と「2.」のセーブ方法が機能追加されました。

それではこの三種類のセーブとロードの機能の違いについて説明致しましょう。



MENUBAR_ON 命令による どこでもセーブとロード



MENUBAR_ON 命令を実行すると使用可能になる、どこでもセーブとロード。
この機能で扱われるるデータは、全てのフラグ、全てのウインドウに読み込まれているデータと階層順、再生している音楽、現在のシナリオソースの再生位置(※単位:行数)です。
ロードをすると上記のデータを読み込み直すという動作を行います。

なおシナリオの再生位置についてですが
製作者がシナリオファイルを編集し、ファイルの長さ(行数)が変化すると違う位置から再生される可能性があります。
その点に注意が必要となります。

さてそれでは実際の使用例として「TACS サウンドノベルパック ver3.0」のシナリオソースをみてみしましょう。
下記リンクのシナリオソースをテキストエディタで開いて下さい。
http://atelier-c.fiw-web.net/tacs_samplegame/tacs_soundnovelpack03/tacs.avg
■33行目

MENUBAR_ON	//メニューバーの表示開始
この命令を実行すれば、後はマウスカーソルを画面の左上にもっていくだけで、いつでもセーブとロードの選択ができるようになります。

■39行目

SAVETITLE タイトル画面のようなもの
どこでもセーブを実行した際に利用される、セーブタイトル名を指定しています。この指定がないと全てのセーブデータは【NO TITLE】という表記になります。




QUICK_SAVEQUICK_LOAD 命令による ゲーム状況そのもののセーブとロード



QUICK_SAVEQUICK_LOAD 命令は、前述したどこでもセーブとロードと同じように、
全てのフラグ、全てのウインドウに読み込まれているデータと階層順、再生している音楽、現在のシナリオソースの再生位置(※単位:行数)を扱います。
前述したどこでもセーブは、ユーザーの好きな位置でセーブとロードを行うものでしたが、
こちらは製作者側の都合の良い箇所で、気楽にセーブとロードを行う事ができるものと考えて頂くとよろしいのではないかと思います。

では、サンプルゲーム日向探偵事務所日記 #1「消えたドーナツ」を例にとって、説明致しましょう。
下記リンクのシナリオソースをテキストエディタで開いて下さい。
http://atelier-c.fiw-web.net/tacs_samplegame/donatu/tacs.avg

■138〜140行目

*【捜査記録】
	-現在の捜査を記録する(中断セーブ)
		quick_save tyudan1
■61〜63行目

*中断した捜査記録を呼び出す
	quick_load tyudan1
	"捜査記録データがありません!\n(ゲーム本編で捜査記録(中断セーブ)をした場合に、こちらは有効となります)"
140行目にある quick_save tyudan1 でセーブを行っております。
一度セーブを行えば、62行目にあるように quick_load tyudan1 という命令が実行されれば、
直ちに quick_save tyudan1 命令が行われた位置へシナリオがジャンプされ(ロードされ)ます。
63行目にある、
"捜査記録データがありません!\n(ゲーム本編で捜査記録(中断セーブ)をした場合に、こちらは有効となります)"
という表記は、セーブファイルが無い(ロードに失敗した)場合にのみそのまま実行される事になります。



FLAG_SAVEFLAG_LOAD 命令によるフラグデータのみのセーブとロード



FLAG_SAVEFLAG_LOAD 命令は、フラグデータのみのセーブとロードを行います。
その為、この命令を利用する為には、フラグデータの流れを把握する必要があります。

それでは、サンプルゲーム日向探偵事務所日記 #1「消えたドーナツ」を例にとって、説明致しましょう。
下記リンクのシナリオソースをテキストエディタで開いて下さい。
http://atelier-c.fiw-web.net/tacs_samplegame/donatu/tacs.avg

■50〜59行目

*各章の最初から捜査開始
	FLAG_LOAD dounatudata
	?jyoukyou=0;"セーブデータがありません!\n(ゲーム本編の章の区切り部分でセーブをした場合に、こちらは有効となります)"
	?jyoukyou=1;-11時8分 捜査開始直後
		?jyoukyou=1;#>捜査開始2
	?jyoukyou2=1;-11時55分 キッチンで一息
		?jyoukyou2=1;#>捜査開始3
	?jyoukyou3=1;-12時50分 訊きこみ再開
		?jyoukyou3=1;"この先はまだ作られていません!"
	?jyoukyou=1;-<<キャンセル>>
FLAG_LOAD dounatudata で、セーブしてあるフラグデータをロードしています。セーブデータが存在していない場合、フラグデータは初期化されます。
?jyoukyou=0;"セーブデータがありません!\n(ゲーム本編の章の区切り部分でセーブをした場合に、こちらは有効となります)"
まだ宣言されていないフラグの値は、便宜上 0 の値が入っている事になっております。ですから上記のように ?jyoukyou=0 というチェックをロード直後にする事によって、セーブデータの有無を確認するようにしているわけですね。
特に注意すべき点として、
FLAG_LOAD命令は、実行した瞬間に今までのフラグデータを差し替えてしまいます
その為この命令の前後には、フラグのチェック命令の行を配置し、
「データが無ければロードをとりやめる」
という動きを意識する必要がでてくると思われます。
そのような場合の表記例を下記にあげておきます。
■例:「データが無ければロードをとりやめる」

	FLAG_SAVE backup	//フラグをバックアップしておく
	FLAG_LOAD dounatudata
	?jyoukyou=0;FLAG_LOAD backup	//セーブデータが無かった場合フラグを戻す
最初に FLAG_SAVE backup 命令を行い、セーブデータが無かった際にデータを読み込み直せるようにしています。
なお、FLAG_SAVEFLAG_LOAD 命令によるフラグデータのみのセーブとロードは、以前解説した講座がありますので、そちらをあわせて確認して頂いたほうがわかりやすいと思います。
#3「セーブとロードについて」(ポップアップします)