トップ小ネタPrince of Persia > CHRファイル


CHRファイル(マップパーツ画像)

CHRファイルの概要
ゲーム中のマップは64*128ドット(*2層)からなるマップパーツ単位で構成されています。
CHRファイル(*.CHR)にはこのマップパーツの元となる画像データが格納されています。

CHRファイルは16*16ドットのキャラクタが256個含まれており、
これを組み合わせて1つのマップパーツにします。
(正確には縦横4*4で組み合わせた64*64ドットの中サイズのパーツ(中パーツ)を作り、
 この「中パーツ」を組み合わせてマップパーツを作ります)

※キャラクタ(パーツ)の組み合わせはCHRファイルではなく、マップファイル(*.MAP)で指定します。
 詳細はマップデータのページを参照してください。

※CHRファイルは圧縮されています。以降に書かれているアドレスは展開後のものです。
 圧縮データの展開方法は圧縮データのページを参照してください。


データ形式
$20byte単位のデータが4セット分($80byte)で1つのキャラクタのデータになります。
各セット内のデータはフォントデータと同様、1byteで横8ドットを表す形式(各ドットがbit単位で対応)で、
キャラクタの左上から横方向に格納されています。
各セットの内容は以下の通りです。
$00〜パレット番号+1
$20〜パレット番号+2
$40〜パレット番号+4
$60〜描画フラグ(後述)
このようなデータがキャラクタ数分(256)続いています。

例: ※カッコ内は2進表記
アドレス
$00$84(10000100)
$20$C4(11000100)
$40$7F(01111111)
$60$C4(11000100)
このような場合、キャラクタの左上から横8ドットは次のようになります。

パレット番号+1 $84(10000100) +1
(001)




+1
(001)


パレット番号+2 $C4(11000100) +2
(010)
+2
(010)



+2
(010)


パレット番号+4 $7F(01111111)
+4
(100)
+4
(100)
+4
(100)
+4
(100)
+4
(100)
+4
(100)
+4
(100)
描画フラグ $C4(11000100) 1 1 0 0 0 1 0 0
表示色
3
(101)
6
(110)
4
(100)
4
(100)
4
(100)
7
(111)
4
(100)
4
(100)


描画フラグについて
※以降の説明はおそらく正確ではないと思います
CHRファイルでは、各ドットに対してパレット番号の情報(3bit)の他に、もう1bit分の情報(フラグ)を持っています。
マップパーツは2つの層(上層・下層)に分かれていますが、層によってこのフラグの意味も変わってきます。
上層 フラグ0下層のドットのパレット番号とOR演算を行う
(奥・手前に関しては下層のフラグに依存)
フラグ1最も手前(炎を除く)に描画される
下層 フラグ0最も奥に描画される
フラグ1壁属性のマスでは上層・炎以外の全てのキャラクタ、
床属性では特定のキャラクタよりも手前に描画される

下層のフラグ1の「特定のキャラクタ」とは、
・落下中のプレイヤーや敵
・スイッチ床、落下床の「右のマスにはみ出している部分」
などのことです。

戻る