自分が作業をするわけではないですが、某氏より「第四次スーパーロボット大戦用のプラグインを自作したい」という連絡を受け、そのガイド用のエントリを作成をするべくうpされていたRomMap.xmlを手元に導入してみたところ、「プログラム部の逆アセンブルが(SFCGENEditor側で)正しくできていない」ということがわかりました。放置しておくと気持ち悪くて後の作業も手がつかないので先に対処することにします。
HiROMのメモリマップはこのようになっており、HiROMはバンク:$80-BFか$C0-FF?がROM領域として使われるようです(mirrorと書いてあるのでmirror元も多分OKなはず)。DQ3,6はバンク$C0-FFを使っていたので、どのHiROMもここを使っているものという前提でSFCGENEditorを書いていましたが、他のゲームは「どうもそうではないらしい」ということのようです。これは作業効率がさぞ悪かろうということなので対応できるようにしました。
正しく解釈できない例:
- SR:$03D908 経験値取得?
略 | |||
---|---|---|---|
$03D965 | STY $0EDE | $0EDE=Y | |
$03D968 | JSL $80B7DD | SR: $80B7DD | (RAMアドレスコール) |
$03D96C | LDY $0EA6 | Y=$0EA6 | |
略 |
SFCGENEditorの逆アセンブル機能では、ROM領域として認識できないアドレスへのコールはRAM上のアドレスをコールしているとみなして解釈します。RAM上に動的に作成されるSRということなので、当然ダブルクリックしてもジャンプしません。DQ3では実際にRAM上のアドレスにジャンプする動作がありました。この場合は正しくないのでこれを「RomMap.xml基本情報を編集」で「ROMベースバンク」として「80」を指定します(ROMベースバンクとはあくまで勝手につけた名称です)。
- SR:$03D908 経験値取得?
略 | |||
---|---|---|---|
$03D965 | STY $0EDE | $0EDE=Y | |
$03D968 | JSL $80B7DD | SR: $00B7DD | 戦闘した敵の経験値を取得 |
$03D96C | LDY $0EA6 | Y=$0EA6 | |
略 |
デバッガで「$83D968」にブレークポイントを置いてSRのジャンプ先を見るとSR:$00B7DDに飛ぶようなので一応正しそうです。ちなみに、どの領域のROMイメージを使うかはプログラマーの自由?のようです。ヘッダはDQ3もスパロボもHiROM($31)なのでヘッダで指定するものでもないようです。また、$03D96Bを$80から$C0に変えてみましたが、特にゲームが止まるということもありませんでした。チャンポンで使用が可能のようですが、普通は意味がないのでやらないでしょう。こういった根本の知識がまるでないというのがモロバレですねww。
コメント
更新お疲れ様です。
お疲れ様です
早々に引退してしまった自分と違って相変わらず凄いがんばってるようで
第三次がSlowLowROMのようですし移り変わりでのノウハウ云々とかで$80だったりするんですかねぇ(Fast対応?そんなの最上位Bitを1すればいいわ)と
自分も最近はほとんど作業してないですww。第4次だけがおかしいのか、これがDQ以外のHiROM2個目の解析対象なのでサンプルが少なすぎてわからないですww。
更新お疲れ様です
当サイトのSFCGENEditorはとても便利で助かってます
当サイトのドラクエ6のロムマップの特攻武器設定でドラゴンキラーからお洒落な鍛冶屋で鍛えたラミアスの剣に特攻設定して保存しても、鍛える前のラミアスの剣に特攻設定になります。鍛えた後に設定するにはどの様にしたらよろしいのでしょうか?
鍛冶屋のせいで同一名称の武器がDQ6には複数存在しますが、名称が重複した場合にどうするかをアイテムの名称フィールドのオプションで指定しないとプログラムで区別が付きません。区別なしで単にどれも「ラミアスのつるぎ」のままにしているとIDの一番上のものが選択されます。手元では「文字列の重複を回避する」にチェックを入れているので「ラミアスのつるぎ(2)」「ラミアスのつるぎ(3)」のように表示されます。
お返事ありがとうございます
常に教えて頂いている有り難さと同時に自分の知識不足が恥ずかしいです。
いつも更新お疲れ様です。
DQ6のモンスター行動編集において4番目の行動が別のものに入れ替わってしまう不具合についてお聞きしたいのですが、これの回避方法はありますか?
直接バイナリから弄っているのですが…
行動4のアニメーション設定が間違っているようです。6バイト目ではなく7バイト目に変更してください。