開発日誌

テクニック

[ テクニック ] 地形タグで滑る床を実現

2021-06-10 21:01:46

床に矢印が描かれていて、上に乗ると矢印の方向に強制移動させられる――いわゆる「滑る床」と呼ばれるお馴染みのダンジョンギミックの作成方法です。

RPGツクールでこの「滑る床」を実装する方法は、イベントを敷き詰める方法、始点にのみイベントを置く方法、プラグインを使う方法、リージョンIDと並列処理を使う方法、と様々ありますが、おそらくプラグインなしで一番簡単に実装できる方法として、地形タグと並列処理を使った方法を解説します。

地形タグとは?

まず「地形タグ」って何やねん、という話ですが……。

「地形タグ」とは、RPGツクールVX Aceから登場した機能で、データベースの「タイルセット」で1つ1つのマップチップに、0~7の8種類(デフォルトは0)の番号を割り振ることができます。

おそらく戦闘背景の制御などを意図して用意されたものと思われますが、特に正式な用途は定められておらず、ツクールにしては珍しく汎用的な項目となっています。

同時期に登場した「リージョンID」が、ランダムエンカウントの制御という本来の目的以外に、立体交差の実現など様々な用途で利用されているのに比べると、この「地形タグ」はマイナーな存在で、初めて知ったという方も多いのではないでしょうか。

今回は、そんな「地形タグ」をフル活用した「滑る床」の実装方法です。

滑る床に地形タグを振る

最初に注意点として、この方法は地形タグを4つ使用します。地形タグは8種類(デフォルトの0も含む)しか設定できないので、既に別の用途で地形タグを4つ以上消費している場合は、この方法は使えません。

まず、データベースの「タイルセット」で、矢印の滑る床のマップチップに「地形タグ」を設定します。

矢印の床はダンジョンのタイルセットにあります。

地形タグの振り方が分からないかもしれませんが、「地形タグ」を選んだ状態で、対象のマップチップを左クリックすると数字が1ずつ増えていき、右クリックすると数字が1ずつ減っていきます。

地形タグの番号は何でもいいのですが、↓に4、←に5、→に6、↑に7と振っておくと、向きの番号(↓が2、←が4、→が6、↑が8)と順番が揃うので分かりやすいかと思います。

マップに配置する

地形タグを振り終わったら、実際に矢印の滑る床をマップ上に配置していきましょう。

すぐ正面は外れルートに、正解ルートはどう配置しようか、意外なところに宝箱へのルートを作ったり、簡単すぎず難しすぎずのバランスを考えるのが楽しいのではないでしょうか。

イベントやリージョンIDを使った方法だと、床を配置したら、それに合わせてイベントやリージョンIDも設置しないといけません。床の配置を変更したら、イベントやリージョンIDも変更しなければならず、間違えるとギミックが破綻します。その点、地形タグであれば直接マップチップに紐付いているため、二重に設定する手間が省けるのが大きなメリットです。

並列処理イベントを作成する

さて、いよいよ根幹部分です。

マップの端あたりにイベントを設置し、トリガーを「並列処理」にします。

それと、地形タグを受け取る変数を1つと、滑り中か否かを判別するスイッチと、滑り処理中か否かを判別するスイッチの2つを用意します。

以降、ちょっと長いですがイベントの実行内容を順に解説します。

◆指定位置の情報取得:変数1, 地形タグ, プレイヤー

イベントコマンドの「指定位置の情報取得」を使います。

地形タグを受け取る変数を指定し、情報タイプには「地形タグ」を指定します。

そして場所は、RPGツクールMZで新たに設定項目として加わった「キャラクターで指定」で「プレイヤー」を指定します。

RPGツクールMV以前ではキャラクターでの場所指定ができないので、先にプレイヤーのX座標とY座標を変数に取得し、その変数で場所を指定する必要があります。ちょっと手間ですね。ショボい機能追加しかないと酷評されがちなMZですが、地味ながらもこうして新機能の恩恵を感じられると嬉しいです!

◆条件分岐:「地形タグ変数」 >= 4
 ◆条件分岐:スイッチ「滑り中」がOFF
  ◆スイッチの操作:「滑り中」 = ON
  ◆メニュー禁止の変更:禁止
  ◆移動ルートの設定:プレイヤー(ウェイト)
  :        :◇歩行アニメOFF
  :        :◇向き固定ON
  :        :◇移動速度:6
 :分岐終了

まずは現在位置の地形タグで分岐します。

地形タグが4以上であれば滑る床に乗っているので、滑る床の処理をします。

この時、スイッチの「滑り中」がOFFであれば、普通の床から滑る床に入った瞬間を意味するので、その処理をします。

すなわち、まずは「滑り中」のスイッチをONにします。次に滑っている最中にメニュー画面を開けないよう、メニューの禁止をします。そしてプレイヤーの移動ルートで、歩行アニメはOFF、向き固定はON、移動速度は最高の6にします。これで、プレイヤーキャラクターが滑っている最中のモーションらしくなります。

 ◆条件分岐:スイッチ「滑り処理中」がOFF
  ◆SEの演奏:Miss (90, 150, 0)
  ◆スイッチの操作:「滑り処理中」 = ON
 :分岐終了

次に、スイッチの「滑り処理中」がOFFであれば、滑るSEを鳴らして、「滑り処理中」のスイッチをONにします。

「滑り中」と「滑り処理中」の2つがあって紛らわしいですが、「滑り中」は現在滑る床に乗っているかの判定、「滑り処理中」は滑る床の効果でプレイヤーが1マス強制移動させられている最中かの判定に使っています。

1マス移動している最中にも並列処理は呼ばれ続けるので、移動中か否かを判別してやらないと、滑るSEが鳴りすぎて壊れた感じになってしまいます。

滑るSEは、標準素材だと「Miss」のピッチを150にしたのが、それっぽいと思って愛用しています。

 ◆条件分岐:「地形タグ変数」 = 4
  ◆移動ルートの設定:プレイヤー(飛ばす)
  :        :◇下に移動
  ◆ウェイト:3フレーム
 :分岐終了

いよいよ地形タグ(矢印の向き)に応じて強制移動させる部分です。

地形タグが4、すなわち↓の床の場合は、「移動ルートの設定」でプレイヤーを下に移動させます。この時、「移動できない場合は飛ばす」のチェックは入れ、「完了までウェイト」のチェックは外します。

そしてウェイトがないとやや速すぎるので、適度なウェイトを入れます。

 ◆条件分岐:「地形タグ変数」 = 5
  ◆移動ルートの設定:プレイヤー(飛ばす)
  :        :◇左に移動
  ◆ウェイト:3フレーム
 :分岐終了
 ◆条件分岐:「地形タグ変数」 = 6
  ◆移動ルートの設定:プレイヤー(飛ばす)
  :        :◇右に移動
  ◆ウェイト:3フレーム
 :分岐終了
 ◆条件分岐:「地形タグ変数」 = 7
  ◆移動ルートの設定:プレイヤー(飛ばす)
  :        :◇上に移動
  ◆ウェイト:3フレーム
 :分岐終了

同様に、地形タグが5(←)、6(→)、7(↑)の場合の強制移動も設定します。

地形タグの変数が同時に4~7の複数の条件を満たすことはないため、条件分岐の「それ以外のとき」で入れ子にする必要はありません。

:それ以外のとき
 ◆条件分岐:スイッチ「滑り中」がON
  ◆移動ルートの設定:プレイヤー(ウェイト)
  :        :◇歩行アニメON
  :        :◇向き固定OFF
  :        :◇移動速度:4
  ◆メニュー禁止の変更:許可
  ◆スイッチの操作:「滑り中」 = OFF
 :分岐終了
:分岐終了

それから、最初の現在位置の地形タグでの条件分岐において、4以上でない、すなわち現在地が滑る床ではない場合の処理に移ります。

この時、スイッチの「滑り中」がONであれば、滑る床から普通の床に着地した瞬間を意味するので、滑っている最中のモーションを元に戻し、メニューを許可し、スイッチの「滑り中」をOFFにします。

「滑り中」がOFFであれば、もともと普通の床を歩いている状態なので、特に何もしません。

◆スイッチの操作:「滑り処理中」 = OFF

最後にスイッチの「滑り処理中」をOFFにして、並列処理は終了です。

並列処理は重いから使いたくないという方もいると思いますが、他にも並列処理を山ほど実行しているならともかく、このくらいの並列処理で重くなることはありません。

特に「滑り処理中」のあたり、もう少しスマートな処理の仕方はありそうですが、一応これで思った通りの動作になっています。こうした方がいいのでは?とかあれば、教えてください。

コメント
お名前
コメント
※ 確認画面はありません。