投稿記事

2023年 05月の記事 (1)

ミリノルト 2023/05/13 23:55

【ウディタ】会話イベント中にセーブする

ごきげんようなのです。
次回予告をしたからにはやらない訳にはいかない、ミリノルトです。

今回も技術発信、予告通りセーブ編!

前回(ロード編)はこちら
尚どちらの記事も、他の方法の存在を否定するものではありません。予めご了承ください。

結論 -始まりの見出しは-

通常変数を栞にして、その値に応じて処理を切り替える。

何がしたいのか -コント駆動開発-

あれは、"会話イベント中にロードする"の記事を書いていた際のこと……

( 'ω')「開発中の困ったこととその解決方法を書いて、ためになることをするぞっ。
需要あるかなあ? いや違う。なくてもやるのだ。"供給"であるがゆえに。
見出しも決めて、あとは清書だけ!」

かと思いきや……

( 'ω')「ロードするってことは、セーブされてるってことだよね。
会話イベント中にセーブできていること前提じゃん!! でもロードの記事では並列実行云々でのロードの話をしたいよー……
こんな時は、セーブのことはセーブの記事を書く私に任せて、今(当時)はロードに絞ろうっと」

……こうして、記事をもう1つ書くことになったのでした。

先月の私ったら、たまったもんじゃないね!今後の課題とします。


問題点 -セーブロード注意報-

解決前の状態について説明します。

ウディタでは、実行中のイベントは保存されません。
これはデフォルトの「文章を表示」でも自作メッセージ表示でも同じです。会話イベントの最初からロードされてしまうのです。
例えば本作では現在、シナリオをtxtファイルから読み込んでいます。つまり、その時々のtxtファイルの最初からになるということです。

また、後述のために本作のノベルパートのシステムそのものについても説明しておきます。
本作では、
①メインルーチン

②シナリオファイル読み込み

③シナリオ節読み込み
の順にコモンイベントが起動し、自作メッセージや画像を表示したり、バトルパートを呼び出したりしているのです。呼び出すコマンド1つ1つをここでは「節」と呼びます。
この状態でセーブして、ロードすると、どうなるでしょうか?
何も対策しなければ、セーブ直前の状態から動きません。それ以上コモンイベントが起動しないからです。
ではどのコモンイベントに起動してもらうべきでしょうか?
ロードした後も変わらず動くようにするには、根っこからの起動が必要です。
つまり答えは「①メインルーチン」。
しかしそのまま起動すると……上述の通り、対象のtxtファイルを最初から読み込んでしまうという訳です。

では、どうすべきでしょうか?

解決方法 -完全簡単解決策-

セーブする時に変数1つを1にして、これが1の時はメインルーチンの読み込みを行わず、「節」の読み込みも飛ばす(その後これを0にする)。
上記の画像の青丸で囲われた分岐部分がポイントです。


画像1 メインルーチン。0の時だけtxtを読み込み


画像2 シナリオ節読み込み。0の時にだけ前処理を行う

これは通常変数である必要があります。ロードされても情報が残るようにするためです(コモンセルフ変数や可変DBはロードされると値が消えます)。
私はこれを書物のイメージになぞらえて、「栞変数」と呼んでいます。皆さんもお好きな名前でお呼びください( 'ω')ノ

まとめ -誰だって作れるよゲーム!-

前回の記事と合わせることで、常に会話をしているようなゲームにおいてもウディタでセーブとロードができるようになりました( 'ω')b!

もし今後当時の私と同じ悩みを持った方が現れた時、これらの記事が少しでも問題解決に寄与すれば、私は嬉しいです。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索