真・女神転生シリ−ズの乱数解析

情報提供:スルメさん

ここでは乱数について結構いい加減に簡単に書いてるので、もっと詳しく知りたい人はスルメさんの『RPG INSTITUTE』に行きましょう〜。

●乱数と確率

真メガテンに限らず、コンピュ−タ−ゲ−ムには確率のからむ事象(敵との遭遇、攻撃の命中、アイテムの取得)に「乱数」と呼ばれる
見えない数字とそれに伴う公式が使われており、この乱数をランダムに並べたものを乱数表といいます。乱数表における乱数の順番は
不変であり、乱数の数も100、256などゲ−ムよって違います。そして乱数はゲ−ム中で基本的に1つずつ順番に使われて(判定されて)いき、
これによって確率の合否が決まります。具体例を挙げると、主人公が敵悪魔に攻撃したとします。攻撃の命中率を90%として256の乱数表で
処理すると、この時に使われる(判定される)乱数が26〜255ならば命中し、0〜25なら外れるということです。
(それぞれの値を256で割って確率とした場合)乱数表における乱数の順番は不変なので、例えば乱数が124、52、24という順で
並んでいたとしたら、124、52の時に命中率が判定されれば当たり、次の24の時に判定されれば外れるということです。ここで重要なのは、
確率を決める乱数の順番が最初から決まっているということは、ある行動を取った後の次の行動の結果(合否)が既に決まっているということです。
●乱数と時間

乱数はゲ−ム中の行動だけで変化するのではなく、時間と共に変化する場合もあります。ここではプレイヤ−の行動でのみ乱数が変化することを
固定乱数処理、プレイヤ−の行動以外にも時間の経過によって判定される乱数が変動することを時間乱数処理とよぶことにします。
(正確にはフレーム処理というらしいですが)

●真1の乱数処理
真1も他のRPG同様、確率が関すること全てに乱数が使われています。ダンジョンを歩いていて何歩歩けば悪魔が出現するか、
どの悪魔が何体出現するか、会話をしたらどんな反応をしめすか、攻撃したとしたら装備している武器は何回攻撃するか、
敵はどんな攻撃をしてくるかなど、ゲ−ム中においてほとんどあらゆる事象に対して使われるといっても過言じゃありません。
ただし確率とは関係無いことにも乱数が使われていることがあります。魔法を唱える、COMPを使うなどがそうです。
また、使われている乱数処理はほとんどが時間乱数処理です。これらのことを具体的に証明する為、以下のような実験をしました。

@ス−ファミの電源を入れて真Tを始め、ファイル2(主人公LV92:新宿のデ−タ)をロ−ドする。
  ロ−ドしてすぐに歩くと1歩目で幽鬼グ−ルが2体出現し、ふいをついた。
  AUTOで戦闘し、天使のラッパを装備したロウヒ−ロ−が最初に攻撃して2体とも倒した(2回攻撃した)。
Aリセットして前と同じようにデ−タをロ−ドして1歩歩いたら、またグ−ルが2体出現して、
  AUTOにしたらまたロウヒ−ロ−が敵を倒した。
Bまたリセットして同じようにロ−ドしたら、やはりグ−ルが一歩目で出現して、
  戦闘はさっきと同じ結果になった。
C今度はリセットしてロ−ドした後に何もせず、30秒ほど待ってから歩くと
  12歩目でマンイ−タ−が2体出現した。(時間の経過によって乱数が変わった)
D再度リセットしてすぐ歩き、グ−ルが出現した後に威圧的に会話をして、名乗ったら1360マッカくれた。
E再度リセットしてまたグ−ルと同じ会話をすると、同じ結果になった。

以上の実験結果より次のこと分かりました。
@ABから、真Tでは乱数が使われており、リセットするだけでは判定される乱数は変わらない。(乱数も保存されている)
Cから、真Tでは時間乱数が使われている。
DEから会話でも乱数が使われているということ。
またスルメさんからの情報により次のことも判明しました。
1.セーブをする時に乱数表もセーブされる。(セーブするたびにパターンが変化)
2.フィールド画面では時間乱数処理がされている。
3.戦闘画面では時間乱数処理はされていない。
4.乱数表(おそらく複数存在)によって、確率が判定される。
5.セーブしたときに始まる乱数表の位置は4つだけ
6.3DMAPでは通常時間乱数処理がされているが、オザワを倒す前の大破壊後の新宿3Dでは
固定乱数処理が行われている(タ−ミナル周辺等の一部除く)

●真2の乱数処理
真2も真1と同じように乱数処理が行なわれていますが、真1と違う点はゲ−ム中のほとんどの乱数処理が固定乱数処理だということです。
つまり時間が影響しない分、かなり分かりやすいです。何度リセットしても悪魔の出現パタ−ンが変わらないのはこの為ですね。
こちらも実験をしてみました。

@ス−ファミの電源を入れて真Uを始め、ファイル1(主人公LV78:金剛神界のデ−タ)をロ−ドする。
  ロ−ドしてすぐに歩くと、26歩目でアマテラスが出現した。
Aリセットして前と同じようにデ−タをロ−ドして26歩歩いたらまたアマテラスが出現した。
Bリセットして前と同じようにデ−タをロ−ドして、歩く前に青銅の箱でシヴァを呼び出し、
  戦って倒してから歩くと、4歩目でオオナムチが出現した。
C今度はリセットしてロ−ドした後何もせず、40秒ほど待ってから歩いたが、
  やはり26歩目でアマテラスが出現した。(時間は関係無し)
D再度リセットしてアマテラスが出現した後に友好的に会話して「めをそらす」→「NO」と選択し
  戦闘を回避。その後8歩歩いたら再びアマテラスが出現したので逃げた。
  次に1歩歩いたら今度はタケミナカタが出現したのでまた逃げた。
  次に魔人出現ポイントに入ったらゴ−ストQが出現した。
E再度リセットして前と同じ行動を取ったらやはりまったく同じ結果になった。
F電源を切ろうがソフトを抜こうがアマテラスの出現パタ−ンは変わらなかった。

以上の実験結果より次のこと分かりました。
@Aから真Uにも乱数がつかわれており、リセットでは判定される乱数は変わらない。
Bからアイテムをつかう、戦闘する、ということで乱数は判定される。
Cから時間は乱数処理に関係無し。
DEからほぼすべての選択や行動に乱数が判定されていて、次に取る行動の結果が既に決まっている。
Fから真Uの乱数判定はかなり固定されている。
またスルメさんからの情報により次のことも判明しました。
1.セーブをする時に乱数表の位置を変えてセーブされる。(セーブするたびにパターンが変化)
2.フィールド画面や戦闘画面で時間乱数処理がされていない。
3.タイトル画面(ロード画面)で時間乱数処理がされている。
※3の確認は電源を切った後にスタートして、ヴァーチャルルームの敵の出現順が変化することよりそうだと考えました。
普通はロードするときに乱数表の位置も読み込まれるので関係ないです。

●真ifの乱数処理
真ifも当然乱数処理が行なわれています。少し調べたところ、おそらく真1と同じく時間乱数処理が行なわれています。
ただしifは生産ロットによって若干の差があるかもしれません。
※スルメさんの見解
とりあえず安定して同じパターンが再現できないので詳しい事は不明です。でも、ある程度パターンが決まっていたので
乱数表の同じような位置から始まっているようです。時間乱数処理がかなり厳しく取られていると推測されます。
1/60秒(1フレーム)で乱数の位置が変化すると踏んでいます。ちなみにSFCの場合は基本的にリセットボタンを押せば
乱数表はリセットされるようです。
(どちらにしても、真・メガテンシリーズはロード時に乱数表の位置もロードされるのであまり関係ありませんが)

●結論
命中率や回避率の乱数処理は大したことではありませんが、魔人に会う確率やロシアンル−レットの発生確率にも関与していることが重要です。
例えば魔人だったら、1/256の当たりの乱数が判定されないと魔人は絶対に現れないからです。
しかし逆に、故意に乱数を1つずつずらせば魔人に意図的に会うことが可能なわけです。
魔人出現ポイントの前でセ−ブ、入って駄目だったらロ−ドして1回オ−トマッピングを開いてすぐ閉じてセ−ブ、また入って…を繰り返すと!?
「どうやってタ−ミナル以外でセ−ブ&ロ−ドするんだ?」とかは突っ込まないでくださいね(笑)