移動拡張

簡易挙動設定

移動ルートの実行において、頻繁に組むと予想される挙動を簡易実行します。
対象となるのは以下の4種類です。

  1. ドアの挙動
  2. ジャンプ
  3. 不透明度の変更
  4. 特定方向にnマス移動

また、特定のダウン画像は足踏みのパターンに応じて仰向けやうつ伏せに変わるものもありますが、移動ルートの実行ではこれらを直接指定することができません。
この問題を解決するためのスクリプトも実装しています。

ジャンプの実行や透明度の変更などがスクリプト1つで解決します。

【ドアの挙動】

ドアや宝箱の開閉処理を簡易実行できるようになります。

開閉処理はプラグインコマンドとして呼び出すことができます。

>>関連プラグインコマンド

<軽挙動・重挙動>

ドアや宝箱の開閉に重量感をもたせるために、開閉速度を設定します。
向き変更の間に置かれるウェイト処理のフレームが、これらのパラメーターの値に自動設定されます。
どちらの値を参照するかは、後述するプラグインコマンドで指定可能です。
このパラメーターが未設定の場合、軽挙動は3、重挙動は15として扱われます。


【ジャンプ】

キャラクターの向きに合わせて、自動的に着地座標を修正してジャンプを実行します。
また、ユーザー定義の「壁」に対して、手前で着地してくれます。

イベントの実行内容として呼び出す際はプラグインコマンドを使用します。

>>関連プラグインコマンド

また、マップイベントの自律移動でも、次のスクリプトにより実行可能です。

this.autoJump(x, y, dirFix, 'jumpType')

x y には、それぞれキャラクターが下向きの時のオフセット値を記入します。
dirFix はジャンプ中に向きを固定するかに関する設定です。
false と記入した場合は固定せず、それ以外の場合は固定します。

jumpTypeには以下の4つが使用できます。
選択したタイプによって、ジャンプの挙動が変化します。
デフォルト(未設定)の時はstepとして機能します。

  • jumpType
  • 挙動
  • step
    (ステップ)
    • 崖や壁タイル、B~Eの通行不可のタイルで止まる
  • ride
    (跳躍)
    • 崖や壁タイルで止まる
    • B~Eの通行不可タイルに侵入できる
      (ジャンプでのみ脱出可能)
  • fall
    (落下)
    • 崖や壁、滝タイルでは平地まで落下する
    • B~Eの通行不可タイルに侵入できる
      (ジャンプでのみ脱出可能)
    • A4タイルやA5の高台タイルから飛び降りる
    • 逆に平地タイルからA4タイル、A5の高台タイルへは飛び乗れない
    • 後述する特定のタイルに到達すると、指定のスイッチがOnになる
  • climb
    (崖登り)
    • 滝タイル以外の崖、壁、B~Eの通行不可タイルに侵入できる
      (ジャンプでのみ脱出可能)
    • スタミナ制を導入している場合、崖に掴まっている間はスタミナが自然回復しない
    • 崖に掴まっている間にスタミナが0になると落下する
      以降は着地するまで落下の挙動に準拠する
ステップ
跳躍
落下
崖登り

<壁判定リージョン>

自動ジャンプの際に「壁」として判定するためのリージョンIDのリストを構成します。
キャラクターと着地地点の直線間に該当するリージョンがあるとき、壁にぶつかったと判定します。
なお、船の移動領域は自動的に壁として判定されます。

また、1つ目に設定したリージョンIDはアクションで実行されるアニメーションでも壁として判定されます。
逆に言えば2つ目以降のリージョンIDはキャラクターのジャンプにのみ影響しますので、「プレイヤーを侵入させたくないが射撃魔法は通過させたい」という場合には複数IDの設定が有効です。

この例では、設置エリアへのプレイヤーのジャンプ移動もアニメーションの侵入もできません

<落下死スイッチ>

自動ジャンプにおいてjumpTypeがfallの場合、あるいはclimb中に落下挙動に変わった場合、特定のタイルに到達した際にOnにするスイッチを設定します。
特定のタイルとは次の3種類を指します。

  • マップ外のタイル
    (x座標が0未満か幅以上の値、あるいはy座標が0未満か高さ以上の値)
  • Aタイルが設置されていない、虚無のタイル
    ※A5タイルに含まれる透明タイルは対象外です。
    タイル設置済みの部分を虚無化したい場合は、新規マップの透明タイルを右クリックでコピーしてくるのがオススメです。
    (デバッガ機能を強化している時、タイルIDの最下段のIDが0になっていれば虚無のタイルです)

  • 海のような、船が通行できるタイル
    うっかり水に飛び込んだら……

あくまでもスイッチをOnにするだけなので、具体的にどのような結果を実行するかはユーザーが自由に設定して下さい。
たとえば強制的にゲームオーバーにするコモンイベントを起動しても良いですし、地下に落ちたり空中都市から地上に戻ったりといったマップごとの固有ギミックに活用するのも良いでしょう。
ただし、自動でOffにする機能はありません。
スイッチの切り忘れで無限ループしてしまう不具合には注意して下さい。

<落下の空気抵抗>

落下挙動の際、落下の加速にかかる時間を設定します。
このパラメーターの値が大きいほど、加速までに要する時間は長くなります。
落下速度に関してですが、初速は落下開始時の移動速度に対して1段階遅い状態で設定されます。
たとえば、「4:標準速」であれば「3:1/2倍速」から始まります。
そして最大速度は「9:32倍速」までになります。
着地した時点で落下前の移動速度に自動復元されます。

抵抗が40の時と15の時の比較

【不透明度の変更】

キャラクターが徐々に消えたり現れたりするための、不透明度の変更を自動化します。
パラメーターは存在しません。

移動ルートで不透明度処理を行うと、定数指定であるがゆえの手間や微調整の煩わしさ、そして長大な行数よる可読性の低下が懸念されます。
これをプラグインコマンド1つで解決します。

>>関連プラグインコマンド

【ジャンプ】と同様に、自律移動でもスクリプトが利用可能です。

this.setAutoChangeOpacity(start, end, offset, wait)

start と end はそれぞれ、処理開始時の不透明度・終了時の不透明度を指定します。
入力可能な値は共に 0〜255 です。
未設定の場合は、start なら 255、 endなら 0 として扱われます。
ただし、offset やwait を指定する場合はstart と end も明記してください。

offset は不透明度の変動値です。
こちらも 0〜255 で設定し、未設定の場合は30 として扱われます。
start の不透明度からoffset の値ずつ変動し、end の不透明度を超過した時点でこの処理は終了します。
また、start と end の大小関係に応じて、自動的に加算・減算を判断します。

wait はoffset 処理の間のウェイトフレーム設定です。
未設定の場合は3フレームとして扱います。


【足踏み画像の指定強化】

○足踏み画像の直接指定と固定化

移動ルートの実行において、スクリプトとして次のコマンドを実行すると指定の画像で固定できます。

this.setFixPattern(true, patternID);

patternIDには固定化したい画像のインデックスを記入します。
デフォルトでは左から 0 1 2 の3パターンとなっています。
もしパターンを増やしている場合は、さらに 3 4 ... と続いていきます。
解除したい場合、true の部分を false にしてください。
この際patternID は不要で、自動的に棒立ち状態(パターンのインデックス1)に戻ります。

なお、実行内容でこのスクリプトを使う際は、次のようにcharacter(0)が必要です。

this.character(0).setFixPattern(true, patternID);
this.character(0).setFixPattern(false);

○モーションの演出

足踏みのパターンを応用して、最大で12枚までの動作アニメーションを作ることができます。
移動ルートの実行において、スクリプトとして次のコマンドを実行してください。

this.startMotion(startID, motionType, waitFrames);

  • startID:

    モーション開始時の足踏みパターンのインデックスを記入します。

  • motionType:

    足踏みの流れを左から右、あるいは右から左かのどちらにするかを設定します。
    前者であれば1 、後者であれば-1 を記入してください。

  • waitFrames:

    各足踏みのパターンにおいて、そのパターンを維持する時間をフレームで設定します。
    記述方法は配列となっており、[a, b, c ...]で書きます。

モーションが最後まで完了すると、モーション開始前のグラフィックに自動的に戻ります。
ただし、プレイヤー操作感でリーダーの画像を固定している場合、プレイヤーのモーションは正常に動作しません。
このスクリプトを実行する場合はリーダー画像の固定を解除しておいてください。
また、ウェイトコマンドの機能はありません。
ウェイトをかけたい場合は別途ウェイトを設定してください。

なお、こちらも足踏み画像の固定化と同様、実行内容でスクリプトを使う際はcharacter(0)が必要です。

this.character(0).startMotion(startID, motionType, waitFrames);

足踏み関係のスクリプト記入例
3つ目のスクリプトと移動ルートは同時に実行されます

【特定方向にnマス移動】

移動ルートの設定でたとえば5マス下に移動したい場合、デフォルトでは「下に移動」というコマンドを5つ書く必要があります。
少ないマス移動であれば問題ありませんが、何マスも移動しなければならない時や何度もジグザグに移動させたい場合、どうしても1つの移動ルートが実行内容で占める行数が多くなります。
こうなると可読性が下がります。
次のスクリプトを使うと、この移動が非常にコンパクトになります。

this.move(x, y);

このスクリプトに制限する統括スイッチはありません。
MELOSを導入すると、いつでも使うことができます。
xおよびyには、それぞれ移動させたい距離を記入して下さい。
負の値を設定するとxなら左、yなら上方向に移動します。
ただし、このスクリプト1回でのx軸方向の移動とy軸方向の移動は同時に行われます。
そのため、「最初に上へ5マス進めて、その後に右へ4マス進めたい」場合は

this.move(0, -5);
this.move(4, 0);

というように分けて使用してください。
また、xとyの引数を同時に設定した場合、キャラクターの移動する際の向きはy軸方向への移動を参照します。

なお原則的に、歩幅の関係で小数の座標にいる時に歩幅設定が0になっていると、移動が実行されなくなります。
しかしこのスクリプトはその問題も解決してくれます。
その代わり、移動先の通行判定はすべて無視してしまうので、壁抜けをしないように移動距離を調整して下さい。



関連プラグインコマンド

door exe weight eventId

ドアや宝箱の開閉を行います。
SEやMEは鳴らないので、プラグインコマンドの前後に演奏を設定してください。

  • exe

    open または close を記入します。
    未設定の場合は open として実行します。

  • weight

    light または heavy を記入します。
    前者なら軽挙動、後者なら重挙動のパラメーターを参照します。
    未設定の場合は light として実行します。

  • eventId

    開閉する対象のイベントIDを記入します。
    未設定の場合、このプラグインコマンドを実行するイベントが対象になります。

autoJump id x y dirFix jumpType

キャラクターの自動ジャンプを実行します。
各引数である x y dirFix jumpType に関しては、上述のスクリプトと同様の扱いです。
id はこのプラグインコマンドの対象にするイベントIDを記入します。
-1にするとプレイヤー、0にするとプラグインコマンドを記述したイベントが対象となります。

例)x = 3, y = -2の場合、それぞれ青マスに着地します

※jumpTypeを指定する場合

dirFixの true あるいは false は原則的に明記して下さい。
(stepの時で向きを固定したい場合は省略可能です)

なお、プラグインコマンドではjumpTypeを指定する際に文字列を表す' 'は不要です。

autoOpacity id start end offset wait

キャラクターの不透明度を自動で変更します。
start end offset wait に関しては、上述のスクリプトと同様です。
また、id に関しては【ジャンプ】のプラグインコマンドautoJump の実行データ id と同様です。