ページ 11

【解決】戦闘BGMの条件再生について

Posted: 2019年5月20日(月) 12:56
by 瑠璃色翡翠
こんにちは。
今回、BGMについて質問したく立てました。

今作っているゲームで、後衛前衛に分けて、後衛が歌を歌って魔法を使うという設定なのですが、どうも一曲しか流れなくて困ってます。
やりたいのは、キャラが後衛にいるときキャラ別に曲を変えるということをしたいです。
もし出来たら、二人まで後衛に行けて特定の組み合わせで曲が変わるなどしたいです。
また、戦況によって曲が変わっていくというものをしたいのですができるでしょうか?

長々と失礼しました。よろしくお願いします。

5/21追記
剣崎 宗二 様 ご指摘ありがとうございます。
はい、アルトネリコシリーズのようなものを作りたいと思っていました。
使っている前衛後衛プラグインは[VanguardAndRearguard]というプラグインです。
スキルを使って曲を変える方法を教えてくださりありがとうございます。
このプラグインを使って、一人、もしくは特定の二人が[後衛にいる場合]に[条件にあった曲をかける]という判定を行いたいのです。

わかりにくい質問で申し訳ありません。よろしくお願いします。

5/26追記
返信が遅くなりまして申し訳ありません。解決しました! ありがとうございました!

Re: 戦闘BGMの条件再生について

Posted: 2019年5月20日(月) 23:55
by 剣崎 宗二
お疲れ様です。
少し、要件が不明瞭なように思えます。

恐らく想定しているのはアルトネリコシリーズの詩魔法に近い物だと勝手に推測しておりますが、その場合は「スキルを使った」をトリガーにして音楽が変わるので、スキルのコモンイベントに「BGMの変更」を入れれば大丈夫だと思います。

逆に若しも、本当に「配置に応じて自動的にBGMを変えたい」と言うのであれば、先ず「如何なるプラグインを使って」「後衛に人を設定しているのか」から始まります。
(MVのデフォルトでは前衛後衛の概念がありません)
使っているプラグインによって判定の仕方が変わるからです。
これも、プラグインに応じた判定を例えば「ターン開始時」のバトルイベントに入れ、それで違う音楽を再生すればよろしいかと考えます。

何れにしろ、条件をもう少しクリアに(スキル使用時?隊列変動時?etc)して頂いた上で、併用するプラグインを挙げて頂いた方が、皆さま回答しやすいかと思います…

Re: 戦闘BGMの条件再生について

Posted: 2019年5月21日(火) 10:26
by アーヴェル
ここではもう二度お世話になっているので、初心者ながらご意見させていただきます。
私は使ったことがありませんが、
前衛後衛プラグインはその過程で前衛効果や後衛効果のステートを付与するモノのようですから、
例えばメンバーAが歌Aを使用したときにコモンイベントを呼び出し、

条件分岐
メンバーBがステート後衛にかかっている
 歌Bを再生

 それ以外の時(メンバーBはステート後衛にかかっていない)
  条件分岐
   メンバーCがステート後衛にかかっている
    歌Cを再生

    それ以外の時(メンバーBとCがステート後衛にかかっていない)
    etc・・・

のように条件分岐をひたすら組んでいくことでもやりたいことが出来るのではないかと思われます。
今回は歌の呼び出しをスキルだと仮定しましたが、

私は、jsファイル内にある
rpg_managers.js 内の、以下部分に
$gameTemp.reserveCommonEvent(1);
とだけ、追加記述しているのですが、行動終了時に必ず呼び出すコモンイベントの記述・・・のはずです。
()内の1はゲーム内コモンイベントの番号を指定しており、この場合はコモンイベント1番を呼び出しています。
(私はそのコモンイベントをHP・MPの監視とステート付与等に用いています)
ここに先のコモンイベントを組み込めば、コマンド”チェンジ”を使用後にも恐らくコモンイベントが発生し、
前衛後衛が変化した瞬間に歌が変わるという動作が出来るようになるのではないかと思います。

この場合は敵の行動終了時も毎回呼び出すので、コモンイベントの最初で後衛メンバーにだけ
歌唱可能ステートを付与して、混乱や睡眠では歌唱可能ステートを無効にしておけば、
該当異常発生時や戦闘不能時はデュエットがソロになる。等も出来そうですね。

私は半年ほどMVTをしておりましたが、MVやスクリプトを触り始めて2週間程度なので、
これで問題が発生した場合の解決方法は残念ながら持ち合わせておりませんが、
該当部分の全記述として置いておきます。

BattleManager.processTurn = function() {
var subject = this._subject;
var action = subject.currentAction();
if (action) {
action.prepare();
if (action.isValid()) {
this.startAction();
}
subject.removeCurrentAction();
} else {
subject.onAllActionsEnd();
this.refreshStatus();
this._logWindow.displayAutoAffectedStatus(subject);
this._logWindow.displayCurrentState(subject);
this._logWindow.displayRegeneration(subject);
this._subject = this.getNextSubject();
$gameTemp.reserveCommonEvent(1);
}
};