SNES/65c816 一覧

DQ3 セーブデータのサイズ拡張

DQ3にAIを導入するならやってみたいのは「学習機能の実装」です。最近のドラクエのAIは「賢すぎる」というのがどうにもひっかかっていました。使用するメモリ量を抑える目的もあるのでしょうが、AIは自分のターンが回ってきたときにその場で行動を決定するのでいわゆる「後出しジャンケン」の上、初見のモンスターの情報もなぜかお見通しということもあり、正直かなり便利です。じゃあお前はどうするんだよという話になりますが、少なくともなにもしないうちから「相手の耐性・行動をすべて知っている状態」がその理由の一つである、ということで「対象のモンスターの耐性情報、行動情報を把握しているか」フラグを持つようにすれば多少はマシになるのではと思います。モンスターを倒したり、実際に呪文を使ってみて初めて情報にアクセスできる、とすればAIべったりお任せにもならないのではと思います。さすがに一人づつこの情報を持たせると領域がいくらあっても足りないのでパーティで共有するとして、1モンスターにつき、基本情報(HP、攻撃力、守備力、素早さなど)1B、行動情報1B、耐性情報2Bとすると、モンスター数256として、4B*256モンスター分*冒険の書3個分=3,072Bのセーブデータの領域が追加で必要になります。オリジナルのDQ3セーブデータサイズは8KB(=8,192B)で、そのうちヘッダ5Byte+セーブデータ本体2,719B*冒険の書3個分+フッタ5B=8,167B*1とほぼフルに使っています。まるで領域が足りないので手法としては

  1. セーブデータファイルのサイズはそのままにして既存領域を圧縮する
  2. セーブデータファイルのサイズを拡張する

のどちらかになります。既存領域は大きく分けて

  1. 進行フラグ、宝箱回収フラグ
  2. アイテム(袋の中身)情報
  3. キャラクター情報

で使用されているのですが、圧縮できそうなのはせいぜい袋の中身くらいでやったとしても128B程度しかサイズが浮きません(袋の中身をセーブのたびに毎回固定で並び替えればもう192B浮きますが結局焼け石に水です)。というわけで必然的にセーブデータファイルのサイズを拡張することになります。とりあえず拡張後のサイズは32KBとします。拡張した場合のデメリットは既存のデータとの互換性が問題になるわけですが、最悪互換性は切り捨てることで解決します。今までDQ3 K.Mixにおいて、バージョンアップに伴い極力古いバージョンのデータをそのまま使えるようにはしてきましたが、さすがにセーブデータのファイルサイズが異なる場合にはSFCのプログラム内部ではどうしようもないのでサポートする場合には別途外部ツールを用意するか各自で対応してもらう必要があります。対応と言っても既存のファイルの最後に24KB分0をつけてもらうだけなんですが。

続きを読む


Snes9X 1.51自動SS保存機能追加版更新

今回DQ3 K.Mix 1.4.5のテストプレイをするにあたっては先日リリースしたSnes9X 1.51自動SS保存版(D3D対応)を使って行いましたが(プレイ自体は全く問題なし)、使っていて気になったのが「自動保存されたステートをロードするのが面倒くさい」というものでした。自動保存フォルダの中のファイルを適当に見当をつけてスロット0のファイルと差し替える→間違っていたら前後のファイルを探して再度差し替えという作業を繰り返すのがどうにもかったるく、いろいろ考えた結果、「直接ファイル名を指定して読めばいい」という結論になりました。ステートをロードするメニューに1つ追加して下のようにしました。

20131026012549.jpg

これでスロットに相当するファイル名に変更することなく直接ファイルを選択できるのでお目当てのステートを特定しやすくなります。もちろん今プレイしているゲームと違うステートをロードしたりすると正常に動作しないリスクはありますが、それについては自己責任ということで。通常版の1.51、D3D版共に更新してあります。例によって「ダウンロード」ページにうpしてあります。


スポンサーリンク

Snes9X 1.51自動SS保存機能追加版リリース(DirectX3D対応)

Snes9X 1.51を使っていて気になるのが「音が悪い」ということです。プチプチとノイズのようなものが入るのが耳障りでテストプレイで使う気が失せるなあと思っていました。最新の1.53では改善されているらしいのですが、どうやらこれは1.52で正式導入された「XAudio2」というサウンドドライバによるものらしいです。プログラム的に言えば1.51までで使用されていたDirectSoundに加えて、新しくMicrosoftから提供されたXAudio2というエンジンを使って作られたドライバということのようです。普段はエミュのバージョンなどまるで気にしないで「最新版使えばいいじゃん」程度の認識でしかなかったわけですが、今回はそうもいかず、通常プレイの感覚でテストプレイできる環境を整えるためにちょっと調べてみました。

ネットの情報を漁っているとXAudio2サウンドドライバの実装はそもそもSnex9X1.51の時代に実装されていたようです(2chのエミュスレの過去ログを見ると「音が悪い場合にはSnes9X Direct3Dを使え」という書き込みがありました)。このバージョンの主な修正点は画面描画をDirect3Dに置き換えた変更らしいのでSnes9X Direct3Dと呼ばれているようで、プログラム自体は以下のURLで現在も取得可能です。

続きを読む


Snes9X 1.51自動SS保存機能追加版リリース

今までバグ報告を受けても「SS*1を送ってくれ」と依頼するたびに自分でも「いい加減無茶ぶりだなあ」と思っていたわけですが、よほど特定の状況で確実に再現できるバグ以外は問題が起きてしまってからは再現させるのが非常に面倒だったり不可能だったりするわけで、DQ6インターフェース改良パッチに至っては手元でもフリーズする現象が起きたのは確認できたものの再現方法がわからず、さすがにヤバ目のあるバグがあるとわかっているものを正式リリースするわけにもいかないので放置している状態です。

そもそもいつフリーズが発生するかをプレイヤーに意識させてちょこちょこSSを取りながらテストプレイしてくれというのも無理な話なので、「自動でSSを定期的に保存するように出来ないか」と思い、少し前からSnes9Xのソースをダウンロードしてビルドできないか試していました。結論として一応意図したものが出来たので、テストプレイには是非これを使っていただき、問題が起きた時には直前のSSを送ってもらえば手元ですぐデバッグにかかれるのでは、というのが狙いです(バージョン1.51にしているのは現在手に入るSnes9XのDebuggerが1.51だからです)。

続きを読む


スポンサーリンク

SNES カートリッジ構成

SNES9xでROMを読み込むと一瞬「DRAGONQUEST3」などゲーム名が表示されます。ヘッダーのないROMでも同様に表示されるのでどっかに情報があるんだろうなと思っていたんですが、やはり決まった所に情報があったようです。

SNES Cartrige

これによると、HiROMの場合、$00FFC0から始まる21バイトがROM名を格納する領域のようです。その後にROMの情報(LoROM/HiROMかとかメーカーコードなど)が続くようです。以前DQ3SFCEditorに「ROMを6MBに拡張」というメニューをつけたときにこの近辺のアドレスも変えないとダメですよという指摘を受けて、そのときは言われるがままにコードを変えたんですが、これを見てようやく意味がわかりました。ちなみに、このROMサイズの拡張機能はその後Luner Expandというツールの存在を知ったので、そちらを使ってもらうことにして機能は削除しました。


1 2