【ポケモンコロシアム】スナッチリストを開いた時の消費について【乱数調整】

この記事はPokémon RNG Advent Calendar 2020 9日目の記事です。

adventar.org

f:id:yatsuna_827:20201226032100p:plain

かけらさんの調べたもののまとめ記事に以下のような記述があります。

ここで注意なのですが、なぜかここで生成されるポケモンにはID0(TID&SID=0)で色回避ルーチンが作動します。ごくまれに7消費ではなく9消費になってしまう。とても低い確率なので気にする必要はないと思いますが、よく分からないずれが起きたらこいつのせいかもしれません。

この事象がどのくらいの確率で発生するのか実際に調べてみました。

使用したコードは以下の通り。

int cnt = 0;
for(uint upper=0; upper<0x10000; upper++)
{
    for(uint lower=0; lower<0x10000; lower++)
    {
        var seed = (upper << 16) | lower;
        if ((seed.GetRand() ^ upper) < 8) cnt++;
    }
}
Console.WriteLine(cnt);
Console.WriteLine(cnt / (float)0x100000000);

実行結果は以下の通り。

524348
0.0001220843

該当するseedが大体52.4万個くらい存在して、適当にスナッチリストを開いたときに引いてしまう確率は0.012%くらいですね。確かに気にしなくていいくらいの確率です。 とは言うものの、乱数調整は『確率的に動いていると見なされている事象を決定論的なステージに引き下ろす行為』なので、実際に気にするべきは単なる確率ではなく『理想個体を生成するseedの十分近くで、しかも7n消費手前に存在するようなseedの中に、このようなseedが存在するかどうか』でしょう。

以上、おまけのコーナーでした。