ポケモンの色違いってどう決まっているの?in3~5世代(+6世代以降)【排他的論理和】

f:id:key_poke:20210711051442j:plainこんにちは、Keyです

今回はこちらのマナフィの色厳選方法について紹介した記事内で少しだけ触れました、3~5世代ポケモンが色違いになるときのゲーム内の判定について紹介したいと思いますkey-poke.hatenablog.com

正直これを知ったところで何かが変わるわけではありませんが、自分がこのようなゲームの仕様を知るのが好きなので紹介します

もくじ

2進数と排他的論理和について

ポケモンの話に入る前に二進数表示をした時の排他的論理和という計算方法について話します

まず、私たちは普段10種類の文字(0,1,2,3,4,5,6,7,8,9)を組み合わせて数を表しており、これを10進数と呼びます

これに対して、(0,1)の2種類の文字のみで数を表すことを2進数と呼び、主に人間ではなくコンピュータが使います

f:id:key_poke:20210710210614p:plain

この図のように2進数での1110は10進数でいう14を表しています

また2進数では論理和論理積、否定、排他的論理和などの計算方法があり、色違いの判別にはゲーム内でこの排他的論理和が使われています

※1111(2)は十五を、1111(10)は千百十一を表しています。1111(2)のように(2)が後ろについている数は2進数、1111(10)のように後ろに(10)がついている数は10進数で読み取ります 

排他的論理和とは簡単に言うと、XとYが同じだと0、違うと1になる計算方法です(XORと言った方が伝わりやすい人もいるかも)

f:id:key_poke:20210710172501p:plain

f:id:key_poke:20210710214426p:plain

このように桁数が増えても、各桁ごとに計算を行います

この⊕というのは足し算でいう+のような意味です

トレーナーのIDと性格値について

次にポケモンが色違いになるかどうかを判別するために使われる表ID、裏ID、性格値について話します

f:id:key_poke:20210711001356j:plain

表ID、裏IDとはゲームのセーブデータを作った際に0~6万5535(10)の間からランダムで決まるトレーナーの持つ番号で、表IDはトレーナーカードから確認できますが裏IDはゲーム内で確認する術はありません

次に性格値について話します

性格値とはトレーナーの持つIDに対してポケモン側が持つ番号で、ポケモンが草むらから出現したときやタマゴが出来たときに確定します

これも裏ID同様にゲーム内で確認する術はなく、0~42億9496万7295(10)の間からランダムです

これらの値は0~6万5535(10)0~42億9496万7295(10)というように中途半端な範囲から決まっているように見えますが、これらを2進数に変換すると

0~6万5535(10)0~1111,1111,1111,1111(2)

0~42億9496万7295(10)0~1111,1111,1111,1111,1111,1111,1111,1111(2)

のようにスッキリした数字になります

(変換方法についても取り上げてしまうと長くなってしまうので興味がある方はご自身で調べてみてください。ちなみに「2進数 変換」などと調べたら2進数と10進数を変換してくれるサイトが出てきたりもしますし、入力すると変換してくれる電卓もあります)

ポケモンが色違いになるときのゲーム内処理

f:id:key_poke:20210710223923p:plain

こちらはマナフィの記事を書いた時にも載せた画像です

当時は

 "トレーナー側の表IDと裏ID、ポケモン側の性格値をある式 に代入した結果が成り立てばそのポケモンが色違いになります、その確率が1/8192です”

と書きましたが、その「ある式」とは

(((表ID裏ID) ⊕ 性格値上部) ⊕ 性格値下部)≦7(10)

です。実際に計算してみましょう

普通の計算式と同じように一番内側の( )内にある(表ID裏ID)から順に計算します

今回は上の画像のように表ID01234,裏ID56789として計算します

2つを2進数に変換すると

表:01234(10)0000,0100,1101,0010(2)

裏:56789(10)1101,1101,1101,0101(2)

(表IDのように変換後の桁数が16桁に満たない場合は後の計算のために頭に0をつけ足して桁数を16桁に揃えます。16桁である理由は最大数の65535(10)を変換すると16桁の2進数になるからです)

となります。そしてこれを計算すると

(表ID裏ID)

=(0000,0100,1101,00101101,1101,1101,0101)

f:id:key_poke:20210711015110p:plain

となります

次に性格値上部,下部についてです

f:id:key_poke:20210711024642p:plain

性格値は上の画像内のn個目の、色違いが生まれるタマゴの性格値を使います

539097382(10)0010,0000,0010,0001,1111,1001,0010,0110(2)

(今回のように変換後の桁数が32桁に満たない場合は後の計算のために頭に0をつけ足して桁数を32桁に揃えます。32桁である理由は最大数の4294967295(10)を変換すると32桁の2進数になるからです)

こうして得られた32桁の2進数を上下それぞれ16桁に分け性格値の上部下部とします

0010,0000,0010,0001,1111,1001,0010,0110(2)

上部:0010,0000,0010,0001(2)

下部:1111,1001,0010,0110(2)

次に(表ID裏ID)で得られた(1101,1001,0000,0111)性格値上部で計算すると

((表ID裏ID) ⊕ 性格値上部)

=(1101,1001,0000,0111 ⊕ 性格値上部)

=(1101,1001,0000,0111 0010,0000,0010,0001)

f:id:key_poke:20210711022118p:plain

となり、

((表ID裏ID) ⊕ 性格値上部)=1111,1001,0010,0110(2)が得られます。これと性格値下部計算します

 (((表ID裏ID) ⊕ 性格値上部) ⊕ 性格値下部)

=(1111,1001,0010,0110 性格値下部)

=(1111,1001,0010,0110 1111,1001,0010,0110)

f:id:key_poke:20210711022711p:plain

計算結果の0000,0000,0000,0000(2)0(10)になるので

 (((表ID裏ID) ⊕ 性格値上部) ⊕ 性格値下部)≦7(10)

が成り立ち、今回のn個目のタマゴから産まれるムックルは色違いになります

この式では最終的に16桁の2進数の値が7以下であるかを見ていますが、

16桁の2進数では0~65535(10)の65536通りの数が表せます

加えてこの値が7以下になるのは0~7(10)の8通りなので式が成り立つ確率は

8/65536 (10)

となります

これを約分すると

1/8192 (10)となるため「色違いの確率は1/8192」と言われるのです 

以上がポケモンが色違いになるときの判定方法です

今回は3~5世代での判定方法について話しました

6世代以降では基本的な部分はあまり変わっていませんが、計算結果が15以下になれば色違いであるというプログラムになっており、16/65536=1/4096となるため「6世代以降の色違い確率は1/4096」と言われています

まとめ

今回はポケモンが色違いになる仕組みについて紹介しました

知っていても別に得をするものではありませんが知ってみると結構おもしろいものだと思います

ちなみに2進数や排他的論理和については高校で習った知識を思い出しながらで書いただけなので間違っている部分に気づいたかたがいたら教えてください()

今回の記事はここまで、また次の更新で!!

おすすめ記事 

key-poke.hatenablog.com

ブログのネタや解説して欲しい粘りなどいつでも募集してます

Twitter→〈https://twitter.com/87z3JIQelHPrSvB?s=09