チュートリアル

2回目のプレイで分岐

1度ゲームをクリアした後、2回目のプレイで1回目にはなかった新たな展開が出現する場合があります。こういったことを実現するには、ステータス変数を使います。

通常の変数はプレイ単位での扱いになりますが、ステータス変数は全体的な扱いになります。

【プレイ単位の扱いとは】
例えば、アイテムを持っていない時、持っている時、それぞれの状態でセーブしたとします。

アイテムを持っていない ──セーブ─→ プレイデータ1
アイテムを持っている ──セーブ─→ プレイデータ2

そして後でロードした時、当然セーブした時の状態が復元します。

プレイデータ1 ──ロード─→ アイテムを持っていない
プレイデータ2 ──ロード─→ アイテムを持っている

これがプレイ単位の扱いです。つまり、それぞれの状態は独立していて、お互いに影響しないということです。

【全体的な扱いとは】
これに対して、ステータス変数は全体でひとつの存在です。例えば、BGMの音量を記憶することを考えてみてください。

音量最大 ──セーブ─→ プレイデータ1
音量最小 ──セーブ─→ プレイデータ2

プレイ単位で音量を記憶してしまうと、ロードするプレイデータによって音量が変わってしまいます。

プレイデータ1 ──ロード─→ 音量最大
プレイデータ2 ──ロード─→ 音量最小

本来、音量は最後に設定した値が維持されるべきで、ロードによって変化しては困ります。このような時にステータス変数を使います。ステータス変数はプレイ単位に関係なく、最後に設定した値が記憶されます。

【2回目のプレイで分岐】
@「ステータス_ゲームクリア」という名前のステータス変数を作っておきます。初期値はFALSEです。
A「ゲームクリア」という名前の通常変数も作っておきます。
Bゲーム本編が開始した時に、「ゲームクリア」変数に「ステータス_ゲームクリア」変数の内容を代入します。
C分岐ポイントまで来たら、「ゲームクリア」変数を見て、TRUEなら新たな展開に進み、FALSEならDに進みます。
Dゲームをクリアした時に「ステータス_ゲームクリア」変数にTRUEを入れます。

ステータス変数を直接使わず、開始時に通常変数にコピーしているところがポイントです。ステータス変数を直接見るようにしてしまうと、次のような問題が起きます。

@分岐直前
A分岐ポイント C新たな展開
Bゲームクリア
ステータス変数=TRUE

ゲームクリア前に@でセーブしたとします。その後、ゲームをクリアし、ステータス変数がTRUEにセットされます。それから、最初にセーブした@のデータをロードすると、この時は既にステータス変数がTRUEなので、Aの分岐ポイントでCに進むことになってしまいます。Cは、クリア後にもう一度最初からプレイした場合に進むべきで、古いデータのロードによって進むべきではありません。これを防ぐために上記のような手法を取っているわけです。


←戻る