なぞのばしょで
色違いアルセウスを乱数調整する
- 乱数調整の基礎 -
ここでは、乱数調整に欠かせない知識について述べて
いきます。すでに乱数調整を行なったことがあり、慣
れている方は読み飛ばしてもらって大丈夫です。
はじめに、ポケモンはプログラムによって作られたゲー
ムですので、野生ポケモンとのエンカウントなど一見
完全にランダムだと思える要素も、実は一定の計算手順
に基づいて生成される「疑似乱数」というものを用いて
管理されています。つまり、この疑似乱数がどのような
規則で生成されるのかさえ分かってしまえば、ユーザー
側は簡単に言うと好き放題できてしまうわけであり、
これを利用して目的のポケモンを捕まえるというのが
いわゆる「乱数調整」と呼ばれるものになります。
初期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」→「お問い合わせ」よりご連絡ください。