今回はPS2版DQ5のエンカウント判定についての解説記事です。
1. エンカウント判定に関係する各パラメータの解説
1.1. エンカウント歩数
PS2版DQ5では、前回のエンカウントから歩いた歩数を示す整数値が保持されています。(以下エンカウント歩数と呼びます)
このエンカウント歩数はエンカウントが発生し得るエリアにおいて一定距離歩くごとに1加算され、第2章で後述するエンカウント判定におけるパラメータとなります。
フィールドにおけるエンカウント歩数1の縦距離
(テルパドール砂漠 砂漠の線を見ると分かりやすいかも)
エンカウント歩数は以下の際に0にリセットされます。
・エンカウント発生時
・エンカウント判定有無切り替えが伴うフロア移動時
・エンカウントテーブル番号切り替えが伴うフロア移動時
このことから、PS2版DQ5では通常のフロア切り替えではエンカウントリセットは出来ませんが、エンカウント判定無へのフロア移動またはエンカウントテーブルが異なるフロア移動を挟むことによってエンカウントリセットが出来ることが分かります。
1.2. 乱数
PS2版DQ5では、1要素32bit、合計624要素からなる乱数テーブルを保持しており、乱数を使用する際にはこの乱数テーブルから値をロードし、その後様々な演算によって32bitの整数値に変換されます。
乱数テーブルのIndex値は乱数が使用されるたびに1加算され、[0,623]の範囲でループします。また、このIndex値が1周すると乱数テーブル内のすべての値が何らかの関数によって別の値に更新されます。
乱数テーブル値から乱数値への変換式や、Indexが1周した際の変換式は未判明です。
2. エンカウント判定の解説
2.1. エンカウント判定式
PS2版DQ5では、エンカウント歩数が1増えるごとに以下の式が評価され、その結果が真であった時にエンカウントが発生します。
この1歩ごとに危険値と乱数値を比較して判定を行う方式は確率エンカウント方式と言われ、SFC版1,2,5のエンカウント判定と似た方式になっています。
if ((A mod B) < エンカウント閾値) then エンカウントつまり、Aは[0,0x1000000)の乱数値、Cは[1,4]の乱数値になります。
※ ただし、エンカウント歩数 < エンカウント最低歩数の場合は必ずエンカウントしない。
また、B ≦ 0の場合は必ずエンカウントする。
※ 各パラメータは下記の式で求められる。
A = rand mod 0x1000000
B = 256 - (エンカウント歩数 - エンカウント最低歩数) * C
C = (rand mod 0x4) + 1
エンカウント最低歩数 = 10 - エンカウント閾値
乱数の分布は未判明ですが、AとCの結果についてはその計算式から一様分布と考えて差し支えないでしょう。
エンカウント歩数が増えるとBの最大値は小さくなるため、A mod B の最大値も小さくなり、エンカウントの確率が上がる傾向にあるということが分かります。
2.2. エンカウント閾値
判定式で用いられるエンカウント閾値は、フィールドの地形やダンジョンのフロアに応じて設定されており、閾値が高くなるほどエンカウントの確率は高くなる傾向にあります。
エンカウント係数=1の場合のフィールドのエンカウント閾値は以下のようになっています。
・海: 2
・草原, 茂み, 砂浜: 5
・森, 砂漠, 荒地: 6
・毒沼: 7.5
・山: 9
また、ダンジョンのエンカウント閾値はエンカウントテーブルによって異なり、1~6の整数値のいずれかとなっています。
2.3. エンカウント係数
フィールド上のエンカウントテーブルのほとんどはエンカウント係数=1ですが、一部のエンカウントテーブルではエンカウント係数が1.25あるいは1.5となり、エンカウント閾値が2.2節の値にエンカウント係数値をかけた値となります。
エンカウント係数が1ではないエンカウントテーブルは以下の3つです。
・No.7: 1.5倍 (地域例: 妖精界北部)
・No.14: 1.25倍 (地域例:幼年期古代の遺跡周辺)
・No.32: 1.5倍 (地域例: ルラフェン西部)
エンカウント数を減らすためには、上記エリア内をなるべく歩かないような歩き方をする必要があります。
(ルラフェン西部は滝の洞窟上の橋の出口が丁度境界になるので、どうしようもないです)
また、忍び足使用時はエンカウント閾値0.75倍、魔物のエサ・匂い袋使用時はエンカウント閾値2倍になります。
3. エンカウント確率の計算
第2章の判定式を元に、エンカウント歩数に対するエンカウント確率を見てみます。
(以下2.1節のA及びCの結果は一様分布と仮定し計算します)
最初に各エンカウント閾値とエンカウント歩数値に対するエンカウント確率を求めます。
結果が以下のグラフです。
グラフを見ると階段のような形をしていることがわかります。
これはB式の結果が0以下となるようなパターンが一気に増えるからですね。
例えば閾値=1でエンカウント歩数73以上になると、Cの結果が4の時Bの結果は必ず0以下になるため、エンカウント確率が一気に上がるというわけです。
この結果を元に、エンカウント歩数0から歩き始め、同じエンカウント閾値でずっと歩き続けたときの各歩数に対するエンカウント確率を求めます。
(歩数ごとにエンカウント閾値が異なる場合でも計算は可能です。)
確率密度を示すグラフ(歩数=横軸の値ちょうどでエンカする確率)が以下のグラフです。
次に確率分布を示すグラフ(歩数≦横軸の値でエンカする確率)が以下のグラフです。
確率密度のグラフを見てみると、PS2版DQ5のエンカウントがブレブレなのがよくわかると思います。
閾値≦5では最初のグラフでちょうど段差のようになっている歩数で最大値を取りますが、閾値≧6になると徐々にその最大値が目立たなくなっていくのがわかります。
他の作品に比べて、閾値によるエンカウント確率の差はそこまでなさそうに思えます。
特に草原は閾値=5に対して砂漠や森は6なので、最短を避けて森を避ける価値はあまり高くなそうです。
4. まとめ
PS2版DQ5のエンカウント判定について調べ、以下のことが分かりました。
・エンカウント判定式をはじめとしたエンカウント判定の仕組み
・エンカ判定有無、エンカウントテーブル切り替えを伴うフロア切り替えでのエンカウント歩数リセット
・各地形及びダンジョンに対するエンカウント閾値
・各エンカウントテーブルに対するエンカウント係数値
・エンカウント歩数に対するエンカウント確率値
今後の展望として、以下の実現が考えられます。
・フィールドの地形に応じたエンカウント面で最適なルート構築
・エンカウントリセットの最適化
PS版のDQ作品では移動方向が増えたうえ、移動の単位が非常に小さいので、マップ情報を起こすのが困難なのが問題です。(何かいい案はないだろうか...)
5. 調査データ集
今回の調査で得られたデータは以下にアップロードしておきます。
http://ux.getuploader.com/Maru0137/download/10/PS2DQ5_enc.zip