今回はDPtにおける乱数についてお話したいと思っています。
エメラルドでは初期シード(乱数の初期値)が固定されていましたが、DPtでは初期シードはDSの内蔵時計によって導かれるみたいです。つまり、エメラルドのようにいつも同じ乱数列になるということはないので、伝説のポケモン
を厳選するためにリセットを繰り返したが、以前捕まえたものと同じ個体値の組み合わせだったということはほとんどないと思います。
ただ、乱数の進み方がエメラルドなどといったGBA版のポケモンと違って時間(フレーム単位)で進行するのではなくゲーム内の行動によって進行するみたいです。具体的には128歩ごとに歩いたり、ぼうけんノートを開いたり、野生ポケモンが出るところで向きを変えるなどで乱数が進むとか。
言い換えれば、時間経過で乱数は進まないのでシードさえ特定できれば調整そのものは案外楽といえますね。ただ、同じエリアにいるNPCが動いても乱数が進んでしまうのでNPCがいない場所でやるのが賢明かも。ただ、伝説のポケモンなどといった固定シンボルがいる場所なら固定シンボル以外はいないのでそれほど気にしなくてもいいかもしれませんね。
DPtにおけるシードはDSの内蔵時計によって導かれるが、これには法則があるみたいです。ちなみに、その法則というのは次のような計算式で求めることができるとか。
シードを0xABCDEFGHとすると
AB=(月×日+分+秒)の下位2バイト
CD=時間(0x00~0x17)
EFGH=年-2000+t
*t = ソフト起動から「つづきから はじまる」を選択するまでの時間
ソフト起動から「つづきから はじまる」を選択するまでAボタンを連打した場合、tの値は0x256程度になるみたいです。ここではt = 0x0256とすると「年=0x7D0(2000)+0xEFGH-0x256」で割り出すことができるとか。ここで求めた時刻をDSの内蔵時計に設定して、起動すれば目的のシードが狙えるみたいです。
なお、年を調整したほうが目的のシードを狙いやすいけど、捕まえた年月日に拘りたい人はこのような調整はできないので、ここはタイミングよく「つづきから はじめる」を選ぶしかありませんね。ただ、1フレームは1/60秒と一瞬のものであり、反射能力があったとしてもずれてしまうこともあるのでできれば年で調整したほうがいいといえます。仮に数フレームぐらいずれたとしても年で調整することもできますし…。