自販機からたくさん飲み物が出てくるお話
これはPokémon RNG Advent Calendar 2016 三日目の記事です。みなさんの参加待ってます。
自販機を蹴ったら飲み物が出てくるとかそういう類の話ではないので悪しからず。
続きを読む
エメラルド自販機乱数
BW(5世代)→Pt(4世代)ときてやらないわけにはいかないなぁと思いつつも
余りの難易度の高さから後回しにしていた例のアレをついにやってしまいました。
毎度おなじみのアレです。自販機乱数です。消費税増税で自販機の飲み物の値段も上がるしね、今のうちにね、
今回は前情報としてポケモン情報センター2号館の小ネタ集(2号館-資料集)に確率と、2回連続まで当たるという情報があったので、これにならってやってみました。
まず、専用のプログラムで初期seed:0で当たりが出るフレームを出力。
3世代自販機乱数の難易度を格段にあげている原因のズレ補正ができないという点を和らげるために、当たりが連続してるところを狙います。
プログラムの結果から1205,1207,1210と比較的近くに並んでいる場所が見つかったので、ここを目標にやっていきます。
やっていきますが、まぁ当たりません。
このハズレが操作誤差によるものなのか、狙っているタイミングが違うのかが分かりません。しかも、どのタイミングで判定してるのかすらわかりません。
困ったのでKaphotics先生に教えてもらいました。
すると、「どうぐポケットに しまった! の表示の後だよー」との返事があったので、
色々試した結果、
たまに当たりが出るけど頻度が低すぎるのは後ろの1259Fを引いてるんじゃないか、と思って待機時間を50Fほど早めたところ当たりの頻度が格段に上がったので多分これが原因でしょう。
「おいしいみずが でてきた!」でAを入力した50F後ぐらいが当たり判定のタイミングになっているみたいです。
で、当たるタイミングが分かったわけなので2連続にチャレンジします。
2回目の当たり判定は1回目とは別に行われているようなので、1207F付近のFで当たりを引いた後待機して、2回目のFを狙うという作業になります。
で、調べたところ、1898F,1899Fの連続2Fが当たり判定を満たすということが分かりました。自販機乱数をやってくれと言わんばかりの乱数の並びです。
というわけでやる人はいないだろうけど、実際の調整は
ソフトリセットから1150~60Fほど待機して「おいしいみずが でてきた!」の画面でA
↓
当たりが出れば「あたりだ! もういっぽん おいしいみずが でてきた!」の画面で690Fほど待機してA
という手順になります。あくまで目安であってこの時間設定で必ず成功するわけではないということにはご留意ください。
総試行回数は調査含めて50回程度なので、やりたい人はやってみると面白いと思います。次はFRLGで誰かやりましょう。間違いなく最難関です。
明日公開するとエイプリルフールになりそうだったので今日中に成功して本当によかったです。
第五世代でのMT消費
孵化乱数をするために手動で個体値乱数列を調べる方法として行われていた化石prprで禁止されていたニックネーム画面の挙動を調べてみた。
原点回帰ということで連続個体値が分かりやすいので調査場所はシッポウの化石博物館
1体目を受け取りNN変更画面を表示したのち2体目を受け取ると間に7つのMT消費が確認できた。
新規個体じゃなくてもいいのか気になってヒウンの姓名判断士のところへ行ってNN変更画面を表示して挙動を調べると、NN画面表示1回ごとに
MTが7つ、LCGが2つ消費されている模様
パソコンの消費と変わんねーじゃねーか!
偶数消費できればBWでも効率的なMT消費が期待できただけに残念。
使える場所が限られるのでほぼパソコンの劣化です本当にありがとうございました。
多分これが一番無駄だと思います。
皆様お待たせしました。
ついに、あの乱数が帰ってきました。
第4世代自販機乱数に成功しました。
参考にしました→http://blastoise-x.hatenablog.com/entry/2013/01/28/113411
第4世代で自販機があるのは
DPt・・・トバリデパート5階
のみです。
どの場所を選んでもフロア内に不定NPCが1人ずついるので、NPC消費と闘いながらの調整になります。
自販機で連続して飲み物を買っている間はNPC消費の割り込みが発生しないので、目的消費付近まで来たら飲み物を買って確実に1ずつ消費を進めることもできます。
第4世代の自販機で当たりが出る確率については検索しても出てこなかったので、今回プラチナで調査しました。
結果から言うとr(n) % 64 == 0 のとき、当たりが出ます。
つまり、1/64の確率で当たりが出ます。この情報新規性あると思います。
普通に当てるだけでは面白くないので最高で何連続当たるかを検索したら、どうやら3連続が限界のようです。
3連続当たり→1回失敗→1回当たりという乱数の並びが見つかったので、今回はこのseed列を使うことにしました。
初期seed:0F080701
消費数:48
月×日+分+秒:15 or 271
時:8
フレーム+年-2000:1793
実際の調整手順は
トバリデパート6階のエレベーターの中でレポート
↓
目標時間で起動し、コイントスで初期seed一致確認
↓
エレベーターから出て速やかに自販機を目指し、自販機前でメニューを開く
↓ (ここまででNPCによる消費が4程度生じた)
ペラップの音程で現在位置を把握しつつ、目標消費数まで消費
↓
飲み物を買う
↓
ガコン!あたりだ!
↓
ガコン!あたりだ!
ガコン!あたりだ!
多分これが一番無駄だと思います。
HGSSは調べてないけど多分一緒。
暇な人はHGSSで調べてください。日本全国の自販機乱数愛好家が喜びます。
→Kaphotics先生が調べてくれました
Past Gen RNG Research | Page 43 | Smogon Forums
やっぱり正しかったよ!
第五世代戦闘乱数のお話
ポケモン第五世代の戦闘時における技の命中、急所、追加効果の発生などを決定するために使われる疑似乱数列は第五世代での性格値乱数列と同じ方式のLCGを用いて順次計算されている。
戦闘乱数決定のために使われる乱数列をB(n)とすると
例えば、技の命中判定は
(B(n)>>32)*100>>32
で計算される値が技の命中率より小さいとき、技が命中する。
急所にあたるかどうかは
(B(n)>>32)*16>>32
で判定され、急所ランクが上がっていないときは(B(n)>>32)*16>>32=0ならば急所に当たるという判定が出る。
一般にB(n-1)で技を出した際の処理の流れは
B(n) 命中判定
B(n+1) 急所判定
B(n+2) ダメージ乱数
B(n+3) 追加効果判定
という風に決定され、必中技など判定に乱数を必要としない技ではB(n)で急所判定が行われるなど順に前に詰めて判定が為される。
この処理の順番を知っていると今後起こるであろうことは予測することができる。
調整例について
初期seed:A0CCD3D9C34306CD
で戦闘に入ったとき乱数列上位32bitと100分率の並びは
1 | F51EB9FD | 95 |
2 | C598EBDB | 77 |
3 | 76D8A53B | 46 |
4 | 35C762E3 | 21 |
5 | 165FA8AD | 8 |
6 | 53FDC974 | 32 |
7 | D606FACB | 83 |
8 | 31D768F3 | 19 |
という形であり、ここから予測できることは
・B(1)が95なので、ターンの最初に出される技の命中が95以下の場合外れる
・B(4)が21なので、最初に出した技の命中が100で追加効果が3割以上の場合、追加効果が発生する
・B(5)が8なので、こおりのキバ(ひるみ、氷漬けの効果判定が2つ)が使われた場合、2つ目の効果が発動する
などが挙げられる。
戦闘乱数と言うぐらいなら乱数を3つ消費して一撃技を撃てば当たるだろ、と思うかもしれないが、現状戦闘中に技使用以外で乱数を進める方法は見つかっていないので”戦闘乱数”から想像するようなことは対人戦ではほぼ不可能。
じゃあ戦闘開始時の初期seedを調整すればいい、となるがこの初期seedの決定方法は複雑で、
kaphotics氏によれば起動時の初期seed決定のようにSHA-1ハッシュ化を行っているようだが、メッセージデータが異なっているらしく通常の方法では算出できない。
ktxad氏のブログ2011年2月27日の記事によるとタッチスクリーンの押されている座標らしき値も使われているかもしれないので、実機での調整はほぼ不可能という認識。
ということで、戦闘乱数はなんだかよく分からないし乱数調整もできないという結論。
Twitterとかで戦闘乱数使ってるぜとか言ってる人は情報ください。
【追記】
Kaphotics先生に色々教えてもらいました。
戦闘乱数の初期seed決定には調整できない要素を2~3含んだメッセージデータを使ってました。それが何かを書くことはしません。
エミュレータ以外での初期seedの調整は事実上不可能なので、狙った初期seedを出すという調整はできません。
また、仮に初期seedが調整できたとしても、Wi-Fi対戦時には何らかの要因で初期seedが変更され別の初期seedで戦闘が進む場合があります。pokecheckでいう"broken"状態です。
こうなってしまうと例え初期seedを知ったところで、全く無意味な値に為り下がるため、戦闘乱数調整はできません。"broken"の原因についてはKaphotics氏も分からないとのこと。
結論:
戦闘乱数なんてできないからマトモにバトルしようネ~♪
アベニューについて
・日付が変わったとき、または日付が変わって最初に起動したとき
大量発生の場所
JAの翌日の客
JAの翌日のくじ引きの商品(2回目の商品も決まっている)
ーーーーーーーー
オフセット計算して初回起動時のLCG消費を調べてみたけど大量発生場所決定以外に消費はなかった
MTについてはまだ調べてない
ーーーーーーーー
・JAに入ったとき
客を案内するときのセリフ
客を案内して連鎖するかどうか
くじ引き屋を建てる客の商品
ーーーーーーーー
ここの客の商品決定がdoraraさんの検証と食い違ってる…?
自分で調べて検証した情報じゃないので詳細は不明
ーーーーーーーー
・くじ引き屋の商品決定の割り当ての分母は8192?付近
ーーーーーーーー
予想としては1等が当たる確率がランク1では1/8192でランクが上がるごとに
分子が増えていきランク10では10/8192になりそう
ーーーーーーーー
・ランク上げたときの商品に関しては同じ乱数値を使ってるらしくうまく調整すればランクを上げた全ての店で1等を貰うことは可能らしい
一応、今持ち得る情報はこんな感じ
この記事を情報交換の場に使ってもらっても構いませんよ(ゲス顔
おまじないパワー+,++使用時エンカウントスロット
おまじないパワー+++なんてまだ出てないよ!って方のために
若干未検証の部分が残ってるけどいくつかのデータから推測するにこんな感じ
波乗り、釣りに関してはめんどくさいので調べてない
+++の場合と違って性格値の再計算はされないので注意