ORASのID調整に成功したので適当に調整手順等を纏めます。
ORASのID調整に成功しました。
— ぼんじり(17) (@_3z8) 2020年8月24日
調整するにあたって作成したツールや手順等は後ほど記事に纏めます。
難易度に関して、TSV/TRVを把握するだけならそこまで難しくはないですが、任意IDを調整する場合は1ms単位の操作精度を求められる為かなり難しくなります。 pic.twitter.com/l0LdmT9f7Q
疑似乱数周りの仕組み(ID決定に関係するもののみ)
- 乱数生成器はMT、TinyMTの2種類
- ID決定にはTinyMTが使用される
- それぞれの乱数生成器の初期seedは別の値になるが、「(セーブデータ依存の値)+(起動時間ミリ秒)」という点は共通
- セーブデータが存在しない場合、「セーブデータ依存の値」は固定される
- ID決定までのTinyMTの消費数は[13 + (名前決定後『いいえ』を選択した回数)]となる
ID調整方法の考察
ID決定に使用されるTinyMTは非線形となる処理を用いて乱数値を生成する為、逆算は困難。
但し、初期seedは高々32bitである為、以下の点を踏まえれば「起動時間を管理しながら出現するIDを複数個観測する」ことにより総当たりで特定可能なことが分かる。
- 初期seedは「(セーブデータ依存の値)+(起動時間ミリ秒)」
- セーブデータが存在しない場合、「セーブデータ依存の値」は固定される
- 名前決定後、『いいえ』を選択しなければID決定までの消費数は固定される
初期seed決定に使用される起動時間は厳密には1ミリ秒単位だが、流石に人間業では管理不可能なので1秒(1000ミリ秒)程度に幅を広げる。
この場合、IDを4個ほど観測すれば充分に初期seed(以降基準seedと呼ぶ)を絞り込むことができる。
基準seedに経過時間ミリ秒を足した値がそのまま初期seedとなる為、ソフト起動時に1ミリ秒を合わせれば任意のIDを引くことができるようになる。
また、ミリ秒を合わせずとも出現したIDがどのseedから生成されたか高い精度で絞り込める為、SID/TSV/TRVの把握が非常に簡単に行える。
調整にあたっての理論的な説明っぽいのは以上の通り。
これらの作業を簡潔に行う為のツールを作成したので使い方を適当に紹介する。
DL:https://bzl.hatenablog.com/entry/2090/11/11/000000#6genTidSearch
基準seedの特定
ゲームを新しく開始し、出現したIDを確認する作業を4回行う。
この際にカウントダウンに対応したタイマーとカウントアップに対応したタイマーの2つを用意する。
この内前者は基準seed特定時の時間管理、後者は作業全体の時間管理に使用する。
1回目の確認を行う際、ソフト選択と同時に2つのタイマーを開始する。
筆者が調整した際は自作のタイマーを使用した。
DL:https://bzl.hatenablog.com/entry/2090/11/11/000000#CCTimer
基準seed検索タブの設定内容は以下の通り。
- 「TID1-4」 → 出現したIDを入力する。
- 「経過時間」 → [(ソフトの起動時刻)-(1回目のソフト起動時の起動時刻)]を秒数で入力する。
- 「許容誤差」 → ソフト起動時刻の誤差の幅をミリ秒で入力する。
一通りの入力を済ませたら検索を開始する。
PCスペックにも依るが少し時間が掛かる。(検索処理が雑すぎるだけ)
複数の候補が表示された場合はミリ秒ズレの幅を見て現実的であるものを選ぶ。
目的のIDの検索
ID検索タブを開き、特定した基準seedを入力する。
目標ID条件を入力したら検索を開始する。
現在の経過時間から目標のフレームを決め、待機を行う。
この際に実際に待機する時間は[(出力された待機時間)-(1回目のソフト起動から経過した時間)]となる。
指定された消費数分TN決定後に『いいえ』を選択して乱数の消費を行う。
消費が終わったら『はい』を選択し、自由に動けるようになった時点でIDを確認する。
目標のIDでない場合、ズレ確認タブを開く。
目標フレームのseed、消費数と実際に出現したIDを入力し、計算を開始する。
ここで表示されるズレはミリ秒単位。
SID/TSV/TRVも出力されるので、これらの値を把握することが目的であるならここで作業終了してもよい。
任意のIDを狙う場合は再度目標フレームを決め、この手順を繰り返す。
あとがき
「ポケモンXYのID調整に成功した」という噂を風の便りに聞いたので便乗してみました。
XYは持っていなかったので、取り敢えず手元にあったORASでチャレンジしてみましたがミリ秒合わせはかなり難しかったです…
難易度的に考えるとSID/TSV/TRVの把握の為に使った方がまあまあ実用的かと思います。
詳細は知りませんがこちらはミリ秒ゲーではないようです。
XY買ったので調べてみたらできました。
↓
bzl.hatenablog.com