お昼ごはんはゲームです

ゲーム記事やカードゲームのデッキ紹介記事を投稿します。

黄金の太陽 ワンダーバードの行動予測してみた 前編

こんばんは、ヒナです。

今回はワンダーバードの行動を予測してみました。

事の発端は、ワンダーバード2体を交互に倒してレベリングしているときに、ワンダーバードが逃走し、レベリングが捗らず、モヤモヤしたことがきっかけでした。
Nintendo Switchの巻き戻し機能を使って、自身の行動パターンを色々変えても逃走されて効率が悪く感じました。
そこで、ワンダーバードの行動の原理が分かれば、レベリングが捗るのでは?と考えました。
今回は、ワンダーバードの行動について調べたので紹介します。
※内容が難しいため流し読みしていただけると幸いです。

 

◆ワンダーバードの行動一覧

ワンダーバードの行動は以下の通りです。逃げるの確率がかなり低く設定されていることが分かりました。

さいせいのまい    100/256(39%)    
ファイヤーダンス 41/256(16%)
ブラストヴァルカン 35/256(13.7%)
スクランブルビーム 29/256(11.3%)
デンジャフュジョン 23/256(9%)    
逃げる    17/256(6.6%)
攻撃 11/256(4.3%)

以下より参照
https://goldensunwiki.net/wiki/Phoenix_enemy_line#Wonder_Bird

とはいえ、実際にプレイしてみると、絶対に逃走を図るパターンがあると思ったため、
モンスターの行動が決定される仕組みについて、調べてみました。
すると、モンスターの行動は、ゲーム内の乱数によって決定されていることが分かりました。

 

◆乱数の仕組み
※難しいので読み飛ばしてください。

ゲームで何かランダムな処理を行う必要があるときは、基本的にサイコロを振ります。
次のサイコロの目を計算するには、前のサイコロの目を取得し、大きな数値を乗算、加算して、
その計算の最後の 32 ビットのみを保持します。

RN(0)=0 
RN(x+1)=RN(x)*1103515245 + 12345 mod 2^32

例(左から10進数、16進数)
RN(0)=0
RN(1)=12345 0x3039
RN(2)=3554416254 0xD3DC167E
RN(3)=2802067423 0xA70427DF
RN(4)=3596950572 0xD6651C2C    
RN(5)=229283573 0x0DAA96F5
RN(6)=3256818826 0xC21F1C8A 
RN(7)=1051550459 0x3EAD62FB
RN(8)=3441282840 0xCD1DCF18 

上記のように、結果はランダムに見えますが、実際には、サイコロが振られた回数 (RN カウント) を知ることによってのみ、
あらゆるサイコロの出目を予測できます。 さらに、出力に基づいて逆算してカウントを計算することもできます。
このように、ゲーム内で一貫したアクションを実行することでカウントを簡単に制御できます。

以下の内容を翻訳抜粋
https://youtu.be/yeg-Pz6KBTk?si=yuq3IWBEbJaQE11T

 

◆モンスターの行動決定
黄金の太陽における主な乱数は2種類あり、
バトル内で消費されるBRN(Battle Random Number)と、
それ以外にも使用される一般的な乱数GRN(General Random Number)があります。
それぞれの値が格納されるメモリは以下の通りです。

BRNメモリ:0x020054C8
GRNメモリ:0x030011BC

例えば、BRN=8(RNカウントが8)のとき、BRNメモリ(0x020054C8)の値は、0xCD1DCF18 になります。
モンスターの行動は、BRNメモリ(0x020054C8)の値の中4桁を取り出し、256で割った余りによって決定します。


BRN=8 → 0xCD1DCF18 → 1DCF(16進数) → 7631(10進数) → 7631を256で割った余り= 207

この207という値は、上記のワンダーバードの行動一覧の中での、207/256に当たります。
分かりやすくすると以下の通りです。
余り
0-99  さいせいのまい    100/256(39%)    
100-140 ファイヤーダンス 41/256(16%)
141-175 ブラストヴァルカン 35/256(13.7%)
176-204 スクランブルビーム 29/256(11.3%)
205-227 デンジャフュジョン 23/256(9%)    
228-244 逃げる    17/256(6.6%)
245-256 攻撃 11/256(4.3%)

つまり、BRN=8のとき、ワンダーバードはデンジャフュジョンを使うことがわかりました。

同様にBRN=0~33まで計算した結果が以下の通りです。

 

◆実際にワンダーバードの行動を予測してみる
BRNを調整すれば、ワンダーバードの行動を予測できるとなんとなくわかりました。
BRNはハードリセットにより、0となり戦闘中の行動によってカウントアップします。
BRNはアイテム確定ドロップの乱数調整と同様に、エナジーを使って調整します。
BRNをカウントアップする行動は次の通りです。

・プレイヤー側の消費
攻撃エナジー(スピン、ラグナロックなど):1体につき2
回復エナジー(プライ、オーラ等):1体につき2
ステータスエナジーインパクト、ハイレジスト):1体につき1
その他エナジー(スプラッシュ):1体につき1

・ワンダーバード側の消費
ターン経過消費:全敵の行動回数(ターンの終わりにワンダーバードが1体なら3,2体なら6消費)
行動時消費:1(各種行動の前に消費される)
さいせいのまい:1
ファイアダンス:2
ブラストヴァルカン:6か8(3人にヒットすれば6、4人にヒットすれば8消費)
デンジャフュジョン:8
にげる:0?
こうげき:5

以上の情報を使って、乱数を消費し決まった行動をすれば、ワンダーバードの逃走を阻止しつつ、
さらにさいせいのまいを毎ターン使わせることも可能だと分かりました。


◆実際にやってみる
1ターン目から3ターン目のBRNとワンダーバードの行動をまとめてみました。

※ハードリセットし、先制攻撃している前提です。

この調子で100ターン分作れば無限にワンダーバード狩りが楽しめます。

 

 


と思いましたが、計算外の行動をワンダーバードがとるケースが多々見受けられました。なぜか突然逃亡するワンダーバード、謎の乱数消費、ワンダーバードの攻撃が外れたり、クリティカルヒットしたり・・・

 

今日はここまで。後編へつづく…

2024/4/28 後編寄稿しました。

 

purin-nau.hatenablog.com