わどるDAILY

つれづれと

鏡の大迷宮 マルチプレイ時のボスHP検証

GBAソフト「星のカービィ 鏡の大迷宮」で、大ボス・中ボスの体力がマルチプレイの人数によって変わるという情報を耳にしたので、検証してみました。

 

検証結果

ポストベタ貼り

Googleスプレッドシート上でも公開しています。

 

検証方法

※以下の文章は検証方法の妥当性を証明するためのもので、エミュ周りに明るくない方には眠くなるだけの内容なので飛ばしていただいて結構です

 

TAS制作の時と同様エミュレータの内部メモリを監視する形で調査しました。

ただ、この方法でやろうとすると通信プレイに対応した環境でなければならず、通信関連のサポートがほぼ無いTAS用エミュレータではそれだけでボトルネックとなります。

通信が使えたとしてもLANやネットを介する必要があると準備も面倒になるでしょう。

そんなわけで、唯一(?)スタンドアロンで通信プレイに対応しているmGBAというエミュレータを使用しました。

 

mGBAはエミュレータ上から別でウィンドウを開くだけでマルチプレイ環境が作れるため、殆ど準備が要らないのが特長です。他のエミュがどうしてるのかは知らないですが。

また、1年ほど前にLuaScriptに対応しているため、スクリプトさえ組めれば見やすい形でメモリを監視することができます。

元々メモリビューアは備わっていますが、鏡のボス含めた敵情報は動的アドレスによって生成されるため非常に見づらいです。また、TAS用エミュレータとは違い別でメモリ監視できるツールが備わってないため、このままだと16進数の羅列から判断することになりとても非効率です。

そんな事情もあり、スクリプトを組んで敵情報を表示できるようにしました。

 

なお、別の方法としてデバッガーを通して体力を取得しているROM上のデータを探すというのもできそうでしたが、実際の体力として利用されているかの確証は得られないため、実際に戦いながらリアルタイムで変動する数値を見られる今回の方法を採用しました。

いわば実地調査です。

 

調査イメージ

4人プレイでの検証だとウィンドウも4つに増えます。

このままだと全ての画面から音が鳴っててパチ屋レベルに喧しいため、検証する1P以外はBGMが流れないボス前部屋に隔離したりしてました。

右上のゲーム画面に被ってるのが前述のスクリプト画面です。

現在のmGBAはスクリプトGUIに対応していないため、右上のテキストバッファという枠に情報を表示するのが最適かと思います。

同じLuaでもスクリプトの書き方はBizHawkなどと少し異なるため、別途記事にするかもです。

(2023/10/8追記)

記事書いた

mGBAでLuaScriptを書いた話 - わどるDAILY

スクリプト

https://github.com/WaddleDX/TAS/blob/main/Other/Katam_Enemyinfo.lua

mGBAのメニューからScriptingを選んで実行してね

備考とか

上記の検証結果ですが、一部はキャベツさんによりSwitchオンライン版でも検証されています。

こちらで出した数値とも一致しているため、Switchオンライン版でもデータや仕様に変わりないことが分かります。

また、りぷてさんのポストにより、ROM上の0x335D04~0x335DFBにこれらの値が格納されているらしきことも判明しています。

未検証ですが、ここの値を変えることで実際のボスHPも変更されるかと思います。

ボスのHP検証自体も自分がする以前に上お二方がされていて、既に同じものが結果として出ています。

そのため自分の検証の意義が半分くらい消えてはいたのですが、内部メモリの監視という形で信頼性の補強はできていると思います。

 

ちなみに、大ボス中ボス以外の敵についてはマルチプレイでもHPが変わってる様子はありませんでした。

ただ、ダークマインド(第二形態)が出す鏡はマルチプレイで耐久あがってる?ぽかったです。HPが設定されてないので分かりませんでしたが。

おしまい。