ペットバトルゲームの基礎機能実装

RPG Maker MZ でペット戦闘システムを搭載したゲームを作成するには、以下の特性が必要です。

  1. プレイヤーが操作するキャラクターは戦闘に参加せず、他のキャラクターのみが戦闘を行う。

  2. メニュー画面や戦闘画面ではプレイヤーキャラクターを表示せず、戦闘可能なキャラクターのみを表示する。

ヒント:

ペットの戦闘のみをサポートし、ペットの捕獲機能はなし。公式ソースコードと完全に互換性があります。

本文

プレイヤーが操作するキャラクターの番号を「1」とし、以下のコードで表示・非表示を切り替えます。

0:入隊 1:離隊

// 0:入隊 1:離隊(番号1)
$gameMap._interpreter.command129([1, 1, true]);

まず、let addActor_bool = false; という変数を定義し、メニューや戦闘への遷移時か、イベントによる入隊処理かを見分けるためのフラグとして使用します。

addActor_bool == true の場合はリストの先頭(上部)に追加し、そうでない場合は末尾(下部)に追加します。

メニューでのコード記述

const _Scene_MenuBase_prototype_create = Scene_MenuBase.prototype.create
Scene_MenuBase.prototype.create = function() {
_Scene_MenuBase_prototype_create.call(this);
$gameMap._interpreter.command129([1, 1, true]); // メニュー進入時にキャラクターを除外
};

マップでのコード記述

const _Scene_Map_prototype_create = Scene_Map.prototype.create
Scene_Map.prototype.create = function() {
_Scene_Map_prototype_create.call(this);
addActor_bool = true;
$gameMap._interpreter.command129([1, 0, true]); // マップ進入時にキャラクターを追加
addActor_bool = false;
};

戦闘でのコード記述

const _Scene_Battle_prototype_create = Scene_Battle.prototype.create
Scene_Battle.prototype.create = function() {
_Scene_Battle_prototype_create.call(this);
$gameMap._interpreter.command129([1, 1, true]); // 戦闘進入時にキャラクターを除外
};

入隊ロジックを変更し、リストの先頭か末尾かへの追加を制御します。

Game_Party.prototype.addActor = function(actorId) {
if (!this._actors.includes(actorId)) {
if(addActor_bool){
this._actors.unshift(actorId);
addActor_bool=false;
}else{
this._actors.push(actorId);
}
$gamePlayer.refresh();
$gameMap.requestRefresh();
$gameTemp.requestBattleRefresh();
if (this.inBattle()) {
const actor = $gameActors.actor(actorId);
if (this.battleMembers().includes(actor)) {
actor.onBattleStart();
}
}
}
};

メニューに入ると最初のキャラクターが除外され、マップに入ると最初のキャラクターが追加されます。

これでペットシステムの基本的な機能の実装が完了しました。