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-4SE実データアドレス1
5-6SE実データアドレス2
6-7SE実データアドレス3
8-9SE実データアドレス4
10-11SE実データアドレス5

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

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

MGID*1不明実D1実D2実D3実D4実D5
2F0000B9BCB9DBB9EBB9F2BA08

となっています。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バイトは付加しない

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

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

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

モード引数
0308 00インターバル
004A 01音楽ID
0320 00インターバル
0049 01音楽ID
0310 00インターバル
0048 01音楽ID
0308 00インターバル
0048 01音楽ID
0308 00インターバル
0048 01音楽ID
04終了

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

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

コメント

タイトルとURLをコピーしました