RPG INSTITUTE > 乱数解析 > 乱数パターンテーブル 最終更新日 2004/04/09
下に示したのはFF2の乱数パターンテーブルの暫定版の一部です。
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00 | 69 | 233 | 226 | 21 | 210 | 57 | 177 | 185 | 24 | 95 | 228 | 250 | 249 | 239 | 0 | 192 |
10 | 200 | 100 | 208 | 223 | 49 | 11 | 246 | 139 | 96 | 77 | 152 | 100 | 64 | 90 | 36 | 75 |
20 | 128 | 94 | 64 | 192 | 162 | 98 | 4 | 84 | 82 | 237 | 52 | 157 | 62 | 190 | 141 | 205 |
30 | 13 | 113 | 126 | 113 | 34 | 197 | 24 | 36 | 72 | 135 | 41 | 190 | 121 | 208 | 128 | 86 |
40 | 126 | 20 | 251 | 75 | 200 | 80 | 0 | 172 | 200 | 149 | 236 | 241 | 221 | 228 | 154 | 43 |
50 | 198 | 29 | 203 | 52 | 205 | 88 | 231 | 131 | 88 | 26 | 231 | 44 | 12 | 77 | 160 | 180 |
60 | 128 | 109 | 32 | 6 | 103 | 137 | 192 | 211 | 54 | 64 | 175 | 49 | 218 | 77 | 244 | 98 |
70 | 70 | 164 | 224 | 116 | 8 | 246 | 60 | 213 | 146 | 141 | 39 | 254 | 80 | 233 | 164 | 254 |
80 | 160 | 214 | 47 | 105 | 152 | 173 | 21 | 16 | 60 | 36 | 47 | 18 | 21 | 118 | 214 | 3 |
90 | 159 | 175 | 13 | 163 | 100 | 216 | 149 | 103 | 218 | 72 | 199 | 228 | 111 | 54 | 93 | 167 |
A0 | 122 | 90 | 139 | 105 | 224 | 67 | 44 | 149 | 71 | 90 | 16 | 58 | 10 | 177 | 157 | 148 |
B0 | 251 | 29 | 216 | 211 | 49 | 113 | 233 | 5 | 86 | 26 | 111 | 182 | 141 | 154 | 237 | 134 |
C0 | 182 | 41 | 2 | 205 | 144 | 62 | 218 | 44 | 154 | 123 | 35 | 120 | 131 | 67 | 182 | 173 |
D0 | 195 | 54 | 187 | 108 | 105 | 241 | 226 | 96 | 239 | 167 | 72 | 251 | 146 | 9 | 123 | 32 |
E0 | 118 | 59 | 169 | 131 | 195 | 13 | 109 | 137 | 188 | 39 | 85 | 169 | 188 | 177 | 171 | 144 |
F0 | 7 | 244 | 82 | 248 | 136 | 180 | 241 | 26 | 116 | 123 | 18 | 203 | 186 | 222 | 164 | 31 |
説明なしにこれの意味がわかった人はすごいです(笑)。
ここで、何故乱数が発生するかを考えてみましょう。考えられる方法の一つに乱数パターンテーブルを使用するという手段があります。ここでは、便宜上乱数パターンテーブルの一周期を256として、0〜255までの数が1回ずつ登場すると仮定します。この場合は0〜255の数字が出る確率が1/256となり全く同等です。もっと周期が長い場合でも基本的な考え方は同じです。
乱数パターンテーブルを使わずに、何らかの関数を使っている可能性もあります。しかし、関数だったとしても乱数の発生順序は変化しないので以降の説明は成立します。
乱数パターンテーブルを用いて、確率判定を行うとします。まず、分かりやすいように乱数に100/256を掛けて端数を切り捨てたものを用意します。それが次に示したものです。
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00 | 26 | 91 | 88 | 8 | 82 | 22 | 69 | 72 | 9 | 37 | 89 | 97 | 97 | 93 | 0 | 75 |
10 | 78 | 39 | 81 | 87 | 19 | 4 | 96 | 54 | 37 | 30 | 59 | 39 | 25 | 35 | 14 | 29 |
20 | 50 | 36 | 25 | 75 | 63 | 38 | 1 | 32 | 32 | 92 | 20 | 61 | 24 | 74 | 55 | 80 |
30 | 5 | 44 | 49 | 44 | 13 | 76 | 9 | 14 | 28 | 52 | 16 | 74 | 47 | 81 | 50 | 33 |
40 | 49 | 7 | 98 | 29 | 78 | 31 | 0 | 67 | 78 | 58 | 92 | 94 | 86 | 89 | 60 | 16 |
50 | 77 | 11 | 79 | 20 | 80 | 34 | 90 | 51 | 34 | 10 | 90 | 17 | 4 | 30 | 62 | 70 |
60 | 50 | 42 | 12 | 2 | 40 | 53 | 75 | 82 | 21 | 25 | 68 | 19 | 85 | 30 | 95 | 38 |
70 | 27 | 64 | 87 | 45 | 3 | 96 | 23 | 83 | 57 | 55 | 15 | 99 | 31 | 91 | 64 | 99 |
80 | 62 | 83 | 18 | 41 | 59 | 67 | 8 | 6 | 23 | 14 | 18 | 7 | 8 | 46 | 83 | 1 |
90 | 62 | 68 | 5 | 63 | 39 | 84 | 58 | 40 | 85 | 28 | 77 | 89 | 43 | 21 | 36 | 65 |
A0 | 47 | 35 | 54 | 41 | 87 | 26 | 17 | 58 | 27 | 35 | 6 | 22 | 3 | 69 | 61 | 57 |
B0 | 98 | 11 | 84 | 82 | 19 | 44 | 91 | 1 | 33 | 10 | 43 | 71 | 55 | 60 | 92 | 52 |
C0 | 71 | 16 | 0 | 80 | 56 | 24 | 85 | 17 | 60 | 48 | 13 | 46 | 51 | 26 | 71 | 67 |
D0 | 76 | 21 | 73 | 42 | 41 | 94 | 88 | 37 | 93 | 65 | 28 | 98 | 57 | 3 | 48 | 12 |
E0 | 46 | 23 | 66 | 51 | 76 | 5 | 42 | 53 | 73 | 15 | 33 | 66 | 73 | 69 | 66 | 56 |
F0 | 2 | 95 | 32 | 96 | 53 | 70 | 94 | 10 | 45 | 48 | 7 | 79 | 72 | 86 | 64 | 12 |
そして、次のようにして乱数判定を行います。乱数パターンテーブルの任意の位置から乱数判定を始めることができますが、ここでは便宜上(00)h、つまり一番左上から乱数判定を始めるとします。ここで確率をパーセントとして確率判定を行います。
(FF)h、つまり表の一番右下まで来たら、次は(00)hに移動するとします。
このようにして、35%を判定した場合の確率は90/256×100=35.16%です。若干誤差は生じますが、この程度なら問題はありません。ちなみにどのような確率を判定しても信頼できる値が得られます。
あくまで、概念の説明です。実際にこのような処理を行われているかどうかは別問題です。FF2ではこのように乱数処理されていると考えていいようです。
みなさまの中には、ゲームをやっている場合に電源を入れてから同じように行動すると結果が全く同じになったという経験がある方もいると思います。これは電源をいれた時に、乱数パターンテーブルの同じ所から乱数判定が開始するためです。つまり、毎回同じように乱数判定を行うために結果が同じになるということです。
これができる最も有名なゲームはSa・Ga2でしょうね。スルメも電源技を使い第1世界で、HP999(表示上)、各ステータス(防御含む)を99にしましたね。データが飛ぶたびにこれをやっていたら、最終的にはRAMがいかれて使い物にならなくなりましたが(死)。
ただし、この条件を満たすゲームでも、セーブしたときに乱数パターンテーブルの位置もセーブされるゲームの場合は(改良版)電源技をするメリットが少ないです。(FE聖戦、真・女神転生1・2、エスト2など)
しかし、多くのゲームでは電源技を使うことはできません。一体何故でしょう。簡単に考えれば、乱数パターンテーブルの始まる位置が違うからでしょうが、何故乱数パターンテーブルの始まる場所が違うのかが分かりませんでした。
ところが、瞬丸さんのデータロードから戦闘開始のフレーム数(時間)をまったく同じにできればFF2でも電源技ができるという書き込みにより状況が一変します。(厳密にいえば、セーブした位置によっても戦闘パターンが変化するので違うみたいですが・・・。)この書き込みのあとにいろいろなゲームで改良版電源技を試した結果をこのサイトに掲載する予定です。
つまり、フレーム数に依存して乱数が進んでいると考えられます。条件設定を厳しく設定して、電源を入れてからのフレーム数も全く同じ状態にすれば、完璧に状況を再現できるわけです。(フレーム数を合わせたのが改良点です) ただし、操作はボタン押しっぱなしなどの単純な操作にしないとフレーム数を完璧に合わせるのが不可能なのが問題です。
フレームとは、ゲームで使われている一つ一つのコマ割りのことです。どうやら、1秒間に使われているフレームの数は60のようです。普通にやるとこれを完璧に合わせるのは極めて難しいです。
つまり、ゲームに改良版電源技を適用するということは、フレーム数を完璧に合わせる方法を探す方法を考えることが基本になります。
フレーム数によって乱数が進むことを、フレーム数によって乱数が流れると表現します。
スルメが確認した範囲では次の3種類で別々に処理されている場合が多いです。
例えば、Sa・Ga2の場合1〜3の全てにおいてフレーム数によって乱数が流れることがありません。そのために電源技が可能なゲームとして最も有名なわけです。
ただし、同じゲームでも乱数テーブルによって、フレーム数による乱数の影響が異なる場合があります。FF2の場合で説明します。敵遭遇用の乱数テーブルやフィールド用乱数テーブルは1〜3の全てにおいて乱数が流れることがありません。だから、敵出現歩数や敵の種類を完璧に予想できるわけです。ただし、戦闘用乱数テーブルは2において乱数が流れます。そのため、昔は戦闘パターンは再現できないと思っていたわけです。
ゲームに電源技を適用する場合、いつフレーム数によって乱数が流れて、いつフレーム数によって乱数が流れないかが理解できればどうにかなる場合が多いです。
しかし、必ずしも1フレームで乱数が流れるとは限りません。FF5の敵遭遇用の乱数テーブルがその例です。1においてフレーム数によって乱数が流れることが分かっています。しかし、タイトル画面でスルメの秒間10連射程度の遅い連射をすると、出現する敵の種類を改良版電源技によって固定できます。しかし、タイトル画面で1秒ぐらい待つと敵の種類が変化するので、フレーム数によって乱数が流れることは間違いありません。このように、ある程度フレーム数がたまらないと乱数が流れないゲームの場合は単純な操作や連射パッドがあれば、十分改良版電源技を使うことが可能になります。
基本的に乱数表の初期位置などを決定するのはハードです。
FC(NFC) | 電源OFFして数秒で乱数表がリセット |
SFC(SFCJr.) | リセットボタンを押すと乱数表がリセット(パッドリセットは不可) |
GB(GBA) | 電源をOFFにして画面の液晶の線が切れると乱数表がリセット |
SGB | 電源をOFFにして約10秒 |
次世代機(笑)については調べていません。
そして、乱数表の初期位置もハードに依存します。
特に初期ロットのハードの場合は乱数表の初期位置が違うことが多いことが注目されます。また、GBAとGBCが乱数表の初期位置が同じなのが謎です。GBとGBCは違うのに(笑)
スルメの経験からいえば、壊れかけたハードは普通のハードと乱数表の初期位置が違うことが多いことがあります。不安定なハードは普通のハードとちょっと違うんでしょうかね(笑)。手持ちのハードのパターンがいきなり変わった場合は寿命が近いのかもしれません(核爆)。そういえば、うちのSFCJr.は電源を入れて30分ぐらいは乱数表の初期位置SFCと違うけどそのうち安定するなひょっとして壊れかけかも(核爆)。
RPG INSTITUTE > 乱数解析 > 乱数パターンテーブル 公開開始 2001/1/13