投稿記事

有料プラン記事の記事 (4)

【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

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

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

【1月プラン記事①】移動ルート拡張プラグイン


(ver1.0.1 <2022/1/24> セーブ・ロードの不具合修正)

こんにちは!

今月の有料プラン記事の内容は「移動ルートの拡張プラグイン」です!


ちなみに、2回目にして今月が最後になります!!

▷バックナンバー
* 12月:マップ上でのアニメーション表示の拡張/調整プラグイン


最後ということで気合入れすぎて、かなりすごいプラグインが出来たのでぜひぜひご活用くださいませ〜



主な機能

  • スクリプト欄へのコマンド入力で移動ルートの記述
     └制御文字も○
  • 多彩なコマンドを追加
     └イベントコマンドから抜粋(画面演出、バルーン、プラグインコマンドなど)
     └角度・拡大率などの表示拡張&アニメーション
     └あると便利なコマンド群(X=5まで歩く、イベント実行…など)
     └簡易なif、指定回数ループ、ラベルで複雑なルート制御
  • 注釈/スクリプトコマンドを使ったルート設定
     └自律移動をイベントページの頭部分で設定
     └通常の移動ルートの設定コマンドも○

一見地味なプラグインですが、用途の幅はかなり広いと思います!

  • イベントシーンの歩行キャラ演出の強化&制作効率化
  • シンボルエンカウントやマップギミックなど複雑な挙動のルートの作成

機能が多くて細かなルールもありますが、後ほど紹介するチートシートを手元に印刷しておけば大体なんとかなるはずなので、この記事の解説はゆるく読み飛ばしてもOKです。

次回の記事では、実際にマップギミックを作りながら解説する予定です!

プラグインの使い方

プラグインの導入

このページ一番下のダウンロードリンクからダウンロードしたファイルを解答し、すべてのプラグインを導入してください。
(※TRP_CommandManager.jsの方が上にくるように配置)

TRP_AnimationExとの併用

12月有料プラン配布のTRP_AnimationExと併用する場合の手順

  • TRP_AnimationExのバージョンを1.10にアップデート
  • TRP_CommandManager.jsとTRP_MoveRouteEx.jsはこの記事で配布してる方を導入

基本の使い方(チートシートのダウンロード)

移動ルートのスクリプト欄に「cmd コマンド名 パラメータ名:値…」の形式で入力します。

70を超える全コマンドとパラメータ名、注意点などをチートシートにまとめてるので、印刷してご利用ください↓

cheat_sheet.zip (422.68kB)

ダウンロード

  • 例)下に移動
     └「cmd down」

  • 例)右に+2、上に+1だけジャンプ
     └「cmd jump x:2 y:1」


また、セミコロン「;」で繋げることで、1行で複数のコマンドを実行できます。
(※2つ目以降のコマンドは「cmd」が不要となります)

  • 例)右に90度回転して6フレーム待機
     └「cmd turn90l; wait 6」

同じ処理を続ける場合は、1行をコピペするばよいので便利です。

//左回りに一回転
cmd turn90l; wait 6
cmd turn90l; wait 6
cmd turn90l; wait 6
cmd turn90l; wait 6

移動ルートは各行を実行するごとに1フレーム待機する仕様ですが、同じフレームに同時に実行したい場合にも有効です。

また、「@」を最後につけることで、即座に次の行を実行することも可能です。

//通り抜けをONにして即座に下に一歩移動
cmd througn on @
cmd down

その他のコマンド記述方法の便利なルールは次の次の項で詳しく解説します。



コマンドの紹介

70種類以上あるすべてのコマンドを紹介するのは難しいので、ここではオリジナル機能のコマンドを中心に紹介していきます。

その他のコマンドや詳しい情報はチートシートを参照してください。


かゆいところに手が届くコマンド

walkX/walkY:指定歩数or指定座標まで連続

移動ルートを組むとき…

「えーと、右に8歩上に3歩だから…」

          ↓

移動だけで画面内にコマンドいっぱいいっぱいで、
「右に移動」が何個あるかも分かりづらかったり……


walkX/walkYコマンドを使うとスッキリ!
          ↓


「abs」フラグを立ててマップ上の絶対座標で指定も可能です。
移動距離長い場合はこっちの指定方法も便利です!

cmd walkX 10 abs
cmd walkY 3 abs

pattern:パターンの変更

ありそうでなかったパターン番号のみの変更コマンド!

  • 「cmd pattern 0」
     └パターンを0に変更

他にも移動ルートにありそうでなかったコマンドも多数整備!

  • バルーン表示
  • プライオリティの変更
  • 変数/セルフスイッチのセット

位置の保存&復元

  1. 「save」コマンドで位置・向きを保存して
  2. 「restore」コマンドで復元!

↑の落石みたいな「繰り返し動作するギミック」で座標を元に戻すのに役立ちます!


画面演出系のイベントコマンドも網羅

  • 色調変更:「cmd tint r:赤 g:緑 b:青 gray:グレー d:所要フレーム」
  • フラッシュ:「cmd flash r:赤 g:緑 b:青 str:強さ d:所要フレーム」
  • シェイク:「cmd shake power:強さ speed:スピード d:所要フレーム」

「SE」コマンドも合わせれば、移動ルートに合わせた演出もばっちり○


↓歩くたびに画面が揺れるボスとか



移動ルートからプラグインコマンド実行

「cmd plugin MV形式プラグインコマンド…」

MV形式のプラグインコマンドも呼び出せます!
実行中のイベントIDが必要な場合は制御文字「\EID」で指定すれば○

ただし、プラグインによっては移動ルートからじゃ動かないこともあるので注意。


ちなみに、パーティクルプラグインはもともと移動ルートから実行する処理が入っているため「cmd plugin particle」じゃ動かないです。

省略形コマンド「par」を用意してるのでお持ちの方はご活用ください。

「cmd par play 管理ID this 設定名」など




イベント実行の制御コマンド

event:イベントの実行

「if」コマンドと組み合わせると、移動ルート中の任意のタイミングでイベントを開始させることができます!

  • 「cmd if dist 3; event」
    └距離が3以下ならイベント実行


parallel:並列処理で1回だけ実行

  • 「cmd parallel page:1」
    └「page:インデックス」でページの指定も可。page:0で1ページ目なので注意

(※並列処理を普通に繰り返したい場合は↓のトリガーコマンドで値を「parallel」にして並列処理を開始しましょう。)


trigger:トリガーの変更

「cmd trigger トリガーの値」

トリガーの値は↓の通り

  • none:なし(-1)
  • enter:決定ボタン(0)
  • player:プレイヤーから接触(1)
  • event:イベントから接触(2)
  • auto:自動実行(3)
  • parallel:並列処理(4)

例)「cmd trigger none」
 └トリガーを無効にしてイベントを発生させない

例えば、透明のときは触れても戦闘が発生しない幽霊など、移動ルート中で発生条件を操作したいときに便利!



表示拡張用のコマンド

角度、拡大率を変更するコマンドを用意!

また、オパシティ・X座標・Y座標・XY座標の変更と合わせてイージングをかけてスムーズにアニメーションが可能です。

▷コマンド例

  • フェードイン:「cmd opacity 0 d:10」
     └20フレームかけて不透明度0に完全フェードアウト

  • 回転ジャンプ:「cmd angle 360 relative jump easeOut」
     └ジャンプに合わせてイーズアウトで+360度だけ回転

  • 「cmd scale x:50 y:200 d:30 backOut」
     └30フレームかけてバックアウトで横に50%、縦に200%に変化

  • 「cmd move x:5 y:10 d:60 abs easeInOut」
     └60フレームかけてx=5、y=60の絶対座標(abs)までイーズインアウトで移動
     └d:所要フレームを省略すると、現在の移動スピードで所要フレーム計算

フェードアウトさせるのに

みたいにせずに済むので楽ですね!

(※「拡大率」「角度」の変更機能は他のプラグインと競合する可能性も高めなので、フリーズしたり動作が変な場合はプラグイン設定で機能を個別に切るなどしてご対応ください。)



複雑なルートを制御するコマンド

なんちゃってif文やラベルジャンプなど、複雑な移動ルートを設計する上級者向けコマンドを取り揃えてます!

マップ上のギミックなどアクション要素を作るのに役立つはず!

  • repeat:リピート開始地点の設定
     └初期化処理と繰り返し部分を分けたいときに○
     └サイクルフレーム数を指定して他のイベントと同期したりも
  • label&labelJump:ラベルの設定とラベルジャンプ
     └ifコマンドにelse/else ifが無いですが、ラベルを使って擬似的にelse処理も書けます!
  • if:条件を満たすときに実行するコマンドを書けます
     └確率、(セルフ)スイッチ、距離、通行可能か、メモ欄のメタパラメータなどで判定

次回の記事で、実際にマップ上のギミックの作り方を紹介するのでそのときに詳しく解説予定です!





コマンドの形式

コマンド・パラメータの種類が多くて大変に見えると思いますが、簡単に記述するための便利なルールがたくさんあります。

どれも1つ1つは単純なので順にみてみましょう!


パラメータの省略

パラメータは省略して自由な順番で設定可能です。
省略したパラメータのデフォルト値はチートシートでは大括弧[]内に表示してます。

例)X=5、Y=10の座標にセット

  • すべて記述:「cmd locate x:5 y:10 relative:false target:this」
  • 一部省略:「cmd locate x:5 y:10」
  • 順番は自由:「cmd locate y:10 x:5」

また、順番通りに指定する場合はパラメータ名を省略可能です。

  • パラメータ名省略:「cmd locate 5 10」

「値のみの記述」と「パラメータ名:値」の記述を組み合わせることができますが、「値のみの記述」は順番通りに記述する必要があります。

  • ○:「cmd locate 5 10 target:player」
  • ×:「md target:player 5 10」

フラグ形式のパラメータ

trueかfalseで指定するフラグ形式のパラメータは、値がtrueの場合はパラメータ名のみで記述できます。

  • 「cmd locate 5 10 relative:true」
  • 「cmd locate 5 10 relative」

ちなみに「relative:false」、つまり絶対値指定の場合は「absolute」と記述することもできます。

  • 「cmd locate 5 10 relative:false」
  • 「cmd locate 5 10 absolute」

略号

上述の「relative:false」=「absolute」のように、一部のパラメータには省略できる記述方法があり、ここでは略号と呼びます。

▷略号のあるパラメータ例)

  • イージング:「easing:easeOut」=「easeOut」`
  • トリガー:「value:0」=「enter」

などなど。
詳しくはチートシートの最下部などを参照。


コメントで整理

「//」以降はコメントとして処理に影響しません。
複雑なルートを組むときはコメントを活用して整理しましょう。

//初期化
cmd opacity 0 @ //透明に
cmd scale 500 500 @ //拡大率500%に
cmd through on @ //通り抜けON
//登場
cmd opacity 255 d:20 @ //フェードイン
cmd scale 100 100 d:20 easeOut //500%から縮小

制御文字の活用

各パラメータは各種制御文字が使用可能です。
変数「\V[変数ID]」などは使い勝手が良いでしょう。

  • 「cmd locate x:\V[1] y:\V[2]」
     └x=変数ID1の値、y=変数ID2の値

また、以下のオリジナル制御文字も使用可能です。

スイッチ

「\SW[スイッチID]」

  • 「cmd selfSw key:A value:\SW[1]」
     └セルフスイッチAにスイッチID1の値をセット

セルフスイッチ

「\SS[セルフスイッチキー]」`

  • 「cmd transparent value:\SS[A]」
     └セルフスイッチAがONなら透明化、OFFなら透明化解除

メモ欄のメタ値

「\MT[メタパラメータ名@デフォ値]」

  • 「cmd wait \MT[waitFrame]」
     └メモ欄に「<waitFrame:任意のウェイトの値>」のように記述
  • @デフォ値はメモ欄に設定していない場合に使用する値。省略可

イベントやルートをコピペするときにメモ欄で動作を手軽に変更・調整できて便利です。

乱数

「\RN[最大値]」

  • 「cmd wait \RN[60]」
     └0~60のランダムなフレーム待機
  • 「cmd speed \RN[6.0]」
     └0~6.0のランダムな移動スピードに変更
     └※小数表記にすると整数ではなく実数の乱数になる

最小値と最大値を指定することも可能です。

「\RN[最小値,最大値]」

  • 「cmd wait \RN[10-60]」
     └10~60のランダムなフレーム待機
  • 「cmd speed \RN[4.0-5.0]」
     └4.0~5.0のランダムな実数の移動スピードに変更

ループとの組み合わせも○

//1~3回プレイヤーに近づく
cmd loop num:\RN[1,3] @
  cmd toward
cmd loopend


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

イベントコマンド「注釈・スクリプト」を使ってルートの設定が可能です。

少し上級者向けですがマウス操作なしで入力できるので慣れれば便利でしょう。

また、自律移動のルートも設定できるので、ルート内容全体が見やすく編集もしやすいと思います。

注釈・スクリプトどちらを使うか

注釈コマンドは複数のコマンドをつなげて設定が可能です。

一方、スクリプトコマンドでの入力では1つのコマンド内にすべて記述する必要があります。

MZではスクリプトコマンドの行数に制限がないので、MZではスクリプトコマンド、MVでは注釈コマンドを使うと良いでしょう。


自律移動ルートの設定

  • 自律移動のタイプを「カスタム」にして、ルートは設定しないでおく
  • ページの最初の行に注釈かスクリプトで「@route custom」とヘッダーを記述
     └繰り返す場合は「repeat」を追加
     └スキップ可能な場合は「skippable」を追加
     └例)「@route custom repeat skippable」
  • その下にコマンドを順に指定

また、おまけ機能として「@route」から始まるヘッダ行で移動速度・移動頻度の設定も可能です。

  • 「speed:移動速度の値」
  • 「freq:移動頻度の値」
  • 値は数値で入力するか「min」「normal」「max」の指定も可
  • 例)「@route custom repeat skippable speed:5 freq:max」

「移動ルートの設定」コマンドのルート設定

イベントで移動ルートを実行したい任意の行で、注釈・スクリプトコマンドでルートを設定します。

上の項で解説した自律移動ルート用のヘッダー設定「@route custom」のcustomの代わりに移動ルートを実行させたい対象を記述します。

  • プレイヤー:「@route player ~~~」
  • このイベント:「@route this ~~~」
  • イベント:「@route event:イベントID ~~~」

また、移動ルートが終わるまで待機する場合は「wait」を付け足します。

  • 例)「@route this repeat skippable wait」

ちなみに、移動ルートでスクリプトを実行したい場合には「cmd script スクリプト内容」で実行可能です。



おまけ機能

移動ルート設定時に便利な機能がいくつかついているので簡単に紹介しておきます。

(※他のプラグインと競合する場合はプラグイン設定から個別に機能の無効が可能です)


画面外でも自律移動を実行

  • イベントメモ欄に「<forceMove>」または「<force>

コモンイベント上のルートを使用

スクリプト・注釈コマンド欄を使った記述で、コモンイベント上の移動ルート設定を呼び出すことができます。

  • 自律移動:「@route custom common:コモンイベントID」
     └自律移動「カスタム」としてイベントページの頭に記述
  • 移動ルートの指定:「@route this common:コモンイベントID」

▷補足

  • コモンイベントIDのかわりにコモンイベント名でも可
  • コモンイベント上の移動ルートは「移動ルートの指定」「スクリプト・注釈コマンドによる記述」の両方とも可
  • 「common:コモンイベントID:インデックス(0~)」でコモンイベント上の「何番目のルート設定」かを指定可能(インデックス0が1番目)

セルフスイッチを自動でクリア

マップ移動ごとにイベントのセルフスイッチを自動でクリアすることができます!

  • イベントのメモ欄に「<clearSelfSw>」と記述

毎回、復活する採掘ポイントなどに設定すると便利でしょう。


また、マップ上の全イベントのセルフスイッチを毎回クリアする強引な設定も可能です。

  • マップのメモ欄に「<clearSelfSw>」と記述

同じマップを使い回すランダム系のダンジョンマップなどで使うと便利でしょう。



以上、主な機能をざっと紹介しました!

紹介しきれてない機能もたくさんなので、次回記事で実際にマップギミックをいくつか作ってみようと思います!

プラグインのダウンロード

利用規約

利用規約については以下の記事に書いてあるのでご確認ください。

ダウンロードリンク

【 1000円 】プラン以上限定 支援額:1,000円

プラグインのダウンロードリンク

このバックナンバーを購入すると、このプランの2022/01に投稿された限定特典を閲覧できます。 バックナンバーとは?

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

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

有料プランについて/利用規約など

プラン加入者向け記事について<休止中>

記事の内容は、主にイベントシーンの制作で役に立つプラグイン・ツール・テクニック記事がメインになります。

12月は「マップ上でのアニメーション表示の拡張/調整プラグイン」を配布しました。

他に現在考えているのは

  • SEの管理/簡単設定プラグイン
  • 移動ルートの拡張プラグイン
  • イベントテスト効率化プラグイン
  • uoTESを活用した イベントシーン制作効率化テクニック
  • エキストラ(観客)簡単設定プラグイン
  • 会話文章の演出を盛るテクニック&プラグイン

などなど。
(※戦闘システムがらみのプラグインも出せればいいのですが、それぞれ改造した独自システムを使ってると思うので難しい……)



記事の頻度と内容について

(注:現在、有料プランは試験的な運用中です。詳しくはページ下部を御覧ください。)

月に1記事の頻度での更新を考えてますが、内容についてはその都度考えるので予告は無いと思います。

加えて、やむを得ない事情で更新ができない月があるかもしれません。

いずれにせよ、「気にせず支援してやるぜ!」という方以外は毎月、記事が出たタイミングだけ有償プランに入るのが良いかと思います。


配布物の利用規約など

あくまで支援プランへのお礼ということで、Boothで販売している他のプラグインと比べてサポート薄めのジャンクプラグイン的な扱いとなります。


Boothで販売中のプラグインはマニュアル整備や動作安定性のために膨大な時間がかかってしまっています。
需要は薄いけど必要な人にはとことん役立つようなプラグインも、気軽に配布できればという考えで始めてみた試みですので、その点ご了承くださいませ。

利用規約

  • 商用作品での利用:◯
  • 成人向け作品での利用:◯
  • 公序良俗に反した作品での利用:不可
  • プラグインの改変:△(利用者の責任の上で改変利用可)
  • 素材の再配布:改変したものも含め不可(作品に含めた状態での作品の公開・販売は○)
  • クレジット表記:「プラグイン素材:シロップ」など。(他にBooth販売中のプラグインのクレジット表記を行っている場合は省略可能)
  • 本ソフトウェア利用により発生した利用者または第三者の損害に対し、いかなる責任も負いませんのでご了承ください。

※ RPGツクールは、株式会社 Gotcha Gotcha Gamesの登録商標です。
※ その他、記載されている会社名、製品名は、各社の登録商標または商標です。


動作保証について

動作保証を行う内容は以下のとおりです。
ただし、記事内で動作環境の指定などがあるものはそちらを参照してください。

  • RPGツクールMV/MZ
  • プラグイン配布時点でのコアスクリプトが最新バージョン
  • 新規プロジェクト(他のプラグインが入っていない状態)
  • 動作保証内容は記事で使い方を紹介している範囲

プラグインの動作については、必ずプロジェクトのバックアップをとった上で導入またはアップデートを行い、ゲーム公開前に十分に動作検証を行ってください。


不具合などの報告

動作に不具合がある場合はプラグインの不具合・競合報告フォームよりご連絡ください。

記事へのコメントなどでは見過ごしてしまう可能性があったり、必要な情報が欠けてしまう場合があるので、できるだけ報告フォームの利用をよろしくお願い致します。

競合について

基本的には他プラグインとの競合による動作不良には対応しておりません。

ただし、競合情報の報告自体は歓迎しておりますので、何かあれば上述の報告フォームよ
りご連絡ください。

(他の処理に影響が出ず、スマートに修正できる場合であればアップデートにて修正できる可能性があります。)


どうしても個別に競合への対応が必要な場合は有償での対応(実作業2時間5000円より。自分の創作を優先したいため高めです。すみません…)となりますので、同じくプラグインの不具合・競合報告フォームより連絡先のメールと有償での競合対応を依頼する旨の内容を記入してご連絡ください。

作業状況によっては対応できない場合があるのでご了承ください。

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

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

月別アーカイブ

記事を検索