2016年3月15日火曜日

ウディタでADV(ノベルゲー)作成講座11 シナリオをデータベースに打ち込む場合

シナリオをコモンイベントのコマンドに打ち込んでいくのではなく、データベースに打ち込んでいく場合のやり方です。

まず、ユーザデータベースのタイプ0でタイプの内容設定をしていきます。



タイプ名は「シナリオ」
データIDの設定方法は「最初の文字列データと同じ」でいいかなと思います。

項目0に「コマンド」と名前を付け、変数を指定します。
「▼特」というところを押して、データ内容の特殊設定をします。

内部値が「0」だと文章表示、内部値が「1」だと選択肢であると設定しました。

戻って、項目1は「文章/選択肢」という文字列。

項目2は「立ち絵」という変数。
これも特殊設定をしました。

内部値と立ち絵表示が、「コモンイベント001:文章表示」のところで設定したものと対応するようにしました。

続く項目3は「名前表示」という文字列データ。
項目4は「選択肢の数」という変数データです。

準備ができたら、データベースにシナリオを打ち込んでいきます。
データベースだと、CSV形式でデータを出力して、excelなどで書くことができるのですごく楽です。


一通り打ち込みました。
「文章表示」の場合はコマンドで「0:文章表示」を選び、「文章/選択肢」に表示したい文章を打ち込み、「立ち絵」と「名前表示」に入力します。「選択肢の数」は関係ないので、無視します。


「選択肢」の場合はコマンド「1:選択肢」を選び、「文章/選択肢」に表示したい選択肢を打ち込みます。
「立ち絵」「名前表示」は関係ないので無視します。
「選択肢の数」を指定します。


準備ができたら、次は「コモンイベント008:基本ルーチン」の設定です。

途中までは「作成講座9:セーブとロード(後編) シナリオの組み方を考える」で説明したのと同様です。

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

空いている「コモンイベント008」に「基本ルーチン」と名前をつけて、起動条件を「自動実行」、条件を「変数0:自動実行」が「1と同じ」ときに設定します。
ロードした時にピクチャがセーブ画面のピクチャが表示されていると嫌なので、ピクチャ番号に100000~100100を指定してピクチャ消去コマンドを入力しておきます。
「変数操作」で「変数1:選択肢のキー入力を受け付ける」と「変数4:文章送りをしない」に0を代入します。

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


「コモンイベント2:文章表示」と「コモンイベント4:選択肢」の最後に「変数2:シナリオ進行度」を1加算する処理をしておきます
この「シナリオ進行度」という変数は、ユーザデータベースに先ほど作ったシナリオのデータ番号に対応します。

「コモンイベント008:基本ルーチン」に戻ります。

データベースで設定した項目を読み取るために、コモンセルフ変数に名前をつけました。
コモンセルフ5が「文章/選択肢」
コモンセルフ6が「名前」
コモンセルフ10が「コマンド」
コモンセルフ11が「立ち絵」
コモンセルフ12が「選択肢の数」です。

まず文章表示なのか選択肢表示なのかを読み取ります。



「DB操作」で「ユーザデータベース」のDBタイプ0を選びます。
データ番号は「2000002(変数2:シナリオ進行度)」を入力し、「項目番号0:コマンド」をコモンセルフ変数10番に代入します。

次に条件分岐です。
「条件(変数)」で「コモンセルフ10:コマンド」が「0と同じ」のときと、「1と同じ」のときに条件を設定します。



「0と同じ」の時は文章を表示する時なので、データベースから「文章」「立ち絵」「名前」の各設定を読み取ります。

「コモンイベント001:文章表示」の呼び出しを行います。


「1と同じ」の時は選択肢を表示する時なので、データベースから「選択肢」と「選択肢の数」を読み取ります。

「コモンイベント003:選択肢」の呼び出しを行います。「選んだ結果」をコモンセルフ13に値を返すように設定しました。


こんな感じになりました。


次に、分岐する場合の処理についてです。
ユーザデータベースに打ち込んだシナリオの今回の流れは、次のような形です。



<シナリオの流れ>



・データ番号0~10……最初の共通シナリオ
・データ番号11……選択肢分岐(三択)
・データ番号13~19……分岐1
・データ番号20~27……分岐2
・データ番号28~38……分岐3
・データ番号39~52……最後の共通シナリオ













この分岐については、コモンイベントで指定してやる必要があります。

データ番号13番のシナリオに進んだとき、選択肢1を選んでいるのならそのままで大丈夫ですが、選択肢2・3を選んでいるのなら、スキップさせる必要があるので、その指定をします。



「条件(変数)」で「変数2:シナリオ進行度」が「13と同じ」ときに条件を設定します。



さらに「コモンセルフ13:選択した結果」が「2と同じ」とき、「3と同じ」ときに条件分岐を設定します。



「2と同じ」の時は「変数2:シナリオ進行度」に20を代入します。
「3と同じ」の時は「変数2:シナリオ進行度」に28を代入します。

次に、選択肢1を選んだ時のことについて考えてみます。
順番に読み進めて言ってシナリオ番号20になったときは分岐終了のシナリオ番号39までスキップさせる必要があります。
また、選択肢2を選んだ際にシナリオ番号28になったときも同様に39までスキップさせる必要があるので、その処理をします。


条件分岐で「変数2:シナリオ進行度」が「20と同じ」かつ「コモンセルフ13:選択した結果」が「1と同じ」のときには、「変数2:シナリオ進行度」に39を代入します。
また、「変数2:シナリオ進行度」「28と同じ」かつ「コモンセルフ13:選択した結果」が「2と同じ」のときにも「変数2:シナリオ進行度」に39を代入します。


また、シナリオが最後まで進んだら、今回はエンディングロールを作らないので、タイトル画面に戻るように、「変数2:シナリオ進行度」と「変数0:自動実行」を0に戻す処理を付け加えました。


既読スキップの設定


既読スキップの管理もデータベースを利用します。



可変データベースの0番に「既読管理」という名前をつけました。
項目0は変数で「0=未読/1=既読」と名前をつけました。


文章を表示するたびに既読であると判定するように、「コモンイベント001:文章表示」の文章を表示し終わったあたりに、データベースに書き込む処理を加えます。



「可変データベース」の「タイプ0:既読管理」で、データ番号には「変数2:シナリオ進行度」を指定し、「項目0:0=未読/1=既読」に1を代入します。

また、文章表示の前に、既読であると判定されたらシステム変数26に「¥>」を、システム変数27に「¥^」を代入して、文章が瞬間表示されるように設定します。

まず、条件(変数)で「変数5:1=既読スキップON」が「1と同じ」の場合の分岐を作ります。


先ほど設定した可変データベースの内容を「コモンセルフ10:既読管理」に読み込みます。



「コモンセルフ10:既読管理」が「1と同じ」の時には、システム変数26に「¥>」を、システム変数27に「¥^」を代入します。

次にセーブする時の処理です。
既読判定は全セーブデータで共有したい内容なので、CSVへ保存します。

「コモンイベント006:セーブ画面」で、データのセーブを行う前後あたりに、次の処理を挿入します。

「DB操作」でモード「CSVへ保存」を選択します。
可変DB「タイプ0:既読管理」の「データ番号0」からシナリオの数である53個分のデータを保存するように設定します。

次にロードした時の処理です。
ロード時に一回だけCSVを読み込む処理をいれたいと思います。
そのためにまず、セーブ時だけ値が1になる変数を用意します。


セーブの直前に、「変数3:ロード用」に数値1を代入しました。

「コモンイベント008:基本ルーチン」で条件(変数)「変数3:ロード用」が「1と同じ」ときという条件を設定します。


「DB操作」で「DBへ入力」を選び、可変DB0番にCSVファイルを読み込みます。

「変数3:ロード用」の数値を0に戻して分岐終了です。


ついでにピクチャ消去や変数の処理など、ロード時に一回だけ行えばいい処理も分岐の中にいれました。

0 件のコメント:

コメントを投稿