FF6(ファイナルファンタジー6)では飛空艇に乗っている途中に、デスゲイズというボスモンスターとのエンカウントがあります。
ツクールMVを含むRPGツクールシリーズでは飛空艇など空の移動中はモンスターが出現する仕様になっていないので、同様のモンスターが作れないかと、やってみました。
FF6のデスゲイズチックな飛空艇エンカウント出来た! 敵に与えたダメージは次の戦闘に引き継ぎ。やり方はいずれ紹介します。 #ツクールMV pic.twitter.com/rIqHcPI17T
— 蒼木ことり (@kotonoha0109) 2017年5月11日
手順1 3つのスイッチを準備
スイッチID:101 デスゲイズ未討伐ならOFF、討伐したならON
スイッチID:102 コモンイベントAのトリガー(コモンイベント自動実行:飛空艇に乗った時の処理)
スイッチID:103 コモンイベントBのトリガー(コモンイベント並列処理:飛空艇に乗っている間の処理)
をそれぞれ準備
手順2 rpg_objects.jsに追記
飛空艇に乗った時にスイッチID:102をON、降りる時にスイッチID:103をOFFにする処理を入れる
討伐したらこの処理は実行されない様にする
Game_Player.prototype.updateVehicleGetOn = function() {
if (!this.areFollowersGathering() && !this.isMoving()) {
this.setDirection(this.vehicle().direction());
this.setMoveSpeed(this.vehicle().moveSpeed());
this._vehicleGettingOn = false;
this.setTransparent(true);
if (this.isInAirship()) {
this.setThrough(true);
// ----追加: スイッチ101がOFFの時、スイッチ102がトリガーとなるイベントを自動実行
if($gameSwitches.value(101) == false){
$gameSwitches.setValue(102,true);
}
// ----追加ここまで
}
this.vehicle().getOn();
}
};
Game_Player.prototype.updateVehicleGetOff = function() {
if (!this.areFollowersGathering() && this.vehicle().isLowest()) {
// ----追加: スイッチ101番がOFFの時、スイッチ103がトリガーとなる並列処理を終了
if($gameSwitches.value(101) == false){
$gameSwitches.setValue(103,false);
}
// ----追加ここまで
this._vehicleGettingOff = false;
this._vehicleType = 'walk';
this.setTransparent(false);
}
};
手順3 コモンイベントAの内容
4つの変数準備
変数ID:01にプレイヤーの現在位置X
変数ID:02にプレイヤーの現在位置Y
変数ID:03にデスゲイズ出現までの歩数(乱数50〜130)
つまり50〜130マス移動する間に出現させる
変数ID:04に現在歩数(飛空艇乗り込み時は0)
をそれぞれ代入。
コモンイベントAは終了させ、コモンイベントBを起動。
手順4 コモンイベントBの内容
$gameVariables.value(1) != this.character(-1).x
$gameVariables.value(2) != this.character(-1).y
出現までの歩数と現在の歩数が重なったらエンカウント
戦闘終了後に歩数はリセット、乱数は振り直しする(例ではしばらく出現を抑えたいので80〜140としている)。
手順5 敵のHPを引き継ぐ
FF6のデスゲイズの仕様では、
・逃走する
・HPは前の戦闘までで与えたダメージ分減っている
この様になっているので、これも再現
とりあえず5ターン目ぐらいで強制的に逃げる仕様にしておきますか。
変数ID:05にデスゲイズの残りHPを代入
変数の操作:スクリプトで
$gameTroop.members()[0].param(0) - $gameTroop.members()[0].hp
手順6 戦闘開始時に敵のHPを前回までの与ダメージ分減らす
0ターン目(戦闘開始時)にHPを減らす
あと敵のステート変更で「不死身」をかけておく(これは次手順で説明)
手順7 デスゲイズをやっつけた時の処理
デスゲイズのHPが0%になったら討伐成功スイッチID:101をONにし、並列処理中のコモンイベントBを終了
ステート不死身を解除し、デスゲイズを死亡させる
以上。
もっとシンプルな処理があるかも・・?