投稿記事

[進捗]天候システム

こんにちは。

https://twitter.com/thiropGames/status/1529775554374774784

……心が折れたので、久しぶりに「眠れる勇者のRPG」の雑進捗でも。


今年に入ってネットワーク周りの見えない部分の処理をずっとやってましたが、ようやく土台の部分が一段落し、今はゲーム部分の制作に戻りつつあります。

https://twitter.com/thiropGames/status/1529804069623123969

半ソシャゲなゲームなので、月替りのイベントダンジョン的なコンテンツを用意するのですが、量を用意するのはしんどいのでランダムな要素・ギミックで補う計画です。


天候システムもその一環で試作したものですが、さらにランダム要素をもたせてローグライトっぽいシステムに修正する予定です。

  • フロアを進むごとに天候・敵バフ・味方デバフ・探索効果のどれかがランダムに増えていく
  • 天球儀でどれか1つを選んで消去できる

昨年アツマールで出したローグライトモードで好評だったアーティファクトシステムもゆるく組み込むつもりです。

ただ、あまりランダム要素が強すぎるとキャラ育成の意義が薄くなってしまうので、

  • ランダム要素をほぼ廃したガチフロア
  • ゆるく遊べるランダム要素多めのカジュアルフロア
  • 道中で仲間をピックしていくローグライトフロア

の3タイプ用意し、「素材集めに周回するときはカジュアルフロアかローグライトフロア」といった感じにプレイヤーが選べるスタンスにする予定です。


やっぱり、ゲーム部分の制作は楽しいですね(´・ω・`)

ネットワーク周りは新しい知識・技術の勉強になってそれはそれで面白かったのですが、ずっとプレツク等のタグにも参加できなかったので……

また面白そうな進捗が出てきましたら、記事にしようと思います。
それではまたノシ

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[講座]ギロチン振り子トラップの作り方【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>」と設定しておくと、画面外でも自律移動がストップしません!


以上でギロチン振り子トラップ完成です!

お疲れさまでした!

未購入で気になった方は、バックナンバーの方をよろしくです!

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

[講座]『天候:メテオ』の作り方【TRP_ParticleMZ】



こんにちは。

GW真っ最中、いかがお過ごしでしょうか?

各所でGWセールが賑わっておりますが、シロップ印の各種プラグインも20%オフのセール中(~5/8<日>まで)です!




気になるプラグインがありましたら、ぜひショップページへお越しくださいませ!



さて、今回の記事ではRPGツクールMZ向けパーティクルプラグイン「TRP_ParticleMZ」を使って空からメテオが降ってくる天候エフェクトの制作方法をご紹介します!


上級者向けのグループエディタやサブエミッターを活用した高度なエフェクトとなります。

各種スタートアップ記事を読みこんで操作に慣れていないと難しい内容ですが、購入したばかりの方も「こんなエフェクトが作れるのか〜」と気軽に流し読みしてもらえると幸いです。



□スタートアップ記事
導入とパーティクル表示【TRP_ParticleMZ】
基本の使い方②〜エディタ編【TRP_Particle】
グループ機能【TRP_ParticleMZ】
サブエミッター機能【TRP_ParticleMZ】



天候「メテオ」の作り方

さて、新たにパーティクルエフェクトを自作しようとするとき、どのプラグインコマンドを使ってるいでしょうか?

「TRP_ParticleMZ」プラグインのset/playコマンドを使う方が多いかと思います。


ただ、ある程度プラグインの操作に慣れた方であれば、
「TRP_ParticleMZ_Group」プラグインのsetコマンドを使うのが断然おすすめです!



編集を始める際は、どんなエフェクトを作るかある程度想定しているでしょう。

しかし、いざエフェクトを作り進めていくと「見栄えをよくするために、もう1つエフェクトを重ねたい」と思うことが多々出てきます。


そんなときにグループコマンドのエディタであれば、テストプレイを続けながら複数のエミッターを交互に編集して見栄えを整えることができます。

エフェクトを作り始めるときは、おもむろにグループコマンドのsetを_EditMode=trueで呼び出しましょう!


今回は管理ID(設定名)「meteor」、対象を「weather」として天候エフェクトを制作していきます。




隕石本体の動きを作ろう

さて、グループエディタを呼び出して最初にすることは9割9分、決まってます。

「command1」の行にカーソルを合わせ、「edit」と打ち込んでEnterです



今回は、隕石本体をメインエミッターとして発生させ、複数のサブエミッターで細かな演出や動きを作っていきます。

  • サブエミッター1:隕石の動きに合わせて「周りに燃える炎」
  • サブエミッター2:「衝突後の炎」
  • サブエミッター3:「衝突後の炎の煙」

では、隕石本体の動きを設定していきましょう!


隕石画像の読み込み

まずはパーティクルの画像を設定しましょう

今回はツクールMVのアニメーション画像「Earth3」の画像を使います。


「Ctrl+A」でMV形式のアニメーション画像をパーティクルとして読み込めるので、MVを所持してる方はぜひアニメーション画像をプロジェクトに取り込んでおきましょう!

ツクールMVの新規プロジェクトからimg/animationsフォルダをコピペすればOKです。


(※MVを持ってない人は任意の画像を用意して「img/particles」フォルダに入れましょう。「Ctrl+I」での画像選択時に表示されます。
ちょうどよい画像が無い方は、キャラ画像「!Others1」の岩の画像を切りとってひとまずの代用とすると良いでしょう。)


隕石の動きを設定

最終的には画面上のランダムな位置から複数発生させたいですが、まずは編集しやすいように隕石1つを定位置に発生させましょう。

□パラメータ設定例

  • [blendMode]は0で通常
  • [lifetime]は幅を持たせず4秒で固定。固定にすることで、消滅のタイミングに合わせてシェイクやSE再生といった演出をさせることができます。

「Ctrl+S」で保存→「Ctrl+W」でいったん隕石本体のエミッター設定を終わります。


隕石の周りの炎の設定

燃え盛る隕石を表現するためにサブエミッターを設定します。

「opt+↓」を押して「command1」の行の下にコマンドを追加し、

「sub」と打ち込んでEnterを押してサブエミッターを設定します。


炎のエフェクトとしてプリセットデータの「fire_c」をベースに編集していきます。

「Ctrl+P」でプリセット一覧から「fire_c」を選んで読み込みましょう。


読み込んだ数値のままだと少し問題があるので調整していきます。


位置の調整

まずは、炎が隕石のまわりにまとわるように発生位置を調整しましょう。

現在は長方形の範囲に発生させる「rect」となってます。


円形に発生させる「circle」に変更し、半径「r」をちょうどよい値に設定しましょう。(ここでは24)

発生量と見栄えの調整

次に、frequencyの値を大きくしてパーティクル発生量・負荷を抑えます。(ここでは0.01)

また、発生時の大きさを大きくし、量が減ってスカスカになった分の見栄えを補います。


方向の調整

炎が真上に立ち上がってますが、隕石の動きに合わせて[startRotation]を左上(-120度)に変更します。


□サブエミッター1のパラメータ



これで、1つ目のサブエミッターの設定完了です!

「Ctrl+S」→「Ctrl+W」でサブエミッターの設定を保存&終了します。



着弾後の炎と煙

次に、隕石の着弾後に残る炎のエフェクトを新しいサブエミッターとして設定していきます。

さきほどと同じように「Ctrl+↓」でCommand2の下に新しい行を挿入し、
「sub」と打ち込んでからEnterでサブエミッターの設定を行います。

着弾後の炎にもプリセットデータ「fire_c」をベースに使います。

「Ctrl+P」でプリセット一覧を表示して「fire_c」を選びます。


このままでは隕石の周りに炎が表示されているだけです。

隕石消滅後に表示されるようにサブエミッター設定の「sub」パラメータを調整します。

まず、開始タイミングを設定する「st」を1としてサブエミッターを有効化するタイミングを隕石消滅直後とします。

「emitterLifetime」が-1で永続のままではすぐに消滅する仕様なので、炎の表示時間を適当な秒数に設定します。

(※長すぎると隕石が降ってくるたびに炎が残って負荷が大きくなるので注意)


また、負荷を抑えるために「frequency」を少し大きめにして発生数を抑えましょう。

ついでにスカスカになった分、発生範囲rectの幅と高さを小さくして表示範囲を小さくすると良いでしょう。


□サブエミッター2のパラメータ


煙の設定

全く同じ手順で炎の煙をサブエミッターとして設定します。

プリセットデータで読み込むデータとして「smoke_c2」を使います。

読み込んだあとに、

  • 「sub」パラメータの発生タイミング
  • 「emitterLifetime」で炎の継続時間
  • 「frequency」と「rect」で発生量と発生範囲

など調整しましょう。


□サブエミッター3のパラメータ



お疲れさまです!

これで、隕石エフェクトの基本設定が終わりました!


「Ctrl+S」→「Ctrl+W」でサブエミッターの設定を保存してから

もう1度「Ctrl+S」→「Ctrl+W」でグループの設定を保存して終了します。

(※グループ設定の保存を忘れずに!)



画面演出の設定

演出として隕石の着弾に合わせて「シェイク」「フラッシュ」「SE」を設定します。

パーティクルグループコマンドの「_editMode」をOFFにして、着弾タイミングの4秒(240フレーム)後にそれぞれのコマンドを実行させましょう。


3つのコマンド「シェイク」「フラッシュ」「SE」の好みの設定が見つかったら、パラメータをメモしておきましょう。


実は、上記の演出はパーティクルのグループコマンドからそれぞれ「shake」「flash」「se」コマンドとして実行させることができます

(※グループコマンドに演出を組み込むことで、パーティクルグループコマンドを実行すれば、あとはタイミングを図らずに「シェイク」などを自動で行うことができます。)



再びグループsetコマンドの「_editMode」をONにしてテストプレイでグループエディタを開きます。

「Ctrl+↓」でコマンドを挿入して、

  • 指定フレーム待機:「wait フレーム数
  • SEの再生:「se SE名 ボリューム ピッチ パン
  • フラッシュ:「flash 赤 緑 青 強さ 所要時間
  • 画面のシェイク:「shake 強さ 速さ 所要時間

をそれぞれ設定しましょう。

(※残念ながら、グループエディタ画面ではフラッシュやシェイクの動作を確認できないので先程イベントコマンドで設定した値をそのまま使いましょう)



画面上にランダムに発生させる

さて、もろもろの下準備は終わりました。

画面上にランダムに隕石を発生させましょう!


まずは、隕石本体のエミッターを編集して発生位置を画面上のランダムなrectに設定しましょう。

[Command1]の行を選んで「Alt+E」で編集モードに入ります。



「screen」と打ち込むと発生位置が画面全体の範囲のrectに設定されます。

隕石を画面の上側から発生させ、着弾地点を画面内に収めるために微調整します。


いったん[emitterLifetime]を-1としてエミッター寿命を永遠にして[frequency]も調整し、画面上に大量に隕石を発生させます。(パソコンのスペックに注意)

この状態で[rect]の値を調整すると範囲を調整しやすいでしょう。


調整作業が終わったら、[emitterLifetime][frequency]をもとに戻してパーティクルが1つだけ発生させる状態に戻しましょう。

(※通常の天候エフェクトは[emitterLifetime]を-1として永続的に発生させればよいのですが、パーティクル発生ごとにSEや画面シェイクを合わせたいのでここでは1つのみ発生させます。逆に、割り切ってSEやシェイクをランダムなタイミングで発生させるのであればエミッターで永続的に発生させてOKです)


最後に、イベントコマンドで複数の隕石パーティクルの再生を管理させます。


イベントで隕石エフェクトを制御

ループコマンドを使って一定間隔で隕石を発生させます。

60フレームに1回の頻度で発生させます。



さて、このままでは隕石は画面上に1つしか表示されません。

パーティクルプラグインに使い慣れてきた方ならば原因は分かると思います。


「管理IDが同じエフェクトは1つしか表示できません。」


グループコマンドを呼び出すたびに管理IDを変える必要があります。

ここでは、変数を使って管理IDを制御してみましょう。



グループコマンドの管理IDとデータ名は次の通りです。

  • 管理ID:meteor\V[変数番号]
  • データ名:meteor

とします。管理IDには制御文字で変数の値を組み込んでおり、ループごとに「meteor1」「meteor2」と変わっていきます。

(※ver1.21にてグループコマンドの制御文字が反映されない不具合を修正しているのでアップデートをお願いします)




以上で「天候:メテオ」エフェクトが完成しました!


あとは、画面の色調を少し赤くすると雰囲気もそれっぽくなるでしょう。


今回のエフェクトはグループエディタを使ったものの中でも、かなり複雑なものです。

単体のエミッターよりも複雑でリッチなエフェクトを手軽に作れるので、ぜひグループエディタも活用してみてください!



そして、プラグインのセールもお忘れなく!

それでは!




おまけ:さらに調整

ランダムな間隔で発生させる

1秒(60フレーム)ごとに隕石を発生させてますが、シェイクやSEも1秒ごときっかりだと少し機械的な感じが強いです。

ループ間隔を1/3の20フレームに縮めて、その代わりに33%の確率でグループコマンドを実行させるように変更させます。

(※変数を使って乱数を生み出してもいいですが、マップイベントのリロード処理が走ってしまうため、ここでは条件分岐のスクリプトを使用しています。)


画面ループさせる

画面内が隕石で埋まっていても、上下左右にスクロールさせるとパーティクルが途切れます。

「loop」コマンドを使い、上下左右でパーティクルを使いまわしてループさせましょう。


光らせる

隕石の画像が少し浮いてしまうため、完成動画では隕石を中心として発光させています。

画像「flare」[speed]=0でその場でチカチカ表示させるだけで手軽に発光させて雰囲気を馴染ませられるので試してみると良いでしょう。

1件のチップが贈られています

チップを贈るにはユーザー登録が必要です。チップについてはこちら

【1月プラン記事③】シンボルエンカウントの作り方

今月の有料プランの特典として「移動ルートの拡張プラグイン」を公開しました!

前回の落石ギミックの作り方解説に続いて、今回はプラグインを使ったシンボルエンカウントの作り方を解説します!

(※基本的な部分は前回で解説しているので、今回は新しいコマンドに絞ってサクサクと解説していきます!)


全体の処理の流れ

前回と同様にイベントページに自律移動を設定します。

完成したイベントページは↓のような処理の流れになります。


  • 自律移動用の移動ルート
  • 戦闘勝利時に敵が消える移動ルート
  • 戦闘逃走時に敵が1秒間点滅して待機する移動ルート

の3つの移動ルートを作成していきます。

それぞれコモンイベントのページに貼り付けてそれを呼び出していますが、イベントページ上で編集中して出来上がってからコモンイベントに移すと良いでしょう。



# 自律移動用の移動ルート
↓の通り!

 @route custom repeat skippable freq:max

//現在の位置を保存
cmd save
//リピート開始をこの下のコマンドからに変更
cmd repeat

//距離が4以内ならラベル「アラート開始」へ
cmd if dist 4; labeljump アラート開始

//それ以外の場合は30%で60フレーム待機
cmd if prob 30; wait 10; return;

cmd turnrand @ //ランダムな方向を向く
cmd speed 3 @ //移動スピードを3に

//3~6歩前進
cmd loop \RN[3,6]
cmd forward
cmd if dist 4; labeljump アラート開始
cmd loopend

//1秒待ってからリピート開始へ戻る
cmd wait 60
cmd return //-----------------------------------------------


cmd label アラート開始
//プレイヤーの方を向いてジャンプ&バルーン表示
cmd turntoward
cmd jump 0 0 @
cmd balloon bikkuri
cmd wait 20

cmd label チェイス

//速度を4.5に変更
cmd speed 4.5 @

//10回プレイヤーへ近づく
cmd loop num:10 @
cmd toward
cmd loopend @

//距離8以下ならなら繰り返す
cmd if dist 8; labeljump チェイス @

//距離8以上の場合はプレイヤーを見失う
cmd balloon kusha
cmd wait 60

それでは、新しく出てきたコマンドを中心に解説していきます!

ラベル(label)とラベルジャンプ(labelJump)コマンド

イベントコマンドにもある「ラベル」「ラベルジャンプ」が使えます!

「if」コマンド"それ以外の場合"の「else」処理が無いですが、代用としてラベル機能が活躍します!

//距離が4以内ならラベル「アラート開始」へ
cmd if dist 4; labeljump アラート開始
(距離が4以内でないときの処理。適当に歩き回ったり)
 ︙

cmd label アラート開始
(プレイヤーを見つけて追いかけてくる処理)


以下、距離が離れているときの処理を追っていきます。


「if prob」コマンドで確率で分岐

距離が離れているときは、「その場で待機」「ランダムな方向に進む」処理のどちらかを行います。

//それ以外の場合(距離が離れている)は30%で60フレーム待機
cmd if prob 30; wait 10; return;

(残りの70%のときの処理)

「if dist」コマンドはプレイヤーとの距離によって判定を行いましたが、今回は「if prob」コマンドを使って確率的に分岐させます。

「if prob 確率(%); 実行させる処理」

今回は「wait 10」で10フレーム待機後、「return」コマンドで移動ルートをいったん終えて繰り返しの最初に戻っています。

(※実際には「wait 10」と「return」は同時に行われるため、繰り返しの最初に戻ってから10フレーム待機しています)

「loop」コマンドで指定回数繰り返す

30%の確率でその場で待機しなかった場合には

  • ランダムな方向を向いて
  • 3〜6歩だけ前に歩いて
  • その場で60フレーム待機して

ループの最初に戻ります。


cmd turnrand @ //ランダムな方向を向く
cmd speed 3 @ //移動スピードを3に

//3~6歩前進
cmd loop \RN[3,6]
  cmd forward
  cmd if dist 4; labeljump アラート開始
cmd loopend

//1秒待ってからリピート開始へ戻る
cmd wait 60
cmd return //-----------------------------------------------

「loop」コマンド「loopEnd」コマンドまでの間の処理を、指定回数だけ繰り返します。


便利そうなコマンドですが、制限も多いです。

  • ネストが出来ない(loopの中で更にloopを使えない)
  • ラベルジャンプなどを使ってloopの中に入っても正しく動かない

単純に同じ処理を繰り返す分にはスッキリ見やすくなるので積極的に使っていきましょう!

(※ループ回数を0とすると無限にループします。「loopBreakコマンド」でループから抜けれるのでifコマンドと組み合わせて使うと○)


今回は、制御文字\RN[最小回数,最大回数]を使ってループ回数を3~6のランダムな回数に設定しています。(\RNの詳しい使い方はチートシート参照)

cmd loop \RN[3,6]

ループ内では「1歩前に進んで(forward)」「距離が4以下なら、ラベル:アラート開始にジャンプ」という処理を繰り返します。

  cmd forward
  cmd if dist 4; labeljump アラート開始


次にプレイヤーが近くにいてラベル:アラート開始に飛んだ場合の処理を見ていきます。

↓プレイヤーに気がついて驚く演出

cmd label アラート開始
//プレイヤーの方を向いてジャンプ&バルーン表示
cmd turntoward
cmd jump 0 0 @
cmd balloon bikkuri
cmd wait 20

次にいったんラベル「チェイス」を貼り直します。
プレイヤーを追っかけ回して、まだ近くにいた場合にはここに戻ってきます。

cmd label チェイス

//速度を4.5に変更
cmd speed 4.5 @

//10回プレイヤーへ近づく
cmd loop num:10 @
cmd toward
cmd loopend @

ループを使って10回だけ「プレイヤーへ近づく(toward)」コマンドを実行しています。

(※ところどころにある行末の「@」即座に次の行を実行するという記号です)



10回プレイヤーに近づいてから「if dist」コマンドで再度距離をチェックして

  • 追いかけ続ける(ラベル「チェイス」に戻る)か、

  • 諦める(移動ルートの最初に戻る)か

を判定します。

//距離8以下ならなら繰り返す
cmd if dist 8; labeljump チェイス @

//距離8以上の場合はプレイヤーを見失う
cmd balloon kusha
cmd wait 60

以上が自律移動のルートの全容となります!



戦闘勝利時の処理

戦闘勝利時に実行する移動ルートの設定は↓の通り!

@route this skippable

//トリガーを無効に & 通り抜けON
cmd trigger none; through @

//半透明にして少し待機
//cmd opacity 180; wait 10

//45フレームかけて透明に
cmd opacity 0 d:45 @
//同時に縦に引き伸ばす&完了までウェイト
cmd scale x:1 y:200 relative d:45 easeOut wait

cmd erase

「trigger」コマンドでイベント開始トリガーの制御

戦闘勝利時には、すぐにトリガーを無効(none)にして、再度イベントが実行されないようにしています。

//トリガーを無効に & 通り抜けON
cmd trigger none; through @

トリガーの操作は自律移動のカスタムルートに組み込むのも面白くておすすめです。

  • 半透明の間は触れない幽霊
    └cmd trigger none; opacity 128 //半透明にしてトリガー無効
    └cmd trigger event; opacity 255 //不透明にしてとりがーを「イベントから接触」へ

また、トリガーをauto(自動実行)、parallel(並列処理)にすると即座に開始するので注意。(※並列処理は繰り返し実行されるので、1度だけ並列で実行したいときは「parallel」コマンドを使用)


不透明度(opacity)、拡大率(scale)のアニメーション

//45フレームかけて透明に
cmd opacity 0 d:45 @
//同時に縦に引き伸ばす&完了までウェイト
cmd scale x:1 y:200 relative d:45 easeOut wait

前回の記事の「y」コマンドでy座標をアニメーションさせましたが、↑のopacity(不透明度)scale(拡大率)コマンドも同様の使い方が可能です。

「scale」コマンドはデフォルトで絶対値指定(relative:false = abs)ですが、ここでは相対値(relative:true = relative)で指定しています。

もし敵によって表示させる拡大率を変えたい場合には、相対値での指定が良いでしょう。

(※x:1として横に1%残しておくと、もし一定時間後に復活させたい場合に100倍にして元のサイズに戻すことができます)


また、「scale」コマンドの最後に「wait」とちうパラメータがつけられていますが、これは「scale」コマンドが完了するまで待機させるためのものです。

最後にイベントを消去してモンスターの消滅処理完了です!

cmd erase

逃走時の移動ルート

パーティーが戦闘から逃走したときは、1秒間だけその場で点滅してから再度追いかけさせます。

移動ルートの設定は↓

@route this skippable

//トリガーを無効に
cmd trigger none

//1秒間点滅
cmd loop num:6
  cmd opacity 100; wait 5
  cmd opacity 255; wait 5
cmd loopend

//トリガーをイベント接触に戻す
cmd trigger event

//元の自律移動のインデックスを「ラベル:チェイス」位置に戻す
cmd originalIndex チェイス

ここでもいったんトリガーを無効にして、点滅中は触れても戦闘が開始しないようにしています。好みによって、通り抜け(through)もONにすると良いでしょう。

//トリガーを無効に
cmd trigger none

点滅処理は「loop」コマンドを使って

  • 半透明(opacity 100)にして5フレーム待機
  • 不透明(opacity 255)にして5フレーム待機

を6回繰り返して1秒間(60フレーム)だけ点滅させています。

//1秒間点滅
cmd loop num:6
  cmd opacity 100; wait 5
  cmd opacity 255; wait 5
cmd loopend

点滅終了後にトリガーを元に戻して、

//トリガーをイベント接触に戻す
cmd trigger event

元の自律移動の実行箇所を「ラベル:チェイス」の位置に戻して、再度追いかけさせます。

//元の自律移動のインデックスを「ラベル:チェイス」位置に戻す
cmd originalIndex チェイス

originalIndex:元の移動ルートの実行インデックス変更

基本的にイベントコマンドの「移動ルートの設定」での移動ルートが終わると、自律移動の実行途中の箇所に戻ります。

「originalIndex」コマンドを使うと、元の自律移動のルートに戻った際の再開箇所を変えることができます。


いくつか戻る箇所の指定方法があります。

  • 「originalIndex ラベル名」:「cmd label ラベル名」の箇所
  • 「originalIndex repeat」:リピート開始地点
  • 「originalIndex インデックス(0~)」:指定インデックス(1つ目のコマンドが0)

ここでは「チェイス」ラベルに飛んで、即座にプレイヤーを追いかけさせています。





以上でシンボルエンカウントの解説終了です。

意外とシンプルに実装できましたね!


  • 「se」コマンドでSEなんかもつけたり
  • 移動速度や感知距離をメモ欄を使って設定できるように
     └メモ欄に<speed:5><dist:5>、パラメータに\MT[speed]、\MT[dist]など

したりするとそれっぽくなるでしょう!



おまけ:敵の視界をなんとか再現する

プレイヤーを見つける判定が「イベントとプレイヤーの距離」のみで、後ろから近づいても反応してしまいます。

現状では「if」コマンド単体で判定することはできませんが、擬似的に「イベントの前方にプレイヤーがいるか」を判定することができます。

プレイヤーとの距離をチェックしている箇所(数カ所あります)を以下のような感じに

//前方3マス目からの距離が3以内なら「アラート開始」へジャンプ
cmd f 3 d:0; if dist 3; b 3 d:0; labeljump アラート開始
cmd b 3 d:0

「f」コマンド「x」コマンドの親戚で、前方に判定無しで移動するコマンドで、「b」コマンドは後退するコマンドです。

何をやっているかと言うと、

  • 0フレームで瞬時に前へ3マス移動
  • その位置から3マス以内なら、元の位置(後方3マス)に瞬時に戻って「アラート開始」へ
  • それ以外なら瞬時に後方に3マス戻るだけ

というなんとも強引なやり方です。

(「b」コマンドで戻る処理は、「if」コマンドに成功にしたときと失敗したときの2箇所に入れないといけないので注意。)


強引ではあるけど、この方法なら前後左右に限らず移動とチェックを繰り返せばどんな図形範囲だろうと感知させることが可能です!

やったね!

(複雑になる場合は「save」「restore」で元の位置に戻すのが良いでしょう)



(……シンボルエンカウントについては各種プラグインも有志により配布されてるので素直にそちらを利用するのも全然ありですが、移動ルートだけでこれだけのシステムが作れるというのは可能性を感じないでしょうか?!)

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

【1月プラン記事②】マップギミック(落石)の作り方

今月の有料プランの特典として「移動ルートの拡張プラグイン」を公開しました!


この記事では、プラグインを使ってマップギミックの作り方を解説していきます!


落石ギミックを作る

当たるとダメージを受ける落石ギミックを作っていきます!
(※完成した移動ルートは記事の一番下にまとめてます)


まずは画面上部に岩のイベントを配置して…


イベントの設定を行います。
(※「イベントから接触」でダメージ処理を行う仕様とします)

岩の動きをつける

まずは岩の動きの流れを作っていきましょう!

スクリプト・注釈コマンドでルート設定

自律移動のルートの設定のスクリプト欄にコマンドを入力することができますが…

見切れてしまって後から見返すときに非常に見づらいです…


イベントページの「スクリプトコマンド」あるいは「注釈コマンド」から設定することができるので、ぜひこちらを使いましょう!

(※MZの方は行数無制限の「スクリプトコマンド」で1つのコマンド内にすべて入力、MVの方は複数の「注釈」コマンドをつなげてコマンドを入力していきましょう)


まずは、自律移動のタイプが「カスタム」であることを確認し、イベントページの頭にスクリプト・注釈コマンドを挿入して以下のように入力してください。

@route custom repeat skippable


@route*以降のパラメータはそれぞれ次の意味を表します。

  • カスタム(custom)の移動ルート設定
  • 動作を繰り返す(repeat)
  • 移動できない場合は飛ばす(skippable)

(※ repeat、skippableが不要な場合は抜かせばOKです)
(※ 自律移動ルート以外にも、イベント「移動ルートの設定」にもこの記述方法が使えます。customを対象(this / player / event:イベントID)に変えればOK)


岩の動作の移動ルートコマンド

動作のコマンドは↓の通り

順に説明していきます!


「y」コマンド

//1マス上(マップ外)に瞬時に移動
cmd y 0 d:0

岩が画面外から落ちてくるように見せるため、
「y」コマンドを使ってイベントを1マス上に移動させています。

「y」コマンドは通常の上下移動(上に進む/下に進む)と違い、接触判定/接触によるイベント発生がありません。


そのため使い所は限られますが、移動にかかるフレーム数を指定し、イージング(緩急)をつけてなめらかに移動させることができます。



パラメータが多く難解に見せますが、基本的には下の形で使うことが多いです。

「cmd y 移動量 d:所要フレーム数 (イージング)」

今回の場合は、移動量(value)が-1、所要フレーム数が0で瞬時に移動させています。

(※「abs」をつけることで絶対座標(マップ座標)で指定することもできます。「cmd y -1 abs d:0」 → y=0の座標に瞬時に移動)


次の行も「y」コマンドで、画面上から岩を落下させています。

//落下(yコマンドは当たり判定ないので注意)
cmd y 6 d:35 cubicIn

35フレーム(d)かけて、イージング「cubicIn」で+6だけ移動させています。


イージングの種類

イージング(緩急のかけかた)はいろいろな種類がありますが、覚えるならおすすめは↓

  • 「easeIn」:イーズイン、徐々に早く
  • 「easeOut」:イーズアウト、徐々に遅く
  • 「easeInOut」:イーズインアウト、最初と最後をゆっくり
  • 「cubicIn / cubicOut / cubicInOut」:↑のイージングよりも緩急が激しいバージョン
  • 「backIn / backOut / backInOut」:一度通りすぎて戻ってくる少しコミカルな緩急

岩が落下時に徐々にスピードが増すので、In系の「cubicIn」を採用しています。

(※本来はイージングは「easing:イージング種類」で指定しますが、イージング種類は略号が用意されているため好きな位置でイージング種類のみで記述が可能です。詳しくは前回の記事参照)



まだまだ続く「y」コマンド!
岩が道の上に落ちた後に、少しだけ上にバウンドさせます。

//ちょっとバウンド
cmd y -0.5 d:10 cubicOut
cmd y 0.5 d:10 cubicIn

それぞれ10フレームかけて上に0.5マス、下に0.5マス移動させています。

(※イージングは最初の跳ね上がりは勢いがついた状態なので徐々に遅くする「cubicOut」、勢いが落ちた状態で落下するので「cubicIn」)



その後は、下に1歩だけ通常移動してから、また「y」コマンドで緩急をつけて画面下に落下させています。

//1マス転がる
cmd down

//崖下に落下
cmd y 10 d:60 cubicIn

移動 / 向きの変更コマンド

通常の移動ルート設定でも使用頻度が多い「移動」「向きの変更」コマンド。


拡張コマンドでは下の通り↓

  • 下に移動 | 下を向く:down | turndown(またはturnd)
  • 左に移動|左を向く:left | turnleft(またはturnl)
  • 右に移動|右を向く:right | turnright(またはturnr)
  • 上に移動|上を向く:up | turnup(またはturnu)

ちなみに、複雑な移動ルートで *「右に5歩、下に3歩移動してからまた右に3歩……」みたいな場合は「walkX / walkY」コマンドがおすすめです!

cmd walkX 5
cmd walkY 3
cmd walkX 3

こちらは「x / y」コマンドと違って、一歩ごとに当たり判定があります。


また、「abs」をつけて絶対座標(マップ座標)で指定することもできます。

cmd walkX 10 abs   //X=10まで移動
cmd walkY 5 abs    //Y=5まで移動
cmd walkX 13 abs   //X=13まで移動

動作を繰り返す

さて、先程までの解説で岩の基本の動きができました。

このままでは繰り返しても延々と下に落ち続けるので、繰り返しごとに位置を戻す必要があります。


↓のように「cmd y -1 d:0」コマンドの下にコマンドを挿入しましょう。

「save」「restore」コマンド:位置の保存&復元

//現在の位置を保存
cmd save

挿入した1行目の「save」コマンドは、コマンド実行時の位置と向きを保存するシンプルなコマンドです。

「restore」コマンドを使うことで、保存した位置に瞬時に戻ることができます。


「repeat」コマンド:繰り返し開始箇所の変更

「repeat」コマンドは移動ルートを繰り返す際に、繰り返しの開始箇所を変更するコマンドです。

最初だけ実行する「初期化処理」とメインの「繰り返し処理」を分けたいときに便利なコマンドです。

今回の場合は、「save」コマンドは1度だけ実行すれば良い(むしろ何度も実行すると、変な場所で保存する可能性も…)ので「repeatコマンド」を使って繰り返し地点を変更しています。


今回は、移動ルートが最後まで終わり「cmd repeat」に戻ってから「cmd restore」コマンドで最初の位置に復元しています。


これで、何度も繰り返されるようになりました!


衝突処理を作る

岩と接触時に、ダメージを受ける処理を作っていきましょう!

イベントの「トリガー」が「イベントから接触」になっていることを確認し、次のような感じで接触時の処理を実装します。

何度もダメージ処理が走らないように、セルフスイッチAを使って2回目以降はダメージを受けないようにしています。

あとの部分(SEや画面演出など)はお好みでOK!




さて、実はこのままでは2つ問題点があります……

  • 岩の落下地点にいてもイベントが開始されない

  • セルフスイッチ「A」をOFFに戻さないと移動ルートを繰り返してもイベントが開始されない

という2点です。


セルフスイッチの方は簡単に解決できるので先に見てみましょう!


「selfSwitch」コマンド

リピート開始後に「selfSwitch(selfSw)」コマンドでセルフスイッチAの値をfalseに戻せばOKです!

ちなみに、true=on、false=offに置き換えてもOK。
keyとvalueの順番が正しければ、

cmd selfSw A off

と簡単に書いてもOKです!


「if」コマンド & 「event」コマンド

さて、もう1つの問題

  • 岩の落下地点にいてもイベントが開始されない

ですが、これは「y」コマンドに接触判定がないためです。


ここでは、落下直後に「もし、プレイヤーとの距離が一定以下ならイベントを開始」させるコマンド処理を挟んで対応します。



…岩の着地時のエフェクト用コマンドも挟んでるので先に簡単に説明しておきます。

//着地エフェクト
cmd shake p:5 s:5 d:16 @ //画面シェイク
cmd se Blow1 90 100 0 @ //SE「Blow1」再生

「shake」コマンドはイベントコマンド「画面のシェイク」にあたるコマンドです。

  • 強さ(power/p)スピード(speed/s)所要時間(d)を指定
  • ここでは強さ5、スピード5、所領時間16フレーム

「se」コマンドはSEの再生。パラメータは順にSE名、ボリューム(volume)、ピッチ(pitch)、パン(pan)となります。
(※よく使うコマンドなので、パラメータ名を覚えるよりも、パラメータの順番を覚えた方が良いと思います)**


さて、改めて衝突判定のコマンドを見てみます

//衝突判定(距離が0.3以下ならイベント開始)
cmd if dist 0.3; event

まず前提として、コマンドはセミコロン「;」つなぎで1つの行で複数のコマンドを実行させることが可能です。
(※2つ目以降は最初の「cmd」が不要)

  • 例)「cmd pattern 0; turnleft」
     └パターンを0にして左を向く

そして、「if」コマンド条件を満たした場合にのみ、同じ行のその後のコマンドを実行するというコマンドです。


「if」コマンドにはいくつかタイプがあり「cmd if タイプ 判定値...」の形式をとります。


「if dist」コマンドでは「プレイヤーとの距離」により判定を行います。

  • 「cmd if dist 判定距離; 判定距離以下のときに実行する処理」

(※プレイヤーとの「距離が一定以上のとき」を判定するには「dist」のかわりに「!dist」を使用)


今回は↓のように距離が0.3以下のときに「event」コマンドでイベントを開始させ、イベント接触時のイベント開始を擬似的に行っています。

cmd if dist 0.3; event

これで、イベント接触の問題を両方解決できました!

あとは、イベントをコピペしてタイミングをずらせば完成!!


……なのですが、今後のこと(移動ルートの修正など)を考えてもうひと手間加えていきます。


移動ルートをうまく使い回す

このイベントをコピー&ペーストして複製した場合、

「移動ルートを修正したくなったときにすべてのイベントの移動ルートを修正する必要」

が出てきます……。


ここでは移動ルートをコモンイベントにまとめ、そこから呼び出すことで修正の手間を省くようにしていきます。


まは「移動ルートの設定コマンド」をコピーし、そのままコモンイベントにペーストしましょう。



あとは、イベントのページに戻り、「スクリプト・注釈」による移動ルートの設定コマンドを次のように書き換えればOK!


@route custom common:落石

「common:コモンイベント名」あるいは「common:コモンイベントID」でコモンイベント上のルート設定を読み込むことができます!



あとは、イベントをコピー&ペーストすれば……!


………さて、タイミングをずらすにはどうすれば良いでしょうか?



コマンドの各種パラメータは制御文字に対応しているのですが、イベントによってパラメータの値を変えるのに便利なオリジナル制御文字を用意しています!


データベースを開いてコモンイベント上のルートを修正してみましょう!


初期設定(「repeat」コマンドより前)として、「save」コマンドで位置の保存を行った直後に「wait」コマンドによりウェイトを設定します。

本来は「cmd wait フレーム数」の形式で指定しますが、ここではフレーム数の値に制御文字を使ってイベントのメタパラメータを使用します。


メタパラメータはイベントページのメモ欄に<パラメータ名:値>の形式で記入します。

ここでは、「startW」というパラメータ名で、イベントごとににタイミングをずらすフレーム数を記入します。


そして、制御文字「\MT[メタパラメータ名@デフォルト値]」を使用してこの値をwaitコマンドのフレーム数に使用します。

(※@デフォルト値はメモ欄にパラメータを設定しなかったときのデフォルト値で、省略も可能。)



あとは、イベントごとに<startW:ウェイト値>の値を設定すれば岩の落下タイミングを自由にずらすことができます!

長かったですが、ここまでお疲れさまでした!!



……ここまででギミック完成でも全然問題ないのですが、実際にプレイしてみると1つだけ気になる点が出てくると思います。


「画面外のイベントは移動ルートが動かない」という仕様のため、タイミングがずれる!

→ おまけ機能でメモ欄に「<force>」とメタパラメータを設定すると画面外でも移動ルートが実行されます!




これで解決したかと思いきや…

何回も岩にぶつかると徐々にタイミングがずれる……!!
(※これは実はルートの設定に問題があるからなのですが、動作上問題ないのでここでは割愛します)

今度はコモンイベントのルート設定を開き、「repeat」コマンドを次のように修正してみてください。(repeatのあとに180を加えればOK)


これで移動ルート実行中に何らかの影響でタイミングがずれても、
きっかり180フレームごとにリピートが繰り返される
ようになります!

(※仮に繰り返しが120フレームで終わった場合、repeatの箇所に戻ってから残りの60フレームを待機してから次の行に進みます。逆に180フレームを超えて190フレームかかった場合はそのサイクルはスキップしてさらに170フレーム待機して次のサイクルを開始します。)


今度こそ本当に終わり。お疲れさまでした!


最終的な移動ルートのコマンド

@route custom repeat skippable

//1マス上(マップ外)に瞬時に移動
cmd y -1 d:0

//現在の位置を保存
cmd save

//メモ欄<startW:値>で設定しただけ待機(設定無ければ0)
cmd wait \MT[startW@0]


//リピート開始位置を設定、サイクルを180フレームに
cmd repeat 180

cmd restore @ //位置の復元
cmd selfSw key:A value:false //セルフスイッチAをオフに

//落下(yコマンドは当たり判定ないので注意)
cmd y 6 d:35 cubicIn

//着地エフェクト
cmd shake p:5 s:5 d:16 @ //画面シェイク
cmd se Blow1 90 100 0 @ //SE「Blow1」再生

//衝突判定(距離が0.3以下ならイベント開始)
cmd if dist 0.3; event

//ちょっとバウンド
cmd y -0.5 d:10 cubicOut
cmd y 0.5 d:10 cubicIn

//1マス転がる
cmd down

//崖下に落下
cmd y 10 d:60 cubicIn

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

4 5 6 7 8 9 10

月別アーカイブ

記事を検索