ロックマンエグゼシリーズのスプライトはこのような構成になっています。

- メタデータ・ヘッダー
- アニメーション 0
----- フレーム 0
--------- タイルセット
--------- パレット
------------- パレット 0
------------- ...
------------- パレット n (n<16)
--------- ミニアニメーション
------------- ミニアニメーション 0
----------------- ミニフレーム 0
----------------- ...
----------------- ミニフレーム n (n<256)
------------- ミニアニメーション 1
------------- ...
------------- ミニアニメーション n (n<256)
--------- オブジェクト
------------- オブジェクトリスト 0
----------------- オブジェクト 0
----------------- ...
----------------- オブジェクト n (n<256)
------------- オブジェクトリスト 1
------------- ...
------------- オブジェクトリスト n (n<256)
--------- アニメーションデータ
----- フレーム 1
----- ...
----- フレーム n (n<256)
- アニメーション 1
- ...
- アニメーション n (n<256)

さらに、バイナリファイルの構造は次のようになっています。

- メタデータ・ヘッダー
- アニメーションポインタ
- フレームデータ
- タイルセットブロック
- パレットブロック
- 固有フレームブロック
----- ミニアニメーション
----- オブジェクトリスト

各スプライトのアーカイブは4バイトのメタデータ・ヘッダーで始まります。このブロックは、エグゼシリーズでは使われていることが知られておらず、アニメーションをロードするときはスキップされる

メタデータ・ヘッダ(4バイト)
  1. 0×00:(byte) スプライトアーカイブの最大のタイルセットのタイルの量
  2. 0×01:(byte)定数0x00?
  3. 0×02:(byte)定数0x01?
  4. 0×03:(byte)スプライトアーカイブ内のアニメーションの数

タイルの量は基本的に ceilと同じである(ビットマップデータのサイズ /0x20) ceilとは小数点切り上げのこと?


次は、アニメーションポインターテーブルです。各アニメーションポインタは32ビットであり、すべてのポインタは、テーブルの先頭と相対(関連)している。

アニメーションは、少なくとも1つのフレームで構成されています。各フレームエントリは20バイト長であり、以下の構造を有します。すべてのポインタは、アニメーションポインタテーブルの先頭からの相対位置です。

フレームエントリ(20バイト):
  1. 0x00:(int)タイルセットへのポインタ
  2. 0x04:(int)パレットへのポインタ
  3. 0x08:(int)ミニアニメーションへのポインタ
  4. 0x0C:(int)オブジェクトリストへのポインタ
  5. 0x10:(byte)遅延
  6. 0x11:(byte)定数は0x00?
  7. 0x12:(byte)フラグ
  8. 0x13:(byte)定数は0x00?

フレームフラグ:
0x80:アニメーションの終わり
0x40:アニメーションのループ

アニメーションの最後のフレームは、そのフラグのビット0x80を設定する必要があります。これは、アニメーションの終わりを示します。加えて、もしビット0x40が最後のフレームのフラグに設定されている場合、アニメーションは最初のフレームから再開します。それ以外の場合は、単に最後のフレームにとどまります。
注意:アニメーションがループしている場合、最後のフレームは、フラグ0x80を持っています(0x40= 0xC0)

ーーーーーーーーーー未編集

各タイルセットは、その後、生のところ4bppインデックス化されたビットマップデータに続いて、その大きさ、で始まります。

タイルセット(4 + nバイト):
  1. $ 00:ビットマップデータの(int型)サイズ
  2. 0×04:(バイト[n]は)ビットマップデータ(ところ4bppがインデックス)

ビットマップデータは、技術的には可能ですが、255はメタデータブロック内のタイルの量の最大値であるとして、8160バイトを超えないようにしてください。異なるフレームは、多くの場合、同じタイルセットのブロックを共有することができます。


パレットブロックは、そのサイズ(常に0x20の)で始まり、少なくとも1および多くとも16パレットが続いています。残念ながらありますどのように多くのパレットを知る方法がありません。最善のアプローチは、スプライトのアーカイブに存在するすべてのポインタのリストを作ることはおそらくあり、次のポインタが到達するまで、パレットをロードします。各パレットはRGB555色深度を持つ16色で構成されています。

パレット(4 + N * 32バイト):
  1. $ 00:(int型)の定数は0x20
  2. 0×04:(ショート[n]と[16])16 RGB555色のパレット

各フレームは一つだけのパレットを使用することができますので、タイルセットと同様には、パレットブロックは、通常、アーカイブ内のほぼすべてのフレームで共有されます。


ミニアニメーションは少し特殊です。基本的に、アニメーション自体の各フレームは、オブジェクトのリストをスワップアウトすることにより、(ヨーヨー仲の良い友達)アニメーション化することができます。各フレームは、スプライトの大多数のためだけの静的オブジェクトリストである少なくとも1のミニアニメーションを、持っている必要があります。ミニアニメーションがほとんど使用されません。実際には、唯一のmugshotsはそれらを利用することが知られています。デフォルトのミニアニメーションは最初の1です。

ミニアニメーションデータブロックは、テーブルの先頭からの相対ミニアニメーションへの32ビットポインタのポインタテーブルから始まります。各ミニアニメーションは、3バイトの少なくとも1のミニフレームエントリで構成されています。

ミニフレームエントリ(3バイト):
  1. $ 00:使用するオブジェクトリストの(バイト)インデックス
  2. 0×01(バイト)遅延
  3. 0×02(バイト)のフラグ

フラグは、フルフレームのエントリと同じように動作します。 0x80のアニメーションを終了し、0x40のは、それをループします。それがループする場合は、最後のミニフレームは、値0xC0をしています。さらに、最後のミニフレームは、3バイトの0xFF 0xFFを0xFFで続いています。


オブジェクトリストはミニアニメーションと連動して動作します。ミニアニメーションは動きを達成するために、OAMメモリ内のオブジェクトのリストを交換します。アニメーションのすべてのフレームは、通常、デフォルト(静的)ミニアニメーションのために使用される少なくとも1つのオブジェクトのリストを、持っている必要があります。

ミニアニメーションと同様に、オブジェクトリストブロックは、テーブルの先頭に相対的なリストを、オブジェクトへの32ビット・ポインタのポインタテーブルから始まります。各オブジェクトのリストは、5バイトのオブジェクトの任意の数の項目で構成されています。それは技術的に空にすることができますが、これは推奨されません。

オブジェクトエントリ(5バイト):
  1. 0×00(バイト)、開始タイル番号
  2. 0×01:(sbyte)左上隅のX座標
  3. 0×02:(sbyte)左上隅のY座標
  4. 0×03(バイト)のフラグ1
  5. 0×04(バイト)のフラグ2

値の数を含むオブジェクトエントリ内の2つのパックされたバイトがあります。

フラグ1:
ビット0-1:オブジェクトサイズ
ビット2-5:未使用
ビット6:水平フリップオブジェクト
ビット7:垂直フリップオブジェクト

フラグ2:
ビット0-1:物体形状
ビット2-3:未使用
ビット4-7:パレットインデックス

水平フリップまたは垂直フリップのためのビットが有効になっている場合、オブジェクトは水平および/または垂直方向に示すGBAの画面上にフリップされます。

物体形状とオブジェクトサイズは、一緒にオブジェクトの寸法を決定します。オブジェクトエントリにおける出発タイルとタイルセットから始めて、上から下へ、左から右に8×8のタイルがロードされます。

サイズ0、形状0:8×8
サイズ0、形状1:16×8
サイズ0、形状2:8×16
サイズ1、形状0:16×16
サイズ1、形状1:32x8
サイズ1、形状2:8x32
サイズ2、形状0:32×32
サイズ2、形状1:32x16
サイズ2、形状2:16×32
サイズ3、形状0:64×64
サイズ3、形状1:64x32
サイズ3、形状2:32x64

パレットインデックスは、このフレームが、現在VRAMにロードされていないパレットを使用してパレットのブロックを指します。オブジェクトリスト内のすべてのオブジェクトは、同じパレットを使用しなければなりませんので、同じことがアニメーションの各フレームのために行きます!

各オブジェクトのエントリは、GBA OBJスプライトに変換され、OAMメモリにコピーされます。オブジェクトリストは、5バイトの0xFF 0xFFでは0xFF 0xFFを0xFFで終了します。


ジャンクデータは、スプライトアーカイブに発生することがあります。ミニアニメーションやオブジェクトリストのデータブロックが常に公式ゲーム内のすべてのスプライトのアーカイブのために4の倍数に水増しされ、それらは実際に常にそれがする必要がない場合でも、次の4の(!)は、複数の(に水増しされています)パディングを追加し、余分なバイトは、一見、ファイルの残りの部分から採取されたジャンクデータです。ジャンクデータのパターンが明らかにされていないが、それは未使用なるので、完全に、それは本当に問題ではありません。