ろいしんぶろぐ

乱数調整とか

第三世代メソッドズレ

RSの野生乱数において度々出現しては人々を困らせるメソッドズレについて

 

そもそもメソッドズレとはなんぞやという人のために簡単に説明

第三世代の野生ポケモンが生成されるときの処理の仕組みは

 

エンカウントスロット決定とかレベル決定とかの諸処理

性格決定

↓ (性格の条件をみたすまで性格値を探索)

性格値決定

個体値決定

 

という感じになっています

この処理の最後の性格値決定から個体値決定までを抜き出してみると

性格値下位(LID)決定→性格値上位(HID)決定→個体値(H,A,B)決定→個体値(S,C,D)決定

となっています

ところがこの一連の処理の途中にスキップが入ることがあります

LID→HID→スキップ→HAB→SCD とか

LID→HID→HAB→スキップ→SCD とか

これらがそれぞれ

メソッド1:LID→HID→HAB→SCD

メソッド2:LID→HID→スキップ→HAB→SCD

メソッド4:LID→HID→HAB→スキップ→SCD

 

と呼ばれています

 

このメソッドがそれぞれの個体生成に使われるときに、どのメソッドが使われるかはだいたい決まっています (RSの野生ならメソッド1とかEmの野生ならメソッド2とか)

ところが、自分の予想していたメソッドと違うメソッドが個体生成に使われることがまれによくあります

RSの野生だからメソッド1を想定していたのにメソッド4になってる!とかですね

この想定外のメソッドがでてくる現象が俗にメソッドズレと呼ばれています

 

このメソッドズレが起こる原因は長い間謎とされてきました

2011年9月にはBond697氏が英語で、2012年12月には外野席さんが日本語で書いてるのだけど

こういうときに便利なのがSmogonですね

http://www.smogon.com/forums/threads/rng-manipulation-in-firered-leafgreen-wild-pok%C3%A9mon-supported-in-rng-reporter-9-93.62357/page-16#post-3807317

RSE/FRLG Method Determinationってもうまんまですやん

沢山かいてあるので要約すると

第3世代の剰余を返すmod関数がとっても非効率で性格に一致するPIDを探すのにとっても時間がかかる
こんな処理してるからPID探索中に描画の割り込みを受けて乱数が1つ消費される

ってことが書いてます(すごく雑)

原文はゲーフリのことをボロクソに書いてるけどランダム性を産み出すための処理の一環なんだよきっと多分そうだよゲーフリ悪くないよ

 

ということで性格値探索に時間がかかるとメソッドがズレやすいってことですね

外野席さんの乱数調整小ネタ.txtの27に書いてあることとも一致しますね

 

すごく大雑把に図解するとこんな感じです

f:id:Blastoise_X:20150218155256p:plain

GBAポケモンは60fpsで描画処理が行われていてこの描画処理にも乱数が使われているので、性格値探索から個体値決定までの間に描画処理による割り込みが入るとメソッドズレを引き起こすということです

 

これを踏まえて過去に報告されたメソッドズレ個体を調べていきます

性格値探索にかかる時間の指標として性格値の再計算回数を用いることで処理時間が近似できますね

1.個体値ズレ - no pain,no gain

f:id:Blastoise_X:20150218155847p:plain

最も右の列に性格値の再計算回数を出力しています

このハスボーは性格値の再計算が84回

 

2.FRLG乱数 ドイツ産 色サファボケンタロス(意地2V?) - no pain,no gain

f:id:Blastoise_X:20150218160111p:plain

これは46回

3.

 

f:id:Blastoise_X:20150218160232p:plain

これは39回

 

というように性格値の再計算回数が約30回を越えるとメソッドズレを起こしてメソッド1からメソッド4になりやすいようです

 

ちなみに

4.Method1個体値ズレのメタモンが出てきたんですが|ゆゆううききのブログ

のように基本がメソッド2のEmでメソッド1が出ることもあります

この個体の性格値再計算回数は0回

メソッド1:LID→HID→HAB→SCD

メソッド2:>LID→HID→スキップ→HAB→SCD

なので性格値探索が早く終わりすぎてスキップの割り込みが入らなかった場合メソッド1になりうるということが考えられます

この仮説を調べるために自分でも性格値再計算回数が0回の個体を狙ってみましたがメソッド2になりました

再計算が0回だからといって必ずメソッド1になるわけではないのでご注意を

 

 

というわけでゲーム内の処理速度がメソッドに影響を与えていることはほぼ確定しました

処理速度が影響するならゲームハードの違いによる処理能力の差も当然影響すると考えられます

使っているのがGBAなのかGBASPなのかDSなのかGCなのか

みなさんご存知のようにGCポケモンボックスではメソッド4が出やすいです

通信するときのラグでもあるんですかね

ハードの違いは誰も注目していないのでデータがないです。僕には調べようがありません

なので気になる人は自分で調査するなり情報共有するなりしてください