※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。topic.始めるまえに、本内容に関する非常に重要な情報を提供してくれたloadingNOW(pika)およびyamipoliに感謝をします。article.はじめに、本文書を読者が理解するために非常に困難な時間を過ごすことを避けるための予備情報を記述する。bits.コンピューターには数値は通常のフォーマットではなく二進数と呼ばれる形式で保管される。私たちが通常利用している数字は十進数と呼ばれる。十進数においてすべての数字は0,1,2,3,4,5,6,7,8,9の10個の数字の一つを並べたもので記述される。二進数では数字を並べることは同じだが、ただ2個の数字0,1のみ存在する。digitの短縮形)と呼ばれる。二進数10001110は8bitである。easier.ポケモンルビー、サファイア、エメラルド、ファイアレッド、リーフグリーン、ダイヤモンド、パールが動作するゲームボーイアドバンスおよびニンテンドーDSは実際は、小型計算機であり、二進数が利用される。ポケモンでは簡素化される要素がある。それは、常に非負の数のみ利用されることである。これにより二進数に関する議論がより簡単になる。5.ではどのように二進数を処理するのか。これを行うために、まず十進数をどのように処理するのかを考える。635という数字はどのような意味があるのか。これは1が5個、10(=1x10)が3個、100(=10x10)が6個加算された数字である。ここで十進数のある桁の単位数はすぐ右の桁の単位数を10倍した値になっていることに注意する必要がある。よって635という数字は600+30+5を意味する。big.二進数でも十進数と考え方は同である。ある桁はすぐ右の桁の10倍になっているのではなく、2倍になっている。=142.例をあげてみよう。二進数10001110を十進数(すなわち通常使う値)で表すとどのようになるか。1x2)が1個、4(=2x2)が1個、8(=4x2)が1個、16(=8x2)が0個、32(=16x2)が0個、64(=32x2)が1個、128(=64x2)が1個となっている。よって二進数の10001110は2+4+8+128=142となる。=2965.別の例として12ビットの二進数101110010101を十進数で表してみよう。これは1が1個、2が0個、4が1個、8が0個、16が1個、32が0個、64が0個、128が1個、256(=128x2)が1個、512(=256x2)が1個、1024(=512x2)が0個、2048(=1024x2)が1個となる。よって1+4+6+128+256+512+2048=2965となる。system.二進数を利用すると数字の列が非常に長くなる傾向がある。二進数を短く表示するための方法が十六進数である。byF十六進数では最初に二進数の数値を4ビットごとにグループ化する。二進数での長さが4の倍数でない場合は4の倍数になるまで先頭に0を追加する。4ビットのグループを次のように置換する。1).例えば、二進数の10001110は十六進数で8Eとなる。最初の4ビットは1000のため十六進数で8と表される。次の4ビットは1110のため十六進数でEと表される。0101=5)となる。二進数の1110000001は10ビットである。そのため最初に2ビットの0を追加し12ビットの二進数001110000001と考える。十六進数に変換すると381(0011=3,1000=8,0001=1)となる。0111).もちろん、十六進数を二進数に変換することも逆を行えば簡単にできる。7=0111)となる。4680.これからは十六進数の数値は大括弧[]でくくり十進数と混乱しないようにする。十六進数[4680]は十進数4680と異なる数値である。(訳者註:本文書では十六進数を大括弧[]でくくっているが、文書によっては先頭に0xを付加して0x4680と表記する場合や、最後にHを付加し4680Hと表記する場合がある。question.ゲーム内でポケモンが生成されると最初にポケモンIDと呼ばれる32ビットの数値が生成される。Pokemon」とも呼ばれゲーム内では隠しパラメーターとなっている。ポケモンIDはセーブファイルを直接見たときのみ見ることができる(ここにあるアプレットで見ることも可能であるが...)。ポケモンIDのみから多くの情報を得ることができる。ポケモンの性格はポケモンIDのみから生成されている。適用できる場合には性別、能力、アンノーンの形もまさしくPIDから求められる。numbers.ポケモンのゲームで(もちろん他の多くのゲームでも)ランダムなイベントが発生した場合でも、そのイベントは厳密な意味でランダムでは無く、疑似乱数を生成する数式で数値的に計算された値によって制御されている。疑似乱数と記述された場合には数値は厳密な乱数ではなく、一種の偽物の乱数である。formula.疑似乱数を生成する為の手法は数多くある。簡易な疑似乱数生成器は線形乱数発生器の類である。この方法の疑似乱数生成器はとても実装しやすく、値を適切に選ぶことにより「良い乱数」を生成できるため多くのコンピューターアプリケーションに利用されている。ここで「良い乱数」というのは、たとえ一連の乱数の数列が有ったとしても、数式を計算しない限り、次に出現する疑似乱数を得る手がかりを得ることができない乱数のことを意味する。numberルビー・サファイア以降すべてのポケモンゲームで利用されている乱数生成器は次のようになっている。ゲームが開始されると、プログラムは乱数の種(seed)と呼ばれる32ビットの変数を割り当てる。この方法はゲームによって異なる(詳細はloadingNOWの書いた記事を参照)。次に疑似乱数生成器が呼ばれると、次の手順が実行される。0xa3561a1)(訳者註:loadingNOWの記事とはhttp://www.smogon.com/forums/showthread.php?t=23986であると思われる。この記事の中で、エメラルドでは乱数の種の初期値が0であること、1フレーム毎に乱数が進むことについて記述がある。生成することが分かる。[1A56B091]が与えられたとき、乱数生成器が出力する乱数は何になるだろうか。計算機を利用すると解は[6C469F301DB5BBD]をなる。[6073]を加えると[6C469F301DBBC30]となる。コンピュータは加算や乗算を二進数でのみ行うため、コンピュータにとって十六進数での加算と乗算も非常に容易であることを理解しておくこと。自分で計算してみたい場合は、Windowsが持っている電卓アプリケーションによって十六進数の加算と乗算を簡単に計算することができる。計算結果の下位32ビットより新しい乱数の種[01DBBC30](十六進数の一桁は4ビットであることに注意)を得られる。これにより生成された乱数は新しい乱数の種の上位16ビット[01DB]である。...乱数生成器を繰り返し実行することにより次のような疑似乱数の数列が生成される。回実行されると乱数の種の値が初期値と同じになることを示すことができる。値がそれぞれ1回ずつ乱数の種として利用される。このことは本質的に乱数の数列は4,294,967,296回乱数生成器が実行されるまで繰り返すことがないということを意味する。bits.ポケモンIDの生成は乱数生成器を2回実行することにより行われる。1回の乱数生成器の実行によって16ビットの乱数が生成されるので、2回分の16ビットの乱数を合わせることによって32ビットの数値を生成する。2個目の乱数が上位16ビットとなり、1個目の乱数が下位16ビットとなる。decimal.例えば上記のように乱数が[01DB]、[7B06]と生成されたとする。[7B0601DB](十進数で2063991259)となる。ability.前述のように、PIDから多くのポケモンの情報を求めることが出来る。本文書では、それらのうち性格、性別、特性の3種類のみについて記述する。table:まず最初に、ポケモンIDを本文書の最初に記述した方法で十進数に変換し下2桁を求める。下2桁の値を25で割ったときのあまりを次の表にあてはめると性格が求められる。gender.これは♂♀の性別がある場合のみ適用される。Chansey)は、その結果が優先される。255.それら以外のポケモンについてはポケモンIDの十六進数の下2桁をとり、十進数に変換する。その値は0から255の間の数値となる。Bulbasaur)。性別なし、常に♂、常に♀の他に次の4通りの性別カテゴリがある。course.この項目は2種類の特性のうち一つが選択されるポケモンのみについて適用される。ポケモンが一種類の特性しか持たない場合、もちろんその特性となる。ability.2種類の特性から一つが選択される場合、最小にポケモンIDを2進数に最下位ビットをとる。そのビットが0ならば、最初の特性、1ならばもう一方の特性となる。(訳者註:すなわちポケモンIDが偶数か奇数かで特性が決まる。chart):次の表はダイヤモンドおよびパールで2種類の特性から一種類が決定される場合のリストである。3.6種類のポケモンの個体値は2回の乱数生成器の実行結果から生成される。各個体値は5ビットであり(二進数の11111は十進数で31となる)、1個目の乱数は3種類(5x3=15)の個体値を含み、1ビット冗長となっている。残りの3種類の個体値は2個目の乱数に含まれている。-|SpDIV|SpAIV|SpeIV個体値は2個の乱数から次のように抽出される。して与えられたとする。