Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@kotonoha0109

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?