かけらの記録ノート

かけらの記録ノート

主にポケモンの乱数について語るブログ

【6世代乱数】フィールド上でのTinyMTの制御

この記事はPokémon Past Generation Advent Calendar 2022 22日目の記事です。
adventar.org
6世代では、個体値や性格値の生成にはMTが使われていることは有名ですが、それ以外の目立たない部分(野生ポケモンのスロットやシンクロ、ポケモンの瞬きなど)ではTinyMTによる乱数が使われています。今までの固定乱数でシンクロの制御ができなかったのはこのためだったんですね。
larvesta10.hatenablog.com

元々、TinyMTの制御自体はID調整を行うために必要でしたが、今回は実際にゲーム本編のフィールド上で行うことを目的としました。ID調整ではトレーナーの瞬きによって内部状態の特定を行いましたが、今回はポケモンの瞬きを利用します。
ポケモンの瞬きの時間は、TinyMTの乱数値から次のように求められます。

blink = (RNG.Advance(1) * 240) >> 32 + 250

乱数の初期化には、内部時間のミリ秒によって変動する32bitの値が与えられます。ここはMTと同じです。ID調整と同様に、瞬きの時間を測定し、総当たりをすることで基準シードを特定します。
一度、基準シードが特定できれば、時間からおおよそのシードを逆算することが可能です。大きく消費を行ったあとは、同様にしてポケモンの瞬きから現在地を特定できます。消費の微調整にもポケモンの瞬きを使います。瞬き再強!瞬き最強!

TinyMTを制御することで、今まで考慮することができなかった様々な要素を乱数調整できるようになりました。

とても夢が広がりますね!仕組みを解析してくれた海外勢に感謝。

今回作成したツールでは、図鑑ナビのみ対応しました。仕組みはTinyFinderを参考にしています。
github.com
こちらのツールではほぼすべてが網羅されているので、開拓意欲のある人は使って挑戦してみてください。私のツールでも気が向いたら実装すると思います。

  • 6genBlinkSearch


drive.google.com
2022 12-13 v0.12

  • リリース

使い方などは、13日目のサイファーさんの記事にまとめられていて、とても分かりやすいです!(丸投げ)ここまで書いて力尽きたので、あとはあなた自身で体験してみてくだるしあ。

つづきまして、23日目は世代が一つ進みます。やはり瞬きは最強。