【ウディタ】会話イベント中にセーブする
ごきげんようなのです。
次回予告をしたからにはやらない訳にはいかない、ミリノルトです。
今回も技術発信、予告通りセーブ編!
前回(ロード編)はこちら
尚どちらの記事も、他の方法の存在を否定するものではありません。予めご了承ください。
結論 -始まりの見出しは-
通常変数を栞にして、その値に応じて処理を切り替える。
何がしたいのか -コント駆動開発-
あれは、"会話イベント中にロードする"の記事を書いていた際のこと……
( 'ω')「開発中の困ったこととその解決方法を書いて、ためになることをするぞっ。
需要あるかなあ? いや違う。なくてもやるのだ。"供給"であるがゆえに。
見出しも決めて、あとは清書だけ!」
かと思いきや……
( 'ω')「ロードするってことは、セーブされてるってことだよね。
会話イベント中にセーブできていること前提じゃん!! でもロードの記事では並列実行云々でのロードの話をしたいよー……
こんな時は、セーブのことはセーブの記事を書く私に任せて、今(当時)はロードに絞ろうっと」
……こうして、記事をもう1つ書くことになったのでした。
先月の私ったら、たまったもんじゃないね!今後の課題とします。
問題点 -セーブロード注意報-
解決前の状態について説明します。
ウディタでは、実行中のイベントは保存されません。
これはデフォルトの「文章を表示」でも自作メッセージ表示でも同じです。会話イベントの最初からロードされてしまうのです。
例えば本作では現在、シナリオをtxtファイルから読み込んでいます。つまり、その時々のtxtファイルの最初からになるということです。
また、後述のために本作のノベルパートのシステムそのものについても説明しておきます。
本作では、
①メインルーチン
↓
②シナリオファイル読み込み
↓
③シナリオ節読み込み
の順にコモンイベントが起動し、自作メッセージや画像を表示したり、バトルパートを呼び出したりしているのです。呼び出すコマンド1つ1つをここでは「節」と呼びます。
この状態でセーブして、ロードすると、どうなるでしょうか?
何も対策しなければ、セーブ直前の状態から動きません。それ以上コモンイベントが起動しないからです。
ではどのコモンイベントに起動してもらうべきでしょうか?
ロードした後も変わらず動くようにするには、根っこからの起動が必要です。
つまり答えは「①メインルーチン」。
しかしそのまま起動すると……上述の通り、対象のtxtファイルを最初から読み込んでしまうという訳です。
では、どうすべきでしょうか?
解決方法 -完全簡単解決策-
セーブする時に変数1つを1にして、これが1の時はメインルーチンの読み込みを行わず、「節」の読み込みも飛ばす(その後これを0にする)。
上記の画像の青丸で囲われた分岐部分がポイントです。
画像1 メインルーチン。0の時だけtxtを読み込み
画像2 シナリオ節読み込み。0の時にだけ前処理を行う
これは通常変数である必要があります。ロードされても情報が残るようにするためです(コモンセルフ変数や可変DBはロードされると値が消えます)。
私はこれを書物のイメージになぞらえて、「栞変数」と呼んでいます。皆さんもお好きな名前でお呼びください( 'ω')ノ
まとめ -誰だって作れるよゲーム!-
前回の記事と合わせることで、常に会話をしているようなゲームにおいてもウディタでセーブとロードができるようになりました( 'ω')b!
もし今後当時の私と同じ悩みを持った方が現れた時、これらの記事が少しでも問題解決に寄与すれば、私は嬉しいです。