ポケモンHGSSクチバジムゴミ箱乱数調整の仕組みと調査方法について
ツイート
1.はじめに
この記事はPokémon RNG Advent Calendar 2017 16日目の記事です。ポケモン or 乱数に関することについて記事を書くAdvent Calendarです。
他の方々の記事もとても面白いので興味がある人はぜひ読んでみてください。
今回は、HGSSのクチバジムにあるゴミ箱の仕組みと、その仕組みを解明するために行った手順を記載します。
↓これです↓
乱数調整が何かわからない、手順に沿って行っているが深く考えたことがない人を主なターゲットとしています。
私自身、どういう風に調査すればいいのか最初はわからず、なかなか手を付けることができなかったため、同じ悩みを持っている人がいる(?)と願ってこの記事を書きます。
乱数調整の仕組みを解明する手順は今回のゴミ箱に限らず、どの世代どの乱数調整でもある程度共通します。
この機会に私の知っている乱数調整の基本的な仕組みや、考え方等を少しでも共有できればと思います。
2.調査
今回、調査を行うゴミ箱の仕様・見える情報は以下の通りです。
仕様
・ゴミ箱が縦3、横5で合計15個配置されている
・動かないNPCが5人いる
・ゴミ箱のスイッチを2個連続で当てるとマチスへの道が開く
・1つ目のスイッチはゴミ箱15個の中からランダム
・2つ目のスイッチは1つ目のスイッチに隣接した上下左右どこかにある
ここで、出来る予想は
ジムに入った瞬間、スイッチの位置が決定されているであろうこと
(このタイミングでないと計算するタイミングがない)
2個目のスイッチは1個目の直後の乱数もしくはその付近で決定されているであろうこと
(その間に別の乱数を発生させる要素が思いつかない)
ゴミ箱は左上から横もしくは縦の順番に内部番号が振られているであろうこと
(バラバラだと作る側も管理が難しい上にそうする必要がない)
NPCが動かないのでNPCによる消費はなさそう。
(振り向いたりしている場合は、振り向く方向と次に振り向く方向が決定されるはずなので注意)
使われている疑似乱数の種類は不明だが、恐らくHGSSで他の処理にも使われているLCGかMT
とりあえずよく利用されるLCGを検索
HGSSの他処理と同じでおそらく乱数値を割った余りによって結果が決められていると予想
この条件でツールを組んでみます。
3.プログラムを組んでみる
1つ目のスイッチは15で割った余りが左上から割り振られていると予想2つ目のスイッチは1つ目のゴミ箱位置決定直後の乱数を上下左右にあるゴミ箱の数で割った余りと予想
方向の内部番号は適当に左が0、上が1、右が2、下が3と仮定し、その場所にゴミ箱が存在しない場合は数値は次の方角に持ち越しと予想。
(例:上下左右にゴミ箱がある場合は上記通り、左上にゴミ箱がある場合は左と上を飛ばして右が0、下が1になると予想)
プログラムは不得意なので、わかる範囲で記述した。
とりあえず動かしてみます。
4.使用してみる→デバックを行う
まず、ジムに入った状態でゲームを起動してしまうと、スイッチの位置が前回のセーブ時の位置で保存されてしまっているため、ジムの外でレポート。(これを書いていて気が付いたが、中でレポート→保存された場所の2個目のスイッチをわざと間違えることで変な消費が挟まってないか検証できたな)
ゲームを起動し、ジム内に入る。
徘徊ポケモンの位置を確認し、初期seedを特定
ウツギ博士もしくはジャグラーのマイク等に電話をして、どこまで消費が行われているか確認
電話でseedの現在位置を特定することで、電話の直前のseedで2個目のスイッチ、その1つ前で1つ目のスイッチの場所が決定されたと思われるseedを特定
とりあえず、15で割った余りのゴミ箱に話しかけてみる。
↓自分ならこう作るだろうなと思い、番号を仮決定した↓
見事に正解
何度か試したが、毎回思った通りの結果が返ってきたため、予想は的中と判断。
2個目のゴミ箱も予想通り、左から時計回りに0~4の番号が振られているようだ。
これで完成したと思われたが、例外が発生
まぁプログラムはこうじゃないと面白くない(?)。
1つ目のスイッチが一番右の列(上の画像で言うと04、09、14)になった時だけ、2個目のスイッチを外してしまう。
とりあえず、割った余りの数と、正解位置不正位置をメモして何個かデータを取ると、どうやら余りが0の時、左スタートではなく、上スタートで時計回りに番号が振られているようだった
(他のスイッチは左が0で時計回りに0~3、右端だけ上が0になり下が1、左が2になっていた ※右はゴミ箱がないのでスキップ)
とりあえずプログラムも書き換えてさらにデータ収集を続けます。
勝手にゲームフリーク側のミスなんじゃないかと思い込んでいますが、こういう理由があるよと気が付いた人は連絡ください。
気になって夜以外も寝てしまいます。
これ以外は特に例外も発生しなかったため、ここでこのツールを完成とします。
5.最後に
ゲームは人が作ったもので、処理には何かしらの理由があると思います。一つ一つ考え、予想をすれば同じ人間が作ったものなのである程度、仕組みの割り出しはできると思います。
もしも、自分が作るならこういう仕組みにするなと考えて、実際にその通りに動くと面白いものです。
ちなみに4世代の乱数調査にはPHSの「実験用」タブが便利です。seedを割った余りなどはツールを組まなくても表示してくれます。
seedや余りの分母を入れて実行するとあまり等が表示されてとても便利です。
乱数調整に興味がある人はぜひ色々な場所を調査してみましょう。
最初は新規開拓せずとも、このページと同じ仕様のツールを組んでみて、同じ結果が得られるかなどでも練習になると思います。
ソースコードがほしい物好きは連絡ください。
今回紹介したツールは以下のページで配布しているので、暇な人は遊んでみてください。
http://co291424.com/tool/_GOMI_z.php
このカレンダー等を通じて、一人でも多くの人が乱数調整に興味を持って下されば幸いです。
明日の投稿者は〇〇さんです!ってやろうと思ったんですが、16日時点で明日の予定の人がいなかったため予約しました。
おそらく7世代のことを書きます。
明日の投稿者は「@_Gon_z」さんです!
HGSSクチバジムスイッチ位置特定ツールを作成しました。初期seedを入れると消費数とスイッチの位置を表示してくれます。役には立ちません。(動画は無音です。)https://t.co/dsLFrmkpCR #co291424 @_Gon_zさんから(ポケモンひみつきち) pic.twitter.com/L1GxfdYnRB
— ごんぜっと (@_Gon_z) 2017年8月3日
ツイート