以下内容来自YYZO,64君所发,黑龙所需,求翻译关键语句,方便看懂。
也能造福修改爱好者。也能让大家在将来看到更多更丰富没见过的战斗动画。不厚道的请BZ加亮一下。
只要翻译出关键词句就能看懂了,麻烦各位了。
-----------------------------------------
转自
http://f40.aaa.livedoor.jp/~vice/cheat/up/all.html?1198338353
刚刚在日站翻以前的东西,找到了疑似动画的修改器..不管怎么样,大家一起研究看看.
操作的方法:
スプライトデータビュワー時
←→ パレットデータインデックス増減
SHIFT + ↑↓ パレット選択
↑↓ スプライトデータインデックス増減
X パレットリストモードOnOff
A 現在のパレットインデックスをリストに追加
パレットリストモード時
←→ リストインデックス増減
S 現在のパレットインデックスをリストから削除
・パレットリストモードとは?
各スプライトにパレットのリストがあり、
表示するパレットをそのリストから選べるモードです。
初期状態の全リストは空ですが、メニューのパレットリスト初期化を選ぶと、
読み込まれているロムからある程度のリストを作成する事が出来ます。
ユニットグラフィックビュワー時
↑↓ ユニットグラフィックインデックス増減
SHIFT + ↑↓ パレット選択
←→ パレットデータインデックス増減
SHIFT + ←→ スプライトNo増減
X マスクモードOnOff
ENTER パレットインデックスをロムに反映。
武器アニメビュワー時
↑↓ カーソル移動
←→ 値増減
A 1フレーム進行
S 約60FPSで再生
SHIFT + ←→ スプライトNo増減
X マスクモードOnOff
共通
C パレットエディットダイアログ開閉
Z 描画倍率変更
F1 各モード切替
ビットマップを読み込む時の注意
読み込めるビットマップは256色のみ、有効な色はそのうちの16色のみです。
サイズは幅、高さともに8の倍数、タイル数は最低8枚(8x8が8)ないと多分バグります。
色も読み込めるようになってますが、そのままだとパレットインデックスを変更した時に
元に戻ってしまうので、一度パレットエディットモードにして反映しないと駄目です。
武器アニメビュワーの現在の仕様
・見れるのは固定武器のみ
・半透明は未解析&未実装
・回転拡大縮小機能を使用した時のスプライト表示が、実際と微妙に違う
・BG関係は未解析&未実装が多い
再配布等は自己責任でご自由にどうぞ。
一些相关资料:
他の方の為に、自分が解析した結果を載せておきます。
ここに書いていない事は自分にも解りません。
拡大縮小パラメータ等、開発系の知識が無いと意味が解らない所もあります。
自分の日本語のせいで、どんな知識があっても意味が解らない所もあります。
◆ユニットスプライト---------------------------------------------------------------------
構造体を見ると、0xF1FA7C から各スプライトデータへのアドレスが格納されているのが解ります。
そのアドレス先に、実際のスプライトを表すデータが格納されています。
まず4バイトは
2バイト 0x0010 固定っぽい。
2バイト 描画するタイル数。タイルというのは8x8ドットのグラフィックの事です。
実際に描画される数は8倍された数になります。
です。
もしかしたら1バイトずつで、4つのデータを表している可能性もあります。
次からのデータが実際のグラフィックデータを表しています。
1バイトのデータと、8~16バイトのデータを組にして格納されています。
最初の1バイト
続くデータのドット部の描画方法を決定しています。
具体的にはビットに直して、OFFならべたデータ、ONならコピーデータです。
bit7が1~2ドット目、bit6が3~4ドット目、bit5が5~6ドット目…
bit0が15~16ドット目です。
続く8~16バイト
↑の1バイトで「べたデータ」か、「コピーデータ」かに分かれます。
べたデータ
顔グラフィック等と同じような、1バイトで2ドットの4ビットデータです。
コピーデータ
以前に描画したドットデータをそのまま使いまわします。
2バイトでコピー元の位置、サイズを指定します。
具体的には
XY YY で表すと
X = コピーするサイズ。この数値に6ドット(3バイト)を足した数値が
実際にコピーされるサイズになります。
Y YY = 現在描画するドットのどれくらい前のバイトをコピーするかを指定します。
0で現在描画するドットの1バイト前のドットをコピーします。
となります。
Y YY はよく調べていないので1バイトしか使用していない可能性もあります。
以上です。解りづらくて申し訳無いorz
他のゲームの画像や、オリジナル画像を移植する場合、
圧縮は考えずに「べたデータ」でやった方が良いかも。
◆ユニットグラフィック-------------------------------------------------------------------
まず構造体から各アニメには基本的に3種類のルーチンがある事が解ります。
各ルーチンは上から
・パーツや動き
・影や各種システムアニメの位置
・カットインやスクロール等
等を設定しています。
各固定武器アニメやユニットアニメ等で設定されている描画ルーチンの数値はインデックスで
実際のアドレスは
パーツや動きのテーブルは0xF3088C
影や各種システムアニメの位置のテーブルは0xF31BD8
カットインやスクロール等のテーブルは0xF32CF8
で定義されています。
◆◆パーツや動きルーチン-----------------------------------------------------------------
ユニットを構成するパーツの位置や動き、拡大縮小等を設定している場所です。
テーブルから飛んだ先のデータはこんな感じです。
オフセット サイズ(単位はバイト) 意味
+0 1 アニメを構成するパーツ数
+1 1 不明
+2 2 アニメ再生総フレーム数
+4 2 回転拡大縮小パラメータ数
+6 2 不明
+8 4 パーツ設定アドレス
+C 4 回転拡大縮小パラメータ設定アドレス
以下は不明
◆◆◆各パーツ設定-----------------------------------------------------------------------
パーツ設定アドレスへ飛んだ先のデータはこんな感じです。
オフセット サイズ(単位はバイト) 意味
+0 4 1つのパーツの動きなどを設定するデータへの
アドレス
+4 2 不明
+6 2 親パーツ番号
指定されたパーツの数だけ並んでいます。
親パーツは自分より後のパーツを指定するのが基本のようです。
次に1つのパーツの細かい設定を指定するデータを説明します。
まず1バイト、もしくは2バイトで現状を維持するフレーム数、
設定するデータの種類(設定フラグ)を指定します。
1バイト目のbit7が立っていればbit0からbit3で設定フラグを、
bit4からbit6でフレーム数を設定します。
立っていなければ1バイト目がまるまるフレーム数を、2バイト目で設定フラグを設定します。
設定フラグは2つに分かれており、便宜上bit0からbit3をフラグ1、
bit4からbit7をフラグ2とします。
もしも1バイト目のbit7が立っていなければ設定できるのはフラグ1のみになり、
フラグ2は必ず0になります。
基本的に設定フラグはビットを立てる事で設定します。具体的には
bit0(フラグ1bit0) Xベクトル
bit1(フラグ1bit1) Yベクトル
bit2(フラグ1bit2) X座標
bit3(フラグ1bit3) Y座標
bit4(フラグ2bit0) 色々
bit5(フラグ2bit1) タイルNo *回転パラメータ
bit6(フラグ2bit2) スプライトサイズ&パレットNo
bit7(フラグ2bit3) *回転パラメータ
です。
回転パラメータは特殊で、bit5とbit7両方立っていないと設定されません。
設定されていた場合、bit5とbit7はOFFにリセットされます。
また、ビット判定の前に規定値での判定もあり、
フラグ1の数値で指定できるデータが拡張(?)されます。
規定値での判定が真になった場合、フラグ1は0にリセット
(フラグ1のビット判定は無視)されます。
フラグ1の数値 意味
5 XYベクトル指定
7 Xベクトルリセット
A XYベクトルリセット
B Yベクトルリセット
他は不明
さらに維持フレーム数、フラグ2が0だった場合、フラグ1の数値で特殊機能
(現時点で判明しているのは繰り返しだけ)も設定できます。
フラグ1の数値 意味
1 繰り返し(2バイト使用)
2 繰り返し(1バイト使用)
他は不明
処理される優先順位は
特殊機能>規定値判定>回転パラメータ判定>ビット判定
の順で処理されます。
3バイト目以降は設定フラグで設定するデータの数だけ、実際のデータが後に続きます。
フラグが設定されている場合は数値を読みに行きますが、
設定されていない場合は読みに行かない=データサイズが小さくなる
という事になります。
以下、各設定の詳しい説明。
Xベクトル
bit0(フラグ1のbit0)を立てる事で設定出来るようになります。
1バイト使用。
X軸のベクトルを指定します。リセットされるまでパーツが移動します。
Yベクトル
bit1(フラグ1のbit1)を立てる事で設定出来るようになります。
1バイト使用。
X軸のベクトルを指定します。リセットされるまでパーツが移動します。
X座標
bit2(フラグ1のbit2)を立てる事で設定出来るようになります。
2バイト使用。
親パーツからの相対指定になります。
0x0000 = ±0 0x0100 = +1 0xFFFF = -1
と、通常とは1バイト目と2バイト目が逆になるので注意です。
Y座標
bit3(フラグ1のbit3)を立てる事で設定出来るようになります。
2バイト使用。
親パーツからの相対指定になります。
0x0000 = ±0 0x0100 = +1 0xFFFF = -1
と、通常とは1バイト目と2バイト目が逆になるので注意です。
色々指定
bit4(フラグ2のbit0)を立てる事で設定出来るようになります。
2バイト使用。
左右反転や、不可視フラグ等を指定します。
Byte1
bit0 ?
bit1 ?
bit2 Flag:M?
bit3 ?
bit4 ?
bit5 ?
bit6 ?
bit7 ?
Byte2
bit0 ダブルサイズ描画フラグ。回転拡大時、描画する範囲が2倍に広がる。
bit1 Flag:D?
bit2 Flag:H 左右反転
bit3 Flag:V 上下反転
bit4 不可視フラグ
bit5 Mode:2?
bit6 描画優先度が上がる。
bit7 ?
タイル番号&回転拡大縮小パラメータ番号指定
bit5(フラグ2のbit1)を立てる事で設定出来るようになります。
2バイト使用。
タイル番号は読み込まれているグラフィックのうち、どの部分を使用するか指定します。
1バイト目のbit0から6、
2バイト目のbit7から8を使用して設定します。
回転拡大縮小パラメータ番号は、どのパラメータを使用するのかを指定します。
2バイト目のbit5が0だと回転拡大が有効に、1だと向こうになります。
2バイト目のbit0からbit4で実際のパラメータ番号を指定します。
スプライトサイズ、パレットNo設定。
bit6(フラグ2のbit2)を立てる事で設定出来るようになります。
1バイト使用。
bit0から3でパレットNoを、
bit4から7でスプライトサイズを指定します。
実際の数値とサイズの関係は↓
0 = 8x8
1 = 16x16
2 = 32x32
3 = 64x64
4 = 16x8
5 = 32x8
6 = 32x16
7 = 64x32
8 = 8x16
9 = 8x32
A = 16x32
B = 32x64
回転パラメータ
bit5とbit7(フラグ2bit1とbit3)を立てる事で設定出来るようになります。
1バイト使用。
1バイトがまるまる回転拡大縮小パラメータ番号になりますが、
0x20(以上も?)を指定すると回転拡大縮小機能を無効にする事も出来ます。
XYベクトル指定
フラグ1が0x5の時に設定出来るようになります。
1バイト使用。
bit0-3でYベクトルを、bit4-7でXベクトルを指定します。
bit3とbit7は正負フラグになっています。
Xベクトルリセット
フラグ1が0x7の時に設定出来るようになります。
0バイト使用。
Xベクトルをリセットします。
XYベクトルリセット
フラグ1が0xAの時に設定出来るようになります。
0バイト使用。
X、Yベクトル両方をリセットします。
Yベクトルリセット
フラグ1が0xBの時に設定出来るようになります。
0バイト使用。
Yベクトルをリセットします。
繰り返し(2バイト使用)
維持フレーム数、フラグ2が0で且つ、フラグ1が1の時に設定出来るようになります。
2バイト使用。
1バイト目で繰り返す範囲を、
2バイト目で繰り返す範囲を指定します。
繰り返し(1バイト使用)
維持フレーム数、フラグ2が0で且つ、フラグ1が2の時に設定出来るようになります。
1バイト使用。
bit0-3で繰り返す範囲を、
bit4-7で繰り返す範囲を指定します。
◆◆◆回転拡大縮小パラメータ設定---------------------------------------------------------
回転拡大縮小パラメータ設定アドレスへ飛んだ先のデータはこんな感じです。
byte0 bit3-7 設定する回数
byte0 bit0-2
byte1 bit0-7 設定するタイミング。0だとアニメ開始直後に設定される事になる。
byte2 bit0-4 設定するパラメータ番号。
byte2 bit5-7 特殊機能フラグ。
bit6が1だと1バイトを使用して初期化を行う。
bit7が1だと前回使用した各パラメータ設定フラグを継続して使用する。
byte3 bit0-7 各パラメータ設定フラグ。前回のパラメータを継続する場合は省略される。
bit0でA0下位8bit、bit1でA0上位8bit、
bit2でB0下位8bit…bit7でD0上位8bitを設定する。
byte4以降 実際に設定するパラメータ。各パラメータの設定には1バイトを使用する。
スプライトで使用する回転拡大縮小パラメータを設定します。
ここで設定する数値はそのままGBAのスプライトの回転拡大縮小パラメータに設定されます。
以下具体的な説明。
byte0 bit0-2とbyte1 bit0-7で設定するタイミングをフレーム数で設定します。
byte0 bit3-7で設定する回数を設定します。同タイミングで複数のパラメータに
設定する事が可能になります。
byte2 bit0-4で設定するパラメータ番号を設定します。0x00から0x1Fまで指定できます。
通常はそのままGBAのパラメータ番号を表しますが、
子オブジェクトの場合は、ずれる事もあります。
byte2のbit6が1の場合、次の1バイトをパラメータ設定フラグに使用して
パラメータを初期化します。
パラメータ設定フラグは、1つのパラメータの内、A0、B0、C0、D0、どの数値を変更するのかを
ビットを立てる事で設定します。bit0が1ならA0下位8bitを、bit1が1ならA0上位8bitを…
といった感じです。
ビットを立てなかったパラメータは変更なしになります。
ここで設定されたパラメータが0に初期化される事になります。
byte2のbit7が1だと前回に使用したパラメータ設定フラグをそのまま継続して使用します。
つまり1バイト節約出来るわけです。
この後はパラメータ設定フラグ、設定する数値データと続いていきます。
数値データはパラメータ設定フラグによってサイズが変わります。
設定する回数が2回以上ならば、さらにパラメータ番号、設定フラグ、数値データと続きます。
◆◆影や各種システムアニメ位置設定ルーチン-----------------------------------------------
影や、バーニアやバルカン等のエフェクトの位置を設定している場所です。
テーブルから飛んだ先のデータはこんな感じです。
byte0 bit0 影位置設定使用フラグ
byte0 bit3-7 エフェクト位置設定使用フラグ
byte1 bit5-7 BG位置設定使用フラグ
その他は不明。
byte2-5 で指定されているアドレスへ飛んだ先に、位置を設定するデータへのアドレスがあります。
影、エフェクト1~5、BG1~3と並んでいますが、上で設定されていないデータは
省略されます。
さらに飛んだ先で実際に位置を設定するデータがあるわけですが、
フォーマットはユニットのパーツと一緒です。
しかしながら設定出来るのは位置データだけで、タイルNoや回転等は恐らく無理だと思われます。
◆◆カットインやスクロール等設定ルーチン-------------------------------------------------
カットインやスクロール、効果音等を設定する場所です。
テーブルから飛んだ先のデータはこんな感じです。
byte0 設定する総数。
byte2-5 実際に設定するデータへのアドレス。
他は不明。
実際に設定するデータはこんな感じ
byte0 機能種別。コマンド。
byte1 不明。
byte3-4 動作を開始するタイミング。
byte5-15 各パラメータ。byte0のコマンドによって意味が変わる。
コマンド羅列
0x00 効果音、BGM再生?
0x02 システムアニメ生成(1)
0x03 システムアニメ生成(2)
0x04 システムアニメ生成(3)
0x05 システムアニメ生成(4)
0x06 システムアニメ生成(5)
ルーチン2で設定されているシステムアニメ位置に、アニメを生成する。
byte1 bit0で本体と座標を同期、bit1で左右反転、
byte6-7 生成するアニメ番号
byte10 0で本体の前、1で後ろに描画
byte14 繰り返す回数。0でも1回は描画されるので0と1は同じ。
byte15 1にすると表示と同時に本体が描画されなくなる。
0x0A スクロールスピード
byte6-7 変化にかけるフレーム
byte10-11 設定するスピード。マイナスも可能。
byte14-15 初期化するスピード。
0x0B セリフ更新?
0x13 不明
0x16 BGアニメ設定
byte6-7 読み込むBGアニメ番号。
byte10 bit0 OFF=フェードイン ON=瞬間表示
bit1 ONだとカットインやコマンド0x1DでBGを戻した時に
標準の戦闘背景では無く、ここで設定した背景になる。
0x17 カットイン
byte6 0
ユニットアニメが停止するユニットカットイン
BG0~2まで使用可能。
1
現在搭乗しているパイロットのカットイン\r
9バイト目が0だとユニットアニメが停止、
それ以外だと停止しなくなる。
2
ユニットアニメが停止しないユニットカットイン
敵グラフィックの関係でBG0と1しか使用できず、
BGの優先度も変更され、BG1のプライオリティが1になる。
3
搭乗しているパイロットに関係無くカットインを指定できる。
カットイン番号がパイロットIDになる。
byte10 再生するカットイン番号。
0x1A フラッシュ
byte6-7 継続フレーム
byte10-11 フラッシュの強さ
0x1B フラッシュ
byte6-7 変化にかけるフレーム
0x1D 戦闘背景戻し
byte6 0だとフェードイン&アウト、それ以外だと瞬間表示。
0x24 スプライト読み込み
byte6 bit0がOFFならパレットも読み込む。
byte10-11 読み込む位置 1~4で指定(?)
byte14-15 読み込むグラフィック変更用定義番号。
0x25 不明
0x29 スプライトの基本プライオリティ変更
byte6 設定するプライオリティ。0~2の範囲で設定しないとバグる。
他は不明
◆ユニットカットイン-------------------------------------------------------------------
構造体を見ると、0x9D6A20から武器アニメで使用するカットインの設定が続いています。
以下説明。
size(単位はバイト) 意味
2 カットイン番号
2 0x0000で固定
2 スプライトインデックス。読み込まれる位置は先頭から0x3400の所
2 BG用パレットインデックス(0番から80色読み込み)
2 スプライトインデックス。読み込まれる位置は先頭から0x6800の所
2 BG用パレットインデックス(80番から80色読み込み)
2 BG0に読み込むタイルマップデータインデックス
2 BG1に読み込むタイルマップデータインデックス
2 BG2に読み込むタイルマップデータインデックス
2 BG0をスクロールさせるかどうか?1で有効、それ以外(0xFFFF)で無効。
1 スクロールスピード
1 不明。デフォだと0x00で固定。
1 スクロールさせる方向?デフォでは0x00、0x40、0x80、0xC0のみ。
スクロールスピードが正の時、
bit5 が1だと右上にスクロール
bit6 が1だと上にスクロール
bit7 が1だと逆方向にスクロール
0x00だったり、上記以外だと右方向にスクロール
1 不明。デフォだと0x00で固定。
2 スプライトインデックス。読み込まれる位置は先頭。
2 スプライト用パレットインデックス(64番から64色読み込み)
2 パーツ設定用ルーチンインデックス。武器アニメ等と同じ。
2 影やシステムアニメ等の設定用ルーチンインデックス。武器アニメ(略
2 カットインやスクロール等設定ルーチンインデックス。武器アn(略
2 不明。デフォだと0x0000で固定
1 不明。0x00、0x01、0x02、0x03が設定されている。
3 不明。デフォだと0x000000で固定
以上40バイトで構成されている。
◆BG用タイルマップデータ---------------------------------------------------------------
0x9C085CからBGに使用するタイルデータが格納されている。
以下説明
サイズ(単位はバイト) 意味
4 タイルマップデータへのアドレス
2 BGのサイズ。0=256x256 1=512x256 2=256x512 3=512x512(単位はドット)
2 不明。0x0000で固定?
の8バイト。
◆◆タイルマップデータ-------------------------------------------------------------------
タイルマップデータは一昔のRPGで言うマップのような物で、
1チップが8×8の大きさで、BGに敷き詰められている。
1チップ毎に反転や、パレット等を指定する事が出来る。
詳しくは開発系のホームページ等を参照の事。
上で指定されているアドレスに、実際のタイルマップデータが並んでいる。
最初の2バイトは不明。
次の2バイトでタイルマップデータのサイズをチップ単位で指定(実際の大きさの256分の1)。
それから先が実際のタイルデータになっている。
タイルデータは格納先のメモリがタイルマップデータという事だけで、
ユニットスプライトと全く同じ方法で圧縮されている。
◆システムアニメ他-----------------------------------------------------------------------
おもむろに構造体
struct システムアニメ
{
WORD 番号;
WORD 0000;
WORD スプライトインデックス;
WORD パレットインデックス;
WORD 本体描画ルーチンインデックス;
WORD システムアニメ他位置設定ルーチンインデックス;
WORD エフェクトルーチンインデックス;
BYTE 基本タイルNo;
BYTE 基本パレットNo;
};
0x9D5D80から119個。
バーニアやバルカン等、共通で使用するアニメが定義されている。
スプライトとパレットは使用されているか微妙。
各3種ルーチンインデックスの意味はユニットグラフィックと同じ物。
基本タイルNo、基本パレットNoは、アニメが使用するタイルとパレットに
加算されるようになる。
struct グラフィック変更用定義
{
WORD 番号;
WORD スプライトインデックス;
WORD パレットインデックス;
WORD 0000 ;
};
0x9D64F0から165個。
「切り札」や「ストライクシールド」等、メモリが足らずに一度の読み込みでは
全てのグラフィックを読み込む事が出来ない場合、何度かに分けて読み込む事で
より多くのグラフィックを一度の戦闘アニメで擬似的に使用できるようにする物である。