はじめに
劇団くじら座サウンド担当のけいゆうです。前回、自然に曲をループさせる[mloop]マクロを作成しました。
www.utsuboublog.com
これだけでも十分使えますが、実際に運用するには少々面倒な点があります。
今回の論点は以下の二つです。
・毎回ループ位置の情報を入力しなければならない
・セーブデータロード時にその場面の曲が流れない
どちらも簡単な記述で解決できます。
特に一つ目の対策はやっておくと格段に効率が上がるのでおすすめです。
1. ループ情報をタグで管理
一つ目の問題はマクロを作ることで解決します。このマクロでは前回用意したf.currentbgm変数を使います。
前回と同じtyrano.ksの[return]直前に書きます。
[macro name="mplay"] [if exp="mp.tag=='nanatsu'"] [mloop storage="data/bgm/nanatsu.ogg" start=0 end=198.643] [eval exp="f.currentbgm='nanatsu'"] [endif] [if exp="mp.tag=='gensou'"] [mloop storage="data/bgm/gensou.ogg" start=0 end=149.992] [eval exp="f.currentbgm='gensou'"] [endif] ;以下同様に記述 [endmacro]
(ファイル名、タグ名、ループ情報はサンプルです)
簡単にコードを説明します。
[if exp="mp.tag=='任意のタグ'"]
[mloop storage="ファイル名"
start=ループ開始位置
end=ループ終了位置]
[eval exp="f.currentbgm='先ほどのタグ'"]
[endif]
指定のタグに対応する曲をmloopで再生後、f.currentbgmにタグを代入して現在のBGM情報を記録しています。
この書式で曲情報を必要な分だけ[mplay]マクロ内に書き込みます。
[mplay]マクロの仕様はこちらです。
[mplay tag="tyrano.ksで定義したタグ"]
使用方法は[mloop]と同じです。
ビルダー上でティラノスクリプトコンポーネントを挿入し、そこに[mplay tag="tyrano.ksで定義したタグ"]を書きます。
曲の停止も[mstop]で可能です。
この方法だとタグの指定だけで曲を再生できる他、曲に変更があった場合もtyrano.ksのみを修正すればいいので楽です。
(あとファイル名とタグ名を同じにしておくといろいろ便利です)
曲情報はスプレッドシートなどで記録しておくといいでしょう。

2. ロード時に曲を流す
続いてはセーブデータのロード時にその場面の曲を流す方法です。データのロード時に読み込まれるmake.ksファイルに書き込んでいきます。
例によって[return]の直前です。
[call storage="system/tyrano.ks"] [stopbgm] [if eval exp="f.currentbgm!=false"] [mplay tag="&f.currentbgm"] [endif]
([stopbgm]は保険です。なくてもいいかも……?)
ここでf.currentbgmが活きてきます。
f.から始まる変数はゲーム変数になります。
ゲーム変数はセーブデータ毎に保存されます。
つまりロード時に読み込まれるmake.ksに
[mplay tag="&f.currentbgm"]
(引数tagにf.currentbgmの値を指定する)
を書いておけばそのデータ、その場面の曲が流れる仕組みです。
ちなみに音楽が流れていないシーンの場合は
[if eval exp="f.currentbgm!=false"][endif]
で除外しています。
終わりに
BGMループについての説明は以上となります。変数名やマクロ名などは仮のものなのでお好きな名前をつけてください。
フェードアウトの実装も挑戦してみたいですが先にv5のアップデートが来そうですね……。