DQ3 K.Mixの対応エミュ?について

相変わらずポツポツとバグが見つかっているので、いっそのことリリース後一週間くらいは「バグ出しウィーク」としてしまったほうが(自分の)精神衛生上良かったかなあと今更ながら思ったりしていますが、現状報告していただいている問題で未解決なものは

レベルアップ時にフリーズする(uosnesw, SNES9XTYL?使用時)

です。複数の報告があるので再現性はありそうですが、あいにく当方PSP未所持のためPSP用のエミュでは確認ができません。

(4/14訂正)
結局原因はアレがナニだった、ということなので、エミュ依存の問題ではない、ということになりました。

一方、一応ながらも実績があるのは、

◯SNES9X 1.53,1.51

◯SNESGT(少なくとも最新版)

◯uosenesw(少なくとも最新版)

です。sne9xは1.51以降なら多分大丈夫ではないかと思います。また、今回3月に入ってテストプレイを開始するまではuosneswを使用していたのでuosneswも大丈夫だとは思うのですがレベルアップ時?にフリーズの報告がありました。手元ではuosnesw-20100825.i686.bin.zipのバージョンを使用して、直後にフリーズするというステートセーブを頂いて試してみましたが(Windows7上)再現せず、また、古いバージョン(uosnesw-20050910.i586.bin.zip)でも再現しませんでした。snes9xTYLについては、ExHiROMに対応していないのではと思いバイナリ、ソースを落としてきてちらっとreadmeを検索してみましたが、ExHiROMについて言及している部分は見当たりませんでした。ExHiROMに対応していないエミュでExHiROMのゲームを起動した時にどういう動作をするのかよくわからないのでなんとも言えないんですが、ある程度ゲームが動作してから特定の場所でフリーズする、というのも変な話だとは思います。一言に「エミュ依存」といってもいろいろとあるみたいで、テストプレイ中に「SNESGTだとフリーズするが、SNES9Xだと発生しない」という問題の報告がありました。調べてみるとソフト側(DQ3 K.Mix)のコーディングのミスであるということがわかりました。

  • SR: $09F13E NPC1_MoveSR_061E(オルレラが消える処理)
09F13EJSL $C04604SR: $004604 引数:1#$F63A28 引数:2#$01パレットアニメーション開始
09F146JSL $C04835SR: $004835 引数:1#$F63A28パレットアニメーション終了(該当c=on)
09F14DBCC #$03if(c==off) goto $09F152<-ここが問題
09F14FBRA #$03goto $09F154
09F151COPgoto $00FFE4
09F152BRA #$F2goto $09F146
09F154BRA #$19goto $09F16F

問題となるのは$09F14Dの BCC #03です。割り込みなしで$09F146 -> $09F14D -> $09F152 -> $09F146…というループになってしまうためフリーズが発生していた、と言うことのようです。正しくはBCC #02にして、割り込みを発生させる必要があります*1(もちろんリリース版では修正済み)。テストは主にSNES9Xで行なっていたため、この現象には気づきませんでした。忠実にエミュレートするとSNESGTのほうが動作としては正しい(っぽい)わけですが、SNES9Xはこうしたソフト側のバグをある程度吸収する作りになっているのではないかと推測します。まじめに調べてないのであくまで推測ですが。

こういう経験前科があるので、レベルアップ時のフリーズ問題についてもDQ3 K.Mix側の問題、という可能性も捨て切れないわけで、単に「エミュ固有の問題なので」という理由で捨て置けんわなあと思います。同じ場所でフリーズしているようなのでuosneswで再現できてもし問題が特定出来ればSNES9XTYLでも解消できるのでは、と思います。場所が決まっているので必ずしもデバッガ上で追わなくてもソフト側を色々いじって問題の切り分けはできると思います(上記の問題も同じアプローチで原因を特定しました)。とはいえ現状ある程度古いuosneswでも再現しないので困ったなあと…。あとは再現するエミュの本体一式をメールで送ってもらうとかしかないですね。あとはエミュの設定が関係しているかも。というわけで引き続き何か情報があれば提供お願いします。

*1:未だに割り込みについて漠然としたイメージしか持っていませんが

コメント

タイトルとURLをコピーしました