Pokémon RNG Advent Calendar 12日目の記事です.
昨日の11日目は水連さんの http://suiren1350.blog.fc2.com/blog-entry-125.html でした. FRLGの初期Seedに関する日本語の情報がまとまったサイトが無かったので, 非常にありがたいです.
http://suiren1350.blog.fc2.com/blog-entry-125.htmlsuiren1350.blog.fc2.com
概要
1日目の「乱数調整 入門」で扱ったウツギ博士乱数の続きです. (1日目の記事は乱数調整という言葉を初めて聞いた人にも分かるように頑張って書いたので皆読んでね!!)
http://mizdra.hatenablog.com/entry/2016/12/01/235954mizdra.hatenablog.com
「乱数調整 入門」では
- ウツギ博士が「ポケモンの しんかというのは~」というメッセージを15回以上連続で話す
ことを乱数調整しましたが, 折角なので同一メッセージの最大連続数及びその時の乱数 S[n]
, 初期Seed S[0]
を求めておきましょう.
乱数を求める
という訳で乱数をプログラムを書きました. 前回の記事で使ったプログラムを再利用すればサクッと出来ます.
実行
実行するぞ.
# 🙏 不慮の事故に備えてコンパイルする前に祈る 🙏 $ g++ AbuseMaxChainDrUtsugi.cpp -o AbuseMaxChainDrUtsugi.exe -lm -std=c++11 $ ./AbuseMaxChainDrUtsugi.exe r[n] % 3 max chain S[n] 0 20 0X97024D60 1 19 0X15A9302 2 19 0XD62B4730
結果から「ポケモンの しんかというのは~」は最大20連続, 「カントーには まだ ぼくの〜」「ポケルスが くっついた~」は最大19連続であることがわかります.
初期Seedを求める
乱数からそれを狙うことができる初期Seedを求めましょう. これも前回のプログラムを再利用してサクッと書き上げます *1.
frame
は800 ~ 10000F(約3分)に収まるようにしました.
# 🙏🙏🙏 祈る 🙏🙏🙏 $ g++ CalcInitialSeed.cpp -o CalcInitialSeed.exe -lm -std=c++11 $ ./CalcInitialSeed.exe n S[n] S[0] 27 0X97024D60 0X961424C7 184 0X15A9302 0XC60C148A 88 0XD62B4730 0X4C1514D8
結果
結果を表にまとめます.
r[n] % 3 | メッセージ | max chain | n | S[n] | S[0] |
---|---|---|---|---|---|
0 | ポケモンの しんかというのは~ | 20 | 27 | 0x97024D60 | 0x961424C7 |
1 | カントーには まだ ぼくの〜 | 19 | 184 | 0x15A9302 | 0xC60C148A |
2 | ポケルスが くっついた~ | 19 | 88 | 0xD62B4730 | 0x4C1514D8 |
r[n] % 3 == 0
で最大20連続. ちなみに初期Seedは 乱数逆算ツール を使うと自動で求めることが出来ます. 便利〜.
ツールの使い方は以下を参考に.
http://d.hatena.ne.jp/milk4724/20140804/1407121138d.hatena.ne.jp
乱数調整する際の問題点
今回の問題点は消費数が多すぎるものがあることです (184消費とか). 一般的に使われる消費法で消費数が多いものは「連れ歩いている眠り状態のポケモンに話しかける(消費数: 4)」ですが, この消費法を用いても40回以上は眠り状態のポケモンに話しかけなければなりません. しんどいですね.
そこで, オーキドはかせのポケモンこうざを用いた消費法をお勧めします. この消費法であれば毎秒30消費以上を実現することができます *2. 便利〜.
こちらもツールの使い方は以下の外部サイトを参考に. ameblo.jp
ちなみに僕はウツギ博士に電話をするのに飽きたので乱数調整はしません *3. 誰か代わりにやって動画を上げてくれると @mizdra が喜びます.
おわり.
最後に
Pokémon RNG Advent Calendar 2016が全日埋まりそうでで嬉しさと驚きを感じています. 非常にマイナーな分野でそれに関わる人も少ないので全日埋まるとは全く想像もしていなかった…
それとつい先程, 最新作のSMの孵化乱数調整が実機で可能になったようです. めでたい 🎉🎉🎉
セーブデータの解析を行わずにSM孵化用乱数列のseedを特定することに成功しました
— さき@隠居 (@water_blow) 2016年12月11日
これに関する詳細な記事は後ほど公開されることでしょう. 楽しみですね.
明日は oupo さん担当の「TinyMTの逆算」です.