2016年2月27日土曜日

ウディタでADV(ノベルゲー)作成講座9 セーブとロード(後編) シナリオの組み方を考える

さて、文章表示中にセーブして、ロードする方法について考えていきましょう。

まず、現在の作り方だと自動実行で初期設定が終わったら、直接「適当なシナリオ」のイベントが始まる設定になっていますが、ロード時に色々な処理をしたいので、その前に1クッション置くようにします。

「コモンイベント003:適当なシナリオ」の起動条件を「自動実行」から「呼び出しのみ」に変更します。


空いている「コモンイベント008」に「基本ルーチン」と名前をつけて、起動条件を「自動実行」、条件を「変数0:自動実行」が「1と同じ」ときに設定します。

ロードした時にピクチャがセーブ画面のピクチャが表示されていると嫌なので、ピクチャ番号に100000~100100を指定してピクチャ消去コマンドを入力しておきます。


「変数操作」で「変数1:選択肢のキー入力を受け付ける」と「変数4:文章送りをしない」に0を代入します。
「コモンイベント」のイベント挿入で「コモンイベント3:適当なシナリオ」を呼び出します。



「イベントをどこまで進めたか」を把握する必要があるので、そのための変数を作ります。
空いている変数2番に「シナリオ進行度」という名前をつけました。
シナリオは基本的に文章表示&選択肢によって進んでいくので、その度に数値を1加算していきます。


「コモンイベント2:文章表示」の頭に「変数2:シナリオ進行度」を1加算しました。

「コモンイベント4:選択肢」の頭にも、「変数2:シナリオ進行度」を1加算する処理をしておきます

さて、この「シナリオ進行度」に応じて、実行中のイベントをスキップさせなくてはいけません。
その方法としては色々と考えられます。

①ラベルの活用

一番単純な方法がラベルを使って、指定イベントまでジャンプする方法です。


大体こんな感じです。
が、文章表示するたびにラベルを追加しなくちゃいけないので、地味にめんどうくさいです。


②ロードするたびに0になる変数を作って、文章表示&選択肢表示するたびに1加算していき、「シナリオ進行度」に追いつくまでスキップさせる。




空いている変数3番に「ロード用」と名前をつけました。
「基本ルーチン」で0を代入するように入力します。



「コモンイベント2:文章表示」のイベントの頭に「変数3:ロード用」に1加算する処理をつくります。
条件(変数)で「変数3:ロード用」が「変数2:シナリオ進行度」の数値未満の場合は、イベント処理を中断させるようにします。

「コモンイベント4:選択肢」の最初のところにも同様の処理を追加します。


<選択肢分岐する時の設定>


シナリオごとに番号をふり、「シナリオ番号」という変数に数値を代入して管理します。
コモンイベントで「004:選択肢」を呼び出す時、結果を適当な変数に代入します。



選択肢に応じて、対応するシナリオの番号を代入します。
一つのシナリオが終わるたびに、「変数2:シナリオ進行度」を0にリセットします。

「コモンイベント008:基本ルーチン」でシナリオ番号に応じて、呼び出すシナリオのコモンイベントを指定します。

③データベースを使う。

そもそものシナリオの書き方の話になってくるのですが、今のところコモンイベントを呼び出し、その変数に文章や選択肢を入力する形でシナリオを進めていますが、短編のシナリオならともかく、長編でいちいちこれをやるのは大変にめんどうくさいです。
そこで、データベースにシナリオを打ち込んでおいてそれを参照し、文章表示や選択肢を表示するシステムにしておけば、参照するデータ番号に変数を使うことで、途中のシナリオから再開させることができます。


④メモ帳にシナリオを書く。

これも、別のシナリオの書き方の話ですが、メモ帳にシナリオを書いておいて「文字列操作」で「ファイルの内容読み込み」のコマンドを使って、読み込むようにします。
長文書くのなら一番楽なのがこの方法だと思います。
文字列変数を使うので、セーブに変数が保存されますので、わざわざスキップすることを考えなくても大丈夫です。

とりあえず、私が思いつくのはこれぐらいでしょうか。
③、④については根本的にイベントを組み直す必要があるので、また後日別の記事で詳しく書きます。

0 件のコメント:

コメントを投稿