【RPGツクール】川や海のどこからでも船を呼び出して乗れるイベントの作り方

当サイトはプロモーションを含みます
ツクール

特定の地形タグを設定した水場オートタイルを調べることで、小型船をプレイヤーの目の前に呼び出せるようにします。

イメージとしては、ポケモンのなみのりに近いでしょうか。

今回は小型船を扱いますが、乗り物の種類を変えれば大型船も呼び寄せることができます。

※音量に注意!

では、早速イベントの作り方を見ていきましょう。

使用変数

名前用途
1プレイヤーx最終的にプレイヤーの目の前のマスのX座標を格納
2プレイヤーy最終的にプレイヤーの目の前のマスのY座標を格納
3マップID乗り物の移動先のマップIDを格納
4地形タグIDプレイヤーの目の前のマスの地形タグを格納
乗り物呼び出しイベントを起動するタイルかどうかの判別に使用
5※リージョンID格納※乗り物呼び出しイベントを起動しないエリアの設定に使用※

5のリージョンID格納変数については、必ずしも使用するわけではありません。

データベースの設定

まずはデータベースでマップタイルの設定を行います。

船を呼び出すことのできるマップタイルかどうかを判別するために、今回は地形タグを活用します。

地形タグとは、マップタイルひとつひとつに割り振ることができる、0から7までの数字のことです。初期状態では、すべてのマップタイルの地形タグが0になっています。

タイルセットの右にあるタイル属性一覧から[地形タグ]を選択。

各マップタイルの上に数字が表示されますので、地形タグを変更したいマップタイルの上にカーソルを合わせて左クリックをしてください。

すると、数字が0から1に変わるはずです。

ちなみに、右クリックをすると7→6→5……と左クリックとは逆の順番で変わっていきます。

今回は、マップタイルの一番左上にある水場Aのオートタイルの地形タグを1に設定します。

注意点として、地形タグが0のBセットマップタイルを、Aセットのマップタイルの上に配置した場合、Aセットのマップタイルの地形タグが適用されてしまいます

そのため、橋の上に船が表示されて乗れてしまうといったような不具合が生じます。

回避する方法としては、

  1. 水場オートタイルの上に配置する橋や屋根などのマップタイルの地形タグを2以上に設定する
  2. マップにリージョンを設定し、このリージョンではイベントが起動しないようにする

といったことが考えられます。

地形タグを2以上に設定する場合
マップにリージョンを設定する場合

小型船初期位置設定

小型船の初期位置を設定します。

適当なマップを開き、イベント編集モードで右クリック、[初期位置の設定][小型船]を選択してください。

小型船呼び出しイベント

実行内容

指定位置の情報取得:地形タグID, 地形タグ, ({プレイヤーx},{プレイヤーy})
条件分岐:地形タグID = 1
条件分岐:小型船に乗っている

それ以外のとき
変数の操作:#0023 マップID = マップID
乗り物の位置設定:小型船, {マップID} ({プレイヤーx},{プレイヤーy})
乗り物の乗降

分岐終了

分岐終了

乗り物を呼び出すイベントを作成します。まずは、プレイヤーが通行できないマップの片隅あたりにイベントを新規作成します。

[すり抜け]にチェックを入れてください。プライオリティは[通常キャラと同じ]にしましょう。

イベントコマンド[指定位置の情報取得]では、特定の(X座標、Y座標)における地形タグやリージョンIDを変数に格納することができます。

今回は、座標を2つの変数で指定し、地形タグの数値を変数24番に格納します(変数の番号は任意です)。[情報タイプ]が[地形タグ]になっていることを忘れずに確認してください。

変数21番と変数22番の数値は次の章で作成するイベント内で取得していきます。わかりやすいように変数に名前だけつけておきましょう。

情報の取得が終わったら、指定位置(プレイヤーの目の前のマス)の地形タグが1のときだけ小型船を呼び出すことができるように[条件分岐]を設定します。

まずは、地形タグの情報を格納した変数24番の値で条件分岐を設定します。

小型船に乗っているとき再度小型船を呼び出す必要はないので、小型船に乗降中かどうかでも分岐させます。

小型船を呼び出すには、場所の情報が必要です。

マップIDを変数に格納し、[乗り物の位置設定]を変数で指定します。X座標、Y座標は[指定位置の情報取得]で使用した変数21番および22番を使います。

小型船を呼び出したら、イベントコマンド[乗り物の乗降]により、強制的にプレイヤーを乗船させます。

実行内容

指定位置の情報取得:地形タグID, 地形タグ, ({プレイヤーx},{プレイヤーy})
指定位置の情報取得:リージョンID格納, リージョンID, ({プレイヤーx},{プレイヤーy})
条件分岐:地形タグID = 1
条件分岐:リージョンID格納 ≠ 1
条件分岐:小型船に乗っている

それ以外のとき
変数の操作:#0023 マップID = マップID
乗り物の位置設定:小型船, {マップID} ({プレイヤーx},{プレイヤーy})
乗り物の乗降

分岐終了

分岐終了

分岐終了

[指定位置の情報取得]でリージョンを変数に格納、さらに、リージョンが1のときは小型船の呼び出しイベントが実行されないように条件分岐を加えています。

小型船呼び出しイベントをプレイヤーの目の前に移動させるイベント

実行内容

変数の操作:#0021 プレイヤーx = プレイヤーのマップX
変数の操作:#0022 プレイヤーy = プレイヤーのマップY
条件分岐:プレイヤーが下を向いている
変数の操作:#0022 プレイヤーy += 1

それ以外のとき
条件分岐:プレイヤーが左を向いている
変数の操作:#0021 プレイヤーx -= 1

それ以外のとき
条件分岐:プレイヤーが右を向いている
変数の操作:#0021 プレイヤーx += 1

それ以外のとき
条件分岐:プレイヤーが上を向いている
変数の操作:#0022 プレイヤーy -= 1

分岐終了

分岐終了

分岐終了

分岐終了
イベントの位置設定:小型船乗降, ({プレイヤーx},{プレイヤーy})

このイベントの内容を簡単に説明すると、プレイヤーの目の前のマスの座標を取得し、取得した座標の位置に小型船呼び出しイベントを移動させています。

イベントの[トリガー]は[並列処理]にしてください。

変数21番にプレイヤーのいるX座標、変数22番にプレイヤーのいるY座標を格納します。

その後、プレイヤーの向きを条件にして、プレイヤーの目の前の座標になるよう変数を操作します。

これで、変数21番にプレイヤーの目の前のマスのX座標が、変数22番にプレイヤーの目の前のマスのY座標が格納されました。

なお、プレイヤーの現在位置の座標を(X,Y)としたときの、上下左右のマスの座標は以下の通りです。

最後に[イベントの位置設定]を用いて、前の章で作成したイベントをプレイヤーの目の前に移動させます。

これで、プレイヤーの目の前に小型船呼び出しイベントが常に移動するようになりました。

小型船を初期位置に戻すイベント

実行内容

条件分岐:小型船に乗っている

それ以外のとき
乗り物の位置設定:小型船, MAP013 (8,6)

分岐終了

プレイヤーが小型船から降りたとき、小型船を初期位置に戻す設定をします。

[トリガー]を並列処理にしてください。

[条件分岐]を用いて、小型船に乗っていないとき(つまりプレイヤーが小型船から降りたとき)に、小型船を別マップに移動させます。

以上で完成となります。

あとはテストプレイをしてみて、実際の動作を確認してください。

注意点

今回の方法では【小型船呼び出しイベント】 を常にプレイヤーの目の前に移動させています。

同一座標に複数のイベントが配置され得ることから、場合によっては不都合が生じるかもしれません。

たとえば、[指定位置の情報取得]ではイベントIDも取得できますが、複数のイベントが重なっているとうまく目当ての数値を格納できないことがあります。

最後に

今回は【小型船呼び出しイベント】の出現条件を設定しませんでしたが、条件を加えれば、特定のイベントをこなしたあとやアイテムを持っていないと船を呼び出せないといった表現も可能です。

いろいろと試してみてください。

また、水場のある複数のマップで同一のイベントを起こしたい場合、コモンイベントを作成すると便利です。

作成したマップイベントをコピー&ペーストすることで、複数のマップに同イベントを配置できますが、内容を修正したくなった場合、1つ1つのイベントを手作業で修正しなければなりません。手間がかかる上ミスも起こりやすい。

その点、「コモンイベント」を活用すると、イベントをまとめて修正できるようになります。

コモンイベントの作成が終わったら、マップイベントの実行内容から[コモンイベント]を指定してください。

注意点としては、[イベントの位置設定]などマップごとに個別に設定する項目がある場合は、コモンイベントではなく直接マップイベントで設定してください(イベントの作成順序によって、[イベントの位置設定]で動かすイベントIDはマップごとに変わってくるはずです)。

マップイベントの[トリガー]条件やタイルセットの地形タグの設定だけは忘れないようにしましょう。

それでは、よいツクールライフを!

コメント

タイトルとURLをコピーしました