PCゲーム『インクレディブル・マシーン3』日本語版のBGM “Picture”(クラシック音楽『展覧会の絵』のアレンジ)、“New Age”、“Detective Theme"のMIDIデータにあるバグを直す。
症状
- BGM “Pictures” で、ある2音がループ後に鳴り続ける場合がある。
- BGM “Pictures” と “New Age”、“Detective Theme” の一部のチャンネルのピッチが1オクターブ以上高くなる場合がある。
ただし、MIDIデバイスによっては再現しないことがある。
原因
いずれもゲームのMIDIデータの誤りによるもの。
- ノート・オフ メッセージが送られる前にループに入ってしまうため。
- ピッチベンドを初期化するメッセージが足りないため。
修正方法
次から差分ファイルをダウンロードしてゲームインストール先に配置し、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)などを変えた。