未孵化の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匹観測する」です.より詳しい手順は次の通りです.
- 国籍が同じコイキングとメタモンを何も持たせずに預ける.
- 受け取り拒否を行わず,連続して8匹コイキングを孵化する.
- 後述するツールにコイキングの性格を数値として入力し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/latestsearch-tinymt-seed.exe
と search-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から受け取った卵を孵化したことあるんだけど
他人からもらった卵の孵化は数に含めません.預かり屋から卵を受取/拒否していなければ大丈夫です.