見出し画像

【日記】ポケモンってなんで16進数なの? 2022-11-12

【16進数と性格値】

この前、パッチールの性格値の計算方法を調べていまして、ふと気になったことが何個かあります。

ポケモンって16進数を使うゲームよね。なんでかちょっと調べていきましょうか。

なるほどな。パッチールの模様に関しては、上位4bit・下位4bitでxy座標を決定してるのか。

ケムッソの進化に関しては正直運ゲー感あるし、内部数値をゲーム内で覗き見する方法が、基本的に正規で存在しないので飛ばします。

じゃあ、なぜ16進数を採用しているのか、考察していきたいと思います。

まず、16進数は何に使うか、なんだけど。ずばり、「性格値」と呼ばれるものに使うんだよね。

じゃあ、ポケモンにおける「性格値」ってなんじゃらほい?になるんだけど、詳しい説明は以下。

性格値(せいかくち)は、ポケモンの個体ごとに存在する隠しパラメータの一種。32ビット(4バイト)の値で、範囲は0から4,294,967,295(16進法で0x00000000~0xFFFFFFFF)。初出は『ポケットモンスター ルビー・サファイア』。

要するに、個体ごとに16の8乗だけ計算結果があるんだけど、これを何に使うかというと、「性格・性別・特性」などに決定する要素なんですが、これらはいわゆる「乱数調整」に悪用されたのを問題視したのか、逆算できないように現在では暗号化されています。

まあ、要するに16の8乗なら大丈夫だろ!wと思ってたら、乱数調整によって、現在の初期Seedおよび目標Seedまでを、普通に特定できるようになったので、暗号化して分かりづらくした感じですね。

16進数そのものを使っているのに恐らく変わりはなくて、逆探知されにくくなっただけですね。まあ、剣盾はレイドの場合だけ「初期Seed」が解析できて、再現性もあるので色違いがバンバン出せるのですが。


【16進数と10進数、色違いの原理】

まず、16進数を採用するメリットを考えましょう。まず、これは真っ先に挙げられるのは「色違い」だと考えられる。

色違い -ポケモンwiki

判定式:(ID上位)xor(ID下位)xor(性格値上位)xor(性格値下位) ≦ 7

これだけを見ると理解できないと思うので、1つずつ分解していこうか。ポケモンの性格値は「16進数」で計算をして、トレーナーIDと裏IDを「10進数」で計算している。

そして、「10進法」の表ID・裏IDを2進数に変換して、それらを排他的論理和という計算処理を行い、また10進法に戻す。そして、それらを性格値を2進数して戻した数値(0≦7)の間にある値を色違いとして計算する。

ちょっと難しいけど、基本を押さえると表ID・裏IDは「10進法」・性格値は「16進法」で、色違いの時はそれらを「2進法に戻す」。そして、それらを5桁の「10進法」に再計算して、00000~65535になった計算処理の値から、7つ連番で抽選される。

まあ、16進数で管理されているのは「ポケモンのデータ」、つまり「性格値」とだけ覚えておけば問題ないね。6世代より後の作品は最後の計算結果が7から15になっているから、確率が半分になっているんですね。


【改造と乱数調整の違い】

最後に、改造と乱数調整の話だけして終わりましょうか。

いわゆる「改造」なんですが、本来だと「性格値+ID」が一致していないと色違いにはならないのだが、「改造ツール」を使用すると「色違い」にするという結果処理だけが残るんですよね。

つまり、性格値・IDの概念を無視して、色違いを作成できるわけですね。5世代までは「逆探知」が発動しているので、BW環境では一時期流行ったのが「ポケチェック」というツールでして、性格値などをBVから覗き見できたんですね。

逆に言うと、現在の改造ツールでは「内部情報」を可視化して、内部データを上書きしているので、巧妙になっていて一瞥しただけでは改造かどうかの判定が難しいんですよね。

まあ、孵化した卵からTSV・PSVを紐づけるやり方も6世代では流行ったんですが、7世代は「針」が復活したことで初期Seedを把握できたので、乱数調整が可能になり、また色違いを意図的に出すことが可能になった。

大体こんな感じかな。乱数調整の話もしたいね。4世代と5世代は特に再現性がエグすぎて、ポケルス乱数とかふしぎなアメ乱数とかなんでもアリなんですよね。

今日はこんな感じ、アデュー。

この記事が気に入ったらサポートをしてみませんか?