見出し画像

ウディタ講座 補講第1回 UDB書き込み

ウディタについて調べている途中、何やら気になる話が耳に入ってきました。いわく「本来ゲーム中は読み込み専用のはずのUDBに書き込みができる」とのこと。

試したみたところ……本当にできてしまいましたw 簡単に言うとcdb[N-100]に書き込むとudb[N]に書き込んだことになる仕組みのようです(N=0~99)。詳細はこちらのページを参照してください。

なお、UDBはセーブデータに保存されないという特徴がある為、変更は一時的なものです。したがって書き込んでから実際に使用するまでの間にセーブ&ロードが挟まれる可能性のある場面では使わない方が良さそうです(装備アイテムの効果など)。

この講座でやること

・UDBへの変数・文字列の書き込み
・使用例:条件により名前とステータスが変化する敵の作成

Step1 敵キャラの追加

まずは敵キャラを追加してみましょう。名前もステータスも後から書き換えるので適当でかまいません。行動AIは50%でファイアボールを使用、そうでなければ通常攻撃としておきました。もちろんコイツを含む敵グループの作成も忘れずに。
※この時、敵キャラデータのUDBタイプが9番であることをよく覚えておいてください。

補講_01_テスト敵の作成

適当にマップEvを作ってコイツと戦ってみます。
当然HPは1です。ヌケニンかな? ウィンドⅠかな?
SPも1なのでファイアボールすら唱えられないようです。ベビーサタンかな?

補講_02_テスト敵とのバトル

補講_03_テストプレイ1

Step2 UDBへのライト

実際にUDBに書き込んでみましょう。UDBに書き込む場合、変数操作タイプ番号に負数を指定してください。
DB操作は不可です。補足参照。
 
今回は敵データ(udb[9])に書き込みたいので、cdb[-91]に書き込みましょう。表示上は「xNoData」と出ますが無視してください。ここではパーティ先頭のキャラのレベルを基準として敵の強さを変化させています。HP・SPはレベルx50、攻撃・魔攻・敏捷はレベルx5、経験値・お金はレベルx1000です。
※先頭キャラのレベルはコモン22に先頭キャラ番号(cdb[6:0:1])を渡すことで取得しています。

補講_11_UDB変数ライト

続いて名前も書き換えてしまいましょう。文字列操作で、代入先文字列を変数self[2]で指定します。1009003600とはUDB・タイプ9・データ36・項目0の意味で、これが敵キャラ36番の名前になります。

補講_12_UDB文字列ライト

Step3 テストプレイ

実際に戦ってみましょう。先頭キャラがLv24の場合、敵の名前は「Mr.ヴァリアブル Lv24」となります。HPも24x50=1200となっていますね。

補講_13_テストプレイ2

同じ敵でも先頭キャラがLv13の場合、敵の名前は「Mr.ヴァリアブル Lv13」となります。HPも13x50=650となります。

補講_14_テストプレイ3

実際に戦ってみても、レベルが上がるほどに敵の火力も報酬も上がっていくのが実感できるかと思います。なお、先頭キャラがLv1だとデフォルトゴブリンに毛が生えた程度の強さだったりします。

Step4 応用例

今回はudb[9]で名前とステータスだけを操作してみました。同じ要領でudb[10]を操作すれば敵のAIを、udb[11,12]を操作すれば耐性を弄ることもできます。もちろんドロップ率や行動回数も弄れるので、特定条件でだけアイテムをドロップしたり行動回数が増える敵なんてのもアリです。
 
味方キャラのステータスや技をコピーした敵なども作れそうですね。味方との戦闘訓練や闘技場での戦いとか、変身能力を持った敵の作成とか、色々使い道がありそうです。

補足:DB操作を行うと?

DBへの読み書きを行う場合は通常「DB操作」を使用しますが、今回に限っては使えません。タイプ番号に負数を指定するとご覧の通り、みんな大好き緑帯エラーが発生してしまいます。だからDB操作ではなく変数操作や文字列操作を使う必要があったんですね。

補講_91_ライト失敗例

いいなと思ったら応援しよう!