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

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

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">FF6のデスゲイズチックな飛空艇エンカウント出来た！　敵に与えたダメージは次の戦闘に引き継ぎ。やり方はいずれ紹介します。 <a href="https://twitter.com/hashtag/%E3%83%84%E3%82%AF%E3%83%BC%E3%83%ABMV?src=hash">#ツクールMV</a> <a href="https://t.co/rIqHcPI17T">pic.twitter.com/rIqHcPI17T</a></p>&mdash; 蒼木ことり (@kotonoha0109) <a href="https://twitter.com/kotonoha0109/status/862492570407936001">2017年5月11日</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

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

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

```js: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](https://qiita-image-store.s3.amazonaws.com/0/180923/3c0fbc51-79c4-8478-d555-da17867b4edf.jpeg)




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

```js:X座標、Y座標が一歩でもずれたら変数ID:04の現在歩数に+1し、移動先の座標を変数に代入
$gameVariables.value(1) != this.character(-1).x
$gameVariables.value(2) != this.character(-1).y
```

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

![sshot 6.jpg](https://qiita-image-store.s3.amazonaws.com/0/180923/e1ab5c8b-66f6-8573-3acc-28e6df11eeec.jpeg)




# 手順5　敵のHPを引き継ぐ

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

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

![sshot 10.jpg](https://qiita-image-store.s3.amazonaws.com/0/180923/fef9b3d0-1703-9784-89db-d640d11b226b.jpeg)

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

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



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

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

![sshot 9.jpg](https://qiita-image-store.s3.amazonaws.com/0/180923/44def2e9-2570-8253-ee78-2af84a321d5f.jpeg)





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

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

![sshot 11.jpg](https://qiita-image-store.s3.amazonaws.com/0/180923/b6633ed6-7653-0fc9-298c-aab9bfec1d8b.jpeg)



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