今回はマップエントリーについて説明します。エントリーを設定することで、前回まで
に作成した構成設定、性質設定、画像、パレット等を1枚のマップとして統合します。
以下はソニタウンさんのFF5解析情報からの転載です。
■マップentry
00:(2B)マップID
02:(1B)町名ID ;for $107000
03:(1b)
(1b)水の揺らめきflag
(1b)
(1b)
(1b)丸い灯り大表示flag
(1b)丸い灯り小表示flag
(2b)
04:
05:(1B)パーツ性質ID ;for $0FC540
06:(1b)敵出現flag
(7b)未使用00
07:
08:(1B)パーツ構成ID ;for $0F0000
09:(6b)画像ID1 ;for $1C2D84
(6b)画像ID2 ;for $1C2D84
(6b)画像ID3 ;for $1C2D84
(6b)画像ID4 ;for $1C0000
0C:(10b)マップデータID 上面 ;for $0B0000
(10b)マップデータID 下面 ;for $0B0000
(10b)マップデータID 透明面 ;for $0B0000
(02b)
10:
11:
12:
13:
14:景色の動き
15:
16:(1B)色ID ;for $03BB00
17:(1B)色変化ID ;for $?
18:(1B)戦闘背景ID ;for $?
19:(1B)音楽ID ;for $?
BはByte単位、bはbit単位の区切りです。特にややこしいのが画像IDや上層、下層、
水面といったレイヤー指定の部分です。この辺は数バイトをまとめてビット列で切り
分けているため、手計算だと非常に面倒です。関数電卓で16進と2進を行き来する
か、簡単なプログラムを組んで自動的に変換できるようにするといいと思います。
4B 02 00 00 00 17 00 00 1C 29 00 00 7E FD 05 00 00 00 00 00 00 00 2C 00 00 4C
上の数値はFF5_mapdemo.smcの遊牧民の村のマップエントリーです。左から6バイト
目の0x17はマップ性質設定のIDで、9バイト目の0x1Cは、マップ構成設定のIDです。
10バイト目からの着色した部分3Bytes=24Bitsを6ビットの区切り4つに切り分けると、
マップに使用する4枚の画像のIDが判ります。普通の画像3枚と水面や霧などが1枚
指定できるようです。これが非常に面倒で一番左の1バイトをビットに変換して右から
6ビット切り出します。これがまず1枚目の画像IDとなります。続いて、余った2ビットを
真ん中の8ビットの右側に加えて右から6ビット切り出します。これが2枚目の画像です。
余った4ビットを最後のの8ビットの右側に加えて、右から6ビット切り出します。これが
3枚目の画像で、余った6ビットが4枚目の画像のIDとなります。手作業ですと非常に
面倒なこと極まりないです。上記のデータの場合は、最初の0x29を2進数にしますと、
00101001なので右から6ビット切り出して101001でそのまんま0x29です。これは画像
ID 0x29だけをマップ構成設定0x1Cにて使用するという意味です。今回は試作マップ
なので構成設定に画像を1枚だけ使いましたが、ほとんどのマップでは、2枚以上の
画像を用いた構成設定が作られています。確認として、試しにFF5ACのマップ画像
指定を分解してみます。
68 0A 04
まず各バイトを16進電卓で2進数に変換します。
68 = 0110 1000
0A = 0000 1010
04 = 0000 0100
0110 1000を右から6ビット切り出すと 101000 = 0x28
余った01を0000 1010の右側に加えると0000 101001
右から6ビットは101001 = 0x29
余った0000を0000 0100の右側に加えると0000 01000000
右から6ビットは000000 = 0x00
残りの6ビットは000001 = 0x01
以上より、68 0A 04は画像28 29 00 01を指定していると判ります。
この作業をプログラム化したC言語ソースを同梱しておきます。コンパイルは各自で
お願いします。
次のレイヤー指定もやはり1バイトをビット化して右から切り出していきます。2バイト
目のビットも右から取得します。ひたすら右からです。こちらもプログラムのソースを
同梱しておきます。いずれにせよ、画像指定とレイヤー指定がマップエントリー設定
の中で一番の難関と言えます。筆者はまだ水面、霧等のアニメーションレイヤーの
扱い方については全く調査しておらず、何も理解できていませんのでそちらは別の
機会に、ということで。一応、ここまでが理解できれば簡単なマップなら作成可能と
なる情報を今回お伝えしました。Minさんの幻のパッチ自体は今は手に入りませんが、
FF5ACとFF5CDに残されていた機能を利用してマップ作成の練習ができたことに深く
感謝します。
これにてマップチュートリアルを終わります。