2021年3月25日木曜日

【ウディタ】可変DBを後から変更する方法

ゲーム完成させて公開したは良いけど、
・後からパーティに加わるキャラを増やしたい
・装備IDを変えたい
といった願望が出てくることはしばしばあるとおもいます。
でもウディタは可変DBを後から変更しても、既存セーブデータには反映されない仕様があるので、制作者がくふうをしないと賽の河原仕様になってしまいます。
これでは寛容なフリゲプレイヤーもかなしみを背負ってしまいますので、先人たちが残してきた方法をここで改めてまとめておきたいと思います。

1.バージョン情報を用意しよう

読み込んでいるセーブデータがどのバージョンのものなのかわからないと、大変困ったことになってしまうので、バージョン情報を管理するようにします。

1)空いている文字列変数をひとつ、バージョン情報用として確保します
2)タイトル画面で最新バージョン(ver110、みたいな感じで)をバージョン情報用文字列変数に書き込んでおきます

これで、ニューゲームで始めれば最新バージョンの情報が文字列変数に書き込まれた状態でデータを作ることができます。

2.ロード後一度だけ呼び出すコモンを用意しよう

これを用意すると乱数固定防止処理とか、いろいろできるので便利。バージョン情報の更新にも使うので、用意します。

1)使っていない通常変数または予備変数をひとつ確保します
2)セーブコマンドの直前で、確保した変数に任意の値を代入します(1でいいです)
3)セーブコマンドの直後で、確保した変数に任意の値を代入します(2)で代入した値以外だったらなんでもいいですが、0でいいです)
4)「ロード後処理」とかなんかわかりやすい適当な名前のコモンを用意します。
  起動条件「自動実行」、条件に1)で確保した変数を指定、値は2)で代入する値を指定、最後の条件は「~と同じ」。


5)作成したコモンの最終行で、1)で確保した変数に3)で代入する値を代入します。

これで、
・セーブ後もゲームを続行したら起動しない
・セーブ後ゲームを終了したら、次回ロード時に自動起動する
という動作をするコモンができます。

3.バージョン情報に応じて可変DBをいじろう

1)バージョン情報に応じて、バージョン情報を書き換えたり可変DBをいじるコモンを用意します。2.で用意したコモンに直接書いてもいいけど、独立させた方が管理が楽です。
2)バージョン情報で条件分岐させて、そのバージョンで変更した差分を可変DBなどに書き込んでいきます。代入方法を間違えると悲惨なことになるので注意!
 初期値のまま変わらない項目:=で代入。
  (変わらない項目は可変DBではめったにないけど、例えばキャラ名とか)
 ゲーム進行で数値変わる項目:+=で代入。
  (例えばステータスはゲーム進行で変わるので、初期値増減分だけ反映)
 条件分岐の括りの中の最後は忘れずにバージョン情報を書き換えてください。
 また、条件分岐は複数指定(文字列変数なら4+1あります)せず1つだけ指定にしたほうが、バージョンアップを繰り返していった際、楽になります。
 例えば、セーブデータがv1.0.0、最新版がv1.0.2だった場合。
 枝番号が特にない限りはたいていv1.0.0、v1.0.1、v1.0.2の3つのパターンが存在し得ますが、複数指定してしまうと、v1.0.0ならv1.0.1とv1.0.2の更新差分、v1.0.1ならv1.0.2の更新差分……といったように、それぞれの条件分岐内で同じ記述をする必要が出てきます。これが10回20回とアップデートしていくと、もう地獄です。
 しかし、1つだけ指定なら、バージョンを1つずつ上げる形になるので、記述のダブりが無くなります。おすすめ。

3)2.で作ったコモンで、ここで作ったコモンを呼び出すようコマンドを入れます