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

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

RPGツクール95のマップデータ構造

過去ブログの転載です。

RPGツクール95は古いツクールです。私も当時そこそこ使っていたのですけれど、何かの拍子でマップデータが壊れてしまったことが一度ありました。

RPGツクール2000とは異なり、95のマップデータは単一のRPGファイルに格納されているので、どこかが欠損するとゲームそのものが全く読み込めない状態になってしまうのです。残念に思いつつも消さずに何年も放置していました。

だんだん成長するにつれてバイナリを見ることぐらいは出来るようになったので、その気になってその壊れたRPGファイルを確認し、修復することを試みました。(修復を試みたこと自体はだいぶん前なので、詳しいことは忘れてますけど……)

マップデータはRPGファイルの中に入っているので、マップのフォーマットが分かればおかしな箇所が分かることになります。

マップデータ構造

色々試して、一つのマップは次のようにして保存されているらしいことがわかりました。

[マップ通し番号(2byte)][?(2byte)][マップ名(25byte)][ループの有無(1byte)][?(11byte)][マップ横サイズ(2byte)][マップ縦サイズ(2byte)][?(4byte)][情報(36byte)][「MCHIP0.MCHIP1.MCHIP2.MCHIP3.」(28byte)][マップチップデータ][イベント場所データ]

「?」の所はよくわかんなかったけど、マップの修復に直接関係なさそうでしたので、深入りしませんでした。

必要なのはマップのサイズと、マップチップデータ、イベント場所データ、です。

「マップチップデータ」はマップのサイズ横×縦×2バイト分確保されており、左上(0,0)から、右へ、右端まで来たら(0,1)へ、マップ右下端まで、2バイトおきにマップチップの番号が代入されているようです。

また、これらの数値はリトルエンディアンですので、[12 34]という2バイトのデータがあったら、これは16進法で1234を意味するのではなく、3412を意味します。2000のような上層チップはないので、すべて単純にマップチップの番号が保存されるだけです。

「イベント場所データ」は工夫されています。2バイトずつ進んでいき、それぞれイベント場所を決めるための命令が発生するようです。

まずスタート地点は(0,0)です。そこから命令によって右へ進んでいき、右端まで来たら(0,1)へ、マップ終端を超えるまで続きます。

命令は2種類あり、「移動命令」と「設置命令」です。

初めの1バイトが16進法で8000以上であれば移動命令、それ未満であれば設置命令となります。

「移動命令」では、それを8000引いた値ぶんマス移動します。
「設置命令」では、その値のイベント番号のイベントがそこに設置されます。

いずれかの命令があったあと、更に1マス移動します。

たとえば20×15のマップがあったとき、(4,0)に982番イベント、(0,1)に983番イベントがあるとき、イベント場所データは[03 80 D6 03 0E 80 D7 03 16 81]となります。

初期位置:(0,0)
[03 80]移動命令:3マス進む + 命令後:1マス進む → (4,0)
[D6 03]設置命令:982番イベント設置 + 命令後:1マス進む → (5,0)
[0E 80]移動命令:14マス進む + 命令後:1マス進む → (0,1)
[D7 03]設置命令:983番イベント設置 + 命令後:1マス進む → (1,1)
[16 81]移動命令:278マス進む + 命令後:1マス進む → (0,15)
最終位置:(0,15)※マップ終端(19,14)を超えるまで

このように、設置場所を移動しながら設置するのです。

私の壊れたマップデータを確認すると、1番マップのフィールドのイベント場所データが消えており、それが2番マップにも浸食してなくなっていたのを確認しました。
2番マップはただの真っ黒なマップだったのですぐ復元できましたが、1番マップはイベントの設置場所が不明だったので、完全には元に戻せませんでした。イベントは高々20個ぐらいしかなかったので、当てはまりそうな位置にイベントを置きました。そうして起動してみると、なんとか成功して修復出来ました。

壊れたデータはいつか直せるかもしれないので、消してしまわないで取って置いた方が良いと思います。ツクール95のマップを修復するなんて、もう今の時代されないかもしれませんが、同じようなことが他のツールにも言えるので、大事だと思います。

f:id:fermiumbay13:20190801130052p:plain

↑これはツクールの画面ではなく、バイナリを取得して、マップデータからマップを作り、イベントの位置を表示するのをプログラムで試している図です。

ツクール95のゲームは今の時代のWindowsではなかなか動かないので、発展させれば、このデータをもとにエミュレータでも作れそうですね。