1. 乱数調整の基礎

ここでは、乱数調整に欠かせない知識について述べて

いきます。すでに乱数調整を行なったことがあり、慣

れている方は読み飛ばしてもらって大丈夫です。


はじめに、ポケモンはプログラムによって作られたゲー

ムですので、野生ポケモンとのエンカウントなど一見

完全にランダムだと思える要素も、実は一定の計算手順

に基づいて生成される「疑似乱数」というものを用いて

管理されています。つまり、この疑似乱数がどのような

規則で生成されるのかさえ分かってしまえば、ユーザー

側は簡単に言うと好き放題できてしまうわけであり、

これを利用して目的のポケモンを捕まえるというのが

いわゆる「乱数調整」と呼ばれるものになります。


初期seedについて

早速ですが、ダイパでは「初期seed」と呼ばれるもの

によって先ほど説明した疑似乱数が決定され、ゲームが

開始します。この初期seedに応じて出現するポケモンの

テーブルが確定されるため、目的の個体を入手したい

場合、初期seedを正確に合わせてゲームを開始する

必要があります。ダイパの場合、初期seedは以下の

計算式によって決定されます。

初期seed: 0xABCDEFGH

・0x:  16進数表示を表す記号
・AB:  月 × 日 + 分 + 秒
 (AB + 256 を 月 × 日 + 分 + 秒
  にしてもよい)
・CD:  時
・EFGH: 経過フレーム + 年 - 2000

ここで、上記の年、月、日、時、分、秒は、すべて

「つづきからはじめる」を押す瞬間のものとなります。

また、「経過フレーム」とは、ゲーム起動(ホーム画面

でソフトを選択後、画面が暗くなった瞬間)から

「つづきからはじめる」を押すまでに要する時間のこと

です。そして16進数についてですが、10進数と以下の

表のように対応しています。

変換表
16進数 0 1 2 3 4 5 6 7 8 9 a b c d e f
10進数 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

時刻の計算方法について

次に、初期seedから実際にゲーム開始時刻を求める例を

示します。ここでは、以下の初期seedを用いることにし

ます。

初期seed: 0xd2140289

これを先ほど説明した各要素に分解すると次のように

なります。

・月 × 日 + 分 + 秒: 0xd2 = 16×13 + 1×2
            = 210
   または、210 + 256 = 466

   (dは10進数で13となります。また、16進数

    では桁上がりが10ではなく、16であること

    に注意してください。 つまり、10進数が

    1の位、10の位、100の位…と増えていく

    のに対し、16進数では1の位、16の位、

    256の位…と増えていくことになります。)

・時: 0x14 = 16×1 + 1×4 = 20

・経過フレーム + 年 - 2000:
 0x0289
  = 4096×0 + 256×2 + 16×8 + 1×9
  = 649
→ 経過フレーム = 649 + 2000 - 年
         = 2649 - 年

以上より、年 = 2049と設定すると、

 経過フレーム = 2649 - 2049 = 600[F]

となります。

ダイパのフレームレートは60[fps]、つまり1秒間に60

回画面が切り替わるので、600[F]は600 ÷ 60 = 10[秒]

となります。これで、ゲームが起動してから「つづき

からはじめる」を押すまでに10秒経過させなければ

ならないことがわかりました。

ここで、初期seedを合わせるにあたって重要な要素と

なる空白時間について説明します。DS Liteのホーム

画面でゲームを選択してからゲームが起動するまでに、

画面が真っ白な状態が数秒間続くのですが、これが空白

時間となります。空白時間にはROMごとに差があるので

個別に測る必要がありますが、ここでは平均的な値と

言われる4[秒]を空白時間としたいと思います。

これで、DS Liteのホーム画面で「ダイヤモンド」を

選択してから「つづきからはじめる」を押すまでに

10 + 4 = 14[秒]経過させなければならないことが

わかりました。

DS Liteで時間を設定してから、ホーム画面でソフトを

選択できるようになるまでには、数秒の時間がかかりま

す(物理的な問題)。よってここでは、日付時間を設定し

てからソフトを選択するまで10秒待機することとしま

す。

長くなりましたが、ここまでをまとめると、時間を設定

してから「つづきからはじめる」を押すまでに合計24秒

の時間を経過させる必要があります。よって、秒 = 24

と求まりました。月 × 日 + 分 + 24 = 210 (or 466)

ですので、月 = 8、日 = 20、分 = 26とします。これら

の値は等式を満たしていればどのように決定しても問題

ありません。

(結果)
 2049年 8月20日 20時26分 00秒
          に時間を設定

 2049年 8月20日 20時26分 10秒
          にソフト選択
   (ストップウォッチ起動)

 2049年 8月20日 20時26分 14秒
       にゲーム起動(自動)
   (ストップウォッチ: 4秒)

 2049年 8月20日 20時26分 24秒
     に「つづきからはじめる」
   (ストップウォッチ: 14秒)

※ 時間の計測にはストップウォッチを使うことを推奨

  します。「つづきからはじめる」を押すタイミング

  は完全に目押しとなるので、ストップウォッチで計

  測する時間が整数になるように年を調整することが

  ポイントです。(空白時間 + 経過フレームの合計

  フレーム数が60の倍数となるように年を決めると

  成功しやすくなります)

奇数ずれについて

先ほどダイパは60[fps]であると言いましたが、実際は2

フレームずつ画面が切り替わっています。しかし初期

seedは上の式からもわかるように1フレームごとに決まっ

ているため、完璧なタイミングで「つづきからはじめ

る」を押しても狙いの初期seedと一つずれた初期seedで

ゲームが開始してしまうことが起こり得ます。この現象

を「奇数ずれ」と言います。奇数ずれが起こっている

あいだは、どんなに頑張っても狙いの初期seedでゲーム

を開始することができないので、年を±1する必要があり

ます。(上の例なら、2048年か2050年にする)

ちなみに、初期seedが目的のものとどれくらいずれてい

るかは、ポケッチアプリ「コイントス」を利用して調べ

ることができます。目的の初期seedから奇数個ずれてい

た場合、奇数ずれを起こしていることになります。

乱数消費について

ここからは、乱数調整を行なう上で初期seedとともに

欠かせない要素である乱数消費について説明していき

ます。初期seedを決定すれば、出現するポケモンのテー

ブルが固定されると言いましたが、そのテーブル上の

どのポケモンが出現するかはまだ未確定です。そこで、

テーブル内の狙いのポケモンを出現させるために行なう

のが乱数消費です。例えば、テーブルが以下のように

なっているとします。

消費乱数: 0  アルセウス  おくびょう
消費乱数: 1  アルセウス  ひかえめ
消費乱数: 2  アルセウス  いじっぱり
消費乱数: 3  アルセウス  ようき

この時、いじっぱりのアルセウスが狙いだとすると、乱

数を2消費する必要があります。乱数を消費する方法は

いろいろありますが、ここではその一部のみ紹介したい

と思います。

・ぼうけんノートの「○○をたおした」、
 「○○をつかまえた」と書かれている
 ページを見るたびに、2消費
・128歩進むごとに手持ちのポケモンの数 ×1
 消費
・技「おしゃべり」で声を覚えさせたペラップ
 のステータス画面を開くたびに1消費
・マップ上のNPCが動くたびに自動で消費
 (どうしようもない)

以上で、乱数調整の基礎編は終わりです。ここで説明し

たのは色違いのアルセウスを捕獲するために必要となる

最低限の知識だけですので、乱数調整についてより詳し

く知りたい方は、

「ヤドンでもできるポケモン乱数調整」※

などのサイトを参考にすると良いかと思います。

※ 追記 (2023/11/27)

「ヤドンでもできるポケモン乱数調整」は、

2023年11月23日をもって公開終了となったため、

設置していたリンクも削除いたしました。

本ページの内容についてご質問等ある場合は、

「MENU」→「お問い合わせ」よりご連絡ください。