[前へ] [目次へ] [次へ]

ゲームをセーブ/ロードできるようにしてみる

今回はセーブポイントとなるイベントを作ってみます。


●データセーブとデータロード
   通常、ゲームではプレイ状態をセーブして後からロードすることができます。
   最近はオートセーブタイプのゲームも増えましたが、
   FGSではデフォルトでは明示的なセーブ/ロードの方式を使用します。
   
   データロードはタイトル画面の「つづきから」で行うことが出来ます。

   ゲームデータのセーブ/ロードは簡単に思うかもしれませんが、意外と考慮するものが多く、厄介なものです。
   セーブ/ロードについてもクエストモジュールでデフォルト機能が用意されていますが、
   考慮することや注意点を全て吸収してくれるわけではありません。
   
   ●セーブデータに保存される内容
      ・プレイヤーの現在位置
      ・ゲーム変数の内容(マップ一時変数/インスタンス変数を除く)
      ・プレイヤーデータベース(所持金や所持アイテムなど)の内容
   ●セーブデータに保存されない内容
      ・イベントやスクリプトの実行状況
      ・ゲーム変数以外の変数
      ・イベントの位置や状況
   
   端的に言えば、セーブデータをロードした場合、「セーブした位置に場所移動してくる」ような扱いになり、
   「マップを切り替えると失われる内容は全て失われる」ということです。
   
   任意のタイミングやイベントの途中でセーブできるようにする場合、
   上記のことを注意していないとデータロード後にハマったり詰んだりする可能性があります。
   例えば、 第16回 で扱ったようなイベントを細い通路などに置いたりした場合、
   「プレイヤーがイベントを押し込んで奥に移動」→「データをセーブ/ロードする」→
   「イベントが初期位置に戻る」→「プレイヤーがイベントの奥にいる状態になる」→
   「初期位置に戻ったイベントが邪魔で出ることができなくなる」ということが起きる可能性があります。

   ↓このような配置をしておいて・・・


   ↓プレイヤーがイベントを動かして奥でセーブしてしまうと・・・


   ↓(イベントの位置は初期位置に戻るため)ロード後に閉じ込められてしまいました。

   
   
   このような事態はメニューからいつでもセーブできるようにした場合に発生しやすくなり、
   セーブポイント制にすると抑制しやすくなります。


●セーブポイントを作成する
   ということで、セーブポイントとなるイベントを作ってみましょう。
   
   邪魔にならない適当な場所にイベントを作成し、わかるようにグラフィックを設定します。
   そして「コマンドの挿入」から「セーブ画面の呼び出し」を選択します。


<  1>
<  2>
<  3>
<  4>

//セーブ画面の呼び出し
ECL::CallSaveScene();
 
   これだけです。試してみましょう。
   
   このイベントを調べるとセーブ画面が表示されます。


   セーブが終わったらゲームを終了し、タイトル画面から「つづきから」を選びます。
   ロード画面が表示されたら、先ほどセーブしたファイルをロードします。



   
   セーブデータがロードできました。


●セーブラベルを設定する
   先ほど、セーブ/ロード画面でセーブデータの部分が空白になっていました。
   実はファイル一覧にはセーブラベルとして指定した1行説明が表示され、
   カーソルを合わせた場合には画面下側に3行分の詳細説明が表示されるようになっています。
   
   先ほどはセーブラベルを設定しないでセーブしたため、どちらも空欄になっているわけです。
   というわけで、この部分に表示するラベルを設定してみましょう。
   
   「コマンドの挿入」から「セーブラベルの設定」を選びます。



   各説明を記述します。

<  1>
<  2>
<  3>
<  4>
<  5>
<  6>
<  7>
<  8>
<  9>
//セーブラベルの設定
@@quest_scene->simple_info="一行分の説明を書きます。";
@@quest_scene->desc_info=
"カーソルを合わせた時の詳細を書きます。
   この項目には3行分の文章を記述することが
   可能です。"
;

//セーブ画面の呼び出し
ECL::CallSaveScene();
 

   これで改めてセーブして確認してみましょう。


   これでセーブラベルの設定ができました。




[前へ] [目次へ] [次へ]

最終更新 2017/12/20