読者です 読者をやめる 読者になる 読者になる

エメラルドできのみ名人乱数

この記事はPokémon RNG Advent Calendar 2016の15日目の記事です。

 

f:id:quandra:20161214112633p:plain

 

 ポケットモンスターエメラルドに、きのみ名人という人物がいる。彼は123番道路に居て、プレイヤーに毎日きのみを2つくれる。

そのくれるきのみには種類があり、

ザロク、ネコブ、タポル、ロメ、ウブ、マトマ、モコシ、ゴス、ラブタ、ノメル

の中からランダムで2つ選ばれる。

 

勿論、このランダムというのは乱数を使っている為、乱数の消費のタイミングさえ一致させれば任意のきのみを手に入れる事が可能となる。今回はその乱数消費の実態と解析について述べていく。

 

きのみの種類を決定する乱数消費のタイミングについて

まず1つ目のきのみは、きのみ名人に話しかけて、「きみにも きのみを わけて あげよう!」のセリフでAボタンを押した時。

2つ目のきのみは、「ほれ えんりょ せずに もう ひとつ!」のセリフでAボタンを押した時。

つまり、Aボタンを押した時にきのみの種類が決定する。フレーム単位での正確な決定のタイミングはこの時点ではまだ分からないが、このタイミングを調整する事が出来れば、任意のきのみを手に入れる事ができる。

 

どのような乱数消費になっているのか

決定時のタイミングが分かっても、きのみの種類がどうやって決定するのか分からなければ意味がない。なので実際に調査した。

ザロク~ノメルの10個のきのみの種類をランダムで決定する、としたらすぐ思いつくのは乱数値をmod10(10で割り、その余り)の値から対応したきのみが選ばれるというものである。

 

この事を念頭に置きつつ、Seed、乱数値、乱数値 mod10と手に入れたきのみのリストをまとめてみた。

f:id:quandra:20161210134718p:plain

乱数値の3E63がExcelの仕様により指数として読み込まれてますが補完して下さい。

この付近のフレームのきのみリストは以下の通りになった。

ノメル
ウブ
ウブ
マトマ
ラブタ
ゴス
ゴス
ザロク
ネコブ
ザロク
ラブタ

 

乱数値 mod10した時の値の並びと、きのみリストを比べてみると、乱数値 mod10した値が連続している箇所と、きのみが連続した箇所が一致している。

つまり、乱数値 mod10の値が4であればウブ、乱数値 mod10の値が7であればゴスのように対応していると判断して良さそう。一旦これが正しいとして表を対応させてみる。

f:id:quandra:20161210140251p:plain

 

ザロクやラブタも乱数値 mod10の値に沿っているので、乱数値mod10説は合っていると見なしても良いだろう。この表からでは、2と3と6の値の時のきのみが不明であるが、順番を考えるとそれぞれタポル、ロメ、モコシと予想できる。実際にリストの先を伸ばして調査した所、予想通りに対応したきのみが得られた。

そして、乱数消費のタイミングは、おそらく両方ともAボタンを押して3F後で合っていると思う。

 

まとめ

乱数消費のタイミングは、まず1つ目のきのみは、きのみ名人に話しかけて、「きみにも きのみを わけて あげよう!」のセリフでAボタンを押した3F後。

2つ目のきのみは、「ほれ えんりょ せずに もう ひとつ!」のセリフでAボタンを押した3F後。

さらに、その時の乱数値 mod10できのみの種類が決定する。mod10した値を0から順番にきのみに対応したリストは以下の通りである。

f:id:quandra:20161210142115p:plain

 

 

 

 

 

 

 

 

 

 

 

え、足りない?仕方ないにゃあ……

 

 

 

せっかくなので、mod10した値が連続している箇所を、0~‭4294967295‬フレームまで検索させるプログラムを作り計算させました。

結果が以下になります。最も連続しているものだけ出力しています。

 

きのみ, フレーム, その時のseed, 連続する数

ザロク -> 1239411864F 0x082AE198 10連続
ネコブ -> 256238458F 0x2F1D8AA2 8連続
タポル -> 82961193F 0x89E6607B 8連続
ロメ -> 329989807F 0xAC6FCC11 8連続
ウブ -> 235665853F 0xD830F65F 8連続
マトマ -> 217703774F 0xAA239986 8連続
モコシ -> 10416347F 0x515AAE4D 8連続
ゴス -> 2762930618F 0x1DCB4EE2 11連続
ラブタ -> 3489973580F 0x7010C9AC 10連続
ノメル -> 75525899F 0x1805B73D 8連続

 

 

大体8~11連続くらいはありました。

 

 

 

 

これだけフレームに猶予(0.16秒程)があれば、どんなにタイミングの調整が下手な方でも合わせられると思います!

 

 

 

 

 

これでいつでも努力値下げるきのみが手に入りますね!

 

 

 

 

 

みなさんも、きのみがどうしても欲しい時は、千万~億単位を待機して0.16秒の間を狙って乱数調整しましょう!

 

 

 

 

 

Q.ところで、これ何の役に立つの?

A.こんな記事を読むよりサンムーンの孵化乱数でseed算出の作業をしてる方が遥かにマシだぞ。

 

 

 

 

 

あとがき

非常に簡単かつ初歩的な乱数調査の例を取り上げたので、解析ってどんな事をするんだろう?と疑問に思っている初心者の人にも分かりやすい物であったと思う

今回は乱数値やmodといった用語が出ているが、こちらに関しては、Pokémon RNG Advent Calendar 2016の1日目の記事の、

を見て頂ければ知識の補完になると思うのでこちらも是非読んで欲しい。

 

そうそう、Pokémon RNG Advent Calendar 2016の最終日に記事を投稿する予定です。

内容は今巷で話題のサンムーンの孵化乱数についてアレコレ書くつもりです。最下位1bitだの個体値測定のやり方を、専門用語書かれても分からないという人向けに出来るだけ掘り下げて説明します。