DQ3解析 一覧

DQ3 マップ情報の構成

ネタが枯渇しているので余り人気の無いお勉強のお時間です。マップ情報(フィールド、ダンジョン等)は全て圧縮されており、そのデコードルーチンは全て共通のようですが、フィールドマップとダンジョン,街など(便宜上サブマップと呼びます)ではデコード後の動作が大きく異なります。いろいろ見ていくと「フィールドマップの変更*1はかなり大変」というのが結論なのですが、データの構成を見ていきながらマップ周りの構成について説明していきます。フィールドマップに関してはバイナリwikiに乗っている情報とかぶります。

圧縮データのデコード方法は以前スレに解析した内容を投下してバイナリwikiに転載してもらったのですが、1回デコードルーチンをマップ表示のためにプログラムで書いた以降は仕組みをすっかり忘れてしまいました。人間が編集できる形に展開してさらにゲーム中で使用される形式に変換しているDQ3,6マップエディタは当然ながらエンコードルーチンも実装しているものと思われます(単に逆をやればいいだけですが)。この圧縮データのデコード方法は少なくともフィールドマップ、サブマップ(BG1,2,3まで)は全て同じです。通行構成情報については未確認ですが、これも恐らく同じではないかと推測します。

続きを読む


DQ3 エンカウント時の出現モンスター決定方法3

さて、前回の時点で、1番目のモンスターを決定する実装まで説明しました。

2番目以降のモンスターを決定するSRは

7F01混成モンスター1~5用
7F581体のみ+混成5種をお供にするモンスター用
7F71単一種出現モンスター1~4,夜のみモンスター用
7FAE1体のみ出現用
7FB5固定パーティ1,2用

の5種類です。これを順番に見ていきます。

続きを読む


スポンサーリンク

DQ3 エンカウント時の出現モンスター決定方法2

今回からプログラム部分の実装を見ていきます。エンカウントの解析する上で一番やっかいなのは「RAMアクセスが多すぎて、そのアドレスの意味が何を表しているのかよくわからない」ことです。普通はその場で固定長のデータアクセス用のSRをコールするので、その場その場でこのアドレスにはどの値がセットされるというのはすぐわかるのですが、必要なパラメーターが多すぎるためにあらかじめ用意したRAM領域にごそっとコピーしてから処理を開始する、という実装になっているようです。この処理はSR: $068195で行っているので、それぞれの値がどのアドレスにセットされるのかをまずまとめておきます(その1のエントリ参照のこと)。なお、このSRでは延々とエンカウント、エンカウント種別から値を取得してRAMにセット、という処理しかしていないのでここでは省略します。

続きを読む


DQ3 エンカウント時の出現モンスター決定方法1

以前ふとしたところから見つけたエンカウント情報を掲載していたサイトがいつの間にかなくなってしまっていたようなので、まじめに解析しながらどういうルールでエンカウントするモンスターが決定されているのか見ていきます。エンカウント時に使用されるデータは主に以下の2つです。

  • $08ADD1- エンカウント(20Byte * 105rec)
範囲(Byte)範囲(bit)意味RAM上セット先アドレス
0-1Byteエンカウント率
2Byte0-2bitエンカウント種別
3-5bit先制強襲率
6bit混成モンスター1が出現決定したら他は出現させない7EF7D4
7bit混成モンスター2が出現決定したら他は出現させない7EF7D6
3Byte0bit混成モンスター3が出現決定したら他は出現させない7EF7D8
1bit混成モンスター4が出現決定したら他は出現させない7EF7DA
2bit混成モンスター5が出現決定したら他は出現させない7EF7DC
3bit単体出現モンスターが出現決定したら他は出現させない7EF7E8
4-7bit空き?
4Byte混成モンスター1ID7EF7B8
5Byte混成モンスター2ID7EF7BA
6Byte混成モンスター3ID7EF7BC
7Byte混成モンスター4ID7EF7BE
8Byte混成モンスター5ID7EF7C0
9Byte1体のみ+混成5種をお供にするモンスターID7EF7C2
10Byte単一種出現モンスター17EF7C4
11Byte単一種出現モンスター27EF7C6
12Byte単一種出現モンスター37EF7C8
13Byte単一種出現モンスター47EF7CA
14Byte夜のみ出現するモンスター7EF7CC
15Byte単体出現モンスター7EF7CE
16Byte固定パーティ1ID7EF7D0
17Byte固定パーティ2ID(夜のみ出現)7EF7D2
18Byteエリアレベル
19Byte最大出現数
  • $08B6D8- エンカウント種別(21Byte * 4rec)
範囲(Byte)意味RAM上セット先アドレス
0-13Byte混成モンスター1~固定パーティ2の出現閾値(1Byteずつを2Byte領域にセット)7EF798-B3
14Byte単一種出現モンスター1出現数ID7EF7F0
15Byte単一種出現モンスター2出現数ID7EF7F2
16Byte単一種出現モンスター3出現数ID7EF7F4
17Byte単一種出現モンスター4出現数ID7EF7F6
18Byte単一種出現モンスター5出現数ID7EF7F8
19Byte3グループ出現確率分子(分母256)7EF7B4
20Byte4グループ出現確率分子(分母256)7EF7B6

$08B6D8- エンカウント種別のインデックスは$08ADD1- エンカウントの2バイト目下位3ビットの値を使用します。3ビットなので0-7までセットできますが、実体は4レコードしかないので4以上の値をセットすると壮絶にバグる(はず)ので注意してください。

というわけで次回からプログラム部分の説明をしていきます。プログラム部分の解析がいらないという人はこのエントリだけ見れば十分です。


スポンサーリンク

DQ3戦闘部分解説23

解説が抜けていた部分があるのでそこを補足。

続きを読む


1 2 3 4 5 6 7 8 15