サイファーの日記

過去作の乱数について書きます

Let's GO! ピカチュウ/イーブイでseedの特定をした

1.はじめに

Switchソフト「Let's GO! ピカチュウ/イーブイ」では乱数調整がほとんど不可能ですが、野生の三鳥の出現など一部の要素は調整する余地があります。乱数のアルゴリズムはxoroshiro128+です。

実際、下の記事にあるように低レベル/色違いの三鳥を求める人がCFWを導入して厳選しているようです。
billo-guides.github.io

 

自分も興味があるので、乱数調整の取っ掛かりとなるseed(厳密にはstateと呼ぶ)の特定を実機で行えないか試行錯誤しました。結果的にうまくいったので今回はその方法をご紹介します。もっといいアイデアを持っている人がいたら教えてください。

2.やり方

まず、フシギソウ128体以上用意します。

フシギソウのような一部のポケモンは、博士に送った時にもらえるアメの種類がランダムで決まります。

例えばスピアーを送ると、ちからのアメかこころのアメのどちらかが選ばれます。それなら進化のより早いスピアーでいいのでは?と思う方もいるかもしれませんが、このポケモンの場合は出現する比率が ちから:こころ=2:1 となっているようです。

一方、フシギソウ ちしき:こころ=1:1 である*1ためxoroshiroの性質を利用できます。乱数値%2の結果が0ならちしき、1ならこころのアメが選ばれました。128回連続で博士に転送すればstateの復元に必要な情報が得られます。

注意点としては、まとめて送ると各個体とアメの種類の結びつきが分からなくなるため、一匹ずつ送っていくことです。

 

また、上のようにサイズ(L/XL)のあるアメについては乱数ではなく、送った合計数に依存するので気にしなくて大丈夫です。フシギソウを50n回輸送するたびにフシギダネのアメがもらえますが、ここでも乱数は使われません。

 

以上の方法で128回+6回(確認用の追加分)の転送を計4セット行いました。追加の6*4個分は乱数ツールの結果と全て一致したため問題ないと判断してよさそうです。

3.おわりに

このようにしてstateの復元はできるようになりました。しかし、このままだと実際の調整時に現在消費数の確認などでもフシギソウを大量に転送する必要があります。

手持ちポケモンの瞬きが利用できれば便利で良いのですが、6世代や7世代のポケモンの瞬きの仕組みとはだいぶ異なっているようです。根気のある人、調べてみませんか?(他力本願)

*1:いー さんによると、以上の比率は他作品でもらえる努力値と関連性があるのではないかとのことです。もしそうであれば、キュウコンシードラケンタロスなどもアメの比率が1:1になるかもしれません。