見出し画像

全滅時の挙動の制御

それらしいプラグインもあったんですが

MZというか、これはVXでも確かそうでしたが、RPGツクールシリーズは基本的に全滅するとゲームオーバーで、ゲームオーバー画面が出たあとそのままタイトルに戻る仕様になっています。でもそれだとDQの全滅時の挙動とは違います。で、それらしいことをやろうとしているプラグインもいくつかあるにはあったんですが、全滅後戻る前に一瞬マップが見えたりBGMが一瞬だけ鳴ったりして「コレジャナイ」感がありました。なので、これはもうしょうがないな、つくるか、となりました。

ゲームオーバーのしくみ

詳細は省きますが、戦闘終了時に BattleManager.updateBattleEnd() が呼ばれています。で、逃げたわけではなくてかつ全員戦闘不能の場合の処理がこうなっています。

if (this._canLose) {
   $gameParty.reviveBattleMembers();
   SceneManager.pop();
} else {
   SceneManager.goto(Scene_Gameover);
}

「負けOK」の場合は自動でメンバーを蘇生して戦闘の前のシーンに戻るようになっていますが、そうでない通常の戦闘の場合はゲームオーバー画面に遷移するようになっています。ここをいじればよさそうです。

で、それらしい挙動にするためにBGMを止めたり、先頭メンバーだけ蘇生したり、もともと用意はしていた全滅時の戻り先のマップID/X座標/Y座標、移動直後に実行するコモンイベントのIDはプラグイン側から設定できるようにして、それらしくなったかなという感じです。シーン変更後の移動先は $gamePlayer.reserveTransfer(mapId, X, Y, 向き) 、シーン変更後に実行するコモンイベントは $gameTemp.reserveCommonEvent(commonEventId) すればOKです。

ちなみにこの段階で誰かひとりだけでも蘇生しておかないと、マップに戻った次の瞬間に改めてゲームオーバー画面に連れて行かれます。

Scene_Map.prototype.updateScene = function() {
   this.checkGameover();
   if (!SceneManager.isSceneChanging()) {
       this.updateTransferPlayer();
   }
   if (!SceneManager.isSceneChanging()) {
       this.updateEncounter();
   }
   if (!SceneManager.isSceneChanging()) {
       this.updateCallMenu();
   }
   if (!SceneManager.isSceneChanging()) {
       this.updateCallDebug();
   }
};

この checkGameOver() ですね。これにひっかからないように誰か一人でも蘇生しておく必要があります。ここでゲームオーバー画面を振り切れば、上記のreserveなんたらが機能してくれるわけですね。

スクリーンショット 2021-07-23 18.25.01

追記@2021/8/11(バージョンアップ→v1.0.2)

ダウンロードはこちら

CSVN_loseThenBack.js
※右クリックでDL

ほかにつくったやつはこちら

cursed-steven/rmmz: RPGツクールMZ用のプラグインスクリプトをおいていきます。

いいなと思ったら応援しよう!