DQ3/6 DQ6のBGMをDQ3にインポートする(逆も可)

画像だけインポートしてあるあの御方をだそうと思い、「BGMも合わせたいよなあ」ということでDQ6のボス戦BGM(ID:#$13)をそっくり抜いてDQ3に移植したのですが、さすがにそれだけでうまくいくほど甘く無いということで以下のようになりました。簡単に確認するために、デバッグのサウンドテスト用のプログラム部分をちょこっと弄る必要があります。

  • SR: $01CDEA デバッグBGMテスト
01CDFA CMP #$0180 A>=#$0180? #017Fから変更
01CDFD BCC #$03 if(c==off) goto $01CE02
01CDFF LDA #$017F A=#$017F #017Eから変更

DQ3のオリジナルのBGMは0~#017Eなので、入力値をチェックしてクリップしている部分を1づつ増やす必要があります。なお、音楽データインデックス($0723BC-)も前後に空きが無いので別の場所に移動し、あわせてこのデータにアクセスしているSRを変更しています。レコードごとのアドレス情報を持っておらず、直接アクセスしているので作業量は比較的少なくてすみます。というわけで早速テストしてみます。

(YouTubeにアカウントを取って動画をうpしてみました)

曲調はOKぽいですが、やはりというか波形データが異なるために再現できていません。ただ、一部同じっぽい部分もあるので、おそらく一部の波形データが異なる、ということだと思われます。というわけで、やるべきことは、

  1. DQ3とDQ6で異なる波形データがなにか調べる
  2. DQ6からDQ3に不足している波形データをインポートする
  3. 音楽データ中の波形データのインデックス?をシフトする

なのではないかなあと当たりをつけて見ました。音楽データの構成についてまるでわかっていないので間違っている可能性もありますが。というわけでまず、1について調査してみました。DQ3には波形データは62、DQ6には波形データは67あります。それぞれの実データのアドレスを見て比較するというアレな作業をしていきます面倒くさいので波形データを比較するプログラムを作成し、比較して見ました。DQ3をベースにした場合、DQ6をベースにした場合の結果を以下に示します。

  • DQ3をベースにした場合(DQ3の音楽データをDQ6にインポートする場合)
DQ3 DQ6
00 00
01 01
02 02
03 03
04 ×
05 04
06 05
07 06
08 08
09 09
0A ×
0B ×
0C 0A
0D 0E
0E 0F
0F 10
10 11
11 12
12 13
13 15
14 17
15 19
16 1A
17 1B
18 1C
19 1D
1A 1E
1B 1F
1C 20
1D 21
1E 22
1F 23
20 26
21 27
22 ×
23 29
24 2A
25 2B
26 2D
27 2F
28 30
29 31
2A 32
2B 33
2C 34
2D 35
2E 37
2F 38
30 39
31 3B
32 3E
33 3F
34 40
35 41
36 42
37 ×
38 ×
39 ×
3A ×
3B ×
3C ×
3D ×
×
×
×
×
×
  • DQ6をベースにした場合(DQ6の音楽データをDQ3にインポートする場合)
DQ6 DQ3
00 00
01 01
02 02
03 03
04 05
05 06
06 07
07 ×
08 08
09 09
0A 0C
0B ×
0C ×
0D ×
0E 0D
0F 0E
10 0F
11 10
12 11
13 12
14 ×
15 13
16 ×
17 14
18 ×
19 15
1A 16
1B 17
1C 18
1D 19
1E 1A
1F 1B
20 1C
21 1D
22 1E
23 1F
24 ×
25 ×
26 20
27 21
28 ×
29 23
2A 24
2B 25
2C ×
2D 26
2E ×
2F 27
30 28
31 29
32 2A
33 2B
34 2C
35 2D
36 ×
37 2E
38 2F
39 30
3A ×
3B 31
3C ×
3D ×
3E 32
3F 33
40 34
41 35
42 36

この変換表の見方は、上が、DQ3の音楽データをDQ6に移植する際に波形データをDQ6中の何番の波形データに置き換えればいいかというものです。☓マークは存在しないという意味ですが、存在しない場合はDQ3からDQ6に新規に波形データを移植する必要があります。下はその逆です。次に、音楽データ中でどの波形データを使用しているかについては、音楽データの先頭に記述されているようです。例としてDQ6のボス戦BGMの音楽データの先頭は

07 11 10 39 02 08 2B 0F

となっていますが、これは、1バイト目が使用する波形データ数で、その後1バイト目の数だけ使用する波形データIDの配列が続くようです。この場合は7つの波形データが使用され、それぞれ#$11, #$10, #$39, #$02, #$08, #$2B, #$0Fの波形データを使用する、という仕組みになっているようです。幸いにしてこれらの波形データはDQ3には元から存在するようなので、波形データの移植は不要です(上記下の表を参照のこと)。これに従って波形データIDを変換して、再度サウンドテストをしてみます。

長いので出だしだけですが、1ループ聞いても問題なさそうでした(戦闘BGMとして使用し、エフェクトSEが入ってもOKそう)。著作権的にどうなのという話はさておき、技術的には、波形データが存在しない場合にもデータをごっそり移植すればよく、また音楽データ側もいじるのは先頭の数バイトだけなので少なくともDQ3<->DQ6間のBGM移植は比較的容易、ということになりそうです。