ウディタ講座 補講第1回 UDB書き込み
ウディタについて調べている途中、何やら気になる話が耳に入ってきました。いわく「本来ゲーム中は読み込み専用のはずのUDBに書き込みができる」とのこと。
試したみたところ……本当にできてしまいましたw 簡単に言うとcdb[N-100]に書き込むとudb[N]に書き込んだことになる仕組みのようです(N=0~99)。詳細はこちらのページを参照してください。
なお、UDBはセーブデータに保存されないという特徴がある為、変更は一時的なものです。したがって書き込んでから実際に使用するまでの間にセーブ&ロードが挟まれる可能性のある場面では使わない方が良さそうです(装備アイテムの効果など)。
この講座でやること
・UDBへの変数・文字列の書き込み
・使用例:条件により名前とステータスが変化する敵の作成
Step1 敵キャラの追加
まずは敵キャラを追加してみましょう。名前もステータスも後から書き換えるので適当でかまいません。行動AIは50%でファイアボールを使用、そうでなければ通常攻撃としておきました。もちろんコイツを含む敵グループの作成も忘れずに。
※この時、敵キャラデータのUDBタイプが9番であることをよく覚えておいてください。
適当にマップEvを作ってコイツと戦ってみます。
当然HPは1です。ヌケニンかな? ウィンドⅠかな?
SPも1なのでファイアボールすら唱えられないようです。ベビーサタンかな?
Step2 UDBへのライト
実際にUDBに書き込んでみましょう。UDBに書き込む場合、変数操作でタイプ番号に負数を指定してください。
※DB操作は不可です。補足参照。
今回は敵データ(udb[9])に書き込みたいので、cdb[-91]に書き込みましょう。表示上は「xNoData」と出ますが無視してください。ここではパーティ先頭のキャラのレベルを基準として敵の強さを変化させています。HP・SPはレベルx50、攻撃・魔攻・敏捷はレベルx5、経験値・お金はレベルx1000です。
※先頭キャラのレベルはコモン22に先頭キャラ番号(cdb[6:0:1])を渡すことで取得しています。
続いて名前も書き換えてしまいましょう。文字列操作で、代入先文字列を変数self[2]で指定します。1009003600とはUDB・タイプ9・データ36・項目0の意味で、これが敵キャラ36番の名前になります。
Step3 テストプレイ
実際に戦ってみましょう。先頭キャラがLv24の場合、敵の名前は「Mr.ヴァリアブル Lv24」となります。HPも24x50=1200となっていますね。
同じ敵でも先頭キャラがLv13の場合、敵の名前は「Mr.ヴァリアブル Lv13」となります。HPも13x50=650となります。
実際に戦ってみても、レベルが上がるほどに敵の火力も報酬も上がっていくのが実感できるかと思います。なお、先頭キャラがLv1だとデフォルトゴブリンに毛が生えた程度の強さだったりします。
Step4 応用例
今回はudb[9]で名前とステータスだけを操作してみました。同じ要領でudb[10]を操作すれば敵のAIを、udb[11,12]を操作すれば耐性を弄ることもできます。もちろんドロップ率や行動回数も弄れるので、特定条件でだけアイテムをドロップしたり行動回数が増える敵なんてのもアリです。
味方キャラのステータスや技をコピーした敵なども作れそうですね。味方との戦闘訓練や闘技場での戦いとか、変身能力を持った敵の作成とか、色々使い道がありそうです。
補足:DB操作を行うと?
DBへの読み書きを行う場合は通常「DB操作」を使用しますが、今回に限っては使えません。タイプ番号に負数を指定するとご覧の通り、みんな大好き緑帯エラーが発生してしまいます。だからDB操作ではなく変数操作や文字列操作を使う必要があったんですね。