未孵化のROMに限り8匹孵化で孵化用seedを特定するツールの紹介

孵化乱数に関する新しい仕様が明らかになり,それを元にした孵化乱数の初期seedを特定するツールを作成したので公開します.

新しい仕様

ポケモンSMにおける固定乱数では32bitの初期seedによって初期化されたSFMTという乱数生成アルゴリズムが使われています.一方,孵化乱数に使われているTinyMTでは,これまで33bit以上の初期seedによって初期化されているだろうと考えられていました[1]
しかし,固定乱数の乱数列の初期化に32bitの初期seedによって初期化されている以上,孵化乱数も同じ仕様ではないのは不自然ではと考え,1匹も卵を孵化していないROMで調査を行いました.その結果,TimyMTもSFMTと同じく32bitの初期seedで初期化されていることがわかりました.

これまでのstatus特定方法

これまでのstatusの特定方法は,TinyMTの最下位bitは線形であるということを利用したものでした.この方法では連続する乱数列の最下位bitを127個連続で観測する必要があり,人間に大きな負荷をかけてしまう方法でした[2]
127bitのうちの105bitと30個の性別を観測することで,残りのbitの全探索を可能にする方法[3]も存在しますが,こちらも100回を超える作業を行う必要があり人道的ではありません.

新しい仕様を利用したstatus特定方法

新しく判明した仕様はTinyMTの初期seedが32bitだということでした.未孵化のROM,つまりは孵化乱数が0のROMならば,初期seed$2^{32}$通りの全探索を行うことによって,statusを特定できることになります.
以上から今回紹介する新しい仕様を利用したstatus特定方法は,「両親に何も持たせず孵化したポケモンの性格を8匹観測する」です.より詳しい手順は次の通りです.

  1. 国籍が同じコイキングとメタモンを何も持たせずに預ける.
  2. 受け取り拒否を行わず,連続して8匹コイキングを孵化する.
  3. 後述するツールにコイキングの性格を数値として入力しstatusを特定する.

性格表

生まれたポケモンの性格は文字ではなく,数字として入力する必要があります.以下の表を参考にして入力してください.

id ja en de es fr it ko zh
0 がんばりや Hardy Robust Fuerte Hardi Ardita 노력 勤奋
1 さみしがり Lonely Solo Huraña Solo Schiva 외로움 怕寂寞
2 ゆうかん Brave Mutig Audaz Brave Audace 용감 勇敢
3 いじっぱり Adamant Hart Firme Rigide Decisa 고집 固执
4 やんちゃ Naughty Frech Pícara Mauvais Birbona 개구쟁이 顽皮
5 ずぶとい Bold Kühn Osada Assuré Sicura 대담 大胆
6 すなお Docile Sanft Dócil Docile Docile 온순 坦率
7 のんき Relaxed Locker Plácida Relax Placida 무사태평 悠闲
8 わんぱく Impish Pfiffig Agitada Malin Scaltra 장난꾸러기 淘气
9 のうてんき Lax Lasch Floja Lâche Fiacca 촐랑 乐天
10 おくびょう Timid Scheu Miedosa Timide Timida 겁쟁이 胆小
11 せっかち Hasty Hastig Activa Pressé Lesta 성급 急躁
12 まじめ Serious Ernst Seria Sérieux Seria 성실 认真
13 ようき Jolly Froh Alegre Jovial Allegra 명랑 爽朗
14 むじゃき Naive Naiv Ingenua Naïf Ingenua 천진난만 天真
15 ひかえめ Modest Mäßig Modesta Modeste Modesta 조심 内敛
16 おっとり Mild Mild Afable Doux Mite 의젓 慢吞吞
17 れいせい Quiet Ruhig Mansa Discret Quieta 냉정 冷静
18 てれや Bashful Zaghaft Tímida Pudique Ritrosa 수줍음 害羞
19 うっかりや Rash Hitzig Alocada Foufou Ardente 덜렁 马虎
20 おだやか Calm Still Serena Calme Calma 차분 温和
21 おとなしい Gentle Zart Amable Gentil Gentile 얌전 温顺
22 なまいき Sassy Forsch Grosera Malpoli Vivace 건방 自大
23 しんちょう Careful Sacht Cauta Prudent Cauta 신중 慎重
24 きまぐれ Quirky Kauzig Rara Bizarre Furba 변덕 浮躁

例えば,生まれたポケモンの最初3匹の性格が しんちょう,やんちゃ,がんばりや だった場合,ツールに入力するのは 23 4 0 となります.

ツール

ツールは以下のURLからダウンロードできます.
https://github.com/RNGeek/search-tinymt-seed/releases/latest
search-tinymt-seed.exesearch-tinymt-seed-x86.exe の2種類がありますがパソコンが32bitCPUを積んでいるなら search-tinymt-seed-x86.exe の方を起動してください.よくわからなければ search-tinymt-seed.exe を起動して,起動しなければ search-tinymt-seed-x86.exe を試すとかで良いです.
このツールはOpenMPを使って初期seed検索を並列化しています.そのため検索中はパソコンが重たくなりますが,検索は5分から10分ほどで終わりますので辛抱してください.

よくある質問

Q. 既にいくつか卵を生んでいるROMしかない

ROMをリセットしましょう.きっと127匹孵化するより精神が安定すると思います.
できる人はプログラムを書き換えて検索しても良いですが,検索に短くても3日はかかると思います.

Q. 未孵化ROMだけど光るお守りを持っていても大丈夫?

光るお守りを持っていると性格値の再計算が行われるため,ツールが使えなくなります.
流石にいないと思って対応していないんですが,いたら連絡ください.

対応しました.
search-tinymt-seed.exe と同じフォルダに ShinyCharm と書かれた config.txt を用意してください.ツールを起動した時に Shiny Charm mode と表示されていれば光るお守りに対応したモードで検索できます.

Q. 最初に貰うイーブイの性格は含めるの?

含めません.

Q. 他のROMから受け取った卵を孵化したことあるんだけど

他人からもらった卵の孵化は数に含めません.預かり屋から卵を受取/拒否していなければ大丈夫です.