移動拡張

プレイヤー操作感

プレイヤーの移動に伴う様々な挙動を管理します。
ダメージ床の設定に関しては処理タイミングの関係上、ステートと同時に判定を行います。
ステート機能拡張を参照して下さい。

目次


<移動強化の有効化>

On (true)にすると、この機能を有効化します。

なお、このパラメーターがOnのとき、ハシゴの設定がイベントにも適用されるようになります。
これにより、ハシゴタイルでしか出来なかった登り降りの挙動ができるようになります。
ギミックを起動してハシゴを下ろすようなイベントでも違和感のない演出が可能です。

左がタイルのハシゴ、右がイベントのハシゴです

<基本移動速度・ブースト速度>

プレイヤーの徒歩速度、およびダッシュ時の補正速度を設定します。
デフォルトでは基本移動速度が4 (等倍)、ブースト速度が1 となっています。

<ブースト速度>に関して、通常であればダッシュの速度は徒歩速度の2倍になります。
しかしこのパラメーターで値を設定すると、その分だけダッシュ速度に上乗せします。
値が1増える度に2倍となり、たとえば<ブースト速度>が2のときは2(デフォルトダッシュ速度)×2×2=8倍となります。

また、通常の移動速度は6 (4倍速)が最大ですが、この設定ではこの上限を突破できます。

ゲーム中で移動速度を変更した後でパラメーターの設定に戻したい場合、イベントコマンドのスクリプトで以下のスクリプトを実行して下さい。

$gamePlayer.setInitialSpeed();

ゲーム中にブースト速度を変更したい場合、次のスクリプトを実行してください。
nにはブースト速度として設定したい値を記入します。

$gamePlayer.setBoostSpeed(n);

<シフトダッシュの変更>

ダッシュ判定を行うためのキーやボタンを変更します。
次の3つから選択して下さい。

  • 「Shift キー / Xボタン」:デフォルト仕様です。
  • 「Xキー / Bボタン」:いわゆるBダッシュが可能になります。
  • 「キー不要」:オプションの常時ダッシュに依存するようになります。

選択しなかったボタンはダッシュの機能を奪われます。
たとえば、「Xキー / Bボタン」を選択した場合はShiftキーを押してもダッシュしません。

<歩幅>

プレイヤーが1歩進む際の移動距離を設定します。
1歩、半歩のいずれかで設定してください。この設定はプレイヤー以外のイベントキャラクターにも適用されます。

プラグインコマンドを使うことで、ゲームプレイ中にも歩幅を変更することが可能です。

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

なお、移動ルートのコマンドでは歩幅の設定がそのまま反映されます。
たとえば歩幅が半歩のとき、一歩前進は半歩前進として実行されます。
そのため長距離を移動させたい場合は2倍のコマンドを書く必要があります。
表現したい演出に合わせて、適宜歩幅を調整して下さい。
また、小数点の座標にいる場合、移動ルートの実行では正しく移動が開始されません。
この場合は簡易挙動設定で掲載しているスクリプトを使うと解決できます。

<立体表現用リージョンID>

立体交差や低地・高地の立体差分を表現するためのリージョンIDを、それぞれ0~255の間で設定します。
各リスト番号の役割は以下の通りです。

  1. 立体差分-高地の始点
  2. 立体差分-高地の中点
  3. 立体交差-橋の始点
  4. 立体交差-橋の中点(横方向)
  5. 立体交差-橋の中点(縦方向)

6番以降は設定しても反映されません。
逆に、立体差分を利用するためには2番まで、立体交差を利用するためには5番まで必ず設定して下さい。

・立体差分

<歩幅>が半歩に設定されている必要があります。
このとき、タイルチップの後ろを通る表現ができるようになります。
タイルチップの下側を歩く際はキャラクターの方が前に来るので、立体的な描画を再現できます。
適用されるタイルチップは通行判定が☓のものになります。
☆のタイルチップはデフォルト同様、常にキャラクターより前に表示されます。

通行判定
屋根や壁の天井と言ったAタイルにも適用できます

そして、A3タイルの屋根部分やA4タイルの壁上部分などは自動的に床・地面よりも高地として描画されます。
B~Eのような装飾チップは配置された床に応じて低地・高地を自動的に分離して描画されますが、キャラクターはその処理をしていません。
ここが立体差分リージョンIDの出番です。

プレイヤーの体が埋もれている

高地の開始地点にしたいところにリスト番号1に設定したリージョンを、続く1マスにリスト番号2に設定したリージョンを配置します。
これによりキャラクターは高地に移動したと認識され、地面に埋もれることなく描画されるようになります。
なお、このままではキャラクターが「常に高地にいる」と判断してしまいます。
立体差分の終了地点とその手前の1マスにもリージョンの配置を忘れないようにして下さい。

リージョン配置例

また、リージョンを踏んだ時点で描画処理がアップデートされますが、これは静止状態であっても同様です。
したがって、ファストトラベルした先が高地である場合、高地に固定で配置したいイベントがある場合などは図のようにリージョンを配置して下さい。

なおこの時、決定トリガーや接触トリガーといった非自動型のイベントを起動する際に、プレイヤーとイベントの高さの一致も判定されるようになります。
これにより、崖の上から崖下の宝箱を調べられるといった描画上の不具合を自動的に防いでくれます。

ちなみに、イベントを高地に固定するノートタグ、およびタイルの高低自動振り分けをキャンセルするノートタグもあります。
制作中のマップに合わせて使い分けて下さい。

>>関連メモ <onHill>
>>関連メモ <noHill>

・立体交差

公式で配布されている立体交差プラグイン(overpass.js)と機能はおおよそ同じです。
橋が架かっている場所において、その下をくぐる移動と上を渡る交錯移動が両立できるようになります。
プラグインの競合の可能性が非常に高いおそれがあるため、立体交差を利用したい場合はMELOSのものをお使いください。

下をくぐる
上を渡る

交差の開始点にしたいところにリスト番号3のリージョンを、交差の中点にしたいところ全域にリスト番号4・あるいは5のリージョンを配置します。
図をご覧の通り、横方向の中点はリスト番号4のリージョンを、縦方向の中点はリスト番号5のリージョンを使います。
横・縦の区別は開始点の並びが横軸と縦軸のどちらに沿っているかで判断して下さい。

リージョン配置例

なお、立体交差は立体差分を前提としています。
そのため、立体交差のリージョンを配置する高地の開始点・終了点には立体差分のリージョンも配置して下さい。

<接触判定距離>

マップイベントのトリガー範囲を調整します。
小数第2位までの設定が可能です。

歩幅が半歩以下(1 以上)のとき、デフォルトでは少し位置がズレるとイベントが発生しなかったり、乗り物に乗れなくなります。
このパラメーターはその判定範囲を拡大し、プレイヤーのストレスを軽減することが目的です。

真正面にいなくてもイベントが発生

☆トリガーが「プレイヤーから接触」の場合でも、判定範囲に入るとイベントが発生します。
ただし発生後にフラグの変更が行われなかった場合、判定から外れるまでは移動の度にイベントが発生してしまいます。
フラグ管理にご注意ください。

<イベント同時実行の制限>

On(true)にすると、決定トリガーや接触トリガーによる起動条件を満たしたイベントが2つ以上ある場合、1つのみに制限します。
これにより、1つ目のイベントが終わった後に続けて2つ目のイベントが発生するのを防ぐことができます。
なお、起動の優先度はイベントIDが若い順になっています。
特定のイベントを優先して起動させたい場合は対象外のイベントのIDをずらしてみて下さい。

コラム 座標一致のイベント作成

歩幅を半歩以下にしていると、「特定のイベントIDを踏んだら〜」や「特定のリージョンIDに到達したら〜」といったイベント作成において、座標が半歩ずれていても条件を満たしてしまいます。
この問題を解決するためには次のスクリプトを使ってみてください。

this.character(0).isIntCoordinate();
$gamePlayer.isIntCoordinate();

これは「このイベント(あるいはプレイヤー)の座標がx、yともに整数であるかどうか」を判定します。
これにより、半歩ずれた状態(=小数が混じった座標)では条件を満たせなくなり、一層厳密なイベントを作ることが可能です。

ただし、読み取りたいIDのイベントが自律移動する場合、そのイベントの座標が小数となってしまいます。
そしてツクールの変数は原則的に整数値しか格納できないため、小数を含む座標のイベントIDは読み取れないという問題があります。
これに対応するためには次のスクリプトが有効です。

変数の操作で:this.character(0).checkArroundEventId(direction, distance);
条件分岐で :this.character(0).isInTargetEvent(eventId, distance, isCross);

前者はdirectionで指定した方向の、distanceで指定した先にいるイベントIDを変数に代入・加算等で処理します。
directionは1~9の数値で、distanceは数値か'stride'(歩幅の値)で設定します。
後者は実行するイベントからdistanceの距離に、eventIdで指定したイベントがいるかどうかを判定します。
eventIdに0を入れるとプレイヤーを対象とします。
isCrossは判定する方角を設定し、1(四方4マス)か0(周囲8マス)を記入します。
また、こちらはdistanceに0(その場)を設定できます。

イベントの接触判定については後述するノートタグで操作できます。

<振り向きフレーム>

移動キーを短く押した際、移動せずその場でプレイヤーが向きを変更できます。
この振り向き挙動を許容する時間をフレームで設定します。
0 の時はデフォルトのままで、振り向きを行いません。

なお、あまり大きい値を設定すると、キー入力から移動実行までのラグが大きくなります。
適切な値を模索してください。

<影レイヤー浮上>

On(true)の時、影ペンでつけた影のプライオリティが上昇します。
具体的には☆レイヤーのタイルチップと、イベントのプライオリティが「プレイヤーの上」のもの以外が影より下に描画されるようになります。
これにより建物の影に入った際、キャラクターにも影が差すようになり自然な表現に近づきます。

Offの時
Onの時

<パーティリーダー>

マップ上で表示される、パーティの先頭をパラメーター指定のアクターで固定します。
指定のアクターがパーティにいない場合は、デフォルト同様に先頭のアクターがリーダーとなります。

ただし、隊列表示がOnの時、指定アクターが2人表示され得ることに注意して下さい。
この機能が不要の場合、パラメーターを「なし」に設定してください。

プラグインコマンドを使うことで、ゲームプレイ中でもリーダー設定を変更できます。

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

<ゲームオーバー処理>

パーティが全滅した際、ユーザー定義のゲームオーバー処理を実行できます。
処理を行うコモンイベントをパラメーターで設定してください。
「なし」の場合はデフォルトのゲームオーバー処理を実行します。

ゲームオーバー処理を手助けするプラグインコマンドがいくつかありますので、ぜひ活用して下さい。

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

<足音の有効化>

On (true)にすると以下のパラメーターが有効になり、プレイヤーやイベントキャラクターの移動時、地形に応じたSEを演奏できるようになります。
これに伴い、イベントキャラクターに聴覚が追加され、プレイヤーの足音を検知すると自動でプレイヤーの方を振り向きます。

<足音>

足音としてのSEライブラリを構成します。
二重構造になっているのでご注意ください。

最大で8つのリストを設定でき、それぞれ上から地形タグの0〜7に対応しています。
プレイヤーやイベントキャラクターが踏んだ地形タグに対応してSEを演奏します。
なお、対応するSEが存在しない場合は1つ目のSE(地形タグ0用)が演奏されます。

<足音発生ステータス>

プレイヤーが足音を発生させた際、その足音が届く範囲を決める能力IDを設定します。
この能力値にタイル幅をかけ合わせたものが半径となり、プレイヤーの中心座標から半径px分が足音の範囲となります。
なお、このパラメーターが0のときはプレイヤーの足音自体がなくなり、イベントの聴覚判定が発生しなくなります。

<イベント聴覚範囲>

イベントキャラクターがプレイヤーの足音を検知するためのデフォルト聴覚範囲を設定します。
この値にタイル幅をかけ合わせたものが聴覚範囲の半径となります。
なお、下記の<hearing>含め、聴覚が0のイベントはプレイヤーの足音に反応しなくなります。

足音に関してプラグインコマンドやメモがいくつか存在します。

>>関連プラグインコマンド・メモ


関連スクリプト

$gamePlayer.isStaying(count);

イベントコマンド「条件分岐」のスクリプトで使用できます。
countに任意のフレーム値を記入することで、プレイヤーが指定したcountフレームだけ移動を停止しているかどうかを判定します。
たとえばcountに300を入れると300フレーム、すなわち5秒停止した時に条件を満たしたと判断します。
プレイヤーが操作をしていないときの待機モーションを作ったりするのにうってつけです。


関連プラグインコマンド

operate stride argument

ゲーム中に歩幅を変更します。
argument には short(またはup) あるいは long(またはdown) を記入してください。
前者の時は1歩当たりの移動距離が短くなり、後者の時は逆に長くなります。
未記入の場合はshortを実行しつつ、歩幅2 から0 へ自動ループさせます。

operate leader argument

パーティリーダーをゲーム途中で変更します。
argument に新しいアクターのアクターIDを記入してください。
未記入、あるいは0 の時は「なし」の時と同様にします。

endGameover

ゲームオーバー処理の完了をMELOSに伝えます。
コモンイベントの最後にこのプラグインコマンドを設置してください。
このプラグインコマンドがない場合、コモンイベントが2回実行されます。

transfer deathzoom

プレイヤーをリスポーン地点に転送します。
リスポーン地点はゲーム内で自動的に記録されます。
(初期状態はゲーム開始地点です)
また、転送後に自動でパーティの全回復も行います。

ただし、画面のフェードイン・アウトは行わないので、必要に応じてコモンイベントに追記してください。

partyRespawn mapId x y

ユーザーが任意のタイミングで、任意の場所をリスポーン地点に設定できます。
mapId にマップID、x y にはそれぞれx座標、y座標を記入してください。
未記入、あるいは0 の実行データは、実行時点の現在地を参照します。

なお、MELOSが自動でリスポーン地点を更新するタイミングは次の2つです。

  1. 複数パーティに振り分けた時:UIを開いた際の座標情報を参照
  2. ファストトラベル実行時:ファストトラベル先の座標情報を参照

stopCaution eventId

イベントキャラクターのCaution状態を解除します。
eventId に対象にするイベントのイベントIDを記入してください。
eventId を0 に設定すると、プラグインコマンドを実行するイベントが対象になります。


関連メモ

<onHill>

マップイベントのメモ欄に記述して下さい。
このノートタグを持つイベントは立体差分リージョンによる影響を受けず、高地に固定されます。
イベントのトリガーにも関与するので、プレイヤーが低地にいる時はこのイベントを起動できなくなります。

高さが違うので
イベントの下をくぐり抜ける

<noHill>

マップのメモ欄に記述して下さい。
記述されたマップのAタイルはすべて低地として(すなわちツクールのデフォルト仕様で)描画されます。
たとえば移動できる範囲がすべてA4タイルのみで構成されている場合、高地として描画する意味はほとんどありません。
一方で、特にノートタグやリージョンによる対処をしていないと、イベントやプレイヤーは低地扱いとなり埋もれてしまいます。
このノートタグはそうした問題を簡単に解決するのに役立ちます。

<eventThrough>
<isBigCharacter>

マップイベントのメモ欄に記述してください。
それぞれイベントの接触判定を調整します。

eventThroughが書かれたイベントは、移動の際に他のイベントをすり抜けることができます。
たとえば岩を押してスイッチに乗せるようなギミックを作る際、本来ならば移動の前後で「すり抜けOn」「すり抜けOff」を入れる必要がありますが、このタグを持っているとその記述が不要となります。

isBigCharacterが書かれたイベントは自身の左右と上1列分の全6マスが同じイベントとして判定されるようになります。
通行判定も同様の範囲となるだけでなく、イベントの発生範囲もそれだけ拡大されます。
ただし、イベントの画像もBigCharacter用の画像である必要があります。
たとえばドアやゲートといった「画像の上半分をプレイヤーが通れる」ようにしたい場合は、タグを付けずにキャラクターの左右を直接通行不可にすると良いでしょう。

※画像ファイルの名前に「$」が付いているものがBigCharacterとして判定されます。
一方、「!」が付いているものは「ObjectCharacter」として判定され、キャラクターの描画に際してy座標が少し下がった状態で描かれます。
「!$」と両方付いているものは、両方の判定がなされます。

ファイル名の前に付いている記号

<justVariable:[p]>
<secondVariable:[{"page":a,"id":b,"op":"c","value":d}]>

マップイベントのメモ欄に記述してください。
イベントの出現条件の1つ「変数」を強化します。

justVariableのノートタグを持つイベントは、指定したページの変数条件が「>=」ではなく「=」として判定されます。
ページの指定はpに数値を書いて行います。
複数のページに適用したい場合、[p1, p2, p3...]のように「,」で繋げてください。

secondVariableのノートタグを持つイベントは、指定したページに2つ目の変数条件を持たせます。
これにより、スイッチと同様2つの変数条件を満たしたときに発動するイベントを作ることができます。

aに対象とするページの数値を書いてください。
bには参照したい変数のIDを、dには条件とする値を書きます。
cには判定するための比較方法を、右図の中から記述します。
全角・半角はどちらでも構いません。注意点として、全角の記号で書く際は半角で書かないようにしてください。
半角の「<」や「>」はノートタグの開始・終了で使うため、ツクール側が誤認することが理由です。

  • 全角表記
  • 半角表記
  • 出現条件
  • g
  • 変数bの値 > d
  • >=
  • ge
  • 変数bの値 ≧ d
  • e
  • 変数bの値 = d
  • <=
  • le
  • 変数bの値 ≦ d
  • l
  • 変数bの値 < d

複数のページに2つ目の変数条件を付与したい場合は、
[{"page":a1,"id":b1,"op":"c1","value":d1},{"page":a2,"id":b2,"op":"c2","value":d2},...]のように「,」で{}の塊を繋げてください。

<hearing:n>

マップイベントのメモ欄、あるいはデータベース「敵キャラ」のメモ欄に記述してください。
イベントキャラクターに個別の聴覚範囲 n を設定します。
この範囲は<イベント聴覚範囲>より優先されます。
n に 0 を設定すると聴覚が消えるため、プレイヤーの足音では反応しなくなります。

なお、アクション機能が有効の場合で<enemy:n>を持つ場合、敵キャラでの設定が優先的に反映されます。

<powerfulHearing>

データベース「敵キャラ」のメモ欄に記述します。
このノートタグを持つ敵イベントキャラクターは、Caution状態になると同時に、もう1つ上位のWarning状態にもなります。

☆このノートタグはアクション機能専用のタグです。

<noStepSe>

※β4.1.0から追加
マップイベントのメモ欄、あるいはデータベースの「アクター」「職業」「武器」「防具」「ステート」のメモ欄に記述してください。
イベントがこのノートタグを持ったとき、そのイベントから足音が発生しなくなります。
宙に浮いているものや遠距離攻撃など、足音が鳴ってほしくないイベントには持たせると良いでしょう。

データベース側に持たせた場合、プレイヤーの足音が発生しなくなるパーティ能力として機能します。
聴覚に関わるパラメーター、ノートタグらを全て無効化するため、隠密システムも作れます。
パーティ能力となるため、バトルメンバーの内1人でもこのノートタグを持てば機能します。
コンスタントに機能させたいならアクターや職業、一時的に機能させたいなら武器、防具、ステートに付けるのがオススメです。

コラム  検知後について

足音を検知したイベントキャラクターは「警戒(Caution)」状態になります。
条件分岐のスクリプトで次のスクリプトを設定すると、足音を検知した場合の挙動を作ることが可能です。

this.character(0).isCaution()