【ARPG-PluginSet】ブーメラン

今回はブーメランを完成させます。敵にぶつけると動きを止めることができます。

RPGツクールMZの公式プラグイン「ARPGプラグインセット」で遊んでいます。今までには初代ゼルダをイメージしつつ、アイテム掲げ剣ビーム盾ガードドロップアイテム斜め方向の弾を作ってきました。

神トラをイメージしての壺投げもありますので、是非過去記事も見てみてください。

●スキルオブジェクト作成位置の設定

まずはブーメランのスキルオブジェクト作成位置とするため、前方座標を作成します。プレイヤー位置を取得し、方向に応じて座標を調整。1歩分だと違和感があったので半歩分を追加する形にしています。0.35は斜めの値です。1歩分の場合斜めは0.7071…なので省略して0.7、半歩分なので0.35としています。

実行するとファイアがプレイヤーの半歩前に生成して発射されるようになります。

・前方位置の準備

前回の記事から続けて作業を進めますので、一通り進めておいてください。

格納する変数を用意し、コモンイベント「方向取得」でプレイヤーの位置を取得します。

  1. 12番に「#前方X位置」として変数を作成
  2. 13番に「#前方Y位置」として変数を作成
  3. 「注釈:方向決定」の後に「build/ARPG_Core, キャラクター小数座標取得」を追加
  4.  キャラクター指定のキャラクター種別を「プレイヤー」に変更
  5.  小数X座標格納変数IDを「12:#前方X位置」に変更
  6.  小数Y座標格納変数IDを「13:#前方Y位置」に変更

・上下左右の移動量

前回の記事でコモンイベント「方向取得」に「注釈:方向決定」を追加しました。方向を判断しているので、これを利用して前方位置を調整していきます。まずは上下左右。定数に小数点は書けないため、オペランドを「スクリプト」に設定し、そこに値を入力します。

  1. 条件「%汎用方向 = 1」の時に「変数の操作」を追加(#0013 #前方Y座標 -= 0.5)
  2. 条件「%汎用方向 = 2」の時に「変数の操作」を追加(#0013 #前方Y座標 += 0.5)
  3. 条件「%汎用方向 = 4」の時に「変数の操作」を追加(#0012 #前方X座標 -= 0.5)
  4. 条件「%汎用方向 = 8」の時に「変数の操作」を追加(#0012 #前方X座標 += 0.5)

・斜め方向の移動量

続けて斜め方向です。同様にオペランドを「スクリプト」に設定、そこに小数点を入力します。

  1. 条件「%汎用方向 = 5」の時に「変数の操作」を追加(#0012 #前方X座標 -= 0.35)
  2. 条件「%汎用方向 = 5」の時に「変数の操作」を追加(#0013 #前方Y座標 -= 0.35)
  3. 条件「%汎用方向 = 9」の時に「変数の操作」を追加(#0012 #前方X座標 += 0.35)
  4. 条件「%汎用方向 = 9」の時に「変数の操作」を追加(#0013 #前方Y座標 -= 0.35)
  5. 条件「%汎用方向 = 6」の時に「変数の操作」を追加(#0012 #前方X座標 -= 0.35)
  6. 条件「%汎用方向 = 6」の時に「変数の操作」を追加(#0013 #前方Y座標 += 0.35)
  7. 条件「%汎用方向 = 10」の時に「変数の操作」を追加(#0012 #前方X座標 += 0.35)
  8. 条件「%汎用方向 = 10」の時に「変数の操作」を追加(#0013 #前方Y座標 += 0.35)

・生成位置設定

コモンイベント「ファイア」のスキルオブジェクト生成位置を先程作ったものに変更します。ファイアを斜めに発射してもそれっぽい位置から発射されるようになります。

  1. コモンイベント「ファイア」にあるスキルオブジェクト生成を編集
  2.  位置指定>位置指定を「カスタム」に変更
  3.  位置指定>カスタム座標>X座標(変数指定)を「#0012 #前方X位置」に変更
  4.  位置指定>カスタム座標>X座標(変数指定)を「#0013 #前方Y位置」に変更

●スキルオブジェクト作成

次はブーメランとして扱うスキルオブジェクトを作成します。ファイアを複製して調整。ページ3のイベントは削除し、戻ってくるイベントとして設定します。自立カスタム移動でdotMoveByDegを使い、移動しています。
並列処理でプレイヤー方向の角度を取得することで戻りを実現しています。

ファイアにあるスキルオブジェクト生成の作成対象をファイアからブーメランに変更します。これで敵にのみ当たり、敵に当たるか画面外まで行くと戻ってきます。MPの限りいくつも連続で発射できますが、その辺は後で調整が効く範囲でしょう。

・ページ1:初期化時のイベント

スキルオブジェクト「ファイア」を複製し、見た目と発射時の音を設定します。

  1. ファイアを複製し、名前を「ブーメラン」に変更
  2. ページ1を編集
  3.  画像を「!Frame」に変更
  4.  すり抜けをON
  5.  足踏みアニメをOFF
  6.  実行内容の最後にある「SEの演奏」を「Wind4」に変更

・ページ2:飛行中のイベント

飛んでいっている最中の見た目を調整します。

  1. ページ2を編集
  2.  画像を「!Frame」に変更
  3.  すり抜けをON
  4.  足踏みアニメをOFF

・ページ3:戻って来る時のイベント

プレイヤーに向かって飛んでくる最中の見た目を調整します。実行内容で飛んでいく方向をプレイヤー方向に毎回変更することで戻りを実現。最後にプレイヤーとの距離が0以下になったらイベントを消去しています。

  1. ページ3を編集
  2. 画像を「!Frame」に変更
  3. オプションは足踏み以外をON
  4. 自立移動のタイプを「カスタム」に変更
  5. 自律移動のタイプ>ルートでスクリプトを指定し、以下を入力
  6.  this.dotMoveByDeg($gameVariables.value(21));
  7. 移動速度を「6: 4倍速」に変更
  8. 移動頻度を「5: 最高」に変更
  9. プライオリティを「通常キャラの上」に変更
  10. 実行内容を全て削除
  11. 実行内容に以下のイベントを作成
  12.  build/ARPG_Core, キャラクター間角度取得
  13.   対象キャラクター指定を「プレイヤー」に変更
  14.   角度格納変数IDを「21: $SO移動角度」に変更
  15.  build/ARPG_Core, キャラクター間距離取得
  16.   対象キャラクター指定を「プレイヤー」に変更
  17.   角度格納変数IDを「28: %汎用距離」に変更
  18.  条件分岐:%汎用距離 <= 0
  19.   条件内にイベントの一時消去を追加

・ファイアをブーメランに変更

スキルオブジェクト生成にあるイベント名を「ブーメラン」に変更し、試してみましょう。壁にぶつからずに飛んでいき、戻ってきます。

●敵の動きを止める

最後に、敵にあたったら動きが止まるようにします。衝突スキル名と麻痺が継続する時間を保存するための変数を作成。衝突したスキルが何かを判断し、セルフ変数「$麻痺時間」に止める時間を設定します。
※スキル名チェックをファイアにしているのは、データベース上のスキル名を対象とするため
これらが終わったら敵テンプレートに麻痺時間を考慮するよう修正します。エネミーダメージの修正で完結させたかったのですが解決策が浮かびませんでした。

・変数を作成

敵と衝突したスキルの名前を格納する変数と、いつまで麻痺しているかの時間を計る変数を用意しておきます。

※変数「#0014 衝突スキル名」を作成
※変数「#0015 $麻痺時間」を作成

・「エネミーダメージ」を更新

コモンイベント「エネミーダメージ」に麻痺するかどうかの判定を追加します。

  1. コモンイベント「エネミーダメージ」の先頭に以下を追加
  2. 移動ルートの設定で「このイベント」でスクリプトを指定し、以下を入力
  3.  $gameVariables.setValue(14, this.arpgTempData().battler._recvDamageEffect._skill._data.name);
  4. 条件分岐を追加してスクリプトを指定し、以下を入力
  5.  $gameVariables.value(14) === ‘ファイア’
  6. 条件分岐内にプラグインコマンド「SetVariable, セルフ変数値設定」を追加
  7.  マップIDに「0」を入力
  8.  イベントIDに「0」を入力
  9.  セルフ変数IDに「15」を入力
  10.  設定値に「300」を入力
  11. 条件分岐の次に変数の操作を追加:#0014 衝突スキル名 = 0

・敵テンプレートに適用

敵テンプレートにある「enemy1」を麻痺するようにします。サンプルマップ1にいるウルフが影響を受けるようにします。残念ながら麻痺させたい敵には全テンプレートに適用する必要があります。

  1. enemy1のページ2を編集
  2. 条件分岐を追加し、条件に「変数:$麻痺時間」が0の時」を設定
  3. それ以外のときを設定し、以下をそれ以外として追加
  4.  変数の操作を追加「#0015 $麻痺時間 -= 1」
  5.  ウエイト:1フレーム
  6. 移動ルートの設定を「条件を満たした時」へ移動

●まとめ

今回はブーメランを完成させました。敵のリアクションがかなり遅れるのが気になりますが、、、。

意地になってARPG_Core.jsを片っ端から調査して衝突してきた相手のイベントIDを取ろうとしていました。取れてもコモンイベントが呼ばれる時にはスキルオブジェクトが消滅していて使えず。相当悩まされましたが、コモンイベントが非同期と考えれば当然だったかも知れません。

ブーメランの戻りが完成したところで、動きがフックショットに応用が効くと気付きました。出してる間は動けないようにしたい、というのが厳しそうですが。少し頑張ってみます。

コメント

  1. あーる より:

    はじめまして!
    ツクールのARPGプラグインでゲームを作ろうと悪戦苦闘していたので
    すべての記事が宝の山のように輝いています!
    とても丁寧に描いてくださっているのでスクリプトが苦手な自分でも
    同じ挙動を再現できて嬉しいです、ありがとうございます!

    あとひとつ質問がありまして…
    神トラにはない挙動で恐縮なのですが『カニ歩き+剣振り』って
    このARPGプラグインで実装可能でしょうか?
    (ソウルブレイダーのようなゲームを作っておりまして…)

    既存のプラグインで実現できそうな気もするのですが
    本当に知識不足で…お知恵を貸していただけますと幸いです…!

    • だくまた より:

      あーるさん、コメントありがとうございます!
      力になれたのであれば幸いです、頑張って書いたかいがありました。

      ソウルブレイダーはハマってました。カニ歩きを使った記憶は残ってないですが…(笑)
      RPGツクールMZには「向き固定」がありますので、特定のキーを押している間ON、離したらOFFするだけで出来そうな気がします。
      標準イベントで実装できそうなので、ちょっと試してみます。

タイトルとURLをコピーしました