Image: インクレディブル・マシーン3のBGM MIDIデータにあるバグを直す

PCゲーム『インクレディブル・マシーン3』日本語版のBGM “Picture”(クラシック音楽『展覧会の絵』のアレンジ)、“New Age”、“Detective Theme"のMIDIデータにあるバグを直す。

症状

  1. BGM “Pictures” で、ある2音がループ後に鳴り続ける場合がある。
  2. BGM “Pictures” と “New Age”、“Detective Theme” の一部のチャンネルのピッチが1オクターブ以上高くなる場合がある。

ただし、MIDIデバイスによっては再現しないことがある。

原因

いずれもゲームのMIDIデータの誤りによるもの。

  1. ノート・オフ メッセージが送られる前にループに入ってしまうため。
  2. ピッチベンドを初期化するメッセージが足りないため。

修正方法

次から差分ファイルをダウンロードしてゲームインストール先に配置し、MS-DOSプロンプト上でそこをカレントディレクトリにしてbupdate resourceを実行して下さい。パッチ対象は Resource.002(タイムスタンプ 1996/11/01 17:03:36、1,824,417 バイト)です。

tim3jpat.zip (17.8 KB)

BGM “Pictures” のバイナリー差分のみ、以下に示す。

163CB0  C1 38 00 B0 07 7F 00 B1 07 68 00 0A 33 01 FE 14
        C1 38 00 E1 00 40 00 B1 07 68 00 0A 33 01 FE 14
                 ^^ ^^ ^^

164A00  35 5B 57 5E 52 64 59 00 2E 60 60 5B B0 69 00 00
        35 5B 57 5E 52 64 59 00 2E 60 60 62 B0 69 00 00
                                         ^^

164FC0  58 00 52 61 63 5F B0 69 00 00 FF 2F 00 48 4D 49
        58 00 52 61 63 65 B0 69 00 00 FF 2F 00 48 4D 49
                       ^^

詳細

リソースファイルには標準MIDIフォーマット (.mid) のデータと、Human Machine Interface (.hmi) というMIDIフォーマットから派生した特殊なフォーマットのデータが収録されている。ゲームでは専ら後者のデータが使われている。

ファイルのヘッダーはHMI-MIDISONG061595、トラックデータのヘッダーはHMI-MIDITRACKで、トラック内のデータは標準MIDIフォーマットと似ている。大きな違いはノートオンとノートオフの2つのメッセージを長さ値にした1つのメッセージとしていることと、ループ用のメタデータを含んでいること。

例えば、BGM “Pictures” のトラック1の冒頭は次の通り。数値データは7ビットで表されることに注意する必要がある。

ΔTime -  Message (2-3 bytes)
00       B0 69 01 ?
00       C1 38    Program Change 56 (Trumpet)
00       B0 07 7F Control Change 07 (Volume) - Ch.1- 127
-> 00    E1 00 40 Pitch Wheel Change - Ch.2 - 2000H
00       B1 07 68 Control Change. 07 (Volume) - Ch.2 - 104
00          0A 33 Pan
01       FE 14 FF FF Loop start

パッチでは Ch.1 に対する音量変更メッセージ(この目的は不明)をピッチホイール変更メッセージに置き換えている。また、ループ終わりメッセージのデルタ時間を長くして、ノート・オフメッセージより後に来るように調整している。BGM “New Age” と “Detective Theme” では不要メッセージを置き換えても1バイト足りないため、ヘッダーの長さを削っている。このため、ヘッダーサイズ(オフセット0x57, 0x5B)とループ開始位置(オフセット 0xB4)などを変えた。

参考


※コメント欄が表示されない場合はdisqusについてJavascriptが有効であることを確認して下さい。コメントはスパム防止フィルターによる承認制のため、投稿してもすぐに反映されない場合があります。

管理人 : Akamaki (akm)

は、PCとVTuberに夢中になっている電気技術者です。

私はレトロコンピューティングの愛好家ですが、そのようなリグはもう収集していません。

私の活動はトップページで見ることができます。読んでくれてありがとう!