PS版DQ4 2章エンドールメタルの乱数調整について
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

PS版DQ4 2章エンドールメタルの乱数調整について

2014-10-05 22:19
    10/5の枠(lv195607232)にてお話した、2章エンドールメタルを必ず出現させられる乱数調整について説明します。

    1. 乱数の仕様
     PS版DQ4の乱数は、現在確認出来ている中では$0x801023e8に4byteの値で格納されています。

    1.1. 乱数の計算方法
     まず乱数の初期値ですが、これは冒険の書選択画面へ切り替わるときに、ソフト起動からのフレーム数が代入されます。
     筆者の環境(PS2 SCPH-90000 高速読み込み使用)では、おおよそ530F前後となることが分かっています。
     次に乱数の計算ですが、sr(サブルーチン)$0x800a4420にて線形合同法によって計算されており、計算式は以下のようになります。

    Rn+1 = (Rn * 0x41c64e6d + 0x3039) mod 0x100000000

     さらにこのsrは計算されたRn+1を$0x801023e8にstoreした後、以下の値を返り値として返します。

     return_value = (Rn+1 / 0x10000) mod 0x8000
     
     つまり、Rn+1の上位1~15bit目が返り値として返されます。


    1.2. 乱数の消費
     乱数が何かの計算に使用される度に、上記計算式で新しい乱数が生成されます。(以降これを乱数消費と呼びます)
     乱数を使用する際はsr$0x8008fea0が呼び出され、下記計算式によって[0, 引数)の整数が返り値となります。
     
    return_value = (sr$0x800a4420 * 引数 / 0x8000) mod 0x10000

     これによって、[0,引数)の一様分布な整数の乱数が計算されます。
     現在、乱数を消費するのは以下の場合であることがわかっています。
     ・NPCの動き判定
     ・フロア切り替え時のエンカウント歩数計算(2回)
     ・モンスターの種類、出現数決定
     ・気づいていない、襲い掛かり判定
     ・モンスターの初期HP決定
     ・行動順決定
     ・モンスターの行動決定
     ・ダメージ計算
     ・レベルアップ時の能力値計算
     ・呪文の習得判定
     ・種、木の実使用時の上昇値決定
     また、フィールドでただ歩いている分には乱数は全く消費されません


    2. エンカウント内容決定の仕様
     エンカウント内容決定の仕様については、詳細はまだ未確認ですが、SFC版DQ3と類似している部分が多くあるものと考えられます。

    2.1. 出現モンスター1匹目決定方法
     1つのエンカウントテーブルにつき、おそらく14種類のモンスター枠が設定されています。
     詳細は未調査ですが、おそらくSFC版DQ3と同じく以下のような枠組みになっていると考えられます。
      ・単一グループ: 5枠
      ・複合グループ: 5枠
      ・夜限定(?): 1枠
      ・単体: 1枠
      ・固定組み合わせ: 1枠
      ・?: 1枠

     モンスターの1匹目決定時は、sb$0x8008fea0(0xb8)が呼び出され、[0x0,0xb8)の整数乱数が計算されます。
     2章エンドール周辺のメタルスライムはこの単体枠にあたり、上記の乱数が[0x93,0xa8)であったときに出現します。
     
     単体エンカ枠の場合は、これで出現モンスターの決定は終了しますが、他の場合はモンスターの出現数、2グループ目以降のモンスターの出現有無及び種類の決定など、更に複雑な計算が行われます。

    3. 乱数調整方法について
     1,2章の原理より、フィールド上で現在の乱数が特定でき、また何らかの乱数消費行動によって乱数を調整出来れば、メタルスライムを任意に出現させることができることが分かります。今回は乱数特定方法として、1.2節にあった「種、木の実の使用時の上昇値」を利用しました。また、「不思議な木の実をアリーナに使用」することで乱数を調整します。
     PS版DQ4では、ライアンやアリーナなどのMP0固定の仲間に対して不思議な木の実を使用しても、使用されず木の実が残ります。しかし、この場合でも他の種・木の実使用時と同様に乱数を1つ消費します。これを複数回利用して、乱数を調整します。
     また、2章では不思議な木の実を含めた多くの種・木の実を使用するため、この方法を実現することができます。

     以上の原理を利用して、ツールによる計算で現在の乱数の特定と、メタルスライム出現に必要な乱数消費数を求め、その回数分不思議な木の実を使用するとメタルスライムを必ず出現させることができます。

    4. 今後の展望
     今回はエンカウント内容をメタルスライムに固定することを実現しましたが、敵のHPや行動なども全て乱数によって計算されているので、「HP3の逃げないメタルスライム」のみを狙って出現させることも原理上可能となっています。
     戦闘中にて乱数を消費する回数が分かれば、2匹目以降も連続してメタルスライムを出現させることが可能になります。ただしこれについては、呪文習得判定時にレベルと賢さの値や、呪文をレベルいくつで習得したかで乱数の消費数が変わってしまうため、これらの情報の管理とそれに対応した乱数調整が必要になります。
     また、同様の方法を用いて5章のガーデンブルク周辺のはぐれメタルも任意に出現・撃破することが可能になると思われます。

    5. 参考文献
     ママ友とランチ日記 (dq_492)さん
      SFC版DQ3のエンカウント内容の決定について参考にさせていただきました。
     http://kakuremi.webcrow.jp/(かくれみさん)
      PS版DQ7の乱数初期値決定方法などについて参考にさせていただきました。


    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。