机の上のおもちゃ箱

読み易さ、書き方は記事内容によって変化します。気が向いたら書きたい事を書く自由帳です。

【解説記事】7世代(SM,USUM)の菱形孵化乱数について

なんか需要ありそうだったので、理屈を絡めつつちょっとだけ噛み砕いて書いときます。

 

7世代(サンムーン、ウルトラサンムーン)で「乱数かじってたよ~」って人に向けて書くので、乱数初心者の人がいきなり読むのはちょっと厳しいかも。読む前に基礎知識だけは付けておくことをお勧めします。初心者向けの記事も書いてあるのでよければそちらを読んでください。

 

 

 

①必要な数値について

7世代までの乱数を触ったことがあるなら「TSV(trainer shiny value)とPSV(pokemon shiny value)が一致した時に色違いになる」ってことを知っている人は多いと思います。

菱形を狙って孵化するためには、より厳密な数値を一致させる必要があるのでTSVやPSVの素になっているTID(trainer ID)とPID(pokemon ID)を用います。

この2つの数値が完全一致した時に菱形の色違いになります。

 

②PIDとそれに関するアルゴリズム

まず簡単な方で理屈を交えて説明していきます。

多少聞きなれた呼び方をするならば「性格値」です。

これはポケモンの個体情報(僕ら人間で言うDNAみたいなイメージ)ですね。

 

SM RNGツールには「性格値」3DS RNGツールには「PID」と個体リストが並ぶ箇所に表記されていると思います。

追記:Ver1.04以降の3DS RNGツール内ではPSVとPRVがリストに表示されるので、PIDを求めたい場合は逆算しましょう。

 

こんな感じ↓

f:id:YouMashiro:20200705132254p:plain

 

 PIDは16進数表記の8桁の数字です。

今回は画像で使っている「A844FD97」を例に説明します。

まずこれを電卓などで2進数に変換します。(今回は説明の都合上ツールを利用します)

 


f:id:YouMashiro:20200705133009p:plain

 

このように「1010 1000 0100 0100 1111 1101 1001 0111」という32桁の2進数が求められると思います。上16桁と下16桁で分けます。

①1010 1000 0100 0100

②1111 1101 1001 0111

 

この2数のそれぞれの桁同士でxorします。

xorは排他的理論和っていう論理演算を表す記号みたいなものです。

分かりやすく例えると掛け算でいう×とか*のイメージ。

どういう演算法かというと

「同じ数字同士なら0、違う数字同士なら1になる」

とでも覚えておいてください。(後でまた出てきます)

要は以下の計算を各桁同士でやります↓

0+0→0       0+1→1

1+1→0       1+0→1

 

このルールを基に①②で演算すると「0101 0101 1101 0011」という結果が得られます。

これの下4桁を無視して「0101 0101 1101」という12桁の2進数を今度は10進数に変換してみます。

f:id:YouMashiro:20200705134539p:plain

 

「1373」という数値が出てきました。

最初の画像を見れば分かりますが、これがPSVの正体です。

f:id:YouMashiro:20200705134842p:plain

 

従来の色違いは16桁中の上12桁(=2進数表記のPSV)がTSVと一致していれば、下4桁は不一致でも良かったというのが原理です。

その色違いの中で8世代に送った際に菱形になれる個体は求めた16桁とトレーナー側の16桁(=TID)全てが一致している必要があります。

 

3DS RNGツールver.1.04以降ではこの下4桁のことをそれぞれTRV(trainer residual value)PRV(pokemon residual value)と定義しており、16進数表記(0~Fの全16個)で分類されています。

 

2進数で4桁になる数は0000~1111の計16通りあるので、

・星形の確率が15/16

・菱形の確率が1/16

という割合になっています。

 

今までの孵化乱数との違いはおおよそ分かりましたかね?

早い話が一致させる桁数が増えるだけです。

 

③TIDの求め方

ちょっとだけややこしいです。

 

便宜上、ポケモン側のIDとトレーナー側のIDを区別するためにTIDと一括りで定義していますがトレーナー側のIDは更に細かくID(こっちもTIDとも呼びます)SIDという5桁の情報2つから生成されています。

勿論ですが、ゲーム内のトレーナーカードで視認できるトレーナーID(6桁)も上記の2つから生成される数値なので別物です。

 

結論から書くとTID(≒TSV+TRV)の求め方は現状3通りしかないはずです。(多分)

 コメントにてとても簡単な方法を教えていただきました。

理屈を知りたい方は「求め方A」で解説を交えていますのでそちらを見てください。

それ以外の方は「求め方D」を行う事を強く推奨します。

 

それぞれ説明していきます。

 

求め方A

トレーナーID厳選をする。

それぞれのRNGツール内にIDの乱数調整をするツールが内蔵されています。

なので新規ROM作ってください!(丸投げ)

 

やり方は ろいしんぶろぐ様 を参考にするのが良いと思います。

※無許可リンクですので問題があればコメント等でご連絡お願いします、直ちにリンク削除致します。

最近、SM RNGツールのDLリンクが切れてるそうなので持ってない人は3DS RNGツールでうまくやってください。

追記:3DS RNGツールでのID調整についてを最初に紹介した初心者向け記事で補足しておいたので、やりたい方はそちらの記事から「TSVの特定-TSVの求め方Ⅲ」を参照してください。そちらの場合はTRVも与えられるので以降の計算を割愛できます。

 

厳選することで簡単にTIDとSIDを確認できます。

f:id:YouMashiro:20200705161513p:plain

今回はID(通常)が「415929」のものを例にします。
ここの2数をそれぞれ2進数に変換します。

 

「50809」→「1100 0110 0111 1001」

f:id:YouMashiro:20200705161732p:plain

 

「18545」→「0100 1000 0111 0001」

※11桁以下の数字の場合は12桁になるように頭に0を付けてください。

f:id:YouMashiro:20200705161934p:plain


この2数をPIDの時と同様にxorしてください。

演算結果が「1000 1110 0000 1000」になります。

 

上12桁を10進数に直した時の数字がTSVと一致しているのを確認してください。

f:id:YouMashiro:20200705162455p:plain

「2272」なので今回の場合は正しいです。

 

今度は使わなかった下4桁を16進数に直してください。

f:id:YouMashiro:20200705162749p:plain

16進数表記で「8」が今回の場合のTRVになります。

 

 

求め方B

実際に7世代で色乱数を行い、8世代に送って菱形かどうかを確認する。

これを菱形が出るまで全て試す。要はゴリ押しです。

 

3DS RNGツール内で色違い個体のPRVが見れます。

菱形色違いになっているという事はTRV=PRVなのでそれが答えです。

f:id:YouMashiro:20200705154855p:plain


16通りしかないのでそこまで厳しくないと思います。

針を読むのがよっぽど苦手な人以外なら野生乱数をするほうが早く終わるはずです。

 

求め方C

最後は外部ツールや3DS本体を改造し、セーブデータを吸い出して強引にIDとSIDを視認する方法です。所謂「改造」に区分される方法なので非推奨です。

僕自身試してないですが、数値を好き放題に弄れたりと何でもアリな世界だと思っているので恐らく視認できると思います。

「p〇hex」とかで軽く一捻りなんじゃないですかね?

 

求め方D

追記分。

こちらのツールを使用すればG7TID(トレーナーカードに記載されるID)とTSVがあればTID,SIDの候補 及び その数値でのTRVを算出してくれます。
候補が複数パターン出力された時に行っていることは「求め方B」と同じです。

 参考:ぱせり 様

 

 ④終わりに

 以上が必要な数値の求め方になります。

TSVだけならバトルビデオの保存データから簡単に割り出せる手法が存在するので、もしかするとTIDに関しても簡単に割り出す方法が他にあるかもしれません。

(ありました) 

 

まとめるとID(16桁)=SV(上12桁)+RV(下4桁)って認識です。

後はツール見ながらseed消費する作業なので頑張ってください。

 

菱形が大好きな人は、SV孵化ならぬRV孵化とでも題してTRVを共有できるクラスタを形成したほうがいいかもしれませんね。

ここまでのご拝読ありがとうございました。

 

質問や間違い等あればコメントお願いします。