◆ マップの改造方法4
-------------------

今回はマップ構成設定の作り方について説明します。素材はFF5_mapdemoで試験的に
導入したロマサガ1の遊牧民の村を用います。


・マップ構成設定データの構造

マップ構成設定は画面上の1マスのマップチップを定義するデータで、1マスは16 * 16
ドットです。実際には8 * 8ドットのチップを左上、右上、左下、右下に配置しています。
チップは上下反転(Vertical flip)や左右反転(Horizontal flip)が可能で、建物などの左右
対称の部分は片側だけ画像を作って反対側は反転させることでデータを節約可能です。
領域に余裕がある場合は無理に反転させず、両側の画像データを登録してしまっても
いいと思います。

FF5_mapdemo.smcの$3D0048-3D0400まで(953Bytes)をバイナリエディタでコピーして、
新規作成に貼ってtest.binで保存して下さい。次に、test.binをファイル解凍プログラム
(dfwin.exe)で解凍して出てきたtest_d.smcを付属のBNE2のChip_componentsで開いて
下さい。なにやらわけのわからない数値が並んでいて解読困難かと思います。


◆マップパーツ構成[2 * 256 * 4]
上位 1b:上下, 1b:左右, 1b:遮蔽, 3b:パレット0〜7 2b:マップ画像ID 0〜2(3は水流動?)

この定義だけ見ても、やはりよくわからないと思います。筆者も初めは訳がわからず、
数値を変えての試行錯誤でようやく規則性を見出すことができました。まず、ただの
砂地のデータから説明します。上の画像のマップチップ 003をご覧下さい。データは
0420 0421 0430 0431と並んでいます。各データの下位バイト20 21 30 31は、画像の
インデックス(通し番号)です。恐らく00〜FFまで設定可能です。問題は上で定義を示
した上位バイトです。この砂地は右上の画像の最上段の左から4つ目です(宝の右)。

砂地の上位バイトはどれも04です。これを2進数にすると00000100となります。右から
いちにーよんぱと数えていきますが、いちにーはマップ画像IDの定義で、ここでは00
なのでマップ画像0を指定しています。次のよんが1になってます。ここはパレット指定
のビットの1つ目です。意味が伝わりにくいのは承知ですが、これはパレット1を指定
しています。3つのビットで0〜7を表すのですが、1バイトを任意のビットで区切っている
ため、ここでは+4、+8、+16の組み合わせで3Bitsでの0〜7を表現します。

今度はマップチップ 002宝箱(閉)のデータを見てみます。こちらは上位バイトが0x0Cと
なっています。これを2進数にしますと、00001100となります。4+8=12で0x0Cです。これ
はパレット3を指しています。ここでの数値は0x0Cですがパレット番号の解釈としては
3Bitsなので011と読み替える必要があり、やや面倒です。マップ関連のデータは、この
ようにビットを切り分けたものを1バイトに詰め込んでいたり、ものによっては複数バイト
横断で強引に詰め込まれていたりして切り分けが非常に面倒な場合もあります。

次はマップチップ 008です。右上の画像で、バッツがいるチップの真上のチップです。
左上以外は上位が0x24です。2進数にしますと00100100で、左から3つ目の1は遮蔽
フラグです。これが立っているとチップ画像が優先されてキャラ画像の上に重なります。
右から3つ目の1はパレット指定で、001なのでパレット1です。ここまでで3つのチップを
例にマップ構成設定データの上位バイトを説明しました。上下反転や左右反転も遮蔽
フラグと同じように16進電卓で一旦2進数にすると判別が楽かと思います。上位バイト
の各ビットの用途を理解すれば、BNE2でのマップ構成設定の作成も道半分です。残り
は下位バイトとチップ画像データの関連づけです。これを理解すればFF5に別作品の
チップを導入したり、オリジナルの構成設定を作ったりできます。次回は下位バイトと
画像について説明します。今回はこれにて終わります。

もどる

マップの改造方法5へ

indexへもどる