基礎知識
戦闘関係
まずは前ページのBGMのシーケンスデータ調査についてお読みいただきたい。
前ページではBGMのシーケンスデータについて調査してみたが、効果音のシーケンスデータはどのようになっているのだろうか?
また、
シーケンスコマンド一覧 - Romancing Sa・Ga 2 - スーパーファミコンのサウンドドライバ - Gnilda のページ
こちらにも説明がない、
E9 xx 効果音演奏 1EA 効果音演奏 2このふたつのコマンドは効果音に関係しているはずだが、いったい何なのだろうか?
調べてみることにする。
サウンドについてにて、ゲーム開始時(リセット時)に、効果音のシーケンスデータ$C3:23C8~$C3:3FC7がARAMの$2C00~に転送される、と説明した。
だが、$C3:23C8~$C3:3FC7の中身がどうなっているのかまでは調べていない。
効果音については、技モーション・エフェクトにて、技の技データ20と技データ24に、技用の効果音をセットしてある、と紹介したが、技一覧の技データ20と技データ24を確認すると、効果音IDは$00~$FFの256種類あることがだいたいわかる。
また、これら効果音を演奏する時は、何らかのBGMを演奏中の場合、チャネル6~7に割り込んで効果音を鳴らしている。
このため、効果音のシーケンスデータはチャネル6~7の2チャネル分しかないはずだ。
(BGMのチャネル6~7を一時的に消音することになるから、本作におけるBGMは、チャネル6~7にメインのメロディや拍数がわかりやすい打楽器系は持ってこないように工夫しているようである。どのゲームでも似たような工夫をしているだろう)
効果音IDリストはサウンド(BGM・効果音) > 効果音一覧にある。
以上の前知識を元にして、$C3:23C8~$C3:3FC7について具体的に見ていこう。
先に答えを言ってしまうと、
| 元アドレス | ARAMアドレス | 内容 |
|---|---|---|
$C3:23C8~$C3:27C7 | $2C00~$3000 | 効果音ID$00~$FFのチャネル6シーケンスコマンド開始位置・チャネル7シーケンスコマンド開始位置(各4バイト) |
$C3:27C8~$C3:3FC7 | $3001~$47FF | 効果音ID$00~$FFのシーケンスコマンド |
こうなっている。
$C3:23C8~はこんな感じで始まっている(16バイト区切り)。
00 30 00 00 01 30 03 30 11 30 14 30 1E 30 20 30 2F 30 00 00 3D 30 3F 30 4D 30 4F 30 5F 30 67 30 6E 30 70 30 81 30 90 30 92 30 A2 30 B2 30 B4 30 ……
これを4バイトずつ区切って、2バイトずつアドレスとして読む。
00 30 00 00 ;3000 0000 01 30 03 30 ;3001 3003 11 30 14 30 ;3011 3014 1E 30 20 30 ;301E 3020 2F 30 00 00 ;302F 0000 3D 30 3F 30 ;303D 303F 4D 30 4F 30 ;304D 304F 5F 30 67 30 ;305F 3067 6E 30 70 30 ;306E 3070 81 30 90 30 ;3081 3090 92 30 A2 30 ;3092 30A2 B2 30 B4 30 ;30B2 30B4 ……
このアドレスがARAMのアドレスになる。
| 効果音ID | チャネル6 | チャネル7 | 内容 |
|---|---|---|---|
| $00 | $3000 | $0000 | (無音) |
| $01 | $3001 | $3003 | 「グイグイ」など |
| $02 | $3011 | $3014 | 「ウキッ」 |
| $03 | $301E | $3020 | 「液体人間呪ばく」など |
| $04 | $302F | $0000 | 「ド根性キック」 |
| $05 | $303D | $303F | 「ドデゲスデン」など |
| $06 | $304D | $304F | 「ウキぷぅ」など |
| $07 | $305F | $3067 | 噛みつき音 |
| $08 | $306E | $3070 | ポゴが何か調べてアイテム発見した時の音 |
| $09 | $3081 | $3090 | 「ドゴドゴ」 |
| $0A | $3092 | $30A2 | 「ぽかぽか」「ポコポコビート」 |
| $0B | $30B2 | $30B4 | 「てーてー」 |
(以下省略)
ただし、$0000は該当チャネルの演奏は「なし」の意味。
また、後述するが、ARAMアドレス$3000に入っているコマンドは「EB」、つまり「演奏終了」だけなので、「何も演奏しないという演奏データが入っている」ことになる。
実際の値は、サウンド(BGM・効果音) > 効果音一覧に掲載した。
効果音を演奏しても何も鳴らないIDがあるが($1Cや$22など)、それらはチャネル6・チャネル7どちらにも$0000が入っていて、そもそもデータなしなのである。
何かの事情で使用しないことになったボツ効果音があったのかもしれない。
では、$C3:27C8~$C3:3FC7→ARAM$3001~$47FFに書き込まれたシーケンスコマンドを少し見てみよう。
ちなみに最後の16バイト($C3:3FB8~$C3:3FC7)は$FFで埋まっているので、実質データなし、シーケンスコマンドは$C3:3FB7までと見て良い。
;効果音ID$00(無音) ;チャネル6(ARAM$3000) EB ;演奏終了 ;効果音ID$01 「グイグイ」「ゴルゴダのイバラ」など ;チャネル6(ARAM$3001) DB 01 ;ディチューン ;チャネル7(ARAM$3003) DC 01 ;サンプリングデータ選択 D6 03 ;オクターブ設定 DD 09 ;アタックレート(Attack Rate)設定 E2 01 ;ループ開始位置 C8 18 04 ;ピッチスライド 07 ;ド 8分音符 E3 ;繰り返し・ループ終了 EB ;演奏終了 ;効果音ID$02 「ウキッ」 ;チャネル6(ARAM$3011) BD ;8分休符 E9 F2 ;効果音演奏 1 ;チャネル7(ARAM$3014) DC 06 ;サンプリングデータ選択 D6 06 ;オクターブ設定 C8 18 EE ;ピッチスライド 3F ;ミ 8分音符 EA F2 ;効果音演奏 2? ;効果音ID$03 「液体人間呪ばく」「復元」「あまいささやき」など ;チャネル6(ARAM$301E) DB 14 ディチューン ;チャネル7(ARAM$3020) D2 ;ピッチモジュレーション オン C4 FF ;トラック音量設定 DC 04 ;サンプリングデータ選択 DD 07 ;アタックレート(Attack Rate)設定 E2 01 ;ループ開始位置 C8 0C 44 ;ピッチスライド 09 ;ド 16分音符 E3 ;繰り返し・ループ終了 EB ;演奏終了 ;効果音ID$04 「ド根性キック」 ;チャネル6(ARAM$302F) D0 ;ノイズ オン DD 07 ;アタックレート(Attack Rate)設定 CF 1E ;ノイズクロック設定 0B ;ド 32分音符 E1 ;ADSR初期化 E2 07 ;ループ開始位置 CF 16 ;ノイズクロック設定 0B ;ド 32分音符 E3 ;繰り返し・ループ終了 EB ;演奏終了 ;効果音ID$05 「ドデゲスデン」「魔力吸引」「火炎放射」など ;チャネル6(ARAM$303D) DB 02 ;ディチューン ;チャネル7(ARAM$303F) DC 01 ;サンプリングデータ選択 D6 04 ;オクターブ設定 E0 18 ;サスティンレート(Sustain Rate)設定 E2 01 ;ループ開始位置 C8 18 04 ;ピッチスライド 06 ;ド 付点8分音符 E3 ;繰り返し・ループ終了 EB ;演奏終了 ;……
ひとまず、効果音ID$00~効果音ID$05のシーケンスコマンドを見てみたが、やはりほぼ「ロマサガ2」のシーケンスコマンドが使えている。
問題はシーケンスコマンド$E9と$EAを使っている効果音ID$02である。
;効果音ID$02 「ウキッ」 ;チャネル6(ARAM$3011) BD ;8分休符 E9 F2 ;効果音演奏 1 ;チャネル7(ARAM$3014) DC 06 ;サンプリングデータ選択 D6 06 ;オクターブ設定 C8 18 EE ;ピッチスライド 3F ;ミ 8分音符 EA F2 ;効果音演奏 2?
シーケンスコマンド一覧 - Romancing Sa・Ga 2 - スーパーファミコンのサウンドドライバ - Gnilda のページ
では、シーケンスコマンド$E9「効果音演奏 1」は引数を1個、シーケンスコマンド$EA「効果音演奏 2」は引数なしとある。
だが、上のデータをそのとおりに読む場合、「効果音演奏 2」が、
EA ;効果音演奏 2? F2 ;エコーボリューム設定? ※引数が1個必要
こうなってしまう。
だが、ARAMアドレス指定に従った場合、「F2」で効果音ID$02のシーケンスコマンドは終了している。
「ライブ・ア・ライブ」では、「効果音演奏 2」にも引数が1個必要で、
EA F2 ;効果音演奏 2
これが正しいのではないか。
さて、結局シーケンスコマンド$E9と$EAは何なのかというと、おそらく、以下で合っていると思う。
つまり、「効果音の中で他の効果音を鳴らす」という処理であり、チャネル別にコマンドがある、ということだ。
効果音の中で同じ効果音IDを指定すると無限ループになりそうだが(そうならないようにしてあると思うが)、それを防ぐためかどうなのか、このコマンドを実行すると実行後にそのチャネルの演奏はストップするようである。