Translate

2015年6月28日日曜日

甘い香りは乱数を消費しない

ORASレートでは依然として過去作の使用が禁止されており,過去作での乱数調整の需要は減りつつありますが,ORASでの孵化厳選用の親個体の調達に過去作で乱数調整した個体を連れてくるなど,完全に需要がなくなったわけではありません。
とくに,6世代から♀親のボールが遺伝するようになったこともあり,好きなボールで捕まえることができる野生乱数は今も現役の乱数調整だと思います。

しかしながら,野生乱数を扱った記事はあまり多くなく,多くの方が”食わず嫌い”しているのが現状です。
また,あやふやな記述に混乱して,間違った理解を続けている人も多くいます。
そこで今回の記事では,乱数調整の基礎的な理解を通して,野生乱数が誰でもできるように解説することを目標とします。

1.乱数の消費

乱数の消費というのは全ての乱数調整においてとても重要な作業です。
・おしゃべりで声を吹き込んだペラップのステータスを見ると1消費
・第5世代(BW,BW2)でレポートを書くと1消費
など,さまざまなことと乱数の消費はかかわっています。
この”消費”というのは乱数を”無駄遣い”しているわけではなく,何らかの目的のために”使用”していることがほとんどです。
例えば,上の例で言うと,
・ペラップの鳴く音程を決めるために乱数を1つ使う
・レポートの針の開始位置を決めるために乱数を1つ使う
というように,目的に応じて乱数が使用されています。

これは野生ポケモンと出会ったときも同じで,
・どのポケモンが出るか決めるために乱数を1つ使う
・シンクロが効くかどうかを決めるために乱数を1つ使う
・どの性格が出るか決めるために乱数を1つ使う
というように,1つのことがらに対して乱数が1つずつ使われています。

2.乱数が使われる順番

野生ポケモンと出会ったとき,一瞬でどのようなポケモンが出るかは決定されますが,実際には乱数は同時ではなく1つずつ順番に使われています。
この順番はゲームソフトごとに決められていて,第5世代(BW,BW2)だと,
1.シンクロが効くかどうか
2.どのポケモン(スロット)が出るか
3.どのレベルのポケモンが出るか
4.出るポケモンの性格値
5.出るポケモンの性格
という順番になっています。
(※3番のレベル決定については,草むらではスロットごとに設定されたレベルが使われるので無駄遣いになります。)

2.5.甘い香り

野生乱数を行う際には,ポケモンとエンカウントするために甘い香りを使うのが一般的な方法です。
ネット上の一部の記事では,甘い香りで乱数を消費するということが書かれていますが,甘い香りは乱数を消費しません。
実際にBWでの調整をなぞって説明します。
seed1:9E02B0AE989E5EFAで起動し,レポートを3回書くと針は5→6→2の順番で出ました。

9E02B0AE989E5EFAでの野生リスト

乱数の上1ケタとレポートの針には以下のような関係があるので,出た針の目と,リストの乱数を見比べることで乱数の現在位置を確認することができます。
乱数の上1ケタレポートの針
0,10
2,31
4,52
6,73
8,94
A,B5
C,D6
E,F7
針は5→6→2と出たので46~48番の
A399C58D → 5
C2D20080 → 6
4CA9B6F7 → 2
が順番に使われたとわかりました。
1.で説明したように,レポートの針は乱数を1つ使って開始位置を決めるので,いま最後に使われた乱数は48番の4CA9B6F7で,次に使われる乱数は49番のD030AD43となっています。
この状態で甘い香りを使ってエンカウントすると,
49番 D030AD43 → シンクロ判定 →成功
50番 8BEB8C46 → スロット判定 →ポケモン3
51番 8285A557 → レベル判定 →草むらなので無駄遣い
52番 FC29A45F → 性格値決定 →この場合FC28A45Fが性格値
53番 5BC040CA → 性格決定 →わんぱく(シンクロで上書き可能)
という順番で処理が進んでいき,bwseedlistで言うところの49番の個体が出現します。

ここで重要なのが,甘い香りは乱数を消費していない,という事実です。
もし甘い香りがレポートの針のように乱数を1つ消費していればD030AD43という乱数は甘い香りによって無駄遣いされてしまうので,出現する個体は1つ下の50番の個体になってしまいます。
しかし,実際に出現したのは49番の個体なので,甘い香りは乱数を消費しない,という事実が言えます。

3.如何にして乱数調整を成功させるか

前の章で説明した通り,シンクロに使われる乱数の直前まで消費して甘い香りを使えば目的の個体を出現させることができます。

乱数調整において重要なことは
オフセットからいくつ消費するか,ではなく
どこまで消費してエンカウントすればいいか,です。

シンクロによる判定がどの乱数から始まるかがわかりにくいかもしれませんが,シンクロ判定と乱数値の上1ケタには
0~7 → シンクロ失敗
8~F → シンクロ成功
という関係があるので,リストを見比べればわかりやすいと思います。
48,4CA9B6F7,ポケモン6(5%),きまぐれ ,×,8284A557,
49,D030AD43,ポケモン3(10%),わんぱく ,,FC28A45F,
50,8BEB8C46,ポケモン3(10%),わんぱく ,,5BC140CA,
51,8285A557,ポケモン10(1%),まじめ  ,,574B75C0,

また,色違い調整などの場合は1000以上の消費が必要になることもあります。
この場合,オフセットからいくつ消費するか,と考えてしまうと1000回以上ペラップを鳴かせる回数を数えることになります。
しかし,どこまで消費するか,と考えると非常に単純な問題になります。シンクロの直前まで消費すればよいのです。

BW2ではライブキャスターを開くと1秒で約120消費されるので,1000消費なら8秒程度で済みます。
ライブキャスターである程度消費した後は,レポートの針を使って乱数がどこまで消費されているかを確かめ,ペラップ鳴かせなどで微調整していくと消費を数える必要がなくなります。


4.まとめ

今回は,野生乱数を元に乱数調整の基礎について解説しました。
乱数調整の基礎的な理解があり乱数が使われる順番についての知識があれば,固定乱数や孵化乱数も同様に,どこまで消費するか,という非常に簡単な問題になります。

ここがわからないなどの質問があればコメントしてください。説明を付け加えます。

2014年11月25日火曜日

IDくじでマスボ回収の効率化

ORASのレートでは過去作のポケモンが禁止となったこともあり,現在ORASで準伝の厳選に励む人が増加しています。
この厳選作業ですが,ポケモンを必ず捕獲できるマスターボールを使用するのが最も効率の良い厳選方法です。
マスターボールはシナリオでの入手以外に,XYのミアレシティのIDくじ・ORASのミナモデパートのIDくじにてIDを5桁一致させることによっても入手可能となっています。

つまり,XYもしくはORASのIDくじで出た番号のIDとなるようにBW1でID調整をし,そのデータで捕まえたポケモンをXY,ORASに輸送すればマスターボールが毎日もらえます。


このID調整によるマスターボール回収作業を効率化すると,手順は以下のようになります。

  1. MasterBallGeneratorを用いて全てのIDについて起動時間を計算してリスト化する。
  2. XY・ORASでのIDくじの番号を記録してレポートを書かずにリセットする。
  3. 1.で作成したリストを参照して,記録したくじ番号にID調整をする。
  4. BW1のシナリオを進め,ポケバンクを使用してXY・ORASにポケモンを輸送する。
  5. ミアレシティのIDくじセンターまたはミナモデパートにてマスターボールを受け取る。


1.MasterBallGeneratorを用いて全てのIDについて起動時間を計算してリスト化する

MasterBallGeneratorを下記リンクよりダウンロードします。
http://odanado.github.io/ika-ransu-tools/MasterBallGenerator.zip

MasterBallGenerator.exeを起動後,説明に従って必要なパラメータ及び値を入力してください。
MasterBallGenerator.exeと同じフォルダにSSS4のconfig.txtがあればそれを読み込みます。

また,Timer0ずれを考慮する場合(秒の幅)×(いいえの回数+1)が500ぐらいあれば全IDが見つかります。
両Timer0での起動時間が見つかない場合,よく出るTimer0の方を出力します。




入力が完了するとMasterBallGenerator.exeがあるフォルダにresult.txtというテキストファイルが作成されます。
このresult.txtは,全てのIDについての起動時間をまとめたリストになっています。

2.XY・ORASでのIDくじの番号を記録してレポートを書かずにリセットする。

IDくじのNPCの前でレポートを書いておき,IDくじの番号を記録して電源を落とせば良いです。


3. 1.で作成したリストを参照して,記録したくじ番号にID調整をする。

1.で作成されたresult.txtがMasterBallGenerator.exeと同じフォルダにあれば,MasterBallGenerator.exeはresult.txtを参照するモードになります。

画像のように検索したい表IDを入力すれば,result.txtを開くことなく起動時間を見つけることができます。




出力された起動時間にゲームを起動し,書かれた回数だけいいえを選択します。
ほとんどの場合,この操作でID調整は完了しています。
timer0の値が違うものになってしまうことなどが原因で,目的のIDになっていない可能性もあるので,出たIDをここで確認することをお勧めします。

4.BW1のシナリオを進め,ポケバンクを使用してXY・ORASにポケモンを輸送する。

5.ミアレシティのIDくじセンターまたはミナモデパートにてマスターボールを受け取る。

あとは分かると思うので割愛します。


FAQ
Q.
このツールってどこがすごいのですか?

A.
0から65535までの全表IDについて,オフセットを考慮したうえで消費なしでID調整できる日時を求めることができます。
これにより従来のマスボ回収のためのID調整の手法だった,各表IDについて消費数に幅を持たせて検索してから出た初期seed候補のオフセットを手作業で求める,というわずらわしい作業をする必要がなくなりました。


Q.
初期化していないBWでもできるのですか?

A.
できません。
仮に初期化していないロムでID調整を行っても,通信ができずレポートも書けないので,第6世代にポケモンを送ることができません。


Q.
このツールはBW2でも使えますか?

A.
現在,BW2には対応していません。
今後対応する予定も今のところありません。


Q.
2月30日など調整できない日付が出るんですが?

A.
バグを修正した最新版をアップロードしているので,お手数ですが最新版へのアップデートをお願いします。


Q.
ツールで出た時刻の-1秒でゲームを起動する必要はありますか?

A.
はい,数秒前にゲームを起動する必要があります。起動を早める秒数は環境によって変わるので一概には言えませんが,DS・DS Liteでは1秒前起動で構いません。

2014年10月5日日曜日

本ブログでの用語集

本ブログでの用語集です。
解説記事に不明な用語が存在すればその都度参照してください。


  • 世代間共通
乱数調整
ゲーム内での乱数生成の仕組みを理解し,その仕組みを利用して意図した結果を得ること

2進法
2を基数とした数値の"表現方法"
普段目にしている数値は10進法による表現

16進法
16を基数とした数値の"表現方法"
小さい方から順に,0123456789ABCDEF と表現する

bit
2進法における一桁のこと

上位
2進法での上からのbitのこと
上位32bitとは2進法での上から32bitを指す

下位
2進法での下からのbitのこと
下位32bitとは2進法での下から32bitを指す

最上位
2進法での最も上位にあるbitのこと

最下位
2進法での最も下位にあるbitのこと

mod
余りのこと
Windows附属の電卓で計算できる

LCG
線形合同法

MT
メルセンヌツイスタ

乱数
r(n) と表す
LCGの実際に使われる値を指すことが多い

乱数列
乱数を並べたもの

消費
乱数をゲーム内のランダムな事象に使用後,乱数が更新されること

スキーム
個体生成などのランダムな事象が発生するときの消費される乱数の約束事

初期seed
ゲーム開始時に決定される乱数列の初期値
世代ごとに算出方法が異なる

RTC
リアルタイムクロック
3世代はソフト側が,4世代以降はハード側が保持する

フレーム,F
時間の単位
1秒あたり約60フレーム

性格値
32bitの値
由来は性格を決定する値だったが,5世代では性格と性格値の関係はなくなった
色違いの判定,個性の決定に使用される
性格値,性格値の上位16bit,性格値の下位16bitをそれぞれPID,HID,LIDと表す

ID
トレーナーが持っている32bitの値のこと
トレーナーカードで確認できる16bitのIDを表IDと言いTIDと表す
一般には確認できない16bitの値を裏IDと言いSIDと表す


  • 5世代
オフセット
5世代乱数においてゲーム起動時に強制的に消費されるLCGの数のこと
実際の調整時には起動時のオフセット消費のほかに不定NPC等による消費が起こる場合もある

sha-1
ハッシュ化アルゴリズム
5世代乱数では乱数の初期値の決定に使用される

パラメータ
nazo値やVCountなどの値
sha-1ハッシュ化に使用される

Timer0
パラメータの1つ
制御不可能

seed0
sha-1ハッシュ値の上位64bitのこと

seed1
seed0から1つLCGを更新した時の値のこと
MTの初期化にはseed1の上位32bitが使用される

ID補正
性格値が決定される時にTIDとSIDの奇偶によってHIDの最上位bitを書き換える補正のこと

レポ針
レポートの針のこと
起動後にレポートの針の場所を確認することによって初期シードの一致や今LCGがいくつ消費されているかを確認できる
5世代乱数では必須の作業


  • 4世代
奇数ズレ
経過フレームが2Fずつ進むため,初期シード決定時の経過フレームが奇数偶数どちらかに偏ること


  • 3世代
メソッド
個体生成時のスキームのこと

メソッドズレ
何らかの原因により個体生成時のスキームが崩れること


随時追加します