2回目のプレイで分岐
1度ゲームをクリアした後、2回目のプレイで1回目にはなかった新たな展開が出現する場合があります。こういったことを実現するには、ステータス変数を使います。
通常の変数はプレイ単位での扱いになりますが、ステータス変数は全体的な扱いになります。
プレイ単位の扱いとは
例えば、アイテムを持っていない時、持っている時、それぞれの状態でセーブしたとします。
アイテムを持っていない
セーブ
プレイデータ1
アイテムを持っている
セーブ
プレイデータ2
そして後でロードした時、当然セーブした時の状態が復元します。
プレイデータ1
ロード
アイテムを持っていない
プレイデータ2
ロード
アイテムを持っている
これがプレイ単位の扱いです。つまり、それぞれの状態は独立していて、お互いに影響しないということです。
全体的な扱いとは
これに対して、ステータス変数は全体でひとつの存在です。例えば、BGMの音量を記憶することを考えてみてください。
音量最大
セーブ
プレイデータ1
音量最小
セーブ
プレイデータ2
プレイ単位で音量を記憶してしまうと、ロードするプレイデータによって音量が変わってしまいます。
プレイデータ1
ロード
音量最大
プレイデータ2
ロード
音量最小
本来、音量は最後に設定した値が維持されるべきで、ロードによって変化しては困ります。このような時にステータス変数を使います。ステータス変数はプレイ単位に関係なく、最後に設定した値が記憶されます。
2回目のプレイで分岐
  1. 「ステータス_ゲームクリア」という名前のステータス変数を作っておきます。初期値はFALSEです。
  2. 「ゲームクリア」という名前の通常変数も作っておきます。
  3. ゲーム本編が開始した時に、「ゲームクリア」変数に「ステータス_ゲームクリア」変数の内容を代入します。
  4. 分岐ポイントまで来たら、「ゲームクリア」変数を見て、TRUEなら新たな展開に進み、FALSEなら(5)に進みます。
  5. ゲームをクリアした時に「ステータス_ゲームクリア」変数にTRUEを入れます。
ステータス変数を直接使わず、開始時に通常変数にコピーしているところがポイントです。ステータス変数を直接見るようにしてしまうと、次のような問題が起きます。
(1)分岐直前
(2)分岐ポイント (4)新たな展開
(3)ゲームクリア
ステータス変数=TRUE
ゲームクリア前に(1)でセーブしたとします。その後、ゲームをクリアし、ステータス変数がTRUEにセットされます。それから、最初にセーブした(1)のデータをロードすると、この時は既にステータス変数がTRUEなので、(2)の分岐ポイントで(4)に進むことになってしまいます。(4)は、クリア後にもう一度最初からプレイした場合に進むべきで、古いデータのロードによって進むべきではありません。これを防ぐために上記のような手法を取っているわけです。