ポケウォーカー乱数調整の関連情報まとめ

はじめに

長らくシリーズが続いてきたポケモンですが、ポケウォーカーの乱数処理についてはきちんと情報をまとめたページが存在せず、ポケモンWikiの編集人や乱数調整界隈でもケアできていないご様子。多くの情報を相手に活躍する方々に敬意を表して、その一助になればと情報をまとめることとしました。

今回書く内容を簡単にまとめると次のようなものです。

  • 10年前の時点で明らかになっている情報をまとめたものです。新しい情報は何らありません。
  • ポケウォーカーで捕獲したポケモンHGSSへ送るときの個体決定の仕組みが分かります。
  • ウワサ程度でしか話されていない「ポケウォーカーで色違いが出るのか」というお話はします。
  • 2010年2〜3月で確立された個別seed調整法(いわゆる「新方式」)とそれ以前に行われていた一括seed調整法(敢えて区別するなら「旧方式」)の2種の違いについても解説します。
  • 乱数調整の過程で用いる具体的なデータ(有用な初期seedや設定日時)や操作方法(何を何回、どの手順で行うか)については掲載しません。ご自身で算出してください。

以上をご理解いただいた上でお読みくださいませ。

性格値決定の仕組み

ポケウォーカーの個体決定で特徴的なのは、初期seed性格値の仕組みになります。初期seedはさして複雑ではないので後回しにするとして、まずは性格値について述べていきます。

性格値の特徴

ポケウォーカーで新規獲得した個体(以下「ポケウォーカー産」)は、その性格値が以下のデータに従って一意に決まります。

  • その個体の親となるトレーナーのID(TID)裏ID(SID)
  • その種族の♂♀比を決める性別閾値
  • コースごとに決まっている出現する性別
  • 孵化乱数(MT)によって決まる性格

このうちランダム要素があるのは性格のみとなります。性格は0〜23の値で表されるものです。よって、1人のトレーナーが獲得できる個体の性格値もたった24種類しかありません。そのため、同じ種族・同じ性別の場合、1つのセーブデータ(TID, SID)で2種類の特性が手に入ることがないのです。トレーナーのIDと裏IDが変われば異なる特性になることはあるので、ポケウォーカーの乱数調整ではゴンベ♂の勇敢の特性が「あついしぼう」か「めんえき」かの違いでセーブデータに当たり外れがある扱いでした。

性格値の決定方法

ポケウォーカー産の性格値は、最初に基本性格値を求めてから各種補正を施す仕組みとなっています。なお、表記を簡略化するために式中の「>>」は論理右シフトを表し、数値は32ビットであることとします。

基本性格値の上位8ビット X
X = { (TID xor  SID) >> 8 } xor 0xFF
  = (TID >> 8) xor (SID >> 8) xor 0xFF

基本性格値の上位2桁(16進数)はTIDとSIDから決まります。 単純な式ではありますが、後述の色違い判定では大きな意味を持つ式です。

性格因子 Nature Factor / NF
NF = MT % 24

孵化乱数(MT)24で割った数値*1を性格決定に利用します。

NFは0〜23の数値となり、後述の補正をかけても必ずNFに対応した性格になるように調整されています。

NFと性格の対応関係は、他の個体決定でも使われている一般的なもの*2です。しかし、性格は25種(0〜24)あります。結果として24に対応する「きまぐれ」は出現しない仕組みとなっています。

基本性格値 Base ID / BID
X' = (X << 24)
BID = X' - (X' % 25) + NF

上位2桁をX、残り6桁を0とした数値X'を用意します。この数値をそのまま使うとNFに応じた性格になりません。これを補正するために25の倍数になるように「X' % 25」で減算し、さらに「NF」を加算します。
性別不明や♂のみ・♀のみの場合は、これ以降の補正はかからないためBIDがそのままPIDとなります。

性別確認

ポケウォーカーでは出現する性別が決まっています。上記の計算で求めたBIDをそのまま性格値とすると、その性別にならないことがあります。

補正をする必要があるかどうかの判定式は、次の通りです。

♀を♂にする: BID and 0xFF < GT
♂を♀にする: BID and 0xFF >= GT

HGSSでは7/8で♀になる種族は存在しないため、性別閾値(Gender Threshold / GT)は31, 63, 127, 191のいずれかになります。*3

補正する必要がない場合はGCVが0と考えれば、計算上問題ありません。

性別補正値 Gender Correction Value /GCV
♀を♂にする: [ { GT - (BID and 0xFF) } / 25  + 1 ] * 25
♂を♀にする: - [ { (BID and 0xFF) - GT } / 25  + 1 ] * 25

BIDの下位2桁がGTより大きければ♂、GT以下なら♀になります。考え方としては、GTまでの差 GT - (BID and 0xFF) または (BID and 0xFF) - GT を求めて加減算する形となります。しかし、差をそのまま使って補正すると性格が変わってしまいます。そのため、差を25の倍数化し、端数処理により不足する分25だけ多く補正することとなります。

上記の補正値は加減算を区別しないで済むよう♂→♀のケースではGCVが負数になるようにしてあります。従って、補正後の性格値は一律 BID + GCV となります。

特性確認

最後に特性の確認をします。特性はNFの偶奇により既に決定していることになっています。しかし、GCVにより補正を掛けるとNFで決定した特性と変わってしまうことがあります。特性が変わってしまっているかの確認は、次の式で判別可能です。

(BID + GCV) and 0x1 != NF and 0x1

性別のための補正を行なっていない(GCVが0)ならば、特性の補正も行いません。このように特性の確認を行って補正をかけるためどんなケースでも同じTID・SIDなら特性1・2は変わらないと思いきや、(X << 24) % 25 が奇数 かつ 性別補正を行わない場合はNFの偶奇と異なる特性になるバグと思しき仕様になっています。*4

特性補正値 Ability Correction Value / ACV

GCVにより補正した後に特性がNFの偶奇で決めたものと異なる場合は、特性を元に戻すために25だけ増減させます。

♀を♂にした: +25
♂を♀にした: -25

補正後の値が0xFFを上回る、あるいは0x0を下回ると性別が変わってしまいます。GCVの補正も考慮すると、♀を♂する場合は GV + 50 <= 0xFF、♂を♀にする場合は GV - 50 >= 0 である必要があります。前述の通り、GVは31〜191となっています。GV + 50 <= 0xFF は常に満たしますが、GV - 50 >= 0 はGVが31のときに満たせないケースが存在します。

そこで出現テーブルを確認します*5 *6。GVが31となる♂:♀ = 7:1となっているポケモンは、シンオウのはらミツハニーおかいものイーブイアチャモチャンプのみちのゴンベしかいません。このいずれも♂として設定されているため、上記の問題は露見しません。次いでGVが低いのは♂:♀ = 3:1となるGV = 63のケースですが、こちらは GV - 50 >= 0 となっているため出現する性別に関係なく問題は生じません。

性別による補正が掛かっていない(GCVが0の)場合は、特性による補正を掛ける必要がありません。従って、ACV = 0 と考えれば計算上問題ありません。

性格値 PID
PID = BID + GCV + ACV

これまでに求めた基本性格値 BID、性別補正値 GCV、特性補正値 ACVを合計したものが性格値 PIDです。

色違いの存在

ポケウォーカー産の個体では色違い判定を行い、色違いになるときに再度計算しなおすような直接的な回避処理は確認されていません。しかし、第4世代では性格値で色違いか否か判定されています。上記の通り性格値は特殊な計算により決まるため、色違いが存在すると結論付けるには早計です。

TID xor SID、性別閾値、出現性別、性格因子により性格値が変わるため 65536 × 4 × 2 × 24 通り*7を計算してもはっきりしますが、今回は理屈の面から考えてみます。

色違いの判定式

色違いの計算式は、次の通りです。*8

TID xor SID xor (PID >> 16) xor (PID and 0xFFFF) < 8

第6世代以降では右辺の「8」が「16」になるとのことです。過去作のポケモンを送ったときに色違いに変化するのか知らないのですが、結論から言うと「16」になろうが「32」になろうが関係ないので置いておきます。

補正値が無く「NF ≧ (X << 24) % 25」となるケースの整理

性別補正値 GCV、特性補正値 ACVを無視すると

PID >> 16 = BID >> 16

が成り立ちます。*9

NF ≧ (X << 24) % 25」となるケースでは BID >> 24 = X より

PID >> 16 = BID >> 16
⇒ PID >> 24 = BID >> 24
⇒ PID >> 24 = X

となります。

また、下位4桁についても

PID and 0xFFFF = NF
0x0 ≦ NF ≦ 0x17

の2つより

0x0000 ≦ (PID and 0xFFFF) ≦ 0x0017

という範囲となります。

色違いの可能性があることの判定式

先に挙げた色違いの判定式を少し変形して、色違いになる可能性を判定する次の2式に分解します。

①上位2桁の条件
(TID >> 8) xor (SID >> 8) xor (PID >> 24) xor { (PID and 0xFFFF) >> 8 } = 0

②下位2桁の条件
(TID and 0x00FF) xor (SID and 0x00FF) xor { (PID >> 16) 0x00FF } xor [ { (PID and 0xFFFF) >> 8 } 0x00FF ] < 7

色違いになるためには、この2つの条件を満たす必要があります。すなわち、どちらか片方でも否定できれば色違いである可能性はありません

「NF ≧ (X << 24) % 25」となるケースの色違いの可能性

①の可能性判定式を、補正値が無く「NF ≧ (X << 24) % 25」となるケースに適用します。

PID >> 24 = X および 0x0000 ≦ PID and 0xFFFF ≦ 0x0017 より

(TID >> 8) xor (SID >> 8) xor X xor 0 = 0

となります。

ここで X = (TID >> 8) xor (SID >> 8) xor 0xFF より

(TID >> 8) xor (SID >> 8) xor { (TID >> 8) xor (SID >> 8) xor 0xFF } xor 0 = 0
⇔ (TID >> 8) xor (TID >> 8) xor (SID >> 8) xor (SID >> 8) xor 0xFF xor 0 = 0
⇔ { (TID >> 8) xor (TID >> 8) } xor { (SID >> 8) xor (SID >> 8) } xor 0xFF xor 0 = 0
⇔ 0 xor 0 xor 0xFF xor 0 = 0
⇔ 0xFF = 0

となります。

この式が成り立つことは無いので、色違いの可能性は否定されます。

補正値が無く「NF < (X << 24) % 25」となるケース

繰り下がりが生じるため、BID は 0x??FFFF?? という形となります。

すなわち X ≠ 0 の場合は

(PID >> 16) = (BID >> 16) = { (X << 8) - 1}
⇒ PID >> 24 = X - 1

となります。

また、必ず最下位から3〜4桁目*10は0xFFとなるため

(PID and 0xFFFF) >> 8 = 0xFF

が明らかです。

従って、①の可能性判定式は

(TID >> 8) xor (SID >> 8) xor (X - 1) xor 0xFF = 0
⇔ (TID >> 8) xor (SID >> 8) xor 0xFF xor (X - 1) = 0
⇔ { (TID >> 8) xor (SID >> 8) xor 0xFF } xor (X - 1) = 0
⇔ X xor (X - 1) = 0

となります。

この式が成り立つことは無いので、色違いの可能性は否定されます。

捨て置いた X = 0 の場合も

PID >> 24 = 0xFF

となるだけで X xor 0xFF = 0 の成立が求められますが、X = 0 なので成り立ちません

補正値による影響

これまでの色違いの可能性の否定を補正値GCV、ACVにより覆すには、下位2桁を超える影響を出さないといけません。しかし、性別閾値が225となる種族は第4世代では存在せず、31となる種族でも♀は出現しません。従って、下位2桁を超える影響は及ぼしません

よって、これまで述べた事柄に何ら変わりはないため色違いの可能性は無くなります

色違いの可能性

以上より、どのようなケースであってもここで述べた処理に従う限り色違いは存在し得ません。しかし、解析を行ったktxad氏は次のように記しています。

?.謎
 上の計算式の他にも計算方法があるようですが、実物を見たことがないのでよく分からない

http://blog.livedoor.jp/ktxad/archives/1124854.html

未だこの規則から外れた個体は確認されていないため色違いは存在しないと言って問題ないですが、この謎が解けたら状況が変わる可能性はあります。ただ、現状では少なくとも色違いに遭遇する乱数調整手法は無いと見て良いでしょう。

個体決定の仕組み

擬似乱数に関わる処理

ポケウォーカー産の個体では、通常乱数(LCG)と孵化乱数(MT)の両方を使って個体値や性格値を決めます。乱数に関わる仕様は次の通りです。

通常乱数(LCG) 孵化乱数(MT)
初期seedの決定 ・ゲーム開始時
・おでかけ準備完了時
・ゲーム開始時
乱数の利用(消費) 個体値の決定(1体につき2消費)
・出現ポケモンの決定(1枠につき1消費)
・性格値の決定(1体につき1消費)
・通信時の光の玉エフェクト(1個につき4消費)

2種の乱数を使ったり初期seedの決定方法が複数あったりする割に、乱数消費の方法が限られるのが特徴です。後述しますが初期seedの幅も無いため、調整しやすい個体には限りがあります。

初期seedの決定方法

ゲーム開始時

DSの画面で起動するカートリッジ(DS or GBA)を選び、ゲームを起動している過程で初期seedが設定されます。これは本編で初期seedを調整する際のゲーム開始時と同じです。端末にもよりますが、カートリッジを選んだタイミングから1秒ほど後の日時で初期seedが決まるようです。*11

本編の初期seed決定と異なるのは、「つづきから はじめる」を押してプレイを開始しない点です。そのため経過フレームは存在せず、0として計算すれば合致します。この方法で得られる初期seedは下位4桁が0x0000〜0x0063(0〜99)に絞られるため、存在する初期seedは 256 × 24 × 100 = 614400通りしかありません。

おでかけ準備完了時

ポケウォーカーと せつぞく」の「おでかけに いく」を進め、ポケウォーカーと通信する段階まで進めると初期seedが書き換わります。書き換わるのはLCGのみで、MTはそのままです。

f:id:bowline_lab:20200905222432p:plain
おでかけ準備完了(おでかけに いく)

この画面が表示された時刻を秒数換算したものになります。

seed = 時 × 3600 + 分 × 60 + 秒

この方法で決まる初期seedは 0x00000000〜0x0001517F の範囲です。従って、86400通りとなります。

調整するときは、次のようなコース決定画面で待機することになります。

f:id:bowline_lab:20200905222329p:plain
コース決定(おでかけに いく)

ここで「はい」を押してから3秒ほど後に前述のおでかけ準備完了画面が出て初期seedが決まります。*12

乱数の消費

LCGの消費

LCGの消費は

の2種類です。

個体値は、本編と同様にLCGの乱数2個から求めます。性格値はMTから求めるため、1体につき2個しか乱数を使わないのが特徴です。本編では性格値を求めてから個体値を求める順番であるため、一般的な乱数計算ツールでは事前消費数が1個前のものとなります。*13

出現ポケモンの決定を行わないケースでは、他に消費がない状態で個体値の決定が始まります。これを乱数→ステータスで確認するには、まず使用する初期seedを求めた後に性格値分の乱数消費を打ち消すために乱数逆算ツールで1個前のseedを求めます。そのseedを初期seed欄に入力すれば個体値に関して合致したリストを生成できます。それぞれの個体に2個ずつ乱数を利用するので、1体目が「0F*14」、2体目が「2F」、3体目が「4F」と2ずつ消費が進んでいきます。

例: 2020年9月5日 22:13:20(初期seed: 0x4e160014)の場合
f:id:bowline_lab:20200906003823p:plain
1個前のseedの逆算
f:id:bowline_lab:20200906085054p:plain
個体値リスト(乱数消費数基準)
個体値の表記は HP, 攻撃, 防御, 特攻, 特防, 素早さ の順です

以上の猥雑な操作を行いたくない場合、ポケウォーカー乱数計算ツールに元の初期seedを入力して「出現ポケ判定」をオフにしたまま「個体値を計算」ボタンを押すと算出できます。*15

例: 2020年9月5日 22:13:20(初期seed: 0x4e160014)の場合
f:id:bowline_lab:20200906003916p:plain
個体値リスト(個体生成数基準)
個体値の表記は HP-攻撃-防御-特攻-特防-素早さ です

「おでかけに いく」で初期seedを書き換えた場合、初期seed設定直後に出現ポケモンをLCGから決定します。出現ポケモンは3種類います。

LCGの乱数の最下位ビットが0か1かで上から1つずつ決定するため、結果として3個の乱数を消費します。この出現テーブルについての情報元は失念してしまいましたがポケモンWikiBulbapediaの掲載している並びとは異なっています。ポケウォーカー乱数計算ツールソースコード上はポケットモンスターハートゴールド ソウルシルバー 攻略Wikiと一致しているので、こちらを参照した方が良いかもしません。(リストの下側が0、上側が1に相当)

3個の乱数を消費した後に個体値を決定するため、乱数→ステータスで確認するには初期seed欄にそのまま入力して「2F*16」以降の偶数消費数を見れば良いことになります。

例:20:42:45(初期seed: 0x00012345)
f:id:bowline_lab:20200906003957p:plain
個体値リスト(乱数消費数基準/初期seedの再設定有り)
個体値の表記は HP, 攻撃, 防御, 特攻, 特防, 素早さ の順です

こちらもポケウォーカー乱数計算ツールに初期seedを入力して「出現ポケ判定」をオンにしてから「個体値を計算」ボタンを押すと算出できます。

例:20:42:45(初期seed: 0x00012345)
f:id:bowline_lab:20200906004217p:plain
個体値リスト(個体生成数基準/初期seedの再設定有り)
個体値の表記は HP-攻撃-防御-特攻-特防-素早さ です
MTの消費

MTの消費は

  • 性格値の決定
  • 通信時の光の玉エフェクト

の2種類です。

性格値は前述の通り、MTの乱数1個を利用します。

通信時の光の玉エフェクトは、光の玉1つにつき乱数4個を消費します。光の玉の個数は通信時間に比例しているようで、通信の種類によって光の玉の個数はほぼ安定しています。

通信の種類 光の玉の数 乱数消費
おでかけに いく 77±1個 308±4個
おでかけから かえす 58±1個 232±4個
プレゼントを うけとる 48±1個 192±4個

ポケウォーカーを初期化*17したときに出る「とうろくして おでかけにいく」については未検証。

通信内容は問わない(受け取るものが無くても構わない)ので「プレゼントを うけとる」を何度も繰り返して、乱数を進めることもできます。

ポケウォーカーの仕様

コース(出現ポケモン)の反映

おでかけ準備完了時に初期seedと出現ポケモンが決まりますが、その時点ではまだ選択したポケモンポケウォーカーにおでかけに行けていません。それはコースや出現ポケモンが反映されていないことを意味します。

おでかけ準備完了画面では「もどる」をタッチするかBボタンを押すことで通信をキャンセルすることが可能です。その場合でも初期seedの再設定は為されているため、出現ポケモンを変えることなく個体値だけ調整できます。ただし「おでかけに いく」を選ぶためには、どのポケモンもDSからおでかけに行っていない状態でないといけません。

なお、ポケウォーカーの日時設定は「おでかけに いく」「おでかけから かえす」の通信が成功したときにDSの日時に合わせられます。出現ポケモンを調整してからすぐに歩き始める場合や途中でおでかけから帰す手順を踏む場合は、途中で日付が変わって歩数カウントが0に戻されないように注意してください。

ついてきたポケモン

どのポケモンもおでかけに行っていないポケウォーカーでも歩数を計測しワットを貯めることができます。しかし、味方のポケモンがいないためポケトレを使えません

歩数を稼ぎながらたまに画面を点けると「!」が表示されていることがあります*18。このときに中央ボタンを押すと新しくポケモンがついてきます。その状態ならポケトレを使ってポケモンを捕獲することができます。

ついてきたポケモン「プレゼントを うけとる」のときに送られずに残りますが、「おでかけから かえす」を選べばDSに送ることができます。おでかけから帰すときは、ついてきたポケモンの個体決定が先に行われ、その後ポケトレで捕獲したポケモンの個体が決まります。ついてくるポケモンは「!」が多い*19点にも注意して、MT消費数を考えましょう。

捕獲ポケモンの順番

ポケトレで捕獲したポケモンは3体まで保持できます。枠が埋まるまでは、捕獲した順番に個体決定がされていきます。

枠が埋まった後は、捕獲後にどのポケモンと入れ替えるのか選択できるようになります。個体の決定はDSに送ったときなので、1体目と入れ替えればDSに戻したときにポケトレ1体目のポケモンとして個体値・性格値が計算されます。入れ替えできるのはポケトレで捕獲したポケモンのみなので、勝手についてきたポケモンを入れ替えることは出来ません。

捕獲をする操作は手間である一方で負けると10w落としてしまいます。どちらのロスも大きいため、捕獲が難しいポケモンを狙う場合は先に何でもいいので3体捕獲しておき、狙いのポケモンを捕獲したら乱数調整する順番の手持ちと入れ替えるようにすると良いでしょう。安全に欲しいポケモンの順番を狙え、かつ狙いじゃないポケモンはボールを投げるだけですぐに戦闘が終了します。*20

乱数調整の手法

ポケウォーカー産の個体では、2種の乱数(LCG、MT)を使うことをこれまで確認してきました。そしてLCGのみ、初期seedの再設定を行うことができます。ポケウォーカーで捕獲したポケモンの乱数調整では、この初期seedの再設定を行うか否かで大別されます。

一括seed調整法(旧方式)

ゲーム起動時に決まる初期seedだけ使う手法です。614400通りと比較的多くの初期seedを使うことができますが、細かい仕様が検証される前に広まった(そして実用に耐える個体が出た)ので個体値と性格が対になると思われていることが多いです。

原形
  1. おでかけに行き、希望するポケモンが出現するかポケトレして確かめる*21
  2. 特定の順番に調整したいポケモンを捕獲しておく
  3. ゲーム開始時の初期seed調整(個体値、性格値)
  4. プレゼントを受け取る

希望する条件を満たす初期seedを調べるツールはありません*22ERRORさんのリストを使えば十分でしょう。一度プレゼントを受け取るだけなのでMTの乱数消費が192個あるものとして性格も計算されています。特性について知りたいのならば、何らかの方法でSIDを特定*23して次のようにポケウォーカー乱数計算ツールを使います。

例:TID:12345, SID:22233のときのウパー♂(きれいなうみべ)の場合
f:id:bowline_lab:20200906115552p:plain
TID・SIDを用いた特性の算出
MT不定消費形
  1. おでかけに行き、希望するポケモンが出現するかポケトレして確かめる
  2. 特定の順番に調整したいポケモンを捕獲しておく
  3. ゲーム開始時の初期seed調整(個体値、性格値)
  4. プレゼントを受け取る(失敗)*24 × n回
  5. プレゼントを受け取る

MTの乱数を消費して性格を変えたい時、詳細が検証される前に行われていた力技です。光の玉の数を数えれば消費数を知ることもできるでしょうが、力技なのは変わりません。現在、この手法を選ぶ理由は無いでしょう。

個体値ERRORさんのリストと同じです。

行基本形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン
  2. おでかけに行く
  3. 特定の順番に調整したいポケモンを捕獲しておく
  4. ゲーム開始時の初期seed調整(個体値、性格値)
  5. プレゼントを受け取る or おでかけから帰す

ゴンベや波乗りピカチュウ等の珍しいポケモンを狙うなら出現ポケモンの乱数調整を行った方が楽になります。おでかけから帰す場合のMTの乱数消費数も判明している(232±4個)ので、プレゼントを受け取る(192±4個)の代わりに使用すれば異なる性格にすることが可能となります。

希望する条件を満たす初期seedを調べるツールも計算結果のリストも存在しません。上記の手法より良い個体を探したいならツールを作るところから始めましょう。

現行MT消費形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン
  2. おでかけに行く
  3. ゲーム開始時の初期seed調整(個体値、性格値)
  4. プレゼントを受け取る(成功) × n回
  5. 特定の順番に調整したいポケモンを捕獲しておく
  6. プレゼントを受け取る or おでかけから帰す

プレゼントを受け取るを成功させた場合のMTの乱数消費数は192±4個で安定しています。よって、3.で初期seedを調整した後にプレゼントを受け取る(何も送らない内容でOK)を任意回数成功させ、望むだけMTの乱数を進めます。

その後、DSをスリープ状態で維持*25してポケモン捕獲を行います。捕獲後に最後のプレゼントを受け取る or おでかけから帰すを行い、個体を決定させます。

現行LCG・MT消費形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン
  2. おでかけに行く
  3. ゲーム開始時の初期seed調整(個体値、性格値)
  4. プレゼントを受け取る(成功) × n回 (必要数のポケモン捕獲を行う)
  5. 特定の順番に調整したいポケモンを捕獲しておく
  6. プレゼントを受け取る or おでかけから帰す

「現行MT消費形」と比較して、4.においてポケモン捕獲を行うようになっています。そのため、ポケモン1体ごとにLCGの乱数2個とMTの乱数1個を余分に消費します*26。プレゼントを受け取る回数の制約により4.で捕獲できる個体の数に上限が生まれることに注意してください。また、2.〜3.の間におでかけから帰しておき、4.でついてきたポケモンをおでかけから帰すことにより1回の通信で最大4体まで送りこむことができます。ツールを作る場合は、このような制約を反映させることが求められるでしょう。

個別seed調整法(新方式)

MTをゲーム起動時の初期seedに、LCGをおでかけ準備完了時の初期seedに設定する手法です。LCGの初期seedは86400通りしか採れなくなりますが、年月日が無関係になるので1日1回望む初期seedを狙えるようになります。一括seed調整法では実現できない初期seedも86300通りありますので、その意味でも価値があります。

原形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン個体値
  2. おでかけに行く
  3. 特定の順番に調整したいポケモンを捕獲しておく
  4. ゲーム開始時の初期seed調整(性格値)
  5. プレゼントを受け取る or おでかけから帰す

おでかけに行くときの初期seedの再設定を利用します。出現ポケモン個体値が同じ初期seedから決まるため、場合によっては狙うポケモンが出ない可能性もあります。また、通信が最低2回あるためMTの消費数も少しだけブレやすい手法です。

行基本形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン
  2. おでかけに行く
  3. おでかけから帰す
  4. ついてくるポケモンを出現させる
  5. 特定の順番に調整したいポケモンを捕獲しておく
  6. ゲーム開始時の初期seed調整(性格値)
  7. おでかけ準備完了時の初期seed調整(個体値
  8. プレゼントを受け取る or おでかけから帰す

ポケウォーカーと通信して実際におでかけに行かずとも、おでかけ準備完了時の初期seedの再設定が行われていることが判明しました。結果、個体値を独立して初期seedを調整することが可能となりました。代わりにポケモンがついてくるよう小まめにポケウォーカーを確認する必要があります。

現行LCG・MT消費形
  1. おでかけ準備完了時の初期seed調整(出現ポケモン
  2. おでかけに行く
  3. おでかけから帰す
  4. ついてくるポケモンを出現させる
  5. ゲーム開始時の初期seed調整(性格値)
  6. おでかけ準備完了時の初期seed調整(個体値
  7. プレゼントを受け取る(成功) × n回 (必要数のポケモン捕獲を行う)
  8. 特定の順番に調整したいポケモンを捕獲しておく
  9. プレゼントを受け取る or おでかけから帰す

一括seed調整法と同じくLCGとMTの乱数を消費することが出来ます。

個体値についての初期seedは連打個体計算ツールで探すことが可能です。そのためには、まず本編の初期seedの決定方法を知る必要があります。

2.共通初項(初期SEED)の決定方法

遭遇乱数列とタマゴ乱数列の初項は共通で、「つづきからはじめる」を押した瞬間に決定される。
この値を0xABCDEFGHとすると

AB:(秒+分+月*日) and 0xff
CD:時
EFGH:年-2000+ゲーム起動時からの経過時間

となる。年月日時分秒はDS内部時計の値で、起動時からの時間はA連打で進んだ場合0x256程度。

http://rusted-coil.squares.net/pokemon/ran/ran_1.htm#4

おでかけ準備完了時の初期seedは0x00000000〜0x0001517Fとなるため、経過フレームが0のときに0x00000000となるように日時を調整します。「CD」の箇所はがそのまま使われるので0時にすれば問題ありません。「AB」を0にするには色々な組み合わせが使えますが、10月25日とか12月20日とかの分かりやすい日付にして秒+分を調整すれば良いでしょう*27連打個体計算ツールにそれらの日時を設定して、最後に経過フレームを初期seedと同じ範囲にしてください。これで個体値を計算することが出来ますが、乱数消費の関係で2F以降の偶数消費数しか出現しない点に注意してください。6体目以降の個体値を調べたい場合や「0F」を除外したい場合は、「自然乱数消費」の欄を「2〜任意の数」に変えてください。

例:自然消費数2〜30で個体値30以上(UV)が5個以上になる初期seed・消費数を探索
f:id:bowline_lab:20200906132931p:plain
※ 一部ぼかしを入れています
個体値の表記は HP-攻撃-防御-特攻-特防-素早さ です

残念ながら奇数消費数を排除する方法はツールに備わっていないので、多量の結果を得る計算をした場合は表計算ソフト等でデータを処理した方が良いでしょう。

初期seedから時刻への変換はポケウォーカー乱数計算ツールの「時刻設定を計算」を使うと出来ます。

例:初期seedが0x00012345の場合
f:id:bowline_lab:20200906112435p:plain
初期seedから設定時刻を計算する(おでかけ準備完了時の初期seed)

性格値については、「おでかけに いく」「おでかけから かえす」「プレゼントを うけとる」の組み合わせでMTの乱数消費数が変わるため自動計算する仕組みはありません。ただし、ポケウォーカー乱数計算ツールを使うことで特定の乱数消費数で目的の特性が見つけられます。年月日・時ごとに探すことが出来、「4つ前も一致」「4つ後も一致」をチェックすることで消費数がブレても大丈夫な初期seedを探せます。

例:2020年9月5日 22時台に以下の性格が乱数消費数192個で出現し、188個(192-4)でも196個(192+4)でも以下の性格になるものを探索
※性格:ひかえめ, ずぶとい, おだやか, れいせい, のんき, なまいき
f:id:bowline_lab:20200906120015p:plain
特定の乱数消費数で任意の性格が出現する初期seedを探す
※ (1), (2)は特性の種類

おわりに

予想以上に長い記事となってしまいました。これだけ乱数調整の派生形が多いと皆さんがまとめたがらなかった理由が身にしみて分かりますね。とはいえ、派生形ができるということは調整する余地が大きいことを意味しています。呼称のため「新方式」の方が高個体値を狙えるように誤解されることも散見されてきましたが、実のところ新方式を確立させる過程で得られた情報を使うと旧方式もLCGやMTの乱数をほぼ安定して消費することができるため、むしろ初期seedの範囲の広い旧方式の方が高個体値を狙える可能性があることもご理解いただけたと思います。秒単位で初期seedを狙えて1回の通信で済むお手軽さもポケウォーカーの乱数調整の特徴ではありますが、それに留まらない調整するための組み合わせを探す遊び方もできます。気が向いたらぜひ挑戦してみてください。

個人的に伝えたかったこととしては、未だに「新方式」「旧方式」という呼称を使うことに違和感があるということがまず1点。もう10年もの月日が経っていますし新方式の方が優れていると誤解を与える原因にもなります。命名センスが無いのが悩ましいところですが、本記事で挙げた「個別seed調整法」「一括seed調整法」という名称を使うことを提案したく思います。また、ポケウォーカーの乱数調整向けのツールが存在しないことも記させていただきました。ポケウォーカー乱数計算ツールで一通りの現象を確認できますが、ポケウォーカー向けの初期seedを探すツールが存在していません。弊サイトへリンクする際はこの点にご留意いただくとともに、このツール作成の余地も楽しんでいただければ幸いです。

最後になりましたが、既に参考文献に挙げさせていただき通り本記事および弊サイトのツールはktxadさん飛騨さんの情報がなければ作成できないものでした。お二方には、深く感謝の意を表します。

*1:仮に「性格因子(NF)」と名付けました。ktxadのブログ : ポケウォーカーメモ - livedoor Blog(ブログ)では「rn」と表記される値です。

*2:性格(性格値 - ポケモンWiki)

*3:性別(性格値 - ポケモンWiki)

*4:本来ならばNFではなくBIDで特性の確認し、BIDの偶奇に合わせるべきところです。

*5:ポケウォーカー - ポケモンWiki

*6:ポケウォーカー - ポケットモンスターハートゴールド ソウルシルバー 攻略Wiki - アットウィキ

*7:♀が存在しないGV=31のケースを排除し、代わりに性別不明・♂のみ・♀のみの分を組み入れた計算。

*8:色違い - ポケモンWiki

*9:ここでの「=」は等号。

*10:最下位の桁を1桁目と数えます。

*11:個人的には1秒前の時刻にちょうどなるタイミングにAを押すと合わせやすい。1.5秒くらい掛かっている? @初期DS

*12:個人的には3秒前になったのを確認してからAを押すと合わせやすい。3秒より少し短いかも? @初期DS

*13:ポケウォーカーの乱数調整 - えらにっきで「1番目は表示されない"-1"に当たる部分の個体値」と説明されているのは、これが原因です。

*14:エメラルドの仕様が基準になっているため、乱数の消費数の単位が「F」になっています。ただの旧式ツールの仕様なので気にしないでください。

*15:ただし、フィルター等はありません。

*16:性格値で使わない分の「-1」と出現決定分の「3」の合計。

*17:ポケットモンスター ハートゴールド・ソウルシルバー:『ポケウォーカー™』に関するよくあるご質問(使い方について)

*18:左部のマップ背景の上にあるスペースに表示されます。

*19:ポケモンWikiでの「グループC」しか出ないかも?

*20:稀に捕獲成功するので、アイテム目的等で複数体狙うときは注意。

*21:画面で判別できないきいろのもりでは、実際に捕獲してプレゼントを受け取りDSで確認しておいてください。

*22:時計を弄る方法に興味を持てなかったので作っていません。

*23:御三家個体値→裏IDとかSID判定 ダウンロードとかを使って特定できます。

*24:途中でポケウォーカーの向きを変える等により、物理的に通信を中断させる。

*25:仕組み上はスリープしなくても構いませんが、ポケウォーカーでの捕獲には時間がかかります。

*26:ポケウォーカー乱数計算ツールで消費数を算出させたいときは「F」欄を利用してください。

*27:10月25日なら「10 × 25 + x = 256」となるxを「秒 + 分」に設定します。