RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

(RPGツクール2003) 敵の名前の表示

過去ブログの転載です。

この記事はツクール2000の書庫に入れてますけど、ツクール2003に関する内容なのでご注意です。

RPGツクール2003では3つのタイプから戦闘を選べるのですが、私はAタイプのものを1個作ったぐらいしかしたことがなく、他は使ったことがないのです。

Bタイプ、ゲージタイプを選択すると、敵の名前が表示されず、困ることがあるかもしれません。

実際戦っている間は敵の名前など気にすることもないので基本的には無問題ですが、
それでも敵の名前を表示させたいという方もいますでしょうから、強引に表示する方法を記します。

本当に強引です。やり方を書くだけで、自己責任でお願いしますね。この方法を行う際には、必ずバックアップをしておいてください。(誤るとデータベース壊れちゃいます)*1

Bタイプ、ゲージタイプの場合、敵が状態異常ですと、その敵の状態がカーソルを合わせたときに表示されます。

f:id:fermiumbay13:20190801133601p:plain

ということは、敵の名前を表示させるには敵の名前の状態異常をその敵にかけてやれば、敵の名前が表示できるではありませんか。

しかし、状態異常名は全角4字までしか入力できないため、名前が5字以上ある敵の名前は表示できないことになってしまいます。

これは入力欄は全角4字までしか入力できないようになっているために過ぎないので、ツクールからではなく、データベースそのものを書き換えてやれば5字以上の状態異常名が作れます。↑あれは「ジャックオーランタン」ですから、10字必要です^^;

データベースの内容は「RPG_RT.ldb」というファイルに保存されているので、そのファイルのデータを書き換えてやりましょう。バイナリエディタを用います。ツクール2000の文字列はShift-JISなので、Shift-JISの文字コードを表示してくれるエディタが便利です。

データベースの内容はすべて一つのファイルに連続して格納されているので、目的の場所を探すのが困難です。そのため、まずツクール2003を開いて何かてきとうな状態異常名を付けておきましょう。ひとまず、状態30番に「なまえ」という状態異常名を付けました。

RPG_RT.ldb」を編集していくわけですが、少し変更を加えた状態で、作業途中で保存をしてしまうと、データベースが中途半端な状態で保存されてしまうことになりますから、ツクール編集画面でそのプロジェクトが読み込めなくなってしまう可能性がありますので、編集画面を見ながら行いたい場合は出来れば保存は最後に行ってください。

f:id:fermiumbay13:20190801133622p:plain

バイナリエディタを開き、「RPG_RT.ldb」を読み込んで文字コードをShift-JISに設定したら、「なまえ」を検索します。↑全角3字なので、6バイト使われていますね。

[82 C8 82 DC 82 A6]の直前にある[06]は、状態異常名のバイト数を表します。「ジャックオーランタン」は全角10字なので20バイトですから、この数値を[14](20は16進数で14)にすれば、その後の20バイトが状態異常名を表すものになります。

[82 C8 82 DC 82 A6]を削除し、「ジャックオーランタン」をバイナリにした[83 57 83 83 83 62 83 4e 83 49 81 5b 83 89 83 93 83 5e 83 93]を貼り付ければOKです。

とりあえずやったことは、[06]を[14]に書き換え、[82 C8 82 DC 82 A6]を[83 57 83 83 83 62 83 4e 83 49 81 5b 83 89 83 93 83 5e 83 93]にしたぐらいです。状態異常名「なまえ」が「ジャックオーランタン」に変わります。まだ保存しないこと。

f:id:fermiumbay13:20190801133644p:plain

変わりました。しかしこれだけの状態で保存してしまうと、ゲームが開きません。まだ出来れば保存はしないでくださいね。

この段階ではデータベースのサイズを増やしてしまったので、データベースの「状態」を担っている部分のバイト数を示す値を変更しなければなりません。

そこはどこかを直接探すのはまた難しいので、例えば状態1番の「戦闘不能」やら「気絶」やらがある場所を検索してください。

f:id:fermiumbay13:20190801133708p:plain

↑状態1番「戦闘不能」を検索した様子です。そこからちょっと戻った所の「12」が目印です。これが、「状態」を表す番号になります。

その直後の[8E 60]が、データベース中で「状態」を担っている部分のバイト数を表します。

状況によっては間の数が[12]になってしまって、それが「状態」を表す[12]なのか
混同してしまう可能性もありますから、一応次のように考えて下さい。

「戦闘不能」は8バイトなので、その直前には[08]とあり、その直前には[01]とあります。これは、今から宣言するのが状態の「名前」だということを示します。その更に直前の[01]は状態IDを示します。状態1番なので[01]です。その直前の[1E]は、10進数で30になりますが、これは「状態」の最大数を示します。その直前にある[8E 60]が、状態のバイト数です。

BER圧縮された値ですので、[8E 60] は、10進で1888(16進で760)を示すことに注意してください。つまり、この場合1888バイトが「状態」に使われているバイト数です。BER圧縮については以下です:

fermiumbay13.hatenablog.com

いま、「なまえ」を「ジャックオーランタン」に変更したことによって、全角7字分、つまり14バイト増えました。ですから、1888+14=1902バイトになったわけなので、[8E 60]の部分を1902に相当する数に変更しなければなりません。1902はBER圧縮すると[8E 6E]になりますから、[8E 60]を[8E 6E]に変更すれば良いことになります。14を足す程度ですから、BER圧縮をしたり戻したりするまでもないかもしれませんが……

これで保存をすると、状態「ジャックオーランタン」が作成出来るはずです。(誤りがあると、おおかたツクール2003がフリーズしてしまいます)

f:id:fermiumbay13:20190801133729p:plain

状態の名前が4字の制限を超過していますね。HPが減ったり行動不能になったりさせないで、何も起きない状態異常にしておきましょう。

バトルイベントの開始条件:ターン数[0]にし、「敵キャラの状態の変更」を挿入して、敵をその敵の名前に状態変化させます。

f:id:fermiumbay13:20190801133745p:plain

違和感があります。

f:id:fermiumbay13:20190801133759p:plain

これによって、晴れて敵の名前が表示されるようになりました。
しかし毒などを受けてしまうと状態異常の表示がおかしなことになってしまう難点があります。

f:id:fermiumbay13:20190801133809p:plain

↑更なる苦肉の策。

すべて同じ優先度の状態はIDが大きなものから順に表示されるようですから、状態30番を「ジャックオーランタン」、状態28番、29番を「(空白)」、状態2番を「毒」にすればこのように表示させることも一応可能です。一応ですね。

どうやらツクール200Xの大体の値は入力側で制限されているのがほとんどであり、このようにデータベースを直接いじってやれば様々な限界突破が可能です。ただピクチャーの表示数は50より大きく出来ないんですよね……それだけはちょっと残念ですね。

*1:こういうことしてくれるツールを誰かが作ってくれれば済むんだよなぁ。200XのDB編集ツールの開発は夢の一つです;