みが@乱数調整

動画で紹介するには難しそうなことを解説します

調べたランダムイベントの処理まとめ(需要皆無)

こちらはPokémon Past Generation Advent Calendar 2023の103日目の記事となります。

scrapbox.io

 

この記事ではポケットモンスターというゲームにおけるランダムイベントの処理のうち自分が調べたものをまとめています、需要は知りません。(随時追記する予定です)

 

第三世代のまもる

wiki.xn--rckteqa2e.com

ポケモンWikiに確率の記載があるがこれは厳密には違う。RSではこれで正しいが、FRLGとEmでは分子が1ずつ大きくなる。(比較処理が未満から以下になっているため)

ちなみに五回目以降の確率は「ゆびをふる」で出ない技リストなど関係のないテーブルを参照している。

FRLGいわくだき

ほてりのみちとしっぽうけいこくは25% それ以外は50%でエンカウント

乱数値 % 0xb40 < 16 * 確率 が真の時エンカウント

通常初期SEEDの二つ後の乱数の上位16bitがエンカウント用乱数の初期SEEDになる

起動後最初の場合は初期SEED*0x41c64e6d+0x3039の上位16bitが計算に使われる

Lv25マグカルゴをやるときの参考にどうぞ

DPtきのみじいさんがくれるきのみの種類

乱数値 % 26 + 1の番号のきのみをくれる

ポケモンwikiの記述がおかしくないか?と思い調べた

もりのようかんの少女

乱数値 % 101 < 25が真のときに発生、食堂の爺さんは調べていないけど同じだと思います。()

ちなみに部屋から出た後の床はエンカウント判定有りで軽減を考慮する必要があるので連続遭遇は面倒そう。(小部屋側のカーペットは出入口なので判定なし)

 

イッシュ6番道路の気温

気温範囲

春 11~19°C

夏 19~34°C

秋 11~19°C

冬 -1~-9°C


決定方法

気温範囲の左側を基礎気温とする、季節研究所に入る時に決定

気温 = 基礎気温 + (乱数値 * 気温幅) >> 32

気温幅は夏が16、それ以外が9

冬だけ基礎気温に足すのではなく引いた値になる

確率が確率なので乱数調整を使うまでもない

マナフィ色孵化乱数(蒼玉) in DPt

サムネ用

こちらはPokémon Past Generation Advent Calendar 2023の86日目の記事となります。  

scrapbox.io

 

ポケモンレンジャーシリーズの特別ミッションをクリアした時に貰えるマナフィのタマゴ、通称蒼玉。

このタマゴには通常色違いブロックルーチンが掛かっています。

しかし、このルーチンが働くのはタマゴを受け取る時のみ。その為受け取ったROMとは別のROMで孵化をすれば色違いになる可能性があります

乱数調整の難易度としてはそこまで高くないものの、間違えた状態で受け取って通信交換をすると取り返しがつかない事態になってしまいます。

そもそも第四世代の配達員乱数では基本的に唯一不定NPCの居ないHGSSハナダシティのフレンドリィショップが好まれるのですが、途中で交換を挟む必要がある以上失敗が許されないので更にその一面が強調されます。

ハナダシティにはNPCはいるものの両方動かない

なので基本的にタマゴをの受け取りをDPtですることは推奨されないのですが、DPtで受け取ることによるメリットが一つだけ存在します。

それは第五世代以降へと送った時の出身地方HGSSで受け取るとジョウト地方DPtで受け取るとシンオウ地方で出会ったことになります。孵したROMは関係ありません

というわけでDPtで安全に受け取る方法を考えた結果思い付いたのが、受け取りに使われる消費を考慮しペラップの鳴き声を聞くというものです。

喉を酷使させる

不定NPCによる消費が入って困るのは、消費を終えメニューを閉じてから配達員に話しかけるまでの一瞬の隙です。なので配達員との会話が終わった後またすぐメニューを開きペラップの鳴き声を聞くことにより、その隙に消費が入っていないかを調べられます。もちろん会話後からメニューを開くまでの間にNPC消費が入っていてタマゴには影響していない可能性もありますが、そこはまあ妥協しましょう。

 

やり方

まず個体検索や初期SEED検索は4genSearchで行う。性格決定処理にチェックを入れなければよい。(余談だが性格決定処理がないという共通点からマナフィの生成処理は「徘徊」と呼ばれることがある、厳密には間違い)

個体検索して

性格決定処理なしで初期SEED検索

ID検索はGen4 ID Seed Searchを使いましょう。周辺IDの検索はDDDDLoopが一番良いと思います。

なんとWeb上で動く

不定NPCが一人のショップの配達人の目の前でレポート。ゲーム起動後、そのNPCが動いたのを確認したらすぐメニューを開きます。(ちなみにNPCの動きを確認した直後にメニューを開けば猶予時間が得られるという考えはいーさんのアイデアです、ありがとうございます。)

マサゴタウンのショップは不定NPCが一人(右の男性)

ここでペラップの鳴き声を利用して初期SEEDを特定します。使用するのはChatotTool、事前消費上限はNPC消費の都合上4や6でいいでしょう。(もちろん徘徊がいる場合はそれも考慮する)

特定したら目標消費までひたすらペラップを「しばく👊」します。もちろん「声帯」にチェックボックスを入れることを忘れずに。目標消費に辿り着いたらメニューを閉じてすぐに配達員に話しかけます。

しばく👊

そして会話終了後またすぐにメニューを開きます。ここで「しばく👊」ボタンを追加で四回押します。これは個体生成時に乱数が四回(性格値下位、性格値上位、個体値HAB、個体値SCDの順)使われるからです。

再びペラップの鳴き声を聞くと共に「しばく👊」ボタンを押し、実機側の鳴き声とChatotTool側の鳴き声が何回か聞いて一致しているなら成功です。不安なら一度交換させずに孵化し、性格や個体値が合っていることを確認しましょう。

ちなみにプラチナのジャッジは教えてくれるステータスの偏りが酷いので注意

これでID調整したROMへ交換すれば色違いのマナフィが産まれます。タマゴを孵した画面では通常色の見た目になっていますが、これはこの時点では親IDの情報が受け取ったROMの情報になっているからです。

この画面用の色違い画像が用意されていない、みたいな誤情報が広まっているが誤り

実際に手持ち画面を開けばしっかり色違いになっています。

ちなみに表IDは60715



というわけでDPt産色マナフィで差をつけたい、という方向けの記事でした。

この記事の乱数調整はVTuberデビュー初配信で行ったので是非視聴、高評価、チャンネル登録よろしくお願いします。(強欲)

www.youtube.com

www.youtube.com

海外版第三世代でめちゃくちゃなニックネームのポケモンを作ろう

こちらはPokémon Past Generation Advent Calendar 2023の76日目の記事となります。  

scrapbox.io

 

サムネ用

やる気に満ち溢れた顔をしている(?)ナゾノクサ

 

 

めぽさんの以下の記事の発展形なので先にこちらの記事を是非ご覧ください。

mahodoriproject.hatenablog.com

mahodoriproject.hatenablog.com

 

三世代のNN変更におけるトレーナー名判定は、あくまでも文字コードが一致かを判定しているだけ。

というわけで言語IDが日本語のポケモンを海外版へと送り、6文字以上の名前を付けて第四世代以降へと送ると通常ではありえない個体を作れるわけです。

 

では逆に言語IDが日本語以外のポケモンを日本版へと送りニックネームを変更するとどうなるのでしょうか?

まずは第三世代における文字コードの使用を確認しましょう。種百科にちょうどいい記事があります。

bulbapedia.bulbagarden.net

8bitで一文字が管理されており、行が上位ニブル、列が下位ニブルです。そして文字入力画面で使用できる文字は白背景、そうでないものは灰背景になっています。

この文字の中には海外版限定の文字は含まれておりません。そちらはどのように表示しているのでしょうか。

海外版では日本語版とは別のフォントセットが用意されており、このような内容になっています。

トレーナー名やニックネームなど、日本語が必要な時だけは日本語版のフォントセットを参照するようになっているわけです。(日本語版には海外版のフォントを参照する機能はない、海外版限定文字は文字入力画面には存在しないため)

 

ではここで言語IDが日本語以外のポケモンを日本版へと送りニックネームを変更するとどうなるのかを考えていきます。

結論から言うと、同じ文字コードの海外版用フォントの文字が表示されます。例えば「あ」は文字コードが0x01なので、「À」へと変化します。これを使用すればめちゃくちゃなニックネームのポケモンを作り出すことが出来ます。

PKMNPOKéLv

(Ò¿Ó)

 

難点を挙げると、日本語版で見た場合や第四世代へと送ると日本語の名前へと戻ってしまうというものがあります。ちなみに一部の海外版NPC交換ポケモンは入力不可文字が使われているので、名前がおかしくなるというバグが存在します。

bulbapedia.bulbagarden.net

 

余談ですがエメラルドだと海外版のポケモンを日本語版でニックネーム変更することは出来たのですが、逆に日本語版のポケモンを海外版でニックネーム変更することはできませんでした。(FRLGは未確認、本題内の個体は全てRSのみを使用)

 

というわけで皆さんもニックネームで大喜利をしてみましょう。

SVの裏IDを特定する方法 & 過去作でニックネーム変更済みの個体をリネームしてみる

こちらはPokémon Past Generation Advent Calendar 2023の51日目の記事となります。

第八世代以降、言語が一致していて尚且つNNを変更したことの無いポケモンならトレーナーIDが異なっていてもNN変更を行えるようになっています。
しかし、NN変更済みの個体のNNを変更したいとは思いませんか?
というわけで過去作のIDをSVと同じにし、過去作側でニックネームを変更してからSVに送ってもニックネームを変更できることを確かめてみましょう。(手段と目的が逆転している気がする)
 
では、実際にNNを変更できるための条件はどうなっているのでしょうか?第六世代や第七世代と同じと仮定した場合、ポケモンとトレーナーの以下の要素が一致する必要があります。  

  • 親名

  • 言語

  • ID(表ID・裏ID)

  • 親の性別

  このうち、ID以外は簡単に同じにできますね。しかし、裏IDを観測するのは難しい上に第六世代以前と第七世代以降ではIDの仕様が変更されています。

第七世代以降のIDは内部的には第六世代以前同様、表IDと裏IDの合計32bitで構成されています。そして表示上のIDはこのような式で計算されます。

$G7TID=(TID+SID\times65536) \mod 1000000$

例えば表IDが12345、裏IDが54321の時は12345+54321×65536が3,559,993,401なので993401になります。(某極悪違法ツールのデフォルトID)
内部的に保持されている出身ソフトと照らし合わせ、どちらの方式で表示するのか決めているわけです。

ところがLEGENDSアルセウスにはSV出身ポケモンのIDを旧方式で表示、つまり元の表IDを表示してしまうという仕様が存在します。(どう考えてもプログラムのミス)

表IDとG7TIDが分かっているなら裏IDを求められそうですね。
数学的に頑張って解いてみましょう。(総当たりでいいだろとか言ってはいけない

$(SID\times65536+TID)\mod1000000=G7TID$
これを変換すると
$SID\times65536=G7TID-TID+n\times1000000$
となる。この両辺を65536で割ると
$SID=\frac{G7TID-TID}{65536}+n\times(15+\frac{16960}{65536})$
と変形できる。
($1000000=65536\times15+16960$)
 SIDの数値は必ず整数なので、$\frac{G7TID-TID} {65536}+\frac{n\times16960}{65536}$が整数にならなければいけない。
つまり$((G7TID-TID)\mod65536)+n\times16960$が65536の倍数になればいい。
つまり更に式変形して表すと
$65536x-16960y=(G7TID-TID)\mod65536$となる。
$G7TID-TID=SID×2^{16}\mod(2^{6}×5^{6})$なので
$G7TID-TID$は必ず64の倍数になる。 65536と16960の最大公約数も64なので両辺を64で割ることができ、それぞれ1024と265になる。 $1024x-265y=\frac{G7TID - TID}{64}$の特殊解を求めていく。
まずは拡張ユークリッドの互除法を用いて$1024x+265y=1$を解く。
$1024-265\times3=229$
$265-229\times1=36$
$229-36\times6=13$
$36-13\times2=10$
$13-10\times1=3$
$10-3\times3=1$

$1=10-3\times3$
$1=10-(13-10\times1)\times3$
$1=10\times4-13\times3$
$1=(36-13\times2)\times4-13\times3$
$1=36\times4-13\times11$
$1=36\times4-(229-36\times6)\times11$
$1=36\times70-229\times11$
$1=(265-229\times1)\times70-229\times11$
$1=265\times70-229\times81$
$1=265\times70-(1024-265\times3)\times81$
$1=265\times313-1024\times81$

$1024×(-81)+265×313=1$と求まるので
$1024×(-81)-265×(-313)=1$である。
-81と-313を$\frac{G7TID - TID}{64}$倍してそれぞれ265と1024(互いに素)で割れば一般解が求まるので
$SID\times65536=G7TID-TID+n\times1000000$ のnにyを代入すればよい。

例として筆者のSV上のIDは151020、LA上のIDは9452なので $\frac{G7TID-TID}{64}=\frac{151020-9452}{64}= 164$
$-81×164=-13284,-313×164=51332$
$-13284\equiv231(\mod -265)$
$-51332\equiv892(\mod1024)$
$x=265m+231,y=1024m+892$
mが0の時のy=892を代入すると
$SID×65536=892×1000000+151020-9452$ $SID×65536=89214568$
$SID=13613$となる。
同様にmが1から3の時29238,44863,60488である。(4以上の時はSIDが65536を超えてしまうため除外)
$1024000000÷65536=15625$なので各IDの差も15625になる。

実際にBWにてこのIDの組み合わせを調整し、その個体をSVに連れてくると無事ニックネームを変更できた。

元のニックネームの情報をも保持したままキーボードの画面へと遷移するため、第七世代以前に使えた記号とSwitchでしか入力できない記号を両立できる。(それ以上のメリットはない)
第六世代と同様、アットマークを記憶して変更しようとしても弾かれてしまうのが残念である。

最後に上記の方法で裏IDを求める計算器を作ったので皆さんも真似してみてください。
今後調べるべき点

  • 言語が一致している必要があるか(BDSPでは必要ないので)

  • 全角七文字以上のポケモンを編集しようとするとどうなるか(三世代でID一転狙いする必要があるので面倒)

追記:てあさんがこの記事の手法を用いて混合NN個体を作ることに成功しました。是非ご覧ください。

teara.hateblo.jp

SVでのIDを入力
LAでのIDを入力

SID候補:

【ポケモンHGSS】サファボメタングを一発で捕獲する乱数調整

こちらはPokémon Past Generation Advent Calendar 2023の14日目の記事となります。

 

 

突然ですが皆さんはダンバル系統の捕捉率をご存じでしょうか。

そう、伝説のポケモンと同等の"3"ですね。

詳しい処理は省略しますが、HP最大で状態異常になっていない捕捉率3のポケモンに対して補正がかからないボールを投げた時の捕獲率はおよそ256分の1になります。

 

話は変わりますが、HGSSのサファリゾーンにはダンバルメタングが出現します。

サファリゾーンなので逃走判定があり、ボールも30個しか用意されていないので個体乱数を成功後が鬼門という珍しいタイプの乱数調整を楽しめます。(楽しめるとは)

 

前置きが長くなりましたが今回はいじっぱりC抜け5V色メタングに遭遇し、一つ目のサファリボールで捕獲する乱数調整に挑戦していきます。

 

 

1.個体検索

まずは個体を検索します。使用するツールは4genSearch乱数調整汎用ツールです。

まずは4genSearchのseed検索タブで欲しい個体値を入力、ここはまあいたって普通ですね。

続いて初期seed検索タブを使います。先ほどのリストの中から実際に欲しい個体のseed列をコピーし、消費数やフレームの上限を許容できる範囲まで広げます。

今回の場合は4300Fですね。(別のC個体値ならもっと短いフレームで出現します。)

 

次に乱数調整汎用ツールを起動し、初期SEED入力、エンカウント種類を「サファリ」に変更、シンクロ・メロボを使用するものに変更、個体決定方法を「サファリ系」に変更、目標性格値を入力、リスト表示を適宜調整し「表示ボタン」をクリックします。

☆マークのついている行が目標性格値を満たしている個体です。(本来ならもっと星マークがあるはずですが運が悪すぎますね。)

消費数を表す一番左の数値の一つ右の数値が"スロット"となります。今回なら3ですね。

 

サファリゾーンのスロットは特殊な仕様になっており、ブロックを置くことで出現するようになったポケモンが元のスロットを上から順に侵食するようになっています。

サファリゾーン・解析情報 - ポケットモンスターハートゴールド ソウルシルバー 攻略Wiki - atwiki(アットウィキ)

岩場の効果値が56以上になるようにブロックを配置するとヨーギラスとルナトーンが必ず出現するのがお分かりになるでしょうか。この場合ヨーギラスがスロット0、ルナトーンがスロット1、メタングがスロット2となるのでスロットが0と1の行は使用不可と言うことになります。

逆に今回の例と同じスロット3でメタングを出現させるためにはどうすればいいでしょうか。

スロット0にレアコイルリーシャンが出現する条件を満たすと、ヨーギラスがスロット1、ルナトーンがスロット2、メタングがスロット3で出現します。このように適宜に調整してスロットを合わせましょう。

 

目標個体が定まったらID調整を行い(今回手順は省略します)、エリア値を上げます。一つのエリアにブロックは30個しか置けないので効果値56で出現するメタングは出現しないのですが、エリアを入れ替えないように何日も設置し続けることでブロックの効果に倍率がかかるようになります。

ここで言う「何日も設置」はリアル時間なのでDSの時間を変えても意味がないです。メタングの出現は最低30日、最も時間のかかるタツベイの場合110日かかります。こんなに待っていられないので、以下の裏技を使います。

 

2.エリア値上げ

この裏技は無印DS、及びDSliteでしか使用できません。リアルの方でプラスドライバーを用意しましょう。

まずはエリア値を上げたいエリアをカスタムしてからセーブします。この時ブロックは設置しなくても大丈夫です。

 

DS背面にあるネジを外すとバッテリーがあらわになります。バッテリーを10秒間ほど外し、DS内部を放電しきってから元に戻して起動すると初期設定画面が表示されます。

名前と色の設定は適当に行い、カレンダーの設定を2099年12月31日23時59分にします。誕生日も適当に設定して大丈夫です。

日付が変わり、2000年1月1日になったのを確認したらゲームを起動し、レポートを書きます。この時にお好みで24時間で結実するきのみ*1きのみプランターに埋めると安心できます。

 

そしてこのまま24時間待ちます。この時DS本体の時刻を変更する対象のROMを別のDSで遊ぶという二つの行為を絶対にしないでください。

24時間後、再びセーブします。きのみを埋めた方は実がなっているのを確認し、収穫はしないでください。

セーブ終了後、再びDSのバッテリーを外します。また2099年12月31日23時59分に時刻を設定し、今度は日付が変わる前にROMを起動します。

きのみを植えた方はきのみが消滅していたら成功です。

ブロックを設置し狙いのポケモンが出現するのを確認しましょう。

 

3.個体乱数

実際に個体乱数を行います。使用するツールはChatotToolと任意のタイマー、ゲーム内でシンクロ要員とペラップ二体とあまいかおり要員を用意します。

以下の動画の音声を音量最大にしたスマホから流し、DSのマイクと密着させペラップのおしゃべりに記録します。

 


起動時刻を計算ボタンを押し、画面が遷移したら初期seedを入力し空白時間を345Fにします。

計算ボタンを押すと起動時間が計算されます。更にそのまま確定ボタンを押すとメインウィンドウにそれが反映されます。サファリゾーンゲート内でレポートをしていると思うので事前消費数は徘徊の数、フレーム範囲は自分に合ったものを入力し、初期seed確認をします。

やることは至って簡単、ペラップの鳴き声の工程が一つ前と比べて高いか低いかを入力するだけです。初期seedが合っていることを確認したらゲーム内ではサファリに入場し草むら前で待機、ツール上ではリストをダブルクリックします。

草むらに入るまでにもなつき消費やエンカウント消費が入っているので消費数再特定ボタンを押します。

このような画面になるので検索範囲の上限を20くらいにして同じく高低を入力、現在位置が分かったら確定を押して戻ります。

デフォルトで827になっている目標消費数を変更したら残りの消費を行います。ペラップの鳴き声を慣らすたびにツールの「しばく👊」ボタンを押しましょう。「声帯」にチェックを入れるとツールからも同じ声がして楽しいです。

 

ペラップをしばき終えたらあまいかおりを使用。目標のポケモンが出てきたらひとまず個体乱数は成功です。

 

3.捕獲乱数

はい、ここからが鬼門です。以下、32bitの切り捨てられていない乱数列をr[n]、上位16bitのみを切り出した乱数列をs[n]とします。

 

そもそも戦闘時に使われる乱数は通常のLCGともMTとも独立したLCGを使用しています。更新は通常と同じ

r[n+1] = r[n] * 0x41c64e6d + 0x6073

の式で行われ、初期seedの生成は戦闘開始時に通常の初期seedと同様の方法で行われます。

初期seedをまともに確認する手段はゆびをふるくらいしかないのでまず普通の野生ポケモンで練習し、実際にサファリで導入するという風になります。(ただし通常マップとサファリで明らかにズレが発生したのであまり参考にはならないかも)

ゆびをふるで普通に野生戦に突入し先制した場合はs[12]で決定されます。

第四世代までの技の総数が467個なのでs[12] % 0x1d3 + 1で決定、

ただし出現しないように除外される技

  • カウンター
  • ものまね
  • ゆびをふる
  • オウムがえし
  • わるあがき
  • スケッチ
  • どろぼう
  • まもる
  • みちづれ
  • みきり
  • こらえる
  • ねごと
  • ミラーコート
  • きあいパンチ
  • このゆびとまれ
  • てだすけ
  • トリック
  • ねこのて
  • よこどり
  • ほしがる
  • フェイント
  • さきどり
  • まねっこ
  • すりかえ
  • おしゃべり

の場合は再計算されます。参考↓

ktxadのブログ : わざ - livedoor Blog(ブログ)

 

次に捕獲に使用される乱数ですが、こちらは初ターン即投げの場合s[12]~s[15]までが使用されます。これに関してはほとんどポケモンwikiに書いてあるものと同じ処理です・

まずBを求める。

B=(((最大HP×3-現在HP×2)×捕捉率×捕獲補正率)÷(最大HP×3))×状態異常補正

Bが255以上なら捕獲確定。

捕捉率:捕獲するポケモンの捕まえやすさ。捕捉率一覧を参照。
捕獲補正率:ボールの捕まえやすさ。捕獲補正率を参照。
ハートゴールドソウルシルバーでのみ、ぼんぐりから作られるボール (ガンテツボール) は、ボールの捕獲補正率ではなくポケモンの捕捉率に補正をかける。このときボールによる捕獲補正率は1に設定される。捕捉率は最大でも255。たとえば元々捕捉率255のコラッタは全く捕まえやすくならないことになる。
状態異常補正:
こおり・ねむりなら2。
どく・まひ・やけどなら1.5。
ルビー・サファイアでのみもうどくになっても補正はかからない。ファイアレッドリーフグリーン/エメラルド以降はどくと同じく1.5。
捕獲が確定しなかった場合、次にGを求める。

G=1044480÷√√(16711680/B)

除算と平方根は計算後に逐一小数点後を切り捨てる。

0~65535の乱数を4回発生させて、それが4回ともG未満なら捕獲成功。G以上の乱数があった時点で失敗が確定し、それ以降揺れ判定は行われない。捕獲成功率は (G / 65536)4 (%) と表せる。この計算式では65535が出ると必ず捕獲が失敗することになるが、そもそもBが255になれば揺れ判定は行われずに捕獲は成功する。

 

捕獲処理 - ポケモンWiki

サファリでボールを投げる場合、捕捉率3でHP最大かつボール補正や状態異常なしなのでBの値は1となります。Bを1とした場合、Gは1044480÷63=16579になるはずですが、実際には16643(0x4103)となるようです。なぜこうなるのか分かる方は教えてください

2024年1月2日追記:こちらのツイートの計算式が正しいようです(計算結果も合う)

 

 

そして、上にも書いているようにG以上の数値が出た時点で乱数消費が中断されます。つまり、ボールを投げ続けた場合の揺れ回数のリストを作る時にもちゃんとループ処理を作る必要があるわけです。

 

次に逃げに使用する乱数についてですが、1ターン目はs[7]、2ターン目以降は前ターンの最後の揺れ判定で使った乱数から三つ後の乱数を使用します。s[n] % 255ポケモン毎に設定された逃走率以下の時に逃走が成功します。なんで256じゃなくて255で割ってんの

メタングはこの値が60、それに対しダンバルは90なので実はメタングの方が捕まえやすいです。

2ターン目のボールは逃げ判定から五つ後の乱数から使用、以下ループしていきます。

 

この情報をもとに、ゆびをふるをした時に出る技とボールをひたすら投げ続けた場合に何回揺れて何ターン目で逃げるかを出力するツールを作りました。クソコードすぎるので配布する気はありません、ご了承ください。

 

本当は個体乱数の情報を入力し、そこから許容できる待機フレーム数を入力することで一発捕獲可能な初期seedを出力するツールも作ったのですが

こちらに関してはフレームカウントが60fpsではなさそうな挙動や秒ズレを修正するのがあまりにも難しいといった事情により使う意味がほぼなくなってしまいました。適当な待機フレームで出た技か揺れ回数から初期seedを特定し、そこから最も近い捕獲可能seedに近づけていくというのが現実的です。

フレームカウントに関してですが、一回暗転する度にかなりカウントがストップするので必ず同じ動作で戦闘を行いましょう。また、ペラップで初期seedを確認するとその動作だけで合計四回も暗転が発生してしまうので「徘徊で初期seed確認することのデメリット」を理解している人は徘徊で初期seedを確認することを推奨します。

 

実際に成功した事例を紹介します。まず、待機時間10496Fで揺れ回数が2→0→0→0→0→0→0→1→0→0→0→0→0→1→逃げという非常に特徴的な初期seedを引きました。これを検索してみると0xFC11235Cだということが分かりました。

この周辺に捕獲可能な初期seedがあるか探してみると0xFC112338、つまり36フレーム前が存在しました。が、少しでもフレームを減らすと秒が変わってしまい初期seedの上二桁が変わってしまうことが分かっていました。そこで先ほど説明した暗転を逆利用します。実際に余分にバッグを一回開閉した場合0xFC112305、87フレーム手前の初期seedを引きました。なのでタイマーを約50Fほど増やし微調整してみると…

無事一発捕獲に成功しました。サファリボールの残り個数が29個になっています。

一例の流れの動画がこちらです。(広告を付けていないのでお気軽にご視聴ください)

 

4.終わりに

ツールを公開していないので尻すぼみ感が半端ないですが、ひとまず戦闘乱数及び捕獲乱数の実態について紹介することが出来ました。正直サファリ以外では実用性がないですし、サファリでも調整に時間がかかりすぎて手動で粘った方がいいですが物好きな方は真似してみてください。誰かまともなツールと初期seed調整ツールを作ってくださいお願いします

 

本日配信の藍の円盤からダンバル系統が解禁されるので一応そういう意味での需要があるのですかね…?ちなみに個人的にはサファボメタングは似合っていないと思っています、変な乱数調整をやりたかったので題材として選択しただけです

 

明日の記事はハンターさんの「海外勢との三世代交流レポ」となります。最近第三世代モチベがまた湧き上がっているので楽しみです。

 

参考にしたサイト

HGSS捕獲乱数 - ろいしんぶろぐ

ktxadのブログ : わざ - livedoor Blog(ブログ)

ゆびをふるで出た技でseedを特定してみようという試み - oupoの日記

 

*1:モコシのみなど、セキチクシティのジャグラーとあおいかけらで交換