1.はじめに
この記事は Pokémon Past Generation Advent Calendar 2024 の17日目の記事です。
ポケモン3世代ではゴージャスボールが非売品です。RSEにおいては、コンテストのマスターランクを周回することで集めることができます。一方、FRLGではゴージャスリゾートにいるアキホが指定するポケモンを見せることで、報酬としてゴージャスボールをもらうことができ、こちらはコンテストよりも効率が良いですが、あまり利用されていないようです。

利用としては、アキホが要求するポケモンは250歩以内に見せなければ、別のポケモンを見せるように要求してきます。そのため、多くの種類のポケモンを用意しておく必要があります。
また、乱数調整で要求するポケモンを制御する手法も提案されておりましたが、「どのSeedでどのポケモンが指定されるか」といった具体的な情報は現時点でほぼ知られておらず、実際に乱数調整を行う場合には、各自で調査を行う必要があります。この調査自体も手間を要するため、結局は利用するプレイヤーが限られているのが現状です。
今回は、アキホの要求するポケモンや報酬アイテムに関する乱数処理を解説するとともに、乱数調整を行うためのツールを紹介します。また、効率的にゴージャスボールを収集するための自動化プログラムについても作成しました。
2.ポケモン&アイテム決定の乱数処理
ツールや自動化プログラムの紹介に先立ち、乱数処理から解説します。
ポケモンの乱数処理
大前提として、3世代のポケモンにはそれぞれ全国図鑑とは別に、0001 から 019B までの内部コードが割り当てられています。ただし、00FC から 0114 の合計25つの内部コードはダミーのため、実際にはポケモンが割り当てられておらず、実際の全国図鑑386に対して、合計411の内部コードが存在します。アキホから要求されるポケモンは、(乱数値 % 410)+1 で 0001 ~ 019B の範囲で内部コードを取得し、内部コードに対応するポケモンが全国図鑑に登録されていた場合はそのポケモンが選ばれます。
登録されていない場合は次の乱数を使って再試行しますが、100回繰り返しても登録済みのポケモンが見つからない場合は、登録済みのポケモンを逆順で検索します。(こちらの処理は、ほぼ起こりえませんが...。)
ここで重要なのが、図鑑に登録されていない場合は次の乱数が計算に使われる点です。
例えば、初期Seedが 0x0827 の場合で、各フレームに対応するポケモンが以下のようになるとします。
・1000F → サマヨール
・1001F → ムウマ
・1002F → ヌオー
ただし、サマヨールとムウマが図鑑に登録されていないと仮定します。
1000F でポケモン決定の処理が走る場合は、サマヨールは図鑑に未登録のため、次の乱数(1001F)が使用されます。次に、ムウマ(1001F)も未登録のため、さらに次の乱数(1002F)に進みます。最終的に、ヌオー(1002F)が図鑑に登録されているため、これが選ばれます。この結果、1000~1002F のいずれを引いた場合でも、最終的にヌオーが選ばれることになります。
この乱数処理のおかげで、未登録ポケモンが多ければ多いほど、同じポケモンが連続したフレームで選ばれやすいということになります。なお、ダミーコード(00FC ~ 0114)を引いた場合は対応するポケモンが設けられておりませんので、必ず再試行されます。
アイテムの乱数処理
こちらはポケモンよりも単純です。(乱数値 % 100)が30以上であればゴージャスボールが選ばれます。これは70%の確率で、ゴージャスボールが選ばれるということで、他のアイテムよりも高確率です。(乱数値 % 100)が0~29の場合は、(乱数値 % 6)に対応するアイテムが選ばれます。
| 乱数値 % 6 | 貰えるアイテム |
|---|---|
| 0 | おおきなしんじゅ |
| 1 | しんじゅ |
| 2 | ほしのすな |
| 3 | ほしのかけら |
| 4 | きんのたま |
| 5 | ふしぎなアメ |
ポケモンが決定された後にアイテムの処理が走るため、ポケモンが連続する場合は、アイテムも連続するのも嬉しい要素です。
3.アキホおねだり破壊ツール
前述した乱数処理を元にツールを組みました。図鑑の登録状況、初期Seed、フレームを設定することで、アキホから要求されるポケモンと貰えるアイテムを計算します。以下のGoogleドライブから入手して下さい。
★ アキホおねだり破壊ツール ★

使い方
① ゲーム内の図鑑と登録状況が同じになるように、右下のチェックボックスで登録状況を設定する。
② 初期Seed(16進数)とフレームの検索範囲を入力する。
③ 「実行」をクリックすると結果が画面に出力される。
結果出力ボックス
計算したポケモンとアイテムを出力するボックスです。同じポケモンとアイテムが5連続する箇所は水色セルで強調表示されます。
図鑑登録状況
ゲーム内の図鑑登録状況を計算に反映させます。「保存」ボタンをクリックすると、同一ディレクトリに「Pokedex.txt」が出力されます。起動時に「Pokedex.txt」がディレクトリ内に存在する場合、登録状況を読み取って反映します。初期設定ではストーリー自動化クリア後の普遍的な図鑑登録状況を元に136匹登録済みにしています。
検索設定
初期Seedと検索フレーム範囲を設定します。検索範囲の上限は5000Fとしています。「連続するとこ計算するやつ」を押下すると、初期Seedが5連続&ポケモンとアイテムも5連続の条件を満たす区間のみ出力します。
4.アキホおねだり自動化プログラム
ツールと同じフォルダに保存しておりますので、そこから入手して下さい。NX Macro Controller用の自動化プログラムですので、GC(GBA)自動化を導入していないという方はこちらの記事を参考にしましょう。
ゲームでの準備
プログラムの実行にあたっては、ゲーム側においては以下の準備をして下さい。
・ ゲームボーイプレイヤーの画面設定を「フル」にする。
・ 設定で「はなしの はやさ」を「はやい」にする。
・手持ちに要求されるポケモンを入れておく。
プログラムの開始位置は「ゴージャスリゾート」のアキホの目の前となります。

NX Macro Controllerでの設定
・「Var Frame1」に初期Seed決定フレームを入力する。(初期Seedリスト)
・「Var Frame2」にポケモン決定フレームを入力する。
「Var TargetItem」と「Var Item」を設定した場合は目標数に到達した際に、LINE通知してプログラムを停止します。無限ループさせたいなら設定不要です。また、「Var KeyInput」を有効にすると、キー入力してくれます。
実際に動かしてるところはこんな感じです。フレーム設定にもよりますが、1回あたり1分30秒くらいです。初期Seedとポケモン決定フレームに±2Fの猶予を設けた場合、一度もフレーム合わせに失敗しませんでした。(3回くらいリセットに失敗してますが、解消済みです。)
コンテスト周回よりはるかに効率が良く、1日放置するだけで1000個以上のゴージャスボールを収集できるほどの効率も実現可能です。うまくSeedを見繕えば、換金アイテムやふしぎなアメを手に入れられる点も魅力的です。
5.おわりに
乱数調整用のツールを公開する機会は過去になかったので、UIや乱数処理の実装等なかなか良い経験になりました。と、いいつつも3世代のツールはかなり充実しているので、最初で最後の機会になるかもしれません。
これでFRLGのゴージャスボール問題は解決しましたが、プレミアボール、ネストボール、ネットボール、ダイブボールをRSEからポケモンボックスで効率よく輸送するには、ポケモン100種類捕獲が条件となっています。私は乱数の自動化が専門ですので、ストーリー自動化プログラムに図鑑埋めオプションを追加していただきたいですね(圧)