XYで裏ID特定

お久しぶりです。皆さんおなじみKeyBVを改造してXYでの裏ID特定に成功したのでメモ代わりにブログを更新しようと思いました。改造と言ってももとからあったコードをちょっと変えただけなので全然大したことはやってません。ライセンス絡みも不明なのでツール公開は控えようと思います。裏ID特定は気分が乗ったら承りますのでツイッターまでどうぞ。なおすでにもっと簡単な方法があるかも知れませんが僕は知らないのであしからず。

6世代では乱数調整はまだ(おそらく不可能)ですが遺伝固定やSV法などすでにゲーム内部の動きがほとんど把握されています。今一番出回ってるツールだと思われるKeyBVではバトルビデオ解析によってポケモンの内部データをほとんど見ることができます。その中でおそらく皆さんが一番興味あるのが個体値とTSV・PSVですね。しかし残念なことにKeyBVはデフォルトでは裏IDを表示する機能がありません。普通に第6世代で色理想値が欲しいだけなら別に必要ありませんが一応裏IDは知っておくといろいろ便利になると思います。これからその2つの理由を書きます

1.旧作の個体のNNをXYで変更できる

これの利点はまずXYでNNに使用できる文字数が増えたことによって単純にNNの幅が広がったこと。これだけだと別にどうでも良いのですが今までではNN字数から情報アドが発生する可能性がありました。例えば今までは12文字NNは旧作教えがないことがバレるんで対戦ではちょっと不利になるかも知れませんね。ですが6世代でNNを変更できることによってそれがなくなるんで全力で12文字NNを付けられるようになります。

2.旧作の裏IDを特定できる

つい数日前にニンテンドーDSのWi-Fiがサービス終了したのでそれに伴い某GTSエミュレータとBV解析サイトが使用できなくなりました。これによって旧作の裏IDの特定が難しくなり、同時に旧作個体の性格値の特定が不可能になりました。
なおTSVやPSVから上位数桁は逆算できますが6世代の色違いの仕様変更のせいで旧作で光らせるために必要な桁が一つ減ります。おっさんを光らせたい場合とかは面倒になりますね。残された手段はおそらくセーブを吸い出して某ツールで中身を覗くなどブラックな手段でしょうか(これも十分ブラックに近いグレーだけど)。なお裏IDを特定するのと同じ方法で多分性格値も表示させることができると思います。僕はやってないです。

KeyBVで裏ID特定

さて、裏IDの有用性を書いたところで本題に入ります。他の方のブログでも書かれていますがSVはそもそも新しい数値ではありません。発見された時に僕のツイッターでそれっぽいことを書いてしまいましたが誤情報です、申し訳ありませんでした。SVを理解するためにはまず旧作の色違いの仕様をおさらいします。今更なことしか書きません。2進数で表記された表IDを\(TID\)、裏IDを\(SID\)、性格値上位16ビットを\(P_1\)、下位16ビットを\(P_2\)とします。

定義1

ポケモンが色違いになるということは卵が割れる瞬間かエンカウント時に
\[ TID\text{ xor }SID\text{ xor }P_1\text{ xor }P_2 < 8 \]
を満たすことである。

このままだと分かりにくいので同値の定義をします(実際に同値だという証明は読者の演習で)。引き続き\(TID\)、\(SID\)、\(P_1\)、\(P_2\)を定義します。\(TSV\)を\(TID\text{ xor }SID\)の上位13桁、そして\(PSV\)を\(P_1\text{ xor }P_2\)の上位13桁と定義します。

定義2

ポケモンが色違いになるということは卵が割れる瞬間かエンカウント時に
\[ TSV = PSV \]
を満たすことである。

6世代の場合は\(TSV\)、\(PSV\)をそれぞれ上位12桁と定義します。これがSVの正体です。

SVが従来の数値から計算されることとそのSVを出すためにはSIDとPIDが必要なことが分かったと思います。つまりSVを表示するKeyBVではすでにSIDとPIDがわかることを意味します。幸いKeyBVのソースコードは公開されてるので中身を見れば実際そうであることがわかります。実際ソースの中では\(TSV = (TID\text{ xor }SID) \gg 4\)と定義してるのでまずここをSIDに変えればちゃんと裏IDを教えてくれます。これだけだとヘッダがTSVのままなのでもうちょっといじればちゃんとTSVに加えて裏IDを表示させることもできますしおそらく同じ方法でPIDも表示させられるはずです。本当に1行変えるだけなんで別にツール開発でもなんでもないですね。一番時間かかった部分はちゃんと動くVisualStudioを探すところでした(Ultimateの体験版)。無料版はゴミです。

追記:PID表示に対応しました。