◆ モンスターの改造方法3
----------------------

今回はエントリーからモンスターの画像が格納されているオフセットを算出して、画像を
別作品のモンスターのものと差し替えて、パネルのレイアウトを定義するFormの作成
まで一通り紹介します。ここまで押さえれば十分というレベルまで一気に駆け上がります。


・エントリーの1〜2バイト目からオフセットを算出

今回は題材として「てつきょじん」を扱います。FF5 Viewerで下の方を探すと出てきます。



パレット335、Form25なので16進数に変換して、0x14f、0x19。Stirlingで$14B180に飛んで
4f 19で検索すると、$14B556にヒット。3バイト戻って$14B553からエントリーが

32 6A 81 4F 19

となっています。画像は32 6Aと設定されています。まず、0x326Aを電卓の16進モードで
2で割ると0x1935が得られます。次に末尾に0を加えて0x19350とします。モンスター画像
が格納されている先頭のオフセット値である0x150000をこれに加えます。すると169350
になります。ここにてつきょじんの画像があります。手順をまとめますと、

エントリーの先頭2バイトxx yyを2で割る
出てきたaa bbの末尾に0をつけてaabb0にする
aabb0に150000を加える

これでエントリーからモンスター画像のアドレスが導き出せます。

YY-CHRで$169350に飛ぶと、8 * 8ドットのタイル1マスが67マス分並んでいます。白囲みの
四角の部分が最後の67マス目です。マスの総数は一番上の画像の右側の#Tiles:67より。



スクショでは色がめちゃくちゃで、画像も小分けにされたタイルが横一直線に並んでいて、
てつきょじんの原型をとどめていません。これをきちんと表示するために、Formデータが
設定されています。エントリー32 6A 81 4F 19の3バイト目の0x80は大型Formのフラグで、
通し番号は5バイト目の0x19です。ではこれがどこにあるかというと、Wikiより、

10D004- : モンスター画像パターン(サイズ小)8Bytes
10D334- : モンスター画像パターン(サイズ大)32Bytes

今回は大型Formなので始点は$10D334となります。Formの位置は10進数で25 * 32 = 800。
これを16進数にすると0x320で、始点の0x10D334を加えると0x10D654となります。Formの
説明は一旦後回しにして、次は別作品のモンスター画像の移植方法を紹介します。


・FF6からのモンスター移植方法

まずFF6のモンスター画像を見つける必要があります。これはYY-CHRか、FF3SEで探します。
今回はてつきょじんの画像をFF6のガーディアンの画像で上書きしてみます。どちらも画像の
タイル数が67枚なので移植のサンプルとして好都合なんです。



上の画像はてつきょじんの領域にガーディアンを移植した後のデータです。てつきょじんの
データを全て潰しているので右側の数値はてつきょじんのものと全く同じです。実際の作業
は、YY-CHRを2つ立ち上げて、一方にFF5、他方にFF6を読み込ませます。そして、FF6の
画像をコピーして、FF5にペーストします。バイナリエディタでデータ範囲を切り貼りすると、
理屈としてはうまくいくはずなのに、画像がズレてしまうことがあります。そのため、手間が
かかりますが、YY-CHRで地道に画像をコピペするのが無難かと思います。



上の画像はYY-CHRでヘッダありのFF6を開いて$2B5598へ飛んだところです。白囲みの
四角の部分が最後の67マス目です。このガーディアンの画像を、8 * 8か16 * 16でコピペ
していきます。FF3SEはヘッダありのRomファイルを読み込むので、FF6のRomのヘッダは
そのままにしておくと便利です。下の画像はFF3SEでガーディアンを開いたところです。



パレットはFF3SEを見ながらSNES Paletteで$EE4F0から入力します。画像サイズ3倍以上だと
グリッド(縦横の線)を表示できるので、Formの構成をメモするのに便利です。

・Formのつくり方



上の画像はガーディアンの左側のタイル8 * 8にカーソルを合わせて右側に拡大表示してます。
ライトグレーのタイルは構成上、何も表示させない部分です。これを0として、実際に画像を表示
させる部分は1とします。そうすると、右側の拡大図の最上段は00001111となります。このような
構成情報は、ビットを計算して1Byteで表現します。左から10進数で128,64,32,16,8,4,2,1
となります。0の部分は0のまま。1の部分はそれぞれに該当する数値を足していきます。

00001111 → 0 + 0 + 0 + 0 + 8 + 4 + 2 + 1 = 15(0x0F)

最上段は上のように算出します。ガーディアンは縦方向にタイル8枚なので8段分の構成を算出
していきます。左側は以下のようになります。

左側8*8
00001111 0F
00111111 3F
00111111 3F
11111111 FF
11111111 FF
01111111 7F
00011111 1F
00001110 0E

今度は右側の構成を計算していきます。下の画像をご覧下さい。



右側8*8
11000000 C0
11100000 E0
11110000 F0
11110000 F0
10000000 80
11100000 E0
11100000 E0
00000000 00

10D654〜(32Bytes)
C0 0F E0 3F F0 3F F0 FF 80 FF E0 7F E0 1F 00 0E 以下00のみ

左側の数値を右に、右側の数値を左に置きます(左右反転)。
最上段は左0F、右C0なので「C0 0F」となります。以下同様に。

これにてモンスターチュートリアルを終わります。

もどる

indexへもどる