GBA版ファイアーエムブレム改造まとめWiki2

ポインタ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ポインタ

ここでいうポインタは、戦闘アニメを指定する(グラフィックやアニメや効果音等)ポインタの事。
アニメ移植or自作をするには是非とも知っておきたい。
スレ7章 nTkMu418氏の解析 がほとんどなので感謝しつつ読むように。あとはこまごまとした説明。

▼戦闘アニメ指定ポインタ概要

1つのアニメは、 識別子 (12バイト)と 5つのポインタ (4*5で計20バイト)で構成される。
識別子 は、戦闘アニメポインタを見た時にそれがどの戦闘アニメのものであるかをわかりやすくするための文字列。
5つのポインタ は、戦闘アニメのどのタイミングでどの画像を表示し、動かし、音を出し、HP減少やHITエフェクトを出すか、に関わる。

▼識別子

StaringでRomを開いてアドレスC00000を見てみると。右側の方に「lorm_sp1」という文字列や似た物を確認できるはず。
これが識別子。「lorm_sp1」は Lord-Men-Spear を略したもので「ロード男の戦闘アニメ」を意味する。
文字からクラスを推測できれば残りもわかるはず。FEditorで確認してもよい。
二つ目の「lorm_sp1」だが、こちらは「武器なし時のアニメ」である。
たいてい後ろの方にあるのが武器なしアニメの識別子なのだが文字列が同じであることがしょっちゅう。全く持って紛らわしry。
識別子があることで、パッと見でどのアニメか分かるという事と、文字列検索で飛んでこれるという利点がある。

▼5つのポインタ

識別子の後、4バイト分のスペース00を挟んで** ** ** 08という形の物が5つ並ぶ。
これらがポインタ。一つ目のポインタから順に、「ポインタ1」「ポインタ2]・・・「ポインタ5」と呼ばれる。
各ポインタの概要は以下の通り。
  • ポインタ1:ポインタ2(解凍後)の各パートの開始アドレスを指定
  • ポインタ2:圧縮。85コマンド(効果呼び出し)と86コマンド(画像呼び出し:ポインタ3と連動)を指定。
  • ポインタ3:圧縮。ROM内のバラバラ画像を貼り合わせる。
  • ポインタ4:ポインタ3の敵側(逆向き)バージョン
  • ポインタ5:圧縮パレットデータ
以下に、各ポインタの詳しい情報を掲載する。

▼ポインタ1

未圧縮
ポインタ2(解凍後)の各パートの開始アドレスを指定

00 00 00 00 B0 01 00 00 60 03 00 00 A8 05 00 00
F0 07 00 00 00 08 00 00 10 08 00 00 54 08 00 00
98 08 00 00 AC 08 00 00 C0 08 00 00 D4 08 00 00

とあれば、
パート1:0x0000
パート2:0x01B0
パート3:0x0360

パート12:0x08D4

…といった感じ

▼ポインタ2

要解凍
85コマンド(効果呼び出し)と86コマンド(画像呼び出し:ポインタ3と連動)で構成される。
12個のパートに分かれている。00 00 00 80で1パート終了。

パート1,2:通常攻撃アニメ。1と2は同じでもおk?
パート3,4:クリティカル。3と4は同じでもおk?
パート5:魔法攻撃。
パート6:魔法クリティカル。
パート7,8:回避アニメ。同じでもおk
パート9,10,11:棒立ちアニメ。3つとも同じでおk
パート12:攻撃よけられアニメ。パート1から、ヒットエフェクト、ヒットSEを抜けばおk

※85コマンド
4バイトで構成され、エフェクトや効果音、ダメージ処理などを行う。
** 00 00 85:**で効果指定。
※86コマンド
12バイトで構成され、ポインタ3で貼り合わせた1枚絵を呼び出す。GIFの1コマと思えばおk

①(05) 00 ②(0A) 86 ③(B8 40 E2 08) ④(30 03) 00 00

①表示フレーム
②通し番号?とりあえず順番につけとけばおk
③画像の先頭アドレス。NLZ-GBAでぶっこんだ場所
④ポインタ3(解凍後)の開始アドレスを指定

▼ポインタ3

以下抜粋。長いので焦らず必要になった時に少しずつ読み進めるといい。
   ・要解凍
   ・ROM内のバラバラ画像を貼り合わせる。
   ・12バイトで画像1かけら。


   00 00 00 80 00 00 F0 FF E8 FF 00 00
   00 80 00 40 04 00 10 00 E8 FF 00 00
   00 40 00 40 80 00 F0 FF 08 00 00 00
   00 00 00 00 84 00 10 00 08 00 00 00
   01 00 00 00 00 00 00 00 00 00 00 00

   これはロードヘクトル(斧)のポインタ3の先頭部分である。
   まずは1行目

   ①(00 00 00 80) ②(00) 00 ③(F0 FF) ④(E8 FF) 00 00

   ★NLZ-GBAで表示される256×64の画像の、8×8を□として考え、下記のように番号を振る。まあずれるけど。

   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□ 


   ②★の番号より、切り出す始点を指定

   ここでは、①(00 00 00 80) ②(00) なので
   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

   のように切り出す。


   ③X座標④Y座標

   切り出した画像を先頭画面のどこに配置するか指定。2バイト目が00なら正、FFなら負。
   ただしXは右が正、Yは「下が」正。もちろん敵だと左右逆。
   原点の位置は大体キャラの立ち位置あたりと思えばおk

   ここでは、③(F0 FF) ④(E8 FF)なので「原点から左に16ドット、上に24ドット」が指定位置。
   ただし、切り出した画像は「左上を指定位置に合わせ、右下に展開」するので、実際には原点にかぶさるように
 
   配置されるわけである。

   ちなみにX座標を(C8 FF)ぐらいにすると、ちょうど敵の目の前あたりに配置される。 
 
   続きを配置していくと、

   00 80 00 40 04 00 10 00 E8 FF 00 00 で

   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

   配置座標も、ちょうどさっきの切片と接するように指定されている。



   00 40 00 40 80 00 F0 FF 08 00 00 00 で

   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

   00 00 00 00 84 00 10 00 08 00 00 00 で

   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80□□□□■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□


   01 00 00 00 00 00 00 00 00 00 00 00 で貼り合わせ終了


   以上により、貼り合わせで

   ― 0 1 2 3 4 5 6 7 8 9 A B C D E F 101112131415161718191A1B1C1D1E1F
   00■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   20■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   40■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   60■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   80■■■■■□□□□□□□□□□□□□□□□□□□□□□□□□□□
   A0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   C0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
   E0□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

   この部分が原点付近に描画されたことになる。NLZ-GBAで0xE23084を覗いてみればわかるが、これはヘクトルの立
 
   ち絵そのものである。 

   以上は、ポインタ3の先頭部分なので開始アドレスは0x0000である。

▼補足

画像の貼り付け先は重なっていてもよい。
その場合は、 最初に切り出し貼り付けた画像が前面に来る

   よってロードヘクトル(斧)のポインタ2内にある86コマンド、

   01 00 00 86 84 30 E2 08 00 00 00 00

   で、ヘクトルの立ち絵が呼び出されるわけである。

   おっと、ポインタ3の①の説明が抜けてた

   ①切り出す形を指定するコマンド。
   ・00 80 00 80
   ■■
   ■■
   ■■
   ■■

   ・00 40 00 80
   ■■■■
   ■■■■

   ・00 00 00 80
   ■■■■
   ■■■■
   ■■■■
   ■■■■

   ・00 80 00 40
   ■
   ■
   ■
   ■

   ・00 40 00 40
   ■■■■

   ・00 00 00 40
   ■■
   ■■


   ・00 80 00 00
   ■
   ■

   ・00 40 00 00
   ■■

   ・00 00 00 00
   ■ }

すいません訂正です。
ポインタ4はポインタ3と同じとか書いたが、すまんありゃウソだった。
ポインタ3は右側(味方側)表示用、
ポインタ4は左側(敵側)表示用みたいです。

つまりポインタ3と4を同じにすると、
左側に表示されたとき背中を向けた状態になります。


ポインタ4は構造こそポインタ3と同様ですが、

(00 00 00 80)→(00 00 00 90)
(00 80 00 40)→(00 80 00 50)

などのように、>>780に列挙した①形指定コマンドの4バイト目に+10hしたものが使われています。
これは「切り出した画像を左右反転」しているようです。

画像が左右反転しても、「左上を指定位置に合わせ、右下に展開」することは
変わらないので③X座標も変化させる必要があります。

以上のような仕様なので、
④Y座標や②切り出し始点はポインタ3と同じでよいことになります。 

▼ポインタ5


名前:
コメント: