DQ3 モンスターアニメーションSEを自作?する

<<注意書き>>ほとんど書いてしまってから45氏?作成のアニメーション関連のドキュメントにほとんど同じ内容が書かれているのを見つけました。どうしようかと思ったのですが、アニメーション時のSEの仕組みをより多くの目にさらすという目的で投下します。

最近主にPS版DQ4,7からモンスターの移植(アニメーション付きで)を行っているのですが、問題になるのが、「アニメーション時の適切なSE探し」です。ゴールドマンのSEとしてスカルゴンのSEを流用しましたが、よく聞くと頭に余計な音が入っています。これを何とかできないかというのが今回の目的です。結論から言うと音楽の知識のない自分でも割りとサックリと新しいSEを作成できました。ちなみに、モンスターアニメーション時のSEというのは仕組みとしてDQ3から導入されたものなのでDQ6には転用できません(多分)。

モンスターアニメーションSEは以下の部分で設定されています。

  • $3EF991- モンスターアニメーションSE(11Byte*53rec)
Byte
0 モンスターグラフィックID
1-2 不明(全部0なので意味なし?)
3-4 SE実データアドレス1
5-6 SE実データアドレス2
6-7 SE実データアドレス3
8-9 SE実データアドレス4
10-11 SE実データアドレス5

このSE開始アドレス1~5はバンク$04に存在するSE実データアドレスの下位2バイトを設定します。今までは、他のモンスターのSEを調べてよさそうなものがあれば同じアドレスをセットする、ということで対応をしていました。ちょうどいいSEがすでに存在していればそれを流用するので問題はないわけですが、微妙に音のタイミングがずれていたり、余計な音が含まれている場合はこれだけではどうしようもできません。本エントリでは、実データがどのように使用されているかまで踏み込んでみることにします。

さて、実際にどのようなデータが1レコードにセットされているかというと、スライムを例にとると、

MGID*1 不明 実D1 実D2 実D3 実D4 実D5
2F 0000 B9BC B9DB B9EB B9F2 BA08

となっています。1から5というのはモンスターアニメーションの1から5に対応します。スライムは5パターンあるので5までセットされています。2パターンしかない場合は3以降は$0000で埋めます。この場合は$04B9BC, $04B9DB, $04B9EB, $04B9F2, $04BA08がそれぞれ開始アドレスである、ということになります。このデータを見ているSRを解析するのは後回しにして、この開始アドレスが指定している先のデータ(可変長)について先に説明します。

  • 基本3バイト1レコードとして考える
  • 3バイトの内訳は1バイト目がモード指定,2,3バイトは引数として扱う。モードは0から4まで
  • モード指定で4はターミネーターを意味し、引数2バイトは付加しない

モードの意味は以下のとおりです。

0 SE再生(2,3バイトは音楽ID)
1 不明
2 不明
3 インターバルを置く(2バイト目をフレーム数として扱う,3バイト目は読まれない)
4 ターミネーター

例えば、スライムの1パターン目のデータを解釈すると以下のようになります。

モード 引数
03 08 00 インターバル
00 4A 01 音楽ID
03 20 00 インターバル
00 49 01 音楽ID
03 10 00 インターバル
00 48 01 音楽ID
03 08 00 インターバル
00 48 01 音楽ID
03 08 00 インターバル
00 48 01 音楽ID
04 終了

音楽IDというのはデバッグモードの「サウンド」メニューで視聴できるBGM群のIDに相当します。つまり、アニメーションSEというのは、複数のBGMから構成されていることになります。

*1:モンスターグラフィックID