いつものごとく、ろだにうpしてあります(ダウンロードURL)(後日変更:サイト上部のナビゲーションメニューの「DOWNLOAD」からダウンロードしてください)。今回はいろいろ変更をしてあり、中でも大きいのは
- ROM、Rommap.xmlの変更フラグの実装
- スプライトの2枚目以降の表示
- データ型の要素数変更
あたりでしょうか。正直いって2以外は自分の作業がやりにくいために変更したようなもんです。3は文字列のレコードを増やすこともできるので、セリフの数が足りなくなったらその場で増やして使うことを想定しています。
さて、上記2に関してスプライトの2枚目以降も見れるようになったわけですが、コンボボックスにフォーカスを合わせて↓を押しっぱなしにすれば正しくデコードできているものに関しては(PCが早ければ)実際にアニメーションしているように見えます。というわけで、アニメーションに関してはパラパラ漫画をそのまま表示しているだけ、という仮説は正しそうに見えます。まだ一部作画崩壊しているので、正しくトレースできていませんが、ろだに上げてもらったドキュメントの「位置データの詳細」の
位置データの詳細
1B:x座標
1B:y座標
1B:何番目の画像か
1B:(00又は10のときの詳細を(@)に記す)
ですが、4バイト目の詳細が少しわかりました。ちなみにX,Y座標はsigned byteのようです。今のところ上4ビットしかわかっていないのですが、
0bit: 不明
…
4bit: 0:8×8 1:16×16
5bit: 0:静止画像の画像インデックスを使用 1:現在の画像インデックスを使用1:透過 ピクセル単位で見て自身がRBG(0,0,0)の場合はコピーせず、また、コピー先がRGB(0,0,0)以外の時はコピーしない
6bit: 1:左右反転
7bit: 1:上下反転
でまあ正しいと思います。dqviewerでモンスター画像を見ると1枚1枚のスプライトを見ることが出来ますが、頭の部分の描画がされてないのは透過処理(ピクセル単位で見て自身がRBG(0,0,0)の場合はコピーせず、また、コピー先がRGB(0,0,0)以外の時はコピーしない)?をしていない5bit目を見てない(もしくは無視している?)からなのではないかと推測します。ただ、今回の修正でも正しくデコードできているのは40-50%といったところで、まだまだ調べないといけないことは多そうです。モンスター画像に限って言えば
- おおがらすの2枚目
- じんめんちょうの61枚目
- フロッガーの2枚目
あたりが謎です。おおがらすの2枚目については上の図のように、骸骨の下半分の画像がおかしくなっていますが、前後のスプライトから推測するに、骸骨の下半分と思われる画像(SNES4BPP ID:$7117,7118,7119)あたりを読み込んでいる節がありません。また、じんめんちょうの61枚目に至っては読み込む画像は1枚しかないくせに位置指定データでは2以上のインデックスが指定されています。フロッガーについてはちゃんと調べてないので細かい所はまだ不明です。おおがらすのようなケースについては「変化のない部分については前のスプライトをそのまま引き継ぐ」のではないかと推測しています。とりあえずこれで残りはアニメーションの指定方法が解析できれば新しいアニメーションを追加することも理屈では可能になると思います。
コメント
しっかり理解してないのに何か言っちゃってみたり
bit5はちょっと見た感じでは、アニメーション用か非アニメーション用かを決めているようですね。
このbitが非セットなら登場時の立ち絵の画像から選択し、セットならリアルタイムで書き換えてる所の画像を使用してるっぽ。
bit0は画像数の多いスプライトor魔法とかの追加用かな?ここでいう何番目の画像かというのが変動してるね
ただbit5と一緒(?)にセットすると使用パレットまで変動してるっぽいしなぁ・・・
後は、おおがらす達についてはまさしくその通りかと。
わざわざ同じ所に同じデータを上書きするのは処理量にしてもデータ量にしても無駄ですしね。
そういやOAMRAMは$7EDB20~のようです。まあ特に何かあるかと言うとないですが
んー・・・DQ側の人じゃないせいでどう言えばいいか分からんw
助言ありがとうございました。わざわざ内部をみてもらったみたいで、お手数かけました。さっそく5bit目の解釈方法を変えてみたところ、モンスターに関してはほぼ完全に正しく解釈できました(それ以外のスプライトについては鳥の一部のスプライトがまだ変です)。次回のリリースに修正を含めます。まあ、一番いいのはまじめにオリジナルのデコード方法を追えばいいんですが、なにぶん面倒がりなもので…。あと、OAMRAMって何でしたっけ?(まだ勉強不足でスイマセン)
OAMRAM=スプライト管理情報をRAMの適当な所に準備。
んでDMAで$2102-$2103にデータを転送して実際に表示させるためのRAM(正確に言うとOAM(スプライト管理情報)RAMへの転送に使われているRAM)
開始地点~+$1FFまでが4byte1セットで
●1Byte:X位置
●1Byte:Y位置
●2Byte
・bit15:垂直反転
・bit14:左右反転
・bit12~13:優先順位
・bit9~11:色番号
・bit0~8:パタン(画像)番号
んでその後ろの20byteが
●bit1 3 5 7:画像サイズ(DQの場合8x8or16x16)
●bit0 2 4 6:画面左端に表示するためのフラグ
を示してるね。
まあ、知っても解析の補助になるかどうか位ではありますね
—おまけ—
「ZSNESのQS」「uosnesのSHIFT+Z」の.zstファイルをYYで覗くことが出来たりします。パレット情報も同一.zstから取れるので他から画像取ること自体は結構簡単だったり
確か$000C13~:WRAM
$20C13~:VRAM
最後尾の方:SRAM
主に見るのはVRAMですね、bit5はこれとあわせて確認しました