DQ1,2(SFC)エンカウント判定に関する解析結果

最終更新:
2011/02/26 ↓の聖水トヘロス効果について訂正
2011/02/23 ロンダルキア大地に関する記述を「補足」に追加

目次

基本的には3.まとめのみ見ればよい。

  1. 概要
  2. 各処理について
    1. ノーエンカ判定
    2. 地形タイプ
    3. 特定地域でのエンカ1/2処理
    4. 歩数によるエンカ率操作
    5. 地形タイプに応じたエンカ率操作
    6. エンカウントの有無判定
    7. トヘロス・聖水効果判定
  3. まとめ
    1. 補足

1.概要

ヘッダ部を削除したROMにて$059700以降がエンカウント判定のルーチンである。
このルーチンでは、以下の処理が行われている。

  1. ノーエンカ判定
  2. 地形タイプによる基礎エンカ指数・歩数閾値の取得
  3. 特定地域でのエンカ指数1/2処理
  4. 単純歩数によるエンカ指数の除算処理(歩数が少ない場合)
  5. 地形タイプに応じた歩数によるエンカ指数の乗算処理
  6. 乱数取得・エンカ指数との比較(エンカウントの有無判定-1)
  7. トヘロス・聖水効果判定(エンカウントの有無判定-2)

2.各処理について

2a.ノーエンカ判定

ノーエンカフラグと思われるRAMアドレスの取得処理がいくつか存在するが、
詳細未解析のためここでは省略する。

2b.地形タイプによる基礎エンカ指数・歩数閾値の取得

地形タイプ

現在位置での地形タイプは$7E0081に書き込まれており、00h〜0Bhまで存在する。
取得後にDQ2の場合のみ+0Ch(12)してから$05B515のデータアドレスを参照し、基礎エンカ指数を取得する。
以下が基礎エンカ指数の設定値である。

DQ1  DQ2
00h高山・浅瀬0 0Ch高山・浅瀬0
01h0 0Dh3
02h毒沼12 0Eh毒沼7
03h草原・茂み5 0Fh草原・茂み5
04h氷原10 10h氷原7
05h森林10 11h森林9
06h14 12h12
07h砂漠10 13h砂漠7
08h城・町・塔0 14h城・町・塔0
09h洞窟0 15h洞窟0
0Ah10 16h10
0Bh不明0 17h不明0

参考:SFC DQ1・2 RomMap ver.1.01(86 ◆bC2iBDWl3o氏)

なお、この表とは別に、ダンジョンの基礎エンカ指数は「6」という設定がなされており、
地形タイプに関わらず「ダンジョン判定」が優先される。

DQ1の砂漠は山や毒沼並みにエンカ指数が高いとの説があったが、
上記を見る限りでは誤りであることが分かる。

歩数閾値

基礎エンカ指数ごとに「歩数閾値(仮称)」が存在する。
歩数が多いほどエンカ指数が高くなる(詳細は後述)のだが、その閾値の一部は基礎エンカ指数毎に異なっている。
$0597DD以降のデータアドレスで設定されており、以下がその値である。

基礎エンカ指数012345678 910111213141516
歩数閾値0255128856451423632 2825232119181716

例:DQ1の山=基礎エンカ指数14、歩数閾値18

2c.特定地域でのエンカ指数1/2処理

$7E0EEE(エンカテーブル配置番号)が00かつ、$7E0070が80未満の時にエンカ指数の1/2処理がなされる。
調査した限りでは$7E0070の値は
「DQ1フィールド:00、DQ1町・洞窟:01、DQ2フィールド80、DQ2町・洞窟81」であった。
つまり、DQ1のエンカ配置00地域= ラダトーム地域(以下の範囲)でエンカ指数が半分になっていると分かる。

dq1_map_00.jpg

参考:モンスター遭遇テーブルデータ(dq_analyzer / Shingo Endo氏)

2d.単純歩数によるエンカ指数の除算処理(歩数が少ない場合)

$7E0027に歩数カウントが格納されており、その数値に応じてエンカ指数が増減する。
歩数が少ない場合は、地形に関係なく条件は同一である。

歩数エンカ指数係数
  歩数<5×1/8
5≦歩数<9×1/4
 9≦歩数<12×1/2

なお、除算の小数点以下は切り捨てられる。

2e.地形タイプに応じた歩数によるエンカ指数の乗算処理

単純な歩数による分岐のほかに、歩数閾値に応じた条件分岐が存在する。

歩数エンカ指数係数
 歩数<歩数閾値×1×(1-1/4)
歩数閾値×1≦歩数<歩数閾値×2×(1+1/2)
歩数閾値×2≦歩数<歩数閾値×3×2
歩数閾値×3≦歩数×4

除算は小数点以下切り捨てのため、必ずしも、1+1/2=1.5や1-1/4=3/4になるとは限らない。

2f.乱数取得・エンカ指数との比較(エンカウントの有無判定-1)

乱数取得サブルーチン$05A550を呼び出し、8bitの乱数を取得する。
(線形合同法のアレンジで16桁の乱数値を生成しており、その一部を8bitの乱数として取得している。)
その後、2c〜2eでの係数を加味したエンカ指数と比較を行う。

乱数≧エンカ指数の時は、歩数カウントを1つ増やし、以上のエンカウント判定ルーチンを終了する。
つまりエンカウントしない。
(なお、歩数カウントの上限は250であるが、カウントが増えなくなるだけで、250歩でエンカが発生するわけではない。)

乱数<エンカ指数の時、歩数=0(,255※)の際は歩数カウントを1つ増やしてエンカウント判定ルーチンを終了する。
歩数≠0の場合は、トヘロス・聖水効果の有無を取得しに行く。2gに続く。
(※歩数カウントFFh(255)とは、マップ切り替え後に格納される値のようである。)

2g.トヘロス・聖水効果判定(エンカウントの有無判定-2)

トヘロス・聖水の効果判定は$0597EEのサブルーチンで取得する。
効果が認められる場合は、歩数カウントを1つ増やしてエンカウント判定ルーチンを終了する。

効果がない場合$7E10B9を+1し、エンカウント判定ルーチンを終了する。
詳細は未解析であるが、フィールド上で$7E10B9=01になるとエンカウントが発生するようである。
(戦闘終了後、$7E10B9は0に戻っている。)

3.まとめ

エンカウントの条件は、歩数カウント≠0(・0xFF)、トヘロス・聖水未使用かつ、
乱数(最大255)<エンカ指数 の時であり、 エンカ指数は、地形歩数に応じて変わる。
確定エンカ歩数等は無く、常に確率エンカウントである。
また、DQ1ラダトーム城周辺はエンカ指数が1/2処理される(歩数閾値には影響しない。)
これらをまとめると以下の表になる。
(エンカ“率”として見たい場合は、下記の「エンカ指数」を256で割れば良い。)

地形と歩数に応じたエンカ指数表

なお歩数は、いわゆる「半歩」につき1増加とカウントする。

DQ1

DQ1 ラダトーム地域(エンカマップ00地域)

DQ2

補足

文責:Kri (http://com.nicovideo.jp/community/co381358)