RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

アクションRPGの基礎(RPGツクールMV)(4/4)

第3回

基礎完結編です。敵に触ったらダメージを受ける処理と、マップ初期化の処理をそれぞれ作ります。

敵からダメージを受ける処理

敵の1ページ目に、触ったら痛いの処理を作りましょう。このへんは割と自由に、適当でいいと思います。トリガーは「イベントから接触」にしておきます。

◆条件分岐:決定キー押してる時間 = 1
 ◆イベント処理の中断
 ◆
:分岐終了
◆SEの演奏:Damage1(90,100,0)
◆アニメーションの表示:プレイヤー,ダメージ
◆移動ルートの設定:プレイヤー(飛ばす,ウェイト)
:        :◇180度回転
:        :◇一歩前進
◆HPの増減:パーティ全体,- 50(戦闘不能を許可)

ダメージを受けて弾かれる例ですね。

先頭にある条件分岐&中断の処理は、真正面から剣で攻撃したときに「会話した」と判断されて、攻撃と同時にダメージを受けてしまうのを防ぐ処理です。

決定キーを押している時間は、コモンイベント「キー入力受付」で、常に変数1番「決定キー押してる時間」に代入されているので、これを利用します。時間がちょうど1のときとは、押した瞬間ということになるので、上記の設定により押した瞬間だけはダメージを受けない、とすることが出来ます。

このままでもいいのですが、連続でダメージを受けるのを防ぐために一度ダメージを受けたら一定時間無敵になる処理を加えてみます。

スイッチ3番「主人公被ダメージ無敵」を新たに作り、ダメージを受けた時にそれをONにするようにしましょう。

同じく敵1ページ目に追記します。↓◇が追加した行です。

◆条件分岐:決定キー押してる時間 = 1
 ◆イベント処理の中断
 ◆
:分岐終了
◇条件分岐:主人公被ダメージ無敵がON
 ◇イベント処理の中断
 ◇
:分岐終了
◆SEの演奏:Damage1(90,100,0)
◆アニメーションの表示:プレイヤー,ダメージ
◆移動ルートの設定:プレイヤー(飛ばす,ウェイト)
:        :◇180度回転
:        :◇一歩前進
◆HPの増減:パーティ全体,- 50(戦闘不能を許可)
◇スイッチの操作:#0003 主人公被ダメージ無敵 = ON

無敵がONだと当たってもダメージを受けないようにします。

次いで、コモンイベント「主人公被ダメージ無敵」を作ります。トリガーは並列処理、出現条件スイッチはスイッチ3番「主人公被ダメージ無敵」にします。

実行内容は以下の通り。

◆ウェイト:30フレーム
◆スイッチの操作:#0003 主人公被ダメージ無敵 = OFF

30フレーム(=0.5秒)経ったら勝手にOFFになるというだけの処理ですね。これでダメージを受けて0.5秒は無敵になり、ダメージを受けなくなります。

f:id:fermiumbay13:20190801192820p:plain

ダメージを受けた瞬間に触ってもダメージは受けません。

初期化の処理

次に、初期化の処理をまとめます。

今のままだと別のマップへ行っても敵のセルフスイッチはONのままなので、いつまで経っても敵が復活しないことになります。

そこで、初期化の処理を作って初期化させたいタイミングで呼び出すことにします。ここでは別のマップへ行く直前に初期化することを想定します。

コモンイベント「初期化」を新たに作ります。トリガーは「なし」でOKです。

スクリプト:enemyDamage = new Array(999);
:     :for(var i = 0; i < 999; i++){
:     : enemyDamage[i] = 0;
:     :}
スクリプト:for(var eventID = 1; eventID <= 999; eventID++){
:     : var mapID = this._mapId;
:     : $gameSelfSwitches.setValue([mapID, eventID, "A"], false);
:     : $gameSelfSwitches.setValue([mapID, eventID, "B"], false);
:     :}
◆スイッチの操作:#0001 キー入力受付 = ON
◆スイッチの操作:#0003 主人公被ダメージ無敵 = OFF

スクリプトコピペ用

enemyDamage = new Array(999);
for(var i = 0; i < 999; i++){
enemyDamage[i] = 0;
}

for(var eventID = 1; eventID <= 999; eventID++){
var mapID = this._mapId;
$gameSelfSwitches.setValue([mapID, eventID, "A"], false);
$gameSelfSwitches.setValue([mapID, eventID, "B"], false);
}

一つ目のスクリプトはもともとマップ「初期設定」で行っていた、敵のダメージ量を初期化する処理でした。二つ目のスクリプトを新たに追加します。現在のマップにいるイベント番号1番から999番までのすべてのイベントのセルフスイッチA, BをOFFにする処理です。

f:id:fermiumbay13:20190801192956p:plain

マップ「初期設定」にあった初期設定イベントを上のように書き換えます。初期化は全部、コモンイベントの初期化に置き換えてしまいましょう。また、今後マップ移動のたびに、マップ移動の直前にこの初期化命令を呼び出します。これで、別のマップへ行けば敵が復活し、敵のダメージ量がリセットされることになります。

 

これで大体基礎は完成しましたね。あとは工夫次第で色んなゲームが作れるでしょう。基本は次マップへ行くときに初期化だけきちんとやれば、一度作った敵や仕掛けはコピペするだけで使えるようになるので、量産が簡単になります。次マップへ行くときの初期化もたぶん作り方によっては自動化できると思います。

ぜひゼルダを作ってください。

完成版のサンプルでは敵をさらに量産しやすくするために、トリアコンタン様の作成されたテンプレートイベントプラグインを使用しています。非常に便利です。RPGツクール2000では考えられなかったことがめちゃめちゃできます。

逆に言うと、ツクール2000で便利だった機能が標準搭載されなくなっているなどして、MVの標準機能はどうもかゆい所に手が届かない感じがあります。基本的にプラグインで何とかしろなのでしょうか……

本講座についてご質問等ございましたら、ブログコメントに記載いただくか、右記メールアドレスまでご連絡お願いします:fermiumbay2f:id:fermiumbay13:20190801194651p:plainyahoo.co.jp