チュートリアル
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は、クリア後にもう一度最初からプレイした場合に進むべきで、古いデータのロードによって進むべきではありません。これを防ぐために上記のような手法を取っているわけです。