LoginSignup
3
3

More than 5 years have passed since last update.

ツクールMVでデスゲイズを作る

Last updated at Posted at 2017-05-11

FF6(ファイナルファンタジー6)では飛空艇に乗っている途中に、デスゲイズというボスモンスターとのエンカウントがあります。
ツクールMVを含むRPGツクールシリーズでは飛空艇など空の移動中はモンスターが出現する仕様になっていないので、同様のモンスターが作れないかと、やってみました。

手順1 3つのスイッチを準備

スイッチID:101 デスゲイズ未討伐ならOFF、討伐したならON
スイッチID:102 コモンイベントAのトリガー(コモンイベント自動実行:飛空艇に乗った時の処理)
スイッチID:103 コモンイベントBのトリガー(コモンイベント並列処理:飛空艇に乗っている間の処理)
をそれぞれ準備

手順2 rpg_objects.jsに追記

飛空艇に乗った時にスイッチID:102をON、降りる時にスイッチID:103をOFFにする処理を入れる
討伐したらこの処理は実行されない様にする

rpg_objects.js
    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を起動。

sshot 5.jpg

手順4 コモンイベントBの内容

X座標、Y座標が一歩でもずれたら変数ID
$gameVariables.value(1) != this.character(-1).x
$gameVariables.value(2) != this.character(-1).y

出現までの歩数と現在の歩数が重なったらエンカウント
戦闘終了後に歩数はリセット、乱数は振り直しする(例ではしばらく出現を抑えたいので80〜140としている)。

sshot 6.jpg

手順5 敵のHPを引き継ぐ

FF6のデスゲイズの仕様では、
・逃走する
・HPは前の戦闘までで与えたダメージ分減っている
この様になっているので、これも再現

とりあえず5ターン目ぐらいで強制的に逃げる仕様にしておきますか。

sshot 10.jpg

変数ID:05にデスゲイズの残りHPを代入
変数の操作:スクリプトで

変数の操作で敵ID0の残りHPを変数05に代入(最大HP-現在HP)
$gameTroop.members()[0].param(0) - $gameTroop.members()[0].hp

手順6 戦闘開始時に敵のHPを前回までの与ダメージ分減らす

0ターン目(戦闘開始時)にHPを減らす
あと敵のステート変更で「不死身」をかけておく(これは次手順で説明)

sshot 9.jpg

手順7 デスゲイズをやっつけた時の処理

デスゲイズのHPが0%になったら討伐成功スイッチID:101をONにし、並列処理中のコモンイベントBを終了
ステート不死身を解除し、デスゲイズを死亡させる

sshot 11.jpg

以上。
もっとシンプルな処理があるかも・・?

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3