思ったよりフィールドマップの変更に手間取って更新ができませんでした。現時点で残作業は差し替えるマップ座標の情報をどう設定するかが解析できればロマリア~ノアニールのストーリー変更はフラグとセリフの変更等で実現できそうです。何がいいたいかというと、マップデータの追加はもうやりたくないということです。まあこれで察してくださいwww。しかしダンジョン追加とかちゃんとできるのかね。さて、前回モンスター画像の構造の全体について解説しましたが、スプライト情報より下位の部分の説明をします。
スプライトグラフィックインデックス($0542A6-)は、0-2バイト、3-5バイトにそれぞれ何らかの開始アドレスを持っています。0-2バイトから始まるアドレスはどうやらアニメーション情報のようです。3-5バイトから始まるアドレスは各スプライト1枚分の画像情報のようです。例えば、じんめんちょう系(スプライトID:#$0D)のアニメーション情報アドレスからはじまる情報は以下のようになっています。(見ずらくてすいません…)
2EA410 | … 26 A4 EE C7 A4 EE 40 A5 EE F5 |
2EA420 | A5 EE 82 A6 EE 00 01 00 00 01 01 00 01 02 02 00 |
2EA420 | 00 03 01 00 01 04 … |
これを見る限り、EEA426、EEA4C7、EEA540、EEA5F5、EEA682も開始アドレスを意味しているようです。断片的な情報から推察するにおそらくアニメーション制御情報(どのスプライトをどの座標でどれくらい表示するとか)の定義だと思われますが、詳細は不明です。ちなみに行動時のアニメーションパターンが多いほどこの部分のデータ量が増えます。この部分が解明できればDQ6からの移植だけでなく、それなりの画像が用意できればDQ3、DQ6にアニメーションをするモンスターを新規追加することができます。正直だれかの解析待ちです。パッチの作成が一通り終わるまでは手を出す気にはなれません。(あまりに時間がかかりすぎるので)
次は各スプライトの画像情報です。
2EA740 | …3F |
2EA750 | A8 EE 6A A8 EE AF A8 EE F4 A8 EE 39 A9 EE 7C A9 |
2EA760 | EE C1 A9 EE 06 AA EE 4B AA EE 8E AA EE D3 AA EE |
2EA770 | 18 AB EE 5D AB EE A0 AB EE E5 AB EE 2A AC EE 6F |
じんめんちょう系のアニメーションはパターンが多く、全部で80パターンあるようです。(EEA83F-EEA74F=240バイト,3バイトx80スプライト?)それぞれが各スプライトの画像構成情報の先頭アドレスを意味しているようです。例として1枚目(静止画像)を見てみます。
2EA830 | …12 |
2EA840 | 00 12 00 6E 54 6F 54 86 54 85 54 0C FF 7A 54 7B |
2EA850 | 54 06 00 E0 02 40 17 E0 02 00 08 E0 03 40 0F E0 |
2EA860 | 03 00 00 D0 00 50 0F D0 00 10 1C |
これが何を意味しているかというと、以下の情報のようです。(文中のアドレスはオリジナルのDQ3のものです)
スプライト個別情報は大きく分けて
- A)実グラフィック情報
- B)画像配置情報
の2つの部分から構成されており、A)には表示するグラフィックのインデックス($0E0080から始まるグラフィックデータのインデックス)が格納されており、B)にはA)の情報をどの座標に配置するかの情報が格納されている。
A),B)それぞれの内容は以下のようになっている。
A)実グラフィック情報
00-01: 画像配置情報へのオフセット
02-03: 不明
・・・・ : グラフィックインデックス
以降$00-01のオフセットに到達するまで、以下のルールで2バイトづつデータが格納されている。
- i) $FFXXの場合 スプライト内インデックスを$XXジャンプする
- ii) a)以外の場合 画像実データへのインデックス。($0E0080 + $20 * $XXXXで実アドレスを取得できる)。
格納されている実データへのインデックスを先頭から読んでいき、0から始まるスプライト内インデックスを振っていく。ジャンプした場合はジャンプした先からインデックスを振る。
B)画像配置情報
00: 画像配置情報数?
01: X座標(Singed Byte,マイナスもありうる)
02: Y座標
03: スプライト内画像インデックス A)の先頭から0,1,2で付番したもの
04: 4bit 0: 8×8の1マスを配置 1: 16×16の4マスを配置。
6bit 1: 左右反転
以降$00回$01-04を繰り返す。なお、画像配置が16×16の場合は、$03のインデックスの値が$Xとすると、
左上:$X, 右上:$X+1, 左下:$X+$10, 右下:$X+$11
のインデックスの画像をそれぞれ配置する(左右反転の場合は左右逆に配置し、画像自体も反転させる いっかくうさぎ、さそりばちなどで使用されている)。
例:スライムの場合
静止画像のデータ($F3546E-$F35480)
A)0E 00 12 00 79 82 7A 82 0E FF 87 82 88 82
-> $00:8279, $01:827A, $10:8287, $11:8288
B)01 00 F0 00 10
-> 16×16の画像を ($00,$F0)を開始座標にして$00(左上),$01(右上),$10(左下),$11(右下)に配置
一応この解析でDQ3のモンスター画像は静止画に関しては全て正しく表示できています。
コメント