[講座]ギロチン振り子トラップの作り方【TRP_MoveRouteEx】
こんにちは。
突然ですが、1月に有償プランで配布した移動ルート拡張プラグイン「TRP_MoveRouteEx」を活用したギロチン振り子トラップの作り方をご紹介します!
未購入の方も、本記事で気になったら是非バックナンバーの購入をば!
(あと1つ売れればCi-en収益化できるんです……!一生収益化できる気がしなそうだったので、頑張って記事書きました🤸♂️)
ギロチン振り子トラップの作り方
TRP_MoveRouteExの使い方は、過去3回の記事で解説してるのでそちらを参考に。
とはいえ、久しぶりの記事なので使い方の解説も多少加えていきます。
振り子の画像を用意
振り子用の画像がないので、デフォ素材の武器画像Weapon1.png内の斧の画像を加工して用意しました。
RPGツクールMZをお持ちの方は、ツクール素材の利用規約に則ってご利用可能です。
……ドット絵を回転させてきれいに修正する技術がないので、斜め45度のままです!
(自分で画像を用意するときは、普通に下向きで作るのが良いと思います)
方向・パターンなしのキャラ画像に設定
上の振り子画像、通常であれば縦と横に余白をとって
「上下左右の方向」「3つの歩行パターン」を用意する必要があります。
ただ、ものすごい画像サイズになってメモリをどか食いしてしまうので、方向・パターンなしの画像を設定するプラグインを用意しました。
NoPatternCharacter.js (1.82kB)
ダウンロードプラグインを導入して画像を設定したら、イベントのメモ欄に「<noPattern>
」と記述すればOKです!
プライオリティは「通常キャラの上」にします。
(「通常キャラと同じ」だと、位置によっては不自然な重なり順に見えます…)
振り子の移動ルート設定
移動ルート拡張プラグインは、移動ルートのスクリプト欄に独自形式のコマンドを使って操作を行うプラグインです。
便利機能として、自律移動の内容をイベントページの1行目にスクリプトコマンド(MVは注釈コマンド)を入れて、その中に記述することができます。
自律移動のタイプをカスタムにしておくのを忘れずに!
スクリプトの1行目には「@route custom repeat freq:max
」と記述します。
それぞれ、次の意味↓
- @route:これから移動ルートを記述
- custom:自律移動の設定
- repeat:動作を繰り返す
- freq:max:頻度最大
移動ルートのコマンド内容は次の通り↓
@route custom repeat freq:max
//初期角度を20度(実際は45+20=65度)に設定
cmd angle 20 anchor:0 d:0 @
//イベントトリガーを無効化
cmd trigger none @
//繰り返しの開始位置をここに設定
cmd repeat
//120フレームで70度(実際は+45で115度)まで回転
cmd angle 70 anchor:0 d:120 cubicInOut
//真下を通る60フレーム後まで待機
cmd wait 60
//距離が0.5以下なら、スイッチ1をOFF&イベントを実行
cmd if dist 0.5; cmd switch 1 off; cmd start @
cmd wait 60;
//反対方向に回転
cmd angle 20 anchor:0 d:120 cubicInOut
cmd wait 60
//距離が0.5以下なら、スイッチ1をON&イベントを実行
cmd if dist 0.5; cmd switch 1 true; cmd start @
cmd wait 60
角度の設定
順に見ていきましょう!
//初期角度を20度(実際は45+20=65度)に設定
cmd angle 20 anchor:0 d:0 @
角度の初期化してます。
今回は振り子の振れる角度を50°とします。(お好みでOK)
真下の状態が90度で、そこから半分の25°を引いた65°に初期角を設定したいのですが…
画像の振り子がすでに45°傾いてるので、65°-45°で角度を20°に設定しています。
その他のパラメータは↓
- d:所要フレーム数。0として一瞬で角度を設定
- anchor:回転の中心。振り子の棒の端っこ(上端)を中心に回転するので0
- @:1フレーム待たずに即座に次のコマンドを実行する記号
トリガーの無効化
//イベントトリガーを無効化
cmd trigger none @
決定キーや触れたときにイベントが実行されないように、トリガーをnone
として無効化。
繰り返し位置の設定
//繰り返しの開始位置をここに設定
cmd repeat
移動ルートの繰り返しは通常、一番最初の行に戻ります。
ここまでに行った初期化用のコマンドは繰り返して実行する必要がないので「repeat
」コマンドで繰り返しの開始位置をこの行以降に設定します。
回転アニメーション
//120フレームで70度(実際は+45で115度)まで回転
cmd angle 70 anchor:0 d:120 cubicInOut
基本的なパラメータは初期角度を20°に設定したときと同じです。
所要フレームが120フレーム(2秒)になっているのと、
イージング(動作の緩急)を「cubicInOut
」を指定して動きの最初と最後を遅くしてます。
(角度は、一番下の90°の状態から25°回転した115°……から画像の傾きの45°を引いた70°に設定してます。)
衝突判定
//真下を通る60フレーム後まで待機
cmd wait 60
//距離が0.5以下なら、スイッチ1をOFF&イベントを実行
cmd if dist 0.5; cmd switch 1 off; cmd start @
120フレームで角度をアニメーションさせてるので、真下を通るのは60フレーム後です。
60フレーム待ってから「if dist
」コマンドで衝突判定を行います。
「if dist 距離
」で指定した距離以下の場合に同じ行のそれ以降の処理を行います。
今回はスイッチ番号1をOFFにしてからイベントを実行させています。
ちなみに、スイッチ番号1は「振り子が左から衝突」を意味するフラグです。
右からぶつかっているのでOFFとし、イベント内でプレイヤーを左に吹き飛ばします。
呼び出すイベント内容は、コモンイベントを呼び出すのみです。
コモンイベントの内容は後ほど解説します。
(※「cmd commonEvent」コマンドでそのままコモンイベントを呼び出すこともできますが、呼び出し元のイベントが分からなくなってしまうので一度イベント自身のイベントページを起動させています。)
その後は残りの角度アニメーションを待ってから、同じように反対方向へ角度アニメーションを行います。
cmd wait 60;
//反対方向に回転
cmd angle 20 anchor:0 d:120 cubicInOut
cmd wait 60
//距離が0.5以下なら、スイッチ1をON&イベントを実行
cmd if dist 0.5; cmd switch 1 true; cmd start @
cmd wait 60
スイッチ操作コマンドは「振り子が左から衝突」をONとしてます。
衝突時のイベント
衝突時に呼び出すコモンイベントは次の通り↓
上の3行は「フラッシュ」「シェイク」「SE」で衝突時のエフェクト。
次の「HPの増減」でダメージ処理。
その後の長めの「スクリプト」で吹き飛ばしの移動処理。
最後にスクリプトでの移動完了を待って「移動ルート」で向き固定をOFFに戻してます。
さて、スクリプトで行ってる吹き飛ばし処理は、移動ルートのジャンプで代用することも可能ですが…
プレイヤーの移動が完了してから移動ルートの次の行が実行されるという仕様のため、
移動中に振り子に衝突しても、プレイヤーが歩き終わって次のマスに到着してからジャンプで吹き飛ぶ動作となってしまいます。
そのため、スクリプトを使って衝突タイミングで強○的にジャンプ移動させてます。
スクリプトの解説はコメント行(//)を参照ください。
var event = this.character(); //コモンイベントを呼び出したイベント
var dx = 2; //x方向に吹き飛ぶ距離
var dy = 2; //y方向に落ちる距離
//スイッチ「左から衝突」がONならx方向の向きは反対
if($gameSwitches.value(1)===false)dx*=-1;
//吹き飛び先を固定するため、一度プレイヤーの実体位置を振り子イベントの位置に設定
//(見た目上の位置である_realXではなく、衝突判定など行う実体座標である_x)
$gamePlayer._x = event._x;
$gamePlayer._y = event._y;
//向きを固定してジャンプで吹き飛ばす
$gamePlayer._directionFix = true;
$gamePlayer.jump(dx,dy);
(※途中、吹き飛び先の座標がずれてバグったりしないように、プレイヤーの実体座標を補正してます)
以上で、基本的な動作ができました!
振り子の動きに合わせて左右に吹き飛びます!
自律移動の設定をコモンイベントに移す
振り子をたくさん配置し、ウェイトを使ってタイミングをずらすのですが、その前に自律移動の移動ルートをコモンイベント化して整理します。
イベントの1行目に設定していた移動ルートのスクリプトを新しいコモンイベントにペーストします。
そして、イベントの1行目を次のように置き換えます。
これで、コモンイベント「ギロチンルート」に移植した移動ルート設定を自律移動に設定できます。
複数のイベントを配置してから移動ルートの修正が必要になっても、コモンイベントの修正のみですみます!
複数の振り子を配置
さて、振り子イベントをコピペして好きなだけ配置しましょう!
そのままではすべて同じタイミングで振り子が振れます。
「cmd repeat
」コマンドより上の初期化処理の中に、イベントごとに異なる値のウェイトを挟んでタイミングをずらしたいのですが、自律移動の設定をコモンイベントに移してしまっています…
そこで、イベントのメモ欄のメタ設定を使ってウェイトの値をイベントごとに変えます。
ここでは、パラメータ名「w」を使って「<w:初期ウェイト値>
」と設定します。
(※本記事では、イベントごとに0, 30, 60, 90, 120に設定)
コモンイベント「ギロチンルート」内の設定を修正↓
↓のコマンドでメタパラメータwの値だけウェイトさせてます。
cmd wait \MT[w@0]
「@0」は、メモ欄に設定していない場合のデフォルト値を0とすることを意味します。
これで、タイミングを自由にずらすことができました!
ただ、振り始めるまで不自然に固まって見えてますね……
振り子ごとに初期角度等を設定するのはしんどそうです……
マップ侵入位置からギロチンゾーンをある程度離し、ギロチンが止まっている瞬間を見えないようにさせる方針にしましょう!
とはいえ、イベントは画面外だと自律移動がストップするという仕様が邪魔します……
(ついでに、振り子のタイミングもずれてしまう…)
以前の「落石ギミック」の記事では「cmd repeat リピートサイクル」を使って同期させましたが、今回はこの方法だとちょっとうまくいかないので、素直にプラグインを用意しました!
SelfMovementOutsideTheScreen.js (1.01kB)
ダウンロードシンプルなプラグインです。
メモ欄に「<moveOut>
」と設定しておくと、画面外でも自律移動がストップしません!
以上でギロチン振り子トラップ完成です!
お疲れさまでした!
未購入で気になった方は、バックナンバーの方をよろしくです!
この記事にはコメントできません。