3世代乱数生成(野生乱数)

エメラルドとルビー・サファイア・ファイアレッド・リーフグリーンでは別の生成が行われている。
主な違いはシンクロの有無とメソッドの違いである。
エメラルドにおいてのみシンクロの効果は発動し、
エメラルドは他がメソッド1での生成に対してメソッド2での生成である。
また、両者ともにLCG(S[n+1] = (0x41C64E6D * S[n]) + 0x6073)を用いる。
また、この記事ではサファリゾーンにおける生成、シンクロ以外の特性については解説しない。

ルビー・サファイア・ファイアレッド・リーフグリーン

エンカウント判定の後に以下のように生成される。

r[n]スロット
r[n+1]Lv補正
r[n+2]出現性格の決定
r[n+3]LID(仮)
r[n+4]HID(仮)
r[n+m+5]LID
r[n+m+6]HID
r[n+m+7]B/A/H
r[n+m+8]D/C/S

RSFRLGで野生ポケモンが生成される具体例

初期seed 0x0000BA2Fでゲームを起動し、0Fでエンカウントした場合の個体を計算する。
(実際に0Fでエンカウントするのは不可能だが、この例では実機での再現性については考慮しない)
また解説を分かりやすくするため、FRのふたごじまB3の水上にてエンカウントしたものだとする。
ふたごじまB3水上のエンカウントテーブルは下記である。

60%30%5%4%1%
パウワウタッツージュゴンコダックゴルダック
Lv.25〜35Lv.25〜30Lv.35〜40Lv.30〜40Lv.35〜40

0x0000AC7Dを初期seedに疑似乱数を生成していくと以下のような数列が生み出される。
(LCGの詳しい計算方法についてはLCG(線形合同法)についてを参照)
r[0]0x0000スロット
r[1]0x5A85Lv補正
r[2]0x32A2出現性格の決定
r[3]0x8A9FLID(仮)
r[4]0xC83CHID(仮)
r[5]0xF88BLID(仮)
r[6]0x607EHID(仮)
r[7]0x4C96LID
r[8]0xF91BHID
r[9]0xCB69B/A/H
r[10]0xBF8BD/C/S

まず最初の疑似乱数で、どのポケモンが出現するか決定される(スロット決定)。
テーブルと閾値はエンカウントテーブルとスロットについてを参照。
0x0000 mod 100 = 0のため、スロット1のパウワウが生成される。

次の疑似乱数を用いてポケモンのレベルが決定される。
くさむら等ではスロットごとにレベルが決まってる場合があるので、この計算は必要ではない場合もあるが、
今回の例ではLv25~35のいずれかが出現するので、それを求める。
レベル補正は r mod (最高Lv-最低Lv+1)で求めることができる。
0x5A85 mod (35 – 25 +1) = 7、
25(最低Lv)+ 7 = 32、よってパウワウの出現レベルはLv32である。

次に性格が決定される、0x32A2 mod 25 = 12、よって性格は「まじめ」。
次の2つの疑似乱数を用いて性格値が暫定的に決定される。
LIDは性格値の下位16bit、HIDは性格値の上位16bitを意味する。
よって、このポケモンの性格値は0xC83C8A9Fになるが、
0xC83C8A9F mod 25 = 11(せっかち)となり、まじめではないため
もう1度疑似乱数を2つ生成して性格値を決定する、これを性格値が「まじめ」のものがでるまで繰り返す。
607EF88B mod 25 = 24(きまぐれ)
F91B4C96 mod 25 = 12(まじめ)
よって、パウワウの性格値はF91B4C96となる。

最後に疑似乱数を2つ使って個体値が決定される。
最初にB/A/Hが決定され、その時使用される乱数、0xCB69、を2進数にし(1100101101101001)
下記のように分割することによって、それぞれの個体値が決まる

1100101101101001
破棄BAH
18279

同様のことを0xBF8Bにも行い、D/C/Sが決定される。
1011111110001011
破棄DCS
152811

よって、この条件で生成されるポケモンは性格値F91B4C96、
個体値9-27-18-28-15-11のLv32のパウワウである。

エメラルド

エンカウント判定の後に以下のように生成される。

r[n]スロット
r[n+1]Lv補正
r[n+2]出現性格の決定シンクロ判定(可)シンクロ判定(否)
r[n+3]LID(仮)出現性格の決定
r[n+4]HID(仮)LID(仮)
r[n+m+5]LIDHID(仮)
r[n+m+6]HIDLID
r[n+m+7]破棄HID
r[n+m+8]B/A/H破棄
r[n+m+9]D/C/SB/A/H
r[n+m+10]D/C/S

Emで野生ポケモンが生成される具体例

先頭に特性シンクロがいない場合は、上記RSFRLGで野生ポケモンが生成される具体例における
性格値確定のあとの2つの乱数を使って個体値を決定するのではなく、
乱数を1つ破棄し、そのあとの2つの乱数を使い個体値を決定する程度の違いしかないので、
この項においては、シンクロを用いた例を記載する。

初期seed 0x00000000でゲームを起動し、0Fでエンカウントした場合の個体を計算する。
なおエンカウント時、先頭のポケモンは特性シンクロ性格いじっぱりであった。
(実際に0Fでエンカウントするのは不可能だが、この例では実機での再現性については考慮しない)
また解説を分かりやすくするため、Emのかいていどうくつの水上にてエンカウントしたものだとする。
かいていどうくつのエンカウントテーブルは下記である。

60%30%5%4%1%
メノクラゲズバットズバットゴルバットゴルバット
Lv.5~35Lv.5~35Lv.30~35Lv.30~35Lv.30~35

0x00000000を初期seedに疑似乱数を生成していくと以下のような数列が生み出される。
(LCGの詳しい計算方法についてはLCG(線形合同法)についてを参照)
r[0]0x0000スロット
r[1]0x0000Lv補正
r[2]0xE97Eシンクロ判定(可)
r[3]0x5271LID(仮)
r[4]0x31B0HID(仮)
r[5]0x8E42LID
r[6]0xE2CCHID
r[7]0xAFC5破棄
r[8]0x67DBB/A/H
r[9]0xFC33D/C/S

最初の疑似乱数0x0000 mod 100 = 0 から、スロット1のメノクラゲが生成される。
エンカウントテーブルとスロットについてを参照)

次にレベルが決定される。
レベル補正は r mod (最高Lv-最低Lv+1)で求めることができるので、
0x0000 mod (35 – 5 + 1) = 0
Lv5(最低レベル)+ 0 = Lv5

次にシンクロ判定が行われる。
r mod 2が0の時、シンクロは成功する。
0xE97E mod 2 = 0、よってシンクロは成功し生成されるポケモンの性格はいじっぱりになる。

次の2つの疑似乱数を用いて性格値が暫定的に決定される。
LIDは性格値の下位16bit、HIDは性格値の上位16bitを意味する。
よって、このポケモンの性格値は0x31B05271になるが、
0x31B05271 mod 25 = 0(がんばりや)
いじっぱりではないため、また疑似乱数を2つ生成して性格値を求める、
これを性格値が「いじっぱり」のものがでるまで繰り返す。
0xE2CC8E42 mod 25 = 3(いじっぱり)
よって、メノクラゲの性格値はE2CC8E42となる。

次に決定されるのは個体値だが、次の疑似乱数は破棄し、
その次の乱数2つを使って個体値が決定される。
最初にB/A/Hが決定され、その時使用される乱数、0x67DB、を2進数にし(0110011111011011)
下記のように分割することによって、それぞれの個体値が決まる

0110011111011011
破棄BAH
253027

同様のことを次の疑似乱数0xFC33にも行い、D/C/Sが決定される。
1111110000110011
破棄DCS
31119

よって、この条件で生成されるポケモンは性格値E2CC8E42、
個体値27-30-25-1-31-19のLv5のメノクラゲである。

また、仮にシンクロ判定時にr mod 2 = 1になり、シンクロに失敗した場合
次の乱数で性格を求め(r mod 25)、以後は同様の過程でポケモンの性格値・個体値は決定される。

サブコンテンツ

このページの先頭へ