コンテンツへスキップ

ゲームのセーブ/ロードについて

前々から疑問だったのでちょっと書いてみました。

かなり昔に友人と一緒にHSPで単純なゲーム開発をしてたのですが、 セーブとロードの実装をどうやるかで色々と話し合いました。(結局作業量の問題で実装はしませんでしたが)

その時に友人が出した提案が、 ・各ラベルを用意して、セーブ機能でそのラベル名を記録し、ロード機能でラベル名を判定し、そのラベル名へGotoする。

という物でした。

しかし、これでは、制作者があらかじめセーブポイントを用意しなくてはならないため、 RPGの様な「どんな場所でもセーブが可能」という事をするのは非常に困難だと思います。

さらに、ロード機能でラベルまでジャンプさせるだけでは、完璧な復元にはなりません。 RPGで例えると、現在のステータスや座標、アイテムなど、さまざまなデータが必要になるはずです。 もし、現状のロード機能でこれらの実装をするととてつもなく大変な作業になりそうです。

ですが、結果的に現在の情報を保存して、復元すると言うことは、 はやりすべての情報を解析してその情報に基づいた形でロードしなければなりません。

とすると、それなりの作業は必要になるはずだと思います。

問題はラベルへのジャンプです。 このままでは、すべての場所でセーブ可能にする場合、すべての箇所でセーブポイント(ラベル)が必要になってきます。

シューティングの様な物であれば、各ステージ事に用意すればいいので、そこまで苦にはなりませんが、 ノベルゲームやRPGではかなり大変な作業になってくるはずです。

ノベルゲームのスクリプトをちょっと弄ってみた所、吉里吉里という言語では自前ですべてのセーブポイントを用意しなければなりませんでした。 一方、RPGではラベルを気にする必要はなく、この場所はセーブが可能場場所か?不可能な場所か?という、 フラグ管理だけで、そのままできてしまいます。

自分なりに考えてみたところ、RPGではフラグ情報とステータス情報、座標情報、と言った情報を元に、 ラベルへジャンプしているのではなく、そのままの状態を再現しているだけなのでは?と思いました。

ですが、ノベルの方ではRPGの様に実現しにくい気がします。 とりあえず、自分なりに考えてみた方法だと、 1つは無限ループで外部シナリオを読み込むタイプの場合、現在のフラグ情報と、背景、音楽、立ち絵などの情報と、現在の台詞(シナリオデータ)の一部を保存しておき、 読み込むときに、今までのフラグ情報を読み込み、シナリオデータから保存されたシナリオの一部と合致する所から読み込む。 という方法ですが、保存した一部のシナリオデータが複数存在する可能性が高いため、読み間違えの危険性がありそうです。

もう1つは、無限ループとは違い、最初から最後まで絶対に重複しないラベルをあらかじめすべての箇所に用意しておき、フラグ情報を読み込み、その箇所へ 飛ぶ。という物です。(これでは友人の提案のまんまですが)

最後にもう1つ。 読み込んだ行数を記録して、そこから読み込む。という方法。 しかしこれだと、シナリオデータを1つに統合しなければなりません・・・。 何かいい方法はないのか、ずっと疑問なのですが、何か楽な方法はありませんかね?

© 2003 Kurusugawa Computer Inc.