戦闘勝利直後にバトル画面でイベントを実行したい

アバター
しんぞ
記事: 86
登録日時: 2016年7月26日(火) 22:27
連絡を取る:

戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by しんぞ » 2016年7月26日(火) 22:34

はじめまして。

表題の通りなのですが、マップ画面に戻ってからではなく、バトル画面で「勝利時のイベント」を実行したいのです。
捨て台詞や勝ち名乗りといった…ごく一部の方にはおなじみのあの演出がやってみたいのです。

バトルイベントの出現条件を「敵キャラHP<=0%」にすると、たとえば連続攻撃で最初の一撃がトドメとなってしまった場合、イベントのあとにも「HP0%の敵キャラに2回目以降の攻撃を続ける」演出が続いてしまいます。
かといって、イベントコマンドで戦闘中断を使ってしまうと勝利判定ができません。

何か、定石となるような解決方法があるのでしょうか? 無知で申し訳ないです…

-----------
構想20年(マジ おじいちゃんRPG「爺メン75歳」製作中。ちなみにうちの親父は74歳。
アバター
yamachan
記事: 107
登録日時: 2016年6月19日(日) 22:34

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by yamachan » 2016年7月27日(水) 01:46

こんばんは! :D

ちょっと作成してみましたが、戦闘勝利後に演出を追加するプラグインであれば、わりと簡単そうです。
例えば以下のようなコードですと
RTK_Test.js
(882 バイト) ダウンロード数: 98 回

コード: 全て選択

(function(_global) {
   var _BattleManager_processVictory = BattleManager.processVictory;
   BattleManager.processVictory = function() {
      $gameScreen.showPicture(6,"BU_01sora_00",0,100,100,100,100,255,0)
      $gameMessage.add("RTK_Test 1");
      $gameMessage.add("RTK_Test 2");

      _BattleManager_processVictory.call(this);
   };
})(this);

以下のように画像とセリフを追加できます。
3.png


ただJavaScriptで演出を記述せず、データベースで定義したイベントを呼び出すのはちと難しそうです。
スイッチ等でバトルイベントを起動しようとしましたが、バトルは終了しているのでバトルイベントが起動しません。
かといってコモンイベントの呼び出し予約をしておいても、マップに戻ってから起動してしまいます。
この隙間のタイミングで使える Interpreterが無いような…

もしかしたらバトルイベントのループ中のステートを増やして対処するか、
独自のInterpreterを別に起動して処理しなければいけない気がして… いるうちに眠気が… ;)

ではでは。
Toshio Yamashita (yamachan)
Plugin https://github.com/yamachan/jgss-hack/blob/master/README.ja.md
Twitter https://twitter.com/yamachan360

私が作成して本サイトに投稿したコードは著作権を放棄し、利用・改変・配布など全て自由です。
ただし同じ投降内に制限を明記している場合はそちらが優先します。
アバター
しんぞ
記事: 86
登録日時: 2016年7月26日(火) 22:27
連絡を取る:

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by しんぞ » 2016年7月27日(水) 13:52

ありがとうございます! プラグインでの実装になるわけですね。
特定のボス敵のみに専用の勝ち台詞を用意したいときは
敵グループのIDか何かで分岐させることになりそうですね。

試してみます。ありがとうございました!
-----------
構想20年(マジ おじいちゃんRPG「爺メン75歳」製作中。ちなみにうちの親父は74歳。
アバター
yamachan
記事: 107
登録日時: 2016年6月19日(日) 22:34

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by yamachan » 2016年7月27日(水) 14:59

こんにちは! :D

ボス戦限定であれば、以下のページで紹介されているテクニックが使えるかもしれません。

ボス戦を盛り上げる5つのテクニック
http://ktnhmv.jugem.jp/?eid=2

その2 ボスが倒れる演出を派手にする、にある不死身ステートをうまく利用した方法です。
素晴らしいですね :D
Toshio Yamashita (yamachan)
Plugin https://github.com/yamachan/jgss-hack/blob/master/README.ja.md
Twitter https://twitter.com/yamachan360

私が作成して本サイトに投稿したコードは著作権を放棄し、利用・改変・配布など全て自由です。
ただし同じ投降内に制限を明記している場合はそちらが優先します。
アバター
しんぞ
記事: 86
登録日時: 2016年7月26日(火) 22:27
連絡を取る:

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by しんぞ » 2016年7月27日(水) 19:54

ありがとうございます! まさにそれです。他のテクニックも良いですねー!

最初の質問で、hp0でも攻撃が続いてしまうと書きましたが、それはプラグインのせいかもしれません…Yanflyさんのバトル系プラグインを使用しているもので。最初に書いていなくて、申し訳ありません。

2つのアプローチをそれぞれ試しつつ、使用中のプラグインも読んでみます。ありがとうございます!
-----------
構想20年(マジ おじいちゃんRPG「爺メン75歳」製作中。ちなみにうちの親父は74歳。
アバター
しんぞ
記事: 86
登録日時: 2016年7月26日(火) 22:27
連絡を取る:

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by しんぞ » 2016年7月28日(木) 00:28

私がはまっていた現象は、YEP_BattleEngineCoreに依存するもののようです…
プラグインを切ったら、教えていただいた二つの方法が有効でした。

さすがに、この長文のスクリプトを読み解いて対策を考えるのはかなり難しそうですし、
演出方法を再考してみることにします。
YEP_BattleEngineCore自体は素晴らしいプラグインで、引き続き使いたいので…

自分の環境ややりたいことを最初に明確に伝えることが、
質問するときのマナーですよね。すみませんでした。お手間をとっていただいて…
-----------
構想20年(マジ おじいちゃんRPG「爺メン75歳」製作中。ちなみにうちの親父は74歳。
アバター
しんぞ
記事: 86
登録日時: 2016年7月26日(火) 22:27
連絡を取る:

Re: 戦闘勝利直後にバトル画面でイベントを実行したい

投稿記事by しんぞ » 2016年8月03日(水) 23:09

YEP_BattleEngineCoreを使用している場合の
一応の解決方法がわかりました。
敵が1体の場合しか、たぶんうまくいかないと思いますが…

このプラグインでは、
「連続攻撃の途中で敵のHPが0になっても、戦闘不能の敵を引き続き攻撃する」
演出をあえて採用しており、そのために
内部的に擬似的に「不死身」に近いステータスを用意しているようです。
(「ダブルアタックって名前なのに1回でターンが終わったらおかしいかな」
 という視点からの変更だそうです)

ソース中に、「擬似的な不死身」のオンオフを切り替える箇所を見つけたので、
そこでゲームスイッチをオンオフさせて、「現在不死身状態か否か」を判定できるようにしてみました。

ソース2439行目付近

コード: 全て選択

BattleManager.actionImmortal = function(actionArgs) {
    var targets =
      this.makeActionTargets(actionArgs[0]).filter(Yanfly.Util.onlyUnique);
    var value = eval(String(actionArgs[1]).toLowerCase());
    targets.forEach(function (target) {
      if (value) {
        target.addImmortal();
        //この行を追加(スイッチIDはお好みで)
        $gameSwitches.setValue(56,false);
      } else {
        var alreadyDead = target.isDead();
        target.removeImmortal();
        //この行を追加(バトルログウインドウを一旦消します)
        this._logWindow.clear();
        //この行を追加(スイッチIDはお好みで)
        $gameSwitches.setValue(56,true);
      }
    }, this);
    return true;
};


そのうえで、演出を使いたい敵グループにイベントを設定して
実行条件を
  • 敵キャラ#1のHPが0%以下
  • スイッチがON
にすると、敵キャラが倒れるタイミングでイベントが実行されます。
ただ、「敵が倒れるエフェクト」と同時に実行されてしまうので、
ウェイトを60フレームほど入れておいたほうがいいかもしれません。
-----------
構想20年(マジ おじいちゃんRPG「爺メン75歳」製作中。ちなみにうちの親父は74歳。

“MV:質問” へ戻る