【パッチ配布有】ポケモン エメラルド BGMなど音声を変更およびミュートする(日本版)

※この記事はソフトのROMイメージが吸い出されていることを前提として書いています

 

バイナリエディタを用いたROMファイルの書き換えによって、ポケモンエメラルドのBGMを"内蔵されている範疇内"で変更する方法を紹介します。

 

変更の具体的なイメージとしては、通常のポケモントレーナー戦なのにチャンピオン戦のBGMを流すだとか、戦闘時にこちら側のHPバーが赤色になっている際のピロピロうるさい音を消してしまうとか、ごく単純なものです。

作業の流れに関しても、目的の音声の格納アドレスを特定し、任意の値を書き込んで終了、という初歩的ともいうべき内容です。(技術的な部分に全く言及できないことをおことわりしておきます。)

 

 

【必要なもの】
ポケットモンスター エメラルド(日本版)のROMファイル

バイナリエディタ
…ROMファイルの読み込み、データの書き換え、数値の検索、アドレスの移動などの作業を行います。使用するソフトによって操作方法が異なるので、自身に合うと感じたものを使用して下さい。(筆者はHex Editorを使用しています。)

・音声の格納アドレスとヘッダーのデータ

BGM①

BGM②

効果音(一部のみ)

 

例として、エメラルドにおいて起動後オープニングで流れる「タイトルデモ〜ホウエン地方の旅立ち」を変更する手順をチャート化して説明します。

 

バイナリエディタでROMを開く】
バイナリエディタを起動し、"ファイル>開く"などの操作でROMファイルを開きます。大抵のソフトでは、左側にオフセット(データの位置)が表示されているはずです。

 

【変更したい音声のアドレスに移動】
今回変えたい曲「タイトルデモ〜ホウエン地方の旅立ち」のアドレスは"0063CF9C"です。この位置を任意の方法で表示してください。

Hex Editorでは[検索]>[移動]で移動用のウィンドウが開くので、オフセット値を入力して[OK]を選択するとジャンプできます。

 

【ヘッダー値の書き換え】

カーソルが点滅した箇所から4バイト分(末尾の"08"は共通)が、音声の「ヘッダー」を示す値になります。

ここでは、"18 9C 89 08"と書かれています。この値がアドレス"0063CF9C"にあることによって、起動直後に「タイトルデモ〜ホウエン地方の旅立ち」を流しているようです。

つまり、このヘッダー値を書き換えることによって、本来流れる音声を別のものに変えたりミュートしたりといった変更ができます。

 

「ヘッダー」の値からさらに4バイト数えた分が、音声の「属性」を示す値になります。

属性を示す値は

"00 00 00 00"

"01 00 01 00"

"02 00 02 00"

"03 00 03 00"の4種類に分かれており、

"00"がBGM

"01"が効果音や鳴き声(BGMに重ねて再生される)

"02"がジングル(BGMを中断して再生される)

"03"が効果音やBGMとは別で終了命令が出るまで鳴り続ける音(BGMに重ねて再生される)

とされています(ミュージックナンバー - 改造ポケモン制作資料 Wiki*様より引用)。

この「属性」に関しては、ヘッダーを書き換える前後で一致していればおそらく問題ありませんが、後述する音声のミュートをしたい場合には重要になる場合があります。

 

ここまでのまとめとして、

アドレス"0063CF9C"

から4バイト分数えた「ヘッダー」値は"18 9C 89 08"、

さらに4バイト分数えた「属性」値は"00 00 00 00"となっています。

 

書き換えたい箇所を把握したので、「タイトルデモ〜ホウエン地方の旅立ち」の代わりに「戦闘!フロンティアブレーン」を流したいとし、ヘッダー値上位3バイトを「戦闘!フロンティアブレーン」の"A8 97 8C"に書き換えます。(属性は2曲とも"00"で一致しているため、書き換える必要はありません。)

変更が完了したら、ファイルを保存して終了します。

(変更前の状態をバックアップしておくことを強くおすすめします)

 

VisualBoyAdvance v1.7.2上で変更を確認した動画↓

youtu.be

最初に「戦闘!フロンティアブレーン」が流れ、その後に通常通り「タイトルデモ 〜ダブルバトル〜」が流れます。

変更がこのように無事反映されていれば、書き換え成功です。

書き換えた内容をメモしておくと、後で変更を忘れた際などに役に立つかと思います。

 

【ミュートする】

ヘッダー値4バイトを"00 00 00 00"と書き込むと、ミュート(無音)の音声を代わりに流すようになります。("00 00 00 08"だと流す際にフリーズします。)

 

データを書き換える際の注意点として、元々の属性が"00"でない音声をミュートする際は、属性も含めて書き換える必要のある場合があります。
例1:「回復(アドレス0063CE2C)」を属性"02"のままミュートして再生すると、メッセージ送りの効果音が聞こえなくなる不具合があります。属性"01"に変えたところ、メッセージ送りの効果音は正常に鳴りますが、STARTボタンでメニューを開いた際の効果音が聞こえなくなります。※
例2:「バトルポイントをもらった!(アドレス0063D104)」を属性"02"のままミュートすると、各バトル施設でバトルポイントを獲得した直後のレポート完了時に操作を受け付けなくなります(セーブは成功しています)。こちらは属性"00"にしたところ解決しました。※

※以上すべてBGMミュート時、VisualBoyAdvance v1.7.2で確認。

 

また、BGMが鳴っている状態で効果音をミュートすると、他の効果音が流れるまでBGM全体に微妙なエコーがかかります。(属性を変えても起こります)

ちなみに、音声をミュートする行為のメリットは、バックグラウンドで好きな音楽を流しながら遊べることなどが考えられます。

 

…以上、流す音声を変えるだけのROMハックを紹介しましたが、ひょっとしたらチートコードで対応できるのかもしれません。しかし私の能力が足らずコード形式に落とし込めなかったので、もし音声に関わるチートを知っておられましたら、コメントで教えていただけるととても嬉しいです。

 

バトルフロンティア関係の音声をミュートしたipsパッチはこちら