ポケモンバンクのサービス終了が宣言されたので放置していた北米版ポケモンコロシアムの色違いジラーチの出し方(原理と乱数調整)を調べてみた。
error-astray.hatenablog.com
…ところでこれ持ってる人日本に何人いるんでしょうか?1000人といない気がする…。
なお、タイトルの結論を先に言っておくと「試行回数が稼げないから&使われている乱数が特殊で色違いが絶対に出ない時があるから」です。
まずは「色違いブロックルーチンが無いから厳選すれば出る」という考えは捨てて原理を知って考える必要があります。
究極的には「普通の厳選手順で出うるのか?」という話になってくるのですが…論文レベルなのでそこまでは触れません。
WISHMKRジラーチとは?
北米版ポケモンコロシアムの特典ディスクで入手することができるジラーチの事。親名がWISHMKRなのでそう呼ばれています。
いわゆる色違いブロックルーチン(色違いが出ない仕様)がないので色違いが出せます。
このジラーチの受け取りには図鑑入手まで進めた北米版ルビー・サファイアが必要です。
受け取れるのは1セーブにつき1匹です。送れる回数の方は制限なし、北米版コロシアムのセーブ(メモリーカード)は必要ありません。
きのみ問題修理プログラムを兼ねていますが修整済みの後期版ロムでも受け取れます。電池切れのロムもOKです。
北米版ゲームキューブ(以下GC)ソフトの起動には北米版GCが必要ですが、日本版GCを改造すれば起動可能になります(ある個所にスイッチを1個付けるだけなので何時でも日本版に戻せます。メモリーカードは初期化すれば日本のが使えます)。
特殊な乱数(チェックサム)とは?
通常ポケモンの生成に使われる乱数は
0x00000000~0xFFFFFFFF(0~4294967295の4294967296通り)の範囲ですが
WISHMKRジラーチに使われる乱数=チェックサムは
0x00000000~0x0000FFFF(0~65535の65536通り)しかなく、
この為に入手可能な色違いは9通りしか存在しません(性格値+個体値の組み合わせが9通り)。
9/65536=1/7281.78と言うと通常の色違い確率1/8192より良く見えますが、1回受け取るのに8分程かかる訳ですから実際は何倍も大変です。
加えて後述のように「65536通りの値が均等に出る」とは正直言い難いです。出ないとは言えませんが「普通の厳選手順で出うるのか?」は別途検証が必要です。
チェックサムは何が違う?
通常の乱数は例えるなら「乱数を入れると乱数が出てくる箱」によって作られます。
この箱がmethod1~4と呼ばれるもので、method1であれば「乱数※初回のみ初期seed * 0x41C64E6D + 0x6073 の下位8バイト = 次の乱数」という計算式になっており、これを1F(1/60秒)毎に1回行って乱数を作っています。
これで何が言いたいかというと「通常の乱数は1F毎に範囲内で大きく変化する」という事。規則性はあれど正しくランダムなので乱数調整なしでも乱数の偏りを気にせず厳選ができます。
対してチェックサムは「GBAソフトのレポート時に生成される値」です。これをジラーチの受け取り時にGC側で読み取って性格値・個体値を決めています。
その決まり方に関して…はプログラムが見れないのでrschecksum.exeの計算結果からの推測になりますが「トレーナー名、性別、ID、設定した時刻、見つけたポケモンと種類、プレイ時間※F単位、各種設定」から決まります。
普通に厳選して同じになることはまず無いですが、通常の乱数と異なり「チェックサムは1F毎に最小1しか変化せず、行動を変えなければ偏った乱数しか出ない」ので「ID決定時点で色違いが出る可能性がない」という事が起きます。
スロットで例えるなら目をつぶって押すのと、リール(絵柄の配置)を理解して目押しする位変わってきます。
…元より乱数調整自体がそういうものではありますが…チェックサムは乱数調整ありでも目標値が出ないという状況が多々あることから「普通の厳選手順で出すのはかなり厳しい」と感じます。
メモ
色違いとなるチェックサム9種(0x省略):F500(しんちょう)、ECDD(すなお)、CF37(ようき)、A030(やんちゃ)、9359(せっかち)、7360(まじめ)、7236(さみしがり)、3D60(おくびょう)、353D(てれや)
RSのID調整には時計用電池の切れたソフトが必要です(初期seedは日本/北米共通で0x5a0固定)。
RSのIDは「Well,I'll be expecting you latter.Come see me in my POKeMON LAB.(~けんきゅうじょで まって いるぞ!)」でAボタンを押した時に決まります。↓
乱数252振りする人向けのポケモン乱数調整 【RS(3世代)】固定を色にするID調整【電池切れROM】
3genSearchで検索可能、ID調整タブで3600F(起動から1分)~4000F位で計算して探します。
条件によるチェックサム値の変化は以下の通り。
トレーナー名:不明※文字数で減る、
性別:女は+1、
ID:表/裏共に1につき+1、
設定した時刻:0時0分を0とすると*時0分は+23程で*時1~59分は+3C16程、
見つけたポケモンと種類:御三家はミズゴロウ前提でジグザグマで+0x40・ケムッソで+0x100・キャモメで+0x20
プレイ時間:秒は1につき+0x0100(=256)、分と秒は1につき+1、
操作モード:LR基準でNORMALは-0x100でL=Aは+0x100
フレーム(装飾):TYPE番号+1につき+8
以上。
チェックサム乱数調整の手順
調整に使うツールには「rschecksum」や「RubySapphireChecksumCalculator」があります。
「rschecksum」サイトは消滅していますがアーカイブhttps://web.archive.org/web/20160620183405/http://www.geocities.jp/ginzaru_xd/の「rschecksum_v100.zip」からダウンロードできます。…が機能的に「RubySapphireChecksumCalculator」が上位互換です。下記のページにリンクがあります。
dokudenpa.hatenablog.jp
(全ての操作を自動でやってくれる「ジラーチ乱数完全自動化」もあったのですが現在は公開されていないので使えません。)
設定の見つけ方は、まず「RubySapphireChecksumCalculator」を起動。虫眼鏡マークを押して「ID検索」ウインドウを開きます。初期seedのラジオボタンを0xの方にして「5A0」と入力、消費数を5000~5060F(適当で良いが約4400F以上でないと出来ない)にして計算を押す、適当に行番号を選びダブルクリックすると「RubySapphireChecksumCalculator」のID/裏ID欄にコピーされるのでを目標に近いものを探し、プレイ時間を変えて目標値に調整します。※後の調整に使うのでフレーム(装飾)は13以上にしたい所。
CF37(ようき)の設定例が↓

これを例としてチェックサム調整の手順を書くと
0.セーブを削除(スタート画面で↑+SELECT+B)
1.ソフトリセット(A+B+START+SELECT)と同時にタイマースタート
2.設定をSPEED「FAST」SCENE「OFF」MODE「LR」に変更して「NEW GAME」を選択
3. 性別「男」・トレーナー名「A」を入手し「~POKeMON LAB.」で待機
4.タイマーが5009F(1分23.48秒)になったらAで開始
(トラックでメニューを開きトレーナーカードを確認し)ここでID「44568」が出るようにタイマーを止める時間を調整する。1に戻る
調整して目標ID「44568」が出たら次へ。
5.時計はデフォルトの10:00で「YES」、隣の家に行き、2Fのハルカを話す、外に出て、上へ行き、ミズゴロウを選択して博士を助ける、研究所で質問に「NO」「YES」、外に出て、上へ行き、街を通過、上へ行き、(プレイ時間の安定の為にここまでの野生ポケモンと遭遇した回数が4回になるよう調整 ※ここ不要かも)、ハルカとバトル、研究所に戻り、図鑑を貰う
6.設定を「ケムッソに会ってたら操作モードをNORMAL」「ジグザグマに会ってたらフレーム(装飾)を5」「キャモメに会ってたらフレーム(装飾)を9(ジグザグマと両方なら1)」「3種に会っていない(ポチエナのみ)ならフレーム(装飾)を15」に変更(大体ここまで6分)
7.トレーナーカードのプレイ時間を見て「分」が変わったらストップウォッチをスタート(分が変わるのは点滅する「:」が消える瞬間)、レポートの「YES」にカーソルを合わせて待機(初回セーブだと上書き警告がない)
8.ストップウォッチの時間を参考にプレイ時間が10分14秒28FになったらAを押してでレポートを書く
9.特典ディスクでジラーチを貰う
10.個体値をある程度調べ(薬なしでLv25に上げて分かる位)、「3genSearch」を起動、固定タブを選び、バージョンをFRかLGに、初期seedに05A0と入力、全検索にチェックを入れ、Fは0~0、目標も0、個体値を入力し「計算」、出力された中にあるseedが0x0000????なのが今回のチェックサムです
仮にここで「DF52」なら0xDF52-0xDF39=0x0019=25減らしたいので、次回は-25F=0.42秒早くレポートする。0に戻る
あとはひたすら調整/試行を色違いが出るまで繰り返します。
ちなみに個体値生成は通常[性格値下位]→[性格値上位]→[HAB個体値]→[CDS個体値]ですがWISHMKRジラーチは[性格値上位]→[性格値下位]→[HAB個体値]→[CDS個体値]の順番で乱数を使う特殊な仕様となっています(3genSearchでの検索は上記の通りで影響なし)。詳細はWISHMKR&CHANNELジラーチの基本情報及び個体検索 - 哀しき獣の村
マクロコンで精度を上げる方法
・必要な道具
「ゲームキューブ+ゲームボーイプレーヤー+GC用BluRetoro+マクロコンCHOCO」あと任意でGBI
・準備
「マクロコンCHOCO」アプリのレコーディング機能で、
「マクロ1」に「手順1~4」を登録、実行して出たIDから最後にAを押すタイミングを調整して目標のIDが出るようにする(約1/3の確率で成功するようになる)。
「マクロ2」には「手順7~8(B↓AAA)」を登録。最後のAを押すまでが計算上「74466ms=1分14秒28F」になるよう調整。
・手順
「マクロ1」を実行して目標ID「44568」が出たら「手順5~6」を行い、レポートを書く。
(ここは休憩用なので飛ばしても良い)トレーナーカードのプレイ時間を見て「分」が変わったらストップウォッチをスタートさせ、レポートの「YES(2回目)」にカーソルを合わせて待機(2度目のセーブは上書き警告があるので注意)、プレイ時間が8分40秒Fになったらレポートを書く。
トレーナーカードのプレイ時間を見て「分」が変わったら「マクロ2」を実行してレポートを書く。個体値を調べチェックサムを出す(手順10)、ズレに応じて「マクロ2」で最後にAを押すタイミングを調整する。
・効果
「マクロ2」を実行するタイミング以外の精度が上がり、成功率が上がる。
(「マクロ2」なしだと私の場合は30回程やってやっと成功でした…)
・課題
GC1台だとディスク交換でBluetooth接続が切れるのが面倒なので2台欲しい。機材代がかさむ。