タイル上に自動でイベントを生成【RPGツクールMZ&MVプラグイン】

2024年04月29日

 タイル上に自動でイベントを生成します。
 タイルID、オートタイルタイプ、地形タグ、リージョンIDを条件にして、その上に自動で指定のイベントを生成します。

 また、タイルを消去してイベントに置き換えることも可能です。
 ※タイルID、オートタイルタイプが条件の場合のみ


 アニメーションするタイルなど様々な使い方が可能です。
 マップ切替時またはプラグインコマンドによって実行します。

 ※このプラグインは色々と不安定です。必要性が薄いなら使用しないことをオススメします。

目次


導入方法(Install)

更新履歴(History)

使用方法(Usage)

MZ用プラグインコマンド(PluginCommandMZ)

MV用プラグインコマンド(PluginCommandMV)

注意点(Notice)

プラグインパラメータ(基本)

テンプレートマップID(TemplateMapId)

設定リスト(SettingList)

ロード時にイベント初期化(InitEventOnLoad)

タイルセット変更時も処理(ApplyChangeTileset)

画面外のイベント描画停止(StopOutOfRange)

範囲外の余裕幅(OutOfRangeMargin)


プラグインパラメータ(設定リスト)

設定ID(SettingId)

全タイルセットで有効(ValidAllTilesets)

タイルID(TileId)

オートタイルタイプ(AutotileType)

地形タグ(TerrainTag)

リージョンID(RegionId)

イベントID/名前(EventId)

タイルを置換する(Replace)

X座標補正(AdjustX)

Y座標補正(AdjustY)


謝辞(Acknowledgment)


導入方法(install)


 以下のリンクを右クリックで保存し 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※いずれのプラグインもMV、MZの両方で有効です。

 NRP_TileToEvent.js ver1.06(2024/04/29)

オプション

タイル情報をデバッグ表示する(詳細

 NRP_DebugTile.js ver1.01(2021/08/15)

 ※F2を押すだけで、足元のオートタイルタイプやタイルIDを確認できるようにするプラグインです。NRP_TileToEventの補助用に使えます。

更新履歴(History)


2024/04/29(ver1.06)

  • ver1.052にて「ロード時にイベント初期化」がオンの場合、ロード時にタイルイベントが重複して作成されてしまう不具合修正。

2023/07/18 -> 2024/04/28(ver1.05 -> 1.052)

  • NRP_PutRandomEvents.jsと併用時にイベントが上書きされて消滅してしまう不具合修正。
  • 『ロード時にイベント初期化』の既定値をオンに変更。
  • マップリロード時にタイル置換が適切に行われない不具合修正。
    (2023/07/23 ver1.051)
  • ロード時にエラーとなる競合用に調整。(2024/04/28 ver1.052)

2022/05/21 -> 2023/05/24(ver1.04 -> 1.042)

  • 『画面外のイベント描画停止』がオンの場合、稀に置換する素材画像全体がチラ見えしてしまう不具合修正。
  • マップ内のイベントIDが歯抜け状態の場合、イベントが正常動作しなくなることがある不具合修正。(2022/06/07 ver1.041)
  • レイヤー1にタイルが存在しない場合、リージョンや地形タグを条件とした置換に失敗する不具合修正。(2023/05/24 ver1.042)

2022/01/15(ver1.03)

  • マップ編集後のロード時も動作するように修正。

2021/12/26(ver1.02 -> 1.021)

  • 『タイルを置換する』がオンの置換処理を行った際、場所移動時に誤ったタイルを消去してしまう不具合を修正。
  • 同一マップ内での場所移動を考慮できてなかったので修正。(ver1.021)

2021/09/11 -> 2021/11/11(ver1.01 -> 1.011)

  • セーブ後にエディタでイベントの追加・削除を行い、ロードするとエラーになることがある不具合に対処。
    ※完璧を約束するものではありませんが、ある程度は緩和できると思います。
  • イベントテストでエラーになる不具合修正。(11/11 ver1.011)

2021/05/15(ver1.00)

  • 公開!

使用方法(Usage)


 まずは生成したいイベントを準備します。

  1. テンプレート用のマップを作成し、イベントを作成する。
    分かりやすくイベント名を付けておく。
  2. プラグインパラメータのテンプレートマップIDに
    先程のマップIDを登録。

 要するに公式ローンチプラグインのTemplateEvent.js(トリアコンタン様)とほぼ同じです。

 次にプラグインパラメータの『設定リスト』に条件を指定し、生成するイベントの『イベントID/名前』を入力します。
 この際、参照用に『設定ID』を設定しておきます。
 ※タイルIDやオートタイルタイプを参照したい場合は、付属の『NRP_DebugTile.js』が便利です。

 最後にタイルセットのメモ欄に、先程の『設定ID』を登録すれば完了です。
 以下の?の部分に入力してください。
<TileToEvent:?>


MZ用プラグインコマンド(PluginCommandMZ)


IDを指定して実行

 設定IDを指定すれば処理が実行されます。
 内容は上記の使用方法にて、タイルセットに設定IDを登録した場合と同様です。

MV用プラグインコマンド(PluginCommandMV)


NRP.TileToEvent.CallId [設定ID]

 処理内容はMZ版と同じです。
 ※大文字小文字は不問。[]は含めないでください。

注意点(Notice)


 ツクールの仕様上、イベントが存在するだけで、少しずつマップ上での負荷が上昇します。例えば、千を超えるような大量のイベントを生成すると、動作が重くなる可能性があります。

 当プラグインには生成したイベントが画面範囲外の場合に、描画を停止する処理が含まれています。これによってある程度負荷を軽減できます。

 また、1マスずつタイルを確認&処理する仕様上、大きなマップに大量のイベントを生成すると少しだけ時間がかかります。
 ※とはいえ、よほどの処理をしない限り一瞬で終わりますが。

 イベントを生成したマップでプレイヤーがセーブをした後、マップイベントの追加や削除などが行われるとデータが不整合になる可能性があります。なるべく影響が出ないように考慮したつもりですが、他プラグインとの相性などもあって完璧ではありません。
 『ロード時にイベント初期化』をオンにしたほうが安定するかもしれません。

プラグインパラメータ(基本)


テンプレートマップID(TemplateMapId)

 タイルを置き換えるイベントを配置するマップIDです。

設定リスト(SettingList)

 設定内容の一覧です。
 詳細は下の『プラグインパラメータ(設定リスト)』を参照してください。

ロード時にイベント初期化(InitEventOnLoad)

 ゲームロード時にイベントを初期化します。
 オンにするとイベントの位置が保存されなくなります。

タイルセット変更時も処理(ApplyChangeTileset)

 タイルセットの変更時も処理を実行します。

画面外のイベント描画停止(StopOutOfRange)

 画面範囲外のイベントの描画を停止します。これにより、大幅な処理の軽量化が見込めます。
 競合などの問題が起きそうな場合はオフにしてください。

範囲外の余裕幅(OutOfRangeMargin)

 『画面外のイベント描画停止』について範囲外と見なす余裕の幅です。
 数値分だけ画面外にはみ出していても停止しません。

プラグインパラメータ(設定リスト)


設定ID(SettingId)

 タイルセットのメモ欄(あるいはプラグインコマンド)からの呼び出しに使う識別子です。
 『全タイルセットで有効』がオンの場合は不要です。

全タイルセットで有効(ValidAllTilesets)

 設定を全てのタイルセットで有効にします。
 オフにした場合は、個別のタイルセットに設定できます。

タイルID(TileId)

 対象とするタイルIDを指定します。複数指定も可能です。(例:1,3~5)

オートタイルタイプ(AutotileType)

 対象とするオートタイルタイプを指定します。複数指定も可能です。(例:1,3~5)

地形タグ(TerrainTag)

 対象とする地形タグ(1~7)を指定します。複数指定も可能です。(例:1,3~5)

リージョンID(RegionId)

 対象とするリージョン(1~255)を指定します。複数指定も可能です。(例:1,3~5)

イベントID/名前(EventId)

 置換先のイベントです。
 イベントは指定したテンプレートマップにあらかじめ配置してください。
 ID/名前の両方が有効です。

タイルを置換する(Replace)

 元々のタイルを消去します。
 タイルIDまたはオートタイルタイプが条件の場合のみ有効です。

X座標補正(AdjustX)

Y座標補正(AdjustY)

 イベントを生成するX座標、Y座標を補正します。
 元のタイルから少しずらして配置したいという場合にどうぞ。

謝辞(Acknowledgment)


 このプラグインは、トリアコンタン様の以下のプラグインの処理を参照&流用させていただきました。

  • TemplateEvent.js
  • EventReSpawn.js

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 18:06 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする

オートセーブを任意に実行【RPGツクールMZプラグイン】

2024年04月28日

 オートセーブを任意に実行します。


 RPGツクールMZのオートセーブ機能は場所移動や戦闘後に実行されますが、作品によってはそれ以外のタイミングで実行したいこともあるかと思います。

 このプラグインでは開発者の好みのタイミングで、オートセーブできるように機能を提供します。
 

目次


導入方法(Install)

更新履歴(History)

使用方法(Usage)

プラグインパラメータ(Plugin Parameters)

場所移動時のセーブを無効(DisabledTransferSave)

戦闘時のセーブを無効(DisabledBattleSave)

オートセーブ無効スイッチ(DisabledSwitch)


導入方法(install)


 以下のリンクを右クリックで保存し 、[プロジェクト]\js\plugins に放り込みます。ツクールのプラグイン管理から機能をONにしてください。
 ※このプラグインはMZ専用です。

 NRP_AutoSave.js ver1.00(2024/04/28)

更新履歴(History)


2024/04/28(ver1.00)

  • 公開!

使用方法(Usage)


 プラグインコマンドを呼び出せば、オートセーブを実行できます。
 場所移動や戦闘でのオートセーブは、プラグインパラメータで無効にすることができます。

 なお、システム1の「オートセーブを有効化」はオンにしておいてください。
 そうしないと、ロード画面にオートセーブのファイルが表示されません。

プラグインパラメータ(Plugin Parameters)


場所移動時のセーブを無効(DisabledTransferSave)

 場所移動後のオートセーブ機能を無効化します。

戦闘時のセーブを無効(DisabledBattleSave)

 戦闘終了後のオートセーブ機能を無効化します。

オートセーブ無効スイッチ(DisabledSwitch)

 スイッチがオンの場合はオートセーブを無効化します。
 場所移動時、戦闘時のみが対象です。

 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 15:31 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする

DynamicAnimation&Motion サンプル技(合体技)【RPGツクールMZ&MVプラグイン】

2024年04月18日

 このページはDynamicAnimation(MZMV)および、DynamicMotion(MZMV)プラグインの解説の一部です。

 ロマン中のロマン――合体系のサンプル技を紹介していきます。
 前提として、以下のプラグインとの併用を想定しています。

 合体技の実現(NRP_CombinationSkill)

 これの導入により『$actor(id)』や『$cs(id)』関数で、合体技に参加するアクターを取得できるようになります。
 また『$css(id)』関数ではスプライトを取得できます。
 ※DynamicAnimation ver1.09より、$cssへの参照は不要となりました。全て$csだけで完結します。

 どうしても記述が複雑になるので、DynamicAnimation&Motionの定義をtxtから読み込むプラグインでテキスト編集すると便利かもしれません。
 ただし、<CS_Actors:1,2>などの記述まで、テキスト内に含まないように気をつけてください。あくまで合体技プラグインの記述なので、このプラグインでは処理できません。

目次



X斬り(2020/11/29更新)


 二人のアクターが交差するように敵を斬ります。


 以下はID=1(アレックス)と2(ブライアン)による例です。
<CS_Actors:1,2>
<D-Setting:NoStep&Sync> // 並列モードで実行

// アレックス:対象の中心を基準に移動
<D-Motion:crash>
performer = $cs(1) // 1: アレックス
ex += 120 * mirroring // 目標から右に120
ey -= 120 * mirroring // 目標から上に120
frame = 5
</D-Motion>

// ブライアン:対象の中心を基準に移動
<D-Motion:crash>
performer = $cs(2) // 2: ブライアン
ex += 120 * mirroring // 目標から右に120
ey += 120 * mirroring // 目標から下に120
frame = 5
wait = 10 // 少しだけ待つ
</D-Motion>

// 二人同時に敵の向こう側まで移動
<D-Motion:pierce&attack>
performer = [$cs(1),$cs(2)] // 二人
ex = defaultX - 120 * mirroring // 対象から左に120
</D-Motion>

// X字アニメーション
<D-Animation/>
<D-Animation:wait>
rotation = Math.PI*2 / 4 * mirroring // 90度回転
</D-Animation>

// 二人で戻る
<D-Motion:return>
delay = 5
performer = [$cs(1),$cs(2)] // 二人
</D-Motion>

 説明すべきことは多々ありますが、一つずつ取り上げていきます。

 二行目にある『<D-Setting:Sync>』は並列実行モード(解説)です。これにより、テンプレートに初期設定されたウェイトやディレイを無視します。
 通常『near』『crash』のような移動系テンプレートは、バトラーの移動を待ちます。このSyncの指定があれば待たなくなります。複数のバトラーを動かす際に便利です。

 『performer = $cs(1)』というのは一番目の参加者をモーション対象とするという意味です。事前説明で設定した関数ですね。

 『performer = [$cs(1),$cs(2)]』というように複数人を同時にモーション対象とすることも可能です。
 ちなみに『pierce』型は角度を保ったまま標的の向こうまで移動します。二人まとめて命令しているのに、別地点へ移動するのはそのためです。便利。

 『X字アニメーション』の部分は角度を変えて『7:斬撃/エフェクト』を二つ再生しています。
 もちろん、普通にX字の斬撃アニメーションを作っても構いません。

 ※2020/11/29 mirroring機能によって敵の使用にも対応しました。
  ただし、<CS_Actors:1,2>の記述は変更する必要があります。
  <CS_Enemys>または<CS_Battlers>を使用してください。


合体魔法剣(2020/04/09)


 魔道士が放った魔法を身に受けて、剣士が魔法剣を放ちます。
 スキルのアニメーションには適当な斬撃をセットしています。


 以下はID=1(剣士)と2(魔道士)による例です。
<CS_Actors:1,2>
<D-Setting:NoStep>

// 剣士:敵の前まで移動
<D-Motion:near>
performer = $cs(1)
</D-Motion>

// 魔道士:一歩前進
<D-Motion:stepForward&wait>
performer = $cs(2)
</D-Motion>

// 魔道士:魔法ポーズ
<D-Motion:svSpell>
performer = $cs(2)
</D-Motion>

// 魔道士:魔法発動アニメ
<D-Animation:spell&wait>
target = $cs(2)
</D-Animation>

// 剣士:手を挙げるポーズ
<D-Motion:svItem>
performer = $cs(1)
</D-Motion>

// 剣士が水を受けるアニメ
<D-Animation:shot&wait>
id = 82
target = $cs(1)
sx = $cs(2).x // 発射するX座標
sy = $cs(2).y - $cs(2).height/2 // 発射するY座標(中央に調整)

arrival = 7
scale = 0.5
</D-Animation>

// 剣士:武器を振る
<D-Motion:attack>
performer = $cs(1)
</D-Motion>

// 敵に攻撃アニメ
<D-Animation/>
<D-Animation:random&wait>
id = 82
scale = 0.5
</D-Animation>

// 魔道士:戻る
<D-Motion:stepBack>
performer = $cs(2)
</D-Motion>

// 剣士:戻る
<D-Motion:return>
performer = $cs(1)
</D-Motion>

 基本的には『X斬り』で説明したことと変わりません。
 『target』の指定でアニメーションの対象を切り替えています。これにより、発動アニメを魔道士に表示したり、剣士に魔法を放ったりしています。
 また『sx = $cs(2).x』『sy = $cs(2).y - $cs(2).height/2』という記述により、魔道士を始点にして魔法を発射しています。

 デフォルトで作りやすかったので今回は『82:水/単体2』を使用しましたが、炎や雷などの魔法剣も同じ用に作ればOKです。

総攻撃(2020/5/2)


 全員で総攻撃をしかけます。


// 全員を合体技の対象に
<CS_Battlers:1,2,3,4>

// メッセージ用(先頭の名前+達)
<CS_UserName:$cs(1).name() + "達">

// 自動前進禁止&非同期
<D-Setting:NoStep &Sync>

// 接近
<D-Motion:near>
performer = $cs() // 全員対象
performerDelay = 2
ey += a.height * (-1.5 + a._battler.index()) // 縦位置調整
frame = 3
wait = 3
</D-Motion>

// 武器振り
<D-Motion:attack>
performer = $cs()
performerDelay = 2
</D-Motion>

// 通常攻撃のアニメーション
<D-Animation>
repeat = 4
id = $cs(r + 1).attackAnimationId1() // 通常攻撃アニメ
interval = 2
wait = 5
</D-Animation>

// 戻る
<D-Motion:return>
performer = $cs()
performerDelay = 2
damageAll = false // 全員が終わるまでダメージ表示禁止
</D-Motion>

 『performer = $cs()』で参加者全員をモーション対象にできます。
 『ey += a.height * (-1.5 + a._battler.index())』はキャラクターの並び順によって、移動先を調整しています。
 『damageAll = false』はreturn型に最初から付属しているダメージ表示機能を切るためのものです。切らないと最初の一人が戻るタイミングでダメージ表示されてしまいます。

 『戦闘行動の強制』辺りと組み合わせて、ペルソナっぽい何かができないかなと思ったり……。

合体魔法(2020/09/07更新)


 複数人で魔法を放ちます。


// 参加者指定
<CS_Actors:2,6>

// 前進禁止
<D-Setting:NoStep>

// 全員一歩前へ
<D-Motion:stepForward>
performer = $cs()
performerDelay = 0 // 各人時間差
</D-Motion>

// 全員魔法モーション
<D-Motion:spell>
performer = $cs()
performerDelay = 0 // 各人時間差
</D-Motion>

// 全員発動アニメーション
<D-Animation:spell>
target = $cs()
nextDelay = 0 // 各人時間差
</D-Animation>

// アニメーション
<D-Animation/>

 上記は二人用ですが、冒頭の<CS_Actors:2,6>の値を変えるだけで、三人でも四人でもそのまま使えます。後はアニメーションを好きなように設定してください。

一斉射撃(2020/5/18更新)


 ※NRP_CombinationSkill ver1.302が必要です。

 全員で一斉に射撃します。
 アニメーションには『82:水/単体2』を縮小したものを設定しています。また<D-Animation:spell>による発動アニメーションも少しいじっています。
 例によって、お好みのアニメーションに変更してください。着弾フレーム(arrival)の値も忘れずに。


<CS_Battlers:1,2,3,4>
<CS_UserName:$cs(1).name() + "達">

// 前進禁止
<D-Setting:NoStep>

// 全員一歩前へ
<D-Motion:stepForward>
performer = $cs()
performerDelay = 1 // 各人時間差
</D-Motion>

// 全員魔法モーション
<D-Motion:spell>
performer = $cs()
performerDelay = 1 // 各人時間差
</D-Motion>

// 全員発動アニメーション
<D-Animation:spell>
target = $cs()
nextDelay = 1 // 各人時間差
</D-Animation>

// 一斉射撃
<D-Animation:shotRandomAll>
repeat = 60
interval = 1/2
sx = $cs(r%4+1).x
sy = $cs(r%4+1).y - $cs(r%4+1).height/2
arrival = 7

</D-Animation>

 『$css(r%4+1)』『$cs(r%4+1)』によって合体技の参加者の座標を参照しています。
 『r%4+1』とは「リピート回数(0始まり)を4で割った余り+1」という意味です。つまり『$cs(1)〜$cs(4)』を巡回しながら参照することで、それぞれの位置からアニメーションを発射しています。

ブライアンミサイル(2024/04/18)


 麗しい友情パワーで敵を粉砕します。
 スキルの範囲は全体にしていますが、単体にしても問題ありません。


// 参加者指定
<CS_Actors:1,2>

// 自動前進禁止
<D-Setting:NoStep>

// 1人目:2人目の元へ移動
<D-Motion:near>
performer = $cs(1)
ex = $cs(2).x
ey = $cs(2).y
</D-Motion>

// 1人目:しゃがむ
<D-Motion>
performer = $cs(1)
motion = abnormal
</D-Motion>

// 2人目:上に投げられる
<D-Motion:jump&roll&wait>
performer = $cs(2)
motion = damage
rotation *= 1 // 回転数
airY = - a.height + 12
z = 4 // 優先度上へ
frame = 8
noShadow = true // 影を削除
playSe = {"name":"Wind7","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 1人目:腕を上げてキャッチ
<D-Motion>
delay = -2
performer = $cs(1)
motion = item
motionStartPattern = 1
motionPattern = 1

</D-Motion>

// 2人目:倒れ状態に
<D-Motion>
performer = $cs(2)
motion = dead
wait = 4
playSe = {"name":"Damage3","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 1人目:手を振り下ろす
<D-Motion:swing>
performer = $cs(1)
</D-Motion>

// 2人目:発射
<D-Motion:crash&wait>
performer = $cs(2)
motion = dead
ey = defaultY + 100
airY = 0
noShadow = false // 影を復活
playSe = {"name":"Wind1","volume":90,"pitch":100,"pan":0}
</D-Motion>

// 2人目:倒れたまま
<D-Motion>
performer = $cs(2)
motion = dead
frame = 10
</D-Motion>

// 爆発
<D-Animation>
sy = defaultY + 100
</D-Animation>

// 元の位置へ
<D-Motion:return>
performer = $cs()
</D-Motion>

 abnormalでしゃがみモーション、itemで腕を上げるモーションの代わりにしています。SVアクターの素材によっては不自然に見えるかもしれません。また、itemについてはmotionStartPatternとmotionPatternを同じ値にすることでパターンを固定しています。
 目標とする位置は「defaultY + 100」としています。つまり、本来の対象の位置より少し下を狙っています。不要な場合は+100の部分を削除してください。
 「delay = -2」はタイミング調整です。少し早めに腕を上げることで自然に見せています。
 「z = 4」によって表示優先度を変更しています。投げられる側の優先度を高くすることで自然に見せています。

 >DynamicAnimationMZプラグインに戻る
 >DynamicAnimationプラグインに戻る
 >DynamicMotionMZプラグインに戻る
 >DynamicMotionプラグインに戻る
 >RPGツクールMZ&MV目次に戻る
posted by 砂川赳 at 09:55 | RPGツクールMZ&MV | このブログの読者になる | 更新情報をチェックする