この記事はPokémon RNG Advent Calendar 2018 3日目の記事です。
「需要がある」と言われたので書いてみます。よければ読んでいって下さい。
ポケモン第7世代のさまざまな乱数調整の手法が確立されて結構経ちます。それらを補助するツールもいくつか作成され、利用している人もそれなりにいると思います。
私は孵化乱数をするとき、PokemonSunMoonRNGToolというツールを使うのですが...
性別比の選択欄は、♂1:♀7とされているシシコに対応していませんでした。そこで、全ての性別比にちゃんと対応できるよう、ツールを少し改良しよう!と思い立ちました。
性別の決定は、乱数を1つ取得し、それを252で割ったあまりが使われます。ここで得られる数値は0から251までになります。
PokemonSunMoonRNGToolのソースコードを少し覗いてみると、各性別比の閾値は以下のように設定されていて、先ほど求めた値がその数値以上なら♂、未満なら♀が孵化します。
♂:♀=
1:1 126
7:1 30
3:1 63
1:3 189
この閾値を求めることができれば、♂1:♀7にも同じ処理が適用できるわけです。
本来であれば、このツールで孵化する個体を検索すると
このような結果になります。0消費の個体の性別決定には1消費の行にある乱数列が使われます。ためしに計算してみると、
0xB0FE335D % 252 = 1
となり、♂1:♀1 であれば 1 < 126 なので♀、といった具合です。
しかし、性別の閾値がわからないので、"乱数列"から計算した値が、シシコを実際に孵化してみて♂になるか♀になるかを確認していきました。
この作業当時は手作業で計算してそれらしい値であれば孵化する、という面倒なことをしていましたが、少しソースコードを改変すると
"性別"の列に直接数値を表示させることもできますね。(以前こうしてれば楽だったのに...)
10体ほど異なる性別値で孵化をすることで、シシコの性別を決定する閾値は224だと特定することができました。
そして、それをツール内で指定できるようにしました。
(252 - 224) : 224 = 1 : 8 なので、正確な性別比はちょうど♂1:♀8ということになりますが、一般に♂1:♀7で知られていると思うので表示上は♂1:♀7です。
こうして、PokemonSunMoonRNGToolを全ての性別比に対応させることができました。めでたしめでたし。
___________________________________
実際のソースコードを載せてどこをどうすれば画像のように変わるのか、なども書きたかったのですが、HTMLの書き方がわからずぐちゃぐちゃになってしまうので文章のみとなってしまいました。それらしくなるように練習しないと。