だいぶガバガバ翻訳だけどスプライトデータの詳細。
引用ページ http://forums.therockmanexezone.com/topic/8632071/1/
英語得意な人いたら加筆お願いします。


スプライトのファイル構成


[ヘッダー]
[アニメーションポインタ]
[アニメーションデータ]
[スプライトデータ]
[パレットデータ]
[ジャンクデータ]
[OAMデータ]


[ヘッダー]

ヘッダーは4バイト(32bit)から構成されており、ファイルには影響しない。

0x00 ランダムの値
0x01 定数0x00
0x02 定数0x01
0x03 アニメーションの数 (10進数)

[アニメーションポインタ]

ポインタは4バイトのlong値で、アニメーションデータの位置を示す。
ポインタ領域の長さは最初のポインタを-4したものである(?) 原文:length of pointer region is the first pointer minus 4
先頭アドレスの値で考えれば0x1D8004 ~ 0x1D8060なので長さは0x5C = 0x60 - 0x04だと言える。

スプライトデータの例


[アニメーションデータ]

アニメーションデータは4バイトのパート5セットで構成されている。

パート1:グラフィックサイズへのポインタ
…グラフィックをロードするためのバイト数を決定する4バイトである。(?)原文:bytes to determine # of bytes to load for graphics

パート2:パレットサイズのポインタ
…ポインタをロードするためのバイト数を決定する4バイトである。(?)原文:bytes to determine # of bytes to load for palette

パート3:ジャンクデータ
…使われない。

パート4:OAMデータポインタへのポインタ(?) 原文:pointer to OAM data pointer
…OAMデータの位置を特定するために4バイトのポインタを読み込む。
…一般的なスプライトは、00000004のポインタを持っている。
…ポインタは最初の読み取りポイントを基準としている。
…顔アイコン(Mugshot)は通常のスプライトに比べて多くのポインタを使用している。

パート5:アニメーションタイプデータ
…フレームの遅延とアニメーションタイプを決定するために2組の2バイト(16bit)のデータ(00XX 00YY)を読み込む。
00XX:XXはフレーム遅延の値である。(毎秒60フレーム)
00YY: YYはアニメーションタイプである。
  • 00 = アニメーションを再生(次のフレームを表示する前に遅延値によってフレームを保持している)
  • 80 = アニメーションの終了(アニメーションはこの値によって終了する必要がある)
  • C0 = アニメーションのループ (この値を持つアニメーションの後の最初のアニメーションが再生される)

[スプライトデータ]

スプライトデータは常に、1つのスプライトのサイズをバイト単位で決定するための4バイトから始まる。
スプライトデータは1ピクセルあたり4ビットである(つまり1バイトで2ピクセル)。

[パレットデータ]

パレットデータ領域は、1パレットあたりのサイズをバイト単位で決定するための4バイトから始まる。
パレットデータは16色からなり、最初の色は透過色である。
サイズ情報の後にパレットデータが複数続くが、これらがポインタによって直接指定されることはない(OAMデータが持つインデックス番号で指定される)。

[ジャンクデータ]

4バイトのデータ3セットからなり、スプライトには影響しない。
FF800100 FFFFFFFFに続く00000004のポインタで始まる。
すべて重複データである。 (?) 原文:all duplicate data

[OAMデータ]

スプライトの大きさ、パレットの増分、および位置を設定する。
それぞれのOAMは5バイトのデータで構築されている。

タイル番号:どのタイルからアニメーションデータの位置セットに基づいて構築を開始するかを決定する。
X座標:タイルのX座標を設定する(FFは負、01は正の値である:つまりsigned charということ)。
Y座標:タイルのY座標を設定する(同上)
OAMのサイズ/反転フラグ:バイトの左側には反転、右側には基本サイズ。
  • 00 = 反転なし
  • 40 = 水平反転
  • 80 = 垂直反転
  • C0 = 水平垂直反転

  • 00 = 8x8のタイル
  • 01 = 16×16のタイル
  • 02 = 32×32のタイル
  • 03 = 64×64のタイル

OAM変更値?/パレット増分:左側に新しいパレットを設定し、右側には変更したサイズを設定する。
…10 = 次のパレットがスプライト全体に使用されることを意味する。
…最初のOAMのみがこれを使用できる。
…変更値:OAM変更値テーブルを参照
…新しいOAMデータは最後のOAMデータの後に直接続く。
…OAMデータは最後に FF FF FF FF FFを設置する。

OAM変更値テーブル

OAMサイズ値 変更値 操作 タイル領域
0 0 Nothing 8x8 tile
0 1 Width x2 16x8 tile
0 2 Height x2 8x16 tile
1 0 Nothing 16x16 tile
1 1 Width x2,Height /2 32x8 tile
1 2 Width /2,Height x2 8x32 tile
2 0 Nothing 32x32 tile
2 1 Height /2 32x16 tile
2 2 Width /2 16x32 tile
3 0 Nothing 64x64 tile
3 1 Height /2 64x32 tile
3 2 Width /2 32x64 tile

0 8X8 16x8 8x16
1 16x16 32x8 8x32
2 32x32 32x16 16x32
3 64x64 64x32 32x64
0 1 2

|
添付ファイル