こんにちは。ニアトです。
一年半前にBDSPにおける乱数調整メモ という記事を書いていましたが、性懲りもなくこのゲームの話をします。
BDSPにおける乱数調整用ツールであるPlayerBlink[1]は乱数調整に必要なSeed特定やタイマーなどの機能を提供しています。
一方で、いざこのツールを使ってみようとすると、
といった部分が目につきます。他にも幾つか気になる点はありますが、一言で言えばUXが著しく悪いのです。
今回はこれらの問題を解決する新ツール"XsReader"を紹介し、その使い方を解説します。
用語を次のように定義します;
Advance/Target Advanceに関しては消費数/目標消費数(あるいは[F]/目標[F])などの呼び方もありますが、本記事ではXsReaderや他ツールでの名称に合わせる形で呼ぶことにします。
Readmeに記載している内容を引用する形でツールの概要を紹介します。
XsReaderはポケットモンスター ブリリアントダイヤモンド・シャイニングパール(以下BDSP)における乱数調整ツールです.
このツールを用いてフィールド上での主人公の瞬きを観測することで,
- 基準seedの特定
- 基準seedからのadvance(どれだけ乱数が消費されたか)の特定
- タイムラインの生成
- 固定シンボルを考慮したタイムラインの生成
を行うことが出来ます.
このツールはPythonやJavaのように外部ランタイムを必要としません. 必要な実行環境は殆どのWindowsではデフォルトでインストールされています.
また, OBSなどのプレビュー画面越しに観測を行うためキャプチャーボードを占有することもありません.
こんな感じの見た目をしています。
基本的には中央のseed特定
Adv.再特定
タブと同期
内のタイムライン表示を使います。
ツールの画像は開発版で撮影したものです。最新版とは多少差異がある場合があります。
XsReaderを用いて乱数調整を行う場合の想定フローは以下の通りです。
基準seedを求めて、そこから目標個体を探して目標消費を調べて、そこに到達するまで消費して、最後に個体生成のタイミングを合わせるだけです。
やってることはSM/USUMやソード・シールドのOW乱数に近いですね。
XsReaderを用いたBDSPにおける固定シンボル乱数の手法について説明していきます。
必要な機材・ソフトウェアを以下に示します。
Switchの画面をPCに取り込める環境が必要となります。
所謂格安キャプチャーボードでも動作するとは思いますが、もし心配なようであれば、FullHD・60FPS出力に対応している製品を購入することを推奨します。
Switch Liteの場合でもWebカメラなどを活用して画面を取り込む環境が作れるのであれば乱数調整は可能ですが、映像品質や遅延の観点からおススメしません。
また、対応OSについてはWindowsのみをサポートしています。恐らくMac/Linux向けにもビルド/実行できるとは思うのですが、検証できる環境がないためサポート対象外です。
個体検索ツールに関しては、基本的には固定シンボル・孵化乱数の両方に対応しているPokeFinderの利用を推奨します。固定シンボルのサイズ乱数を行う場合はBDSPSearchを利用してください。
キャプチャーボードを持っている方であればOBSなどは既に導入されていると思います。導入していない場合はインストールしてください。
以降の説明ではPokeFinder/OBSを用いて説明します。他のソフトをお使いの方は各自の環境に読み替えてください。
以下のURLから最新版のXsReader.zip
をダウンロードします。
https://github.com/niart120/Project_eXcelSior/releases
zipファイルをダウンロードしたらファイルを展開(解凍)します。
zipファイルをダブルクリックして開いても動作しません。必ず展開したフォルダから実行してください。
基準Seedを特定するには、主人公の瞬き以外に乱数を消費する要因が無い状態が必要です。
フタバタウン自宅2Fや、シンジ湖・リッシ湖・エイチ湖の洞窟前、テンガン山(槍の柱出口)、地下通路内に生成した秘密基地などの、"静か"な場所[2]に移動しましょう。
移動したら、便利ボタンから"すごいつりざお"などを呼び出し、メッセージウィンドウが表示されている状態を作ります。
こうすることで fidget[3]が抑制され、瞬き以外の乱数消費がすべてストップします。
以降、基準Seed特定が完了するまでSwitch側を操作する必要はありません。場合によっては長時間放置することになるため、自動スリープは切っておきましょう。
Switch側でやりがちなミスとして
などが挙げられます。
つづいてPC側で主人公の目の画像を撮影しましょう。
ツールを開くと、メインのウインドウと一緒に小さなウィンドウが出てきます。
今後、このウィンドウのことをキャプチャウィンドウと呼称します。
キャプチャウィンドウをキャプボの画面上まで移動させて、主人公の目の位置に合わせます。
位置があっていることを確認して、ツールの画像撮影
ボタンをクリックしてください。
すると、eyeimage
フォルダに撮影した画像(yyyymmddhhmmss.png
)が保存されます。必要に応じてリネームしてください。
また、目の画像が大きすぎる場合は正常に瞬きを検知できないことがあります。その場合は保存した画像を別途トリミングする必要があります。
以下は観測上望ましい画像とそうでない例です。
Image Not Showing
Possible Reasons
|
Image Not Showing
Possible Reasons
|
---|---|
◎(目だけが切り抜かれている) | ×(目以外の領域が大きい) |
以降の操作ではOBSなどの画面の大きさを変更しないようにしてください。正しく瞬きを観測できなくなる恐れがあります。
いよいよ基準Seedの特定を行います。
先ほど撮影に用いたキャプチャウィンドウは少し広げておきます。
Seed特定
タブ内の瞬き画像
リストから先ほど撮影した画像を選択します。その後Start
ボタンをクリックすると瞬き観測が開始されます。
観測中はstart
ボタン横のインジケーターがInProgress
へと変化し、左側のテーブルに観測した瞬き間隔とその種類が追加されていきます。(左図)
エントロピーの値が128以上になるとSeedの復元処理が走り、特定出来るとBaseSeedの値が更新されます。また、インジケーターもsuccess!!
へと変化します(右図)
![]() |
![]() |
---|---|
特定中 | 特定終了後 |
ツール側でやりがちなミスとして
などが挙げられます。
特定終了後は、プレイヤーの瞬きと同期する形でAdvance(現在の消費数)のカウントや次の消費イベントまでのカウントダウンタイマーが走り始めます。
映像上の主人公の瞬きとツールが同期していることを確認してください。
基準Seed特定後はホーム画面に戻る、あるいはSwitchをスリープさせても構いません。
ホーム画面にいる間や、スリープ中はあらゆる乱数消費が止まります。落ち着いて次のステップに移りましょう。
注意:
ゲームソフトを完全に終了させてしまうとSeedがリセットされます。
基準Seedの特定からやり直してください。
何回やってもインジケーターがFailed
となって失敗してしまう方向けのTips:
多くの場合、瞬きの誤検知が原因です。以下の事象が発生していませんか?
a. 瞬きの種類(BlinkType
)が"***"のようになっている行が存在する
b. 0から2程度の極端に短い瞬き間隔(Interval
)が5,6個連続している
c. 画面上だと瞬きしていないにも関わらず、勝手にツール側が更新される
d. 画面上だと瞬きしているのが目視で確認できたのに、ツール側が更新されていない
これらの問題は画像の再撮影やトリミング、あるいはキャプチャウィンドウの拡大によって解決されることが殆どです。
上記を全て試しても解決しない場合は、設定
タブから瞬き閾値
の値を調整することで解決することがあります。
a.~c.に該当する場合は閾値を増やし、d.に該当する場合は閾値を減らしたうえでSeedの特定を実施し、上記の事象が解消されることを確認してください。
特定した基準Seedを用いてPokeFinderから個体検索を行います。
PokeFinderを起動し、Gen8
タブから該当する乱数調整種別を選択して検索ウインドウ画面を開きます。
例えばディアルガ・パルキアやハマナスパークなどの固定シンボル乱数を行うのであればStatic
を、孵化乱数を行うのであればEgg
を選択してください。
その後、Seed0
Seed1
に求めた基準Seedを入力し、検索項目を埋めてGenerate
をクリックすると個体の候補が一覧で表示されます。
いくつか個体が出てくると思うので、候補の中から目的の個体を選んでください。その個体のAdvances
をXsReaderのTarget Adv.
に入力します。この値が今回のTarget Advanceとなります。
PokeFinder内のUse Delay
を利用することで、個体生成前の消費を考慮した検索が可能です。
PokemonRNGGuides内の Stationary.md に記載されている各ポケモンのDelayを入力したうえで検索することを推奨します。
PokeFinderのより詳しい使い方については、じゃんきー氏のはじめての BDSP固定乱数(パルキア/ディアルガ)でも説明されているのでそちらもご参照ください。
目的の個体Target Advanceまでのカウントダウンが利用可能となりました。とはいえ、たいていの場合、カウントダウンの値は数千から数百万となることが多いため、手動で乱数消費を行うことでTarget Advanceまで近づける必要があります。
BDSPにおける乱数消費の手法に関しては幾つかありますが、ポケモン図鑑を開いて図鑑をスクロールするのが一番手軽です。
全国図鑑入手後のシンオウ図鑑を利用する場合の消費数を以下に掲載します[4]。
図鑑操作中も主人公やポケモンによる消費(
他にも、連れ歩き可能な屋外フィールドで放置するなどでも高速消費が可能です。具体的な消費速度については各自でご確認ください。
良い感じに乱数を消費できたところで、Advanceの再特定を行い、Target Adv.までどれほど近づいたかを確認しましょう。
図鑑などで乱数消費をしてみたものの、具体的にどれくらい消費したのか正確な値は分かりません。現在のAdvanceを再特定するために、もう一度瞬きの観測を行いましょう。
XsReaderのAdv.再特定タブ
を開くと、幾つかの入力項目が表示されます。
それぞれ簡単に説明しておきます。
検索範囲
最低観測回数
InNoisy
他の項目についてはSeed特定
と同様です。
Advanceの再特定を行う場合は、基準Seedの特定時とは異なり固定シンボルのいる部屋での再特定が可能です。実際に試してみましょう。
検索範囲を調整し、最低観測回数を少し増やして、InNoisy
にチェックを入れるのを忘れないようにしてstart
ボタンをクリックします。
すると…
画像だと分かりにくいですがAdvanceの再特定に成功しました。どうやら今回はTarget Advanceを大幅に過ぎてしまったようですね。
この場合は再度Pokefinderで個体を検索しなおす必要があります。特定したBaseSeedは使いまわせるので、Seed特定からやり直し、ということはありません。
Target Advanceが近づいたらいよいよエンカウントです。
消費と再特定を繰り返して、"Target Adv.まで"のカウントが100-200ぐらいになったら、メッセージウィンドウを閉じてシンボルに話しかけ、鳴き声のウィンドウを表示させます。
博士の言葉のメッセージウィンドウを閉じる際に、必ずアナログパッド(あるいは十字キー)を倒しながら閉じるようにしてください。
そのままメッセージウィンドウを閉じてしまうと fidget による消費によって以降のタイムラインがズレる可能性があります。
上図のように主人公が横を向いた状態で話しかけることで、鳴き声のウィンドウを開きつつ瞬きを観測することが出来ます。
横を向いた状態の目をキャプチャして再度Adv.再特定
を行うことで、より安定して狙った個体を出現させることが出来ます。
その後、"Target Adv.まで"のカウントが0になると同時にメッセージ送りをしてエンカウントします。成功していれば目的の個体が出現します。
成功しなかった場合でも、一度捕獲してPokefinder上で検索してどのくらいのズレが生じていたのかを検証することを推奨します。
±10以上ズレる場合はその分Pokefinder側のdelay
を調整してください。
ちゃんとカウントを合わせた筈なのに失敗した!という方へ;
これはタイムラインの予測が不完全なことに由来しています。
タイムライン生成中の主人公の消費タイミングと固定シンボルの瞬きがタイミングが非常に近い場合、以降のタイムラインがズレることがあります。
また、ユクシー・アグノムなどの幾つかのシンボルでは、鳴き声のウィンドウを表示した際に消費が挟まり、以降のタイムラインが不整合を起こす場合があります。
残念ながら現時点では根本的な対処方法はありません。
本記事では拙作のXsReaderの紹介と使い方解説をしました。
もしツールの使い方などで分からないことがあれば、Discordのポケモン乱数鯖までお問い合わせください。#ダイパリメイク
チャンネルにてお伺いいたします。
発売から一年以上たった今、BDSPを遊んでいてかつ乱数調整をしたいという方がどれだけいらっしゃるかは分かりませんが、このツールがそういった方々の一助になることを願います。