ffbin @Wiki

タイルの構成について

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集
  1. タイル用画像チップの作成

1.タイル用画像チップの作成

マップで使われているタイルは4つのチップを組み合わせて構成されています。
使用する画像チップはチップセットから選ばれ、1つのチップセットには128種の画像チップが含まれています。1つのマップにつき4つのチップセットが使われ、マッププロパティで使用するチップセットの番号が設定されています。

画像チップの構造

画像チップは8ピクセル×8ピクセルの大きさで、各ピクセルの色を設定することで構築されます。
画像チップの構築に必要なデータは
「使用するパレット」
「ピクセル毎の色番号データ」(=画像チップデータ)
の2種類です。
まずパレットデータですが、これはマッププロパティの「パレット番号」で設定されています。0x02DC480から256バイトずつで並んでいます。
(パレット番号を256倍して2DC480を足した値が該当パレット番号のデータのオフセットになります)
2バイトで1色を表すため、このデータは128色分になるわけですが、実はこれは16色のパレット8種(1パレットにつき32バイト)を合わせたもので、実際にはこれら8種の中から使用するパレットを選んで使うことになります。どのパレットを使うかはタイル毎(画像チップごとではない)に決まっており、後述のタイル構成データで設定されています。

次にピクセル毎の色番号データ(いわばこれが画像チップの本体とも言えます)ですが、これはチップセット毎にまとめて格納されており、0x01FDA00から3バイト単位でポインタが並んでおり、この値に1FDB00を加えた値が画像チップデータの位置になります。
チップセット10番を例にとると、10*3+1FDA00=1FDA30の値がデータオフセットを示しています。
0x01FDA30の値を調べてみると 40 44 01 ですから
14440+1FDB00=211F40
に画像チップデータがあることがわかります。
ちなみにチップセット10番はフィガロ城の城内で使われており、yy-chrで0x0211F40付近を覗くと、以下のような画像が見えるはずです。


画像チップデータの読み込み

上の画像のように、yy-chrで見ればチップデータは一目瞭然なのですが、実際にバイナリデータからどのように画像に変換しているかも知っておいた方がよいでしょう。

簡単に言うと「4バイトで8ピクセルの色を指定する」ということです。
「1バイトで2ピクセル」を指定しているわけではないので、注意が必要です。
一つの画像チップにつき8ピクセル×8ピクセル=64ピクセルなので、32バイトで一つの画像チップが構成されていることがわかります。
例としてチップセット10番の画像チップの一つを見ていきましょう


この画像の左画面の白枠で囲まれた部分(=右画面で拡大されています)が一つのチップになります。このチップのデータは0x02121A0から32バイトです。実際に該当部分のバイナリデータを抽出して見ると、以下のようになります。
B3 3E DC E3 45 80 D2 33 E4 C5 B3 3E DC E3 45 80
C0 00 00 00 02 38 0E 00 7A 00 C0 00 00 00 02 38

さて、これを画像データ=ピクセル毎の色データに変換していくことになります。
使える色は上記の通り使用パレットによって決まり、1パレットは16色です。
つまり色データは00~0Fの値で指定されるということです。
パレットの指定は後述のタイル構成データで行うのですが、今回は既にパレットが判明しているものとして下記のパレットを使います。
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

では具体的な変換の方法に入りましょう。
まずバイナリデータを4バイトずつ区切ります。しかし端から4バイトずつ区切るのではなく、
(1,2,17,18)(バイト目)
(3,4,19,20)
(5,6,21,22)
(7,8,23,24)
(9,10,25,26)
(11,12,27,28)
(13,14,29,30)
(15,16,31,32)
で区切ります。今回の例でいうと
B3 3E  DC E3  45 80  D2 33  E4 C5  B3 3E  DC E3  45 80
C0 00  00 00  02 38  0E 00   7A 00  C0 00  00 00  02 38
という分け方になります。
最初のブロックについて見ていきましょう
(B3 3E C0 00)
この4バイトを2進数に変換して縦に並べます。
1 0 1 1 0 0 1 1
0 0 1 1 1 1 1 0
1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0
これのbit7だけを下から上に読むと0101=05h。これが最初のピクセルの色番号になります。
(上のパレットの05の色)
同様にbit6だけを下から上に読むと0100=04h。これが次のピクセルの色番号です
こうして番号を読んでいくと最初の8ピクセルの色番号は
(05,04,03,03,02,02,03,01)
となり、画像(一番上の行にある8ピクセル)と合致します。
ブロックの分け方が特殊な上、リトルエンディアン+上位ビットから読み取るという非常に解りづらい方式です。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
目安箱バナー