ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


2001年3月に発売された任天堂の携帯ゲーム機・ゲームボーイアドバンスは、ゲームごとに異なるクラッシュ音を有しており、特殊なハードウェアとコードを使用すればクラッシュ音からどのゲームをプレイしていたのかを分析することが可能だそうです。これを利用して、クラッシュ音から元のゲームを復元するという試みが行われています。
Modder re-creates Game Boy Advance games using the audio from crash sounds | Ars Technica
https://arstechnica.com/gaming/2024/01/modder-recreates-game-boy-advance-games-using-the-audio-from-crash-sounds/

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


クラッシュ音から元のゲームを復元する方法を編み出したのは、MOD製作者のTheZZAZZGlitchさん。同氏によると、ゲームボーイアドバンスのクラッシュ音はゲーム機がアドレス空間全体をサウンドデータとして再生しているだけだそうです。そのため、クリアなクラッシュ音の録音データがあれば、これをデジタルデータに変換することで、RAM(メモリ)とROMをダンプすることができると考え、この方法に取り組んだとTheZZAZZGlitchさんは記しています。
ゲームボーイアドバンスのクラッシュ音からゲームデータを復元する方法は、以下の動画にまとめられています。
Dumping the ROM of a GBA game by crashing it - YouTube

TheZZAZZGlitchさんはゲームボーイアドバンスのエミュレーターであるmGBAを利用して、ゲームのクラッシュ音を「できるだけ高品質で録音」しています。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


録音には4時間もかかった模様。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


録音データを再生したところ、1時間50分辺りで特徴的な波形を発見します。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


このサウンドデータのフォーマットは符号付き8ビットで、13100Hzでサンプリングされていることがわかりました。ここから、「このようなクリーンな録音データであれば、ゲームデータの復元は難しくないはず」とTheZZAZZGlitchさんは感じたそうです。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


その後、TheZZAZZGlitchさんはゲームボーイアドバンスのクラッシュ音の録音データから、元のゲームデータを復元するためのPythonスクリプトを作成。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


こうして復元したゲームデータをmGBAで実行してみたものの、エラーでゲームを実行することはできませんでした。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


データを分析したところ、ROM内の0x00バイト領域に大きな空白部分(赤枠部分)が存在することを発見します。各バイトの始点と終点が不明であるため、この空白部分に何バイトのデータがあるべきかを確実に知ることは難しいと考えたTheZZAZZGlitchさん。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


そこで、TheZZAZZGlitchさんはオリジナルのゲームデータと照合して各データを再配置するための新しいスクリプトを作成。これにより、ゲームデータを元データの99.76%復元することに成功します。ただし、この復元データでもゲームを起動することはできなかった模様。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


TheZZAZZGlitchさんは「オリジナルのゲームデータを参照しているため、技術的に見ればこの行為はチートに相当する」と言及しています。
次に、録音するクラッシュ音を改良するために最初に録音に使用したPCとは別の端末を準備し、ゲームボーイアドバンスのクラッシュ音を録音しました。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


この録音データを最初の録音データと多数決アルゴリズムで結合することで、ゲームデータの復元精度を99.979%まで高めることに成功。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


この復元データはmGBAで起動することもできました。ただし、起動画面のテキストがバグで文字化けして読めない状態になっていました。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


さらに、ゲームは起動中にクラッシュしてしまいました。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


そこで、TheZZAZZGlitchさんは7つの異なる録音データをメッシュ化し、空白部分をフィルタリング。すると、ゲームデータの復元精度がついに100%に到達しました。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


起動画面の文字化けも直っています。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


ゲームも問題なく起動できました。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


なお、TheZZAZZGlitchさんはエミュレーター上だけでなく実際のゲームボーイアドバンスから鳴るクラッシュ音を録音し、ゲームデータを復元することにも取り組んでいます。しかし、エミュレーターで録音したデータとは異なり、実物のゲームボーイアドバンスから録音したクラッシュ音の場合、より多くの調整が必要となるため、この手法は「すぐに何にでも使えるソリューションとは言い難い」ものとなっているそうです。

ゲームボーイアドバンスのクラッシュ音から元のゲームを復元することに成功 - 画像


そのため、TheZZAZZGlitchさんは実機のゲームボーイアドバンスから鳴るクラッシュ音からゲームデータを再現する方法については「別動画を作るべきかもしれない」と述べています。

ジャンルで探す