SRPGギアで特殊なスキルを実装させる方法 本方法はRPGツクールMZにSRPGギア(2024/6/15更新版)を導入した状態での内容になります。 一部処理に追加のプラグインを必要とする場合があります。 やり方はあくまで一例です。より効率的な処理方法もあると思います。 ■敵を撃破したとき、1ターンに1度だけ再行動可能にするステートあるいは装備品 いわゆる疾風迅雷の再現方法。少しややこしいです。 0.事前知識 ※実装させる分には読み飛ばししまっても大丈夫です。 どうしてこんな処理が必要なのかという部分を説明します。 SRPGギアでの戦闘は 戦闘処理➡ユニットの行動終了処理➡のイベント の順に行われます。 SRPGギアには行動中のイベントIDを変数に格納するという機能があるのですが、これは戦闘処理終了後に値がリセットされる仕様になっています。 そのため、ユニットの行動終了処理後にのイベントで再行動処理を挟もうにも「さっき行動したユニットが誰なのか記録されない」ため直接参照することができませんでした。 そこで今回は、「戦闘中に行動中のイベントIDを更に別の変数に保存する」という処理を挟むことで再行動を実装させています。 1.必要なプラグイン https://plugin.fungamemake.com/archives/1159 まずはトリアコンタン様制作の撃破ボーナスプラグイン(KillBonus.js)を導入します。 これは敵を撃破した際にHP回復や金銭取得、ステート付与等を行うことが可能になるプラグインです。 装備やステートのメモ欄に条件とボーナス内容を設定することができます。 例 盗賊の剣という武器を作成し、 とメモ欄に記載すると敵撃破時にに500G獲得できるという武器になります。これを利用して疾風迅雷に関するステートを作成します。 https://plugin-mz.fungamemake.com/archives/1933 次にムノクラ様制作のMNKR 戦闘開始/終了コモンイベントMZを導入します。【超重要。色んな処理に使えるのでSRPGギアを使うならオススメ】 これは事前に設定したコモンイベントを戦闘開始/終了のタイミングで呼び出すことができます。 こちらは戦闘中に変数操作を行うために利用します。 2.ステートの作成 今回は【疾風迅雷】と【疾風迅雷発動】の2種類のステートを使用します。 それぞれのステート番号を44,45とします。 ステート項目44番に【疾風迅雷】を作り、メモ欄に と書きます。 他の設定はいりません。 これにより【疾風迅雷】状態で敵を撃破した場合、45番のステートを自身に付与するという処理になります。 続いてステート項目45番に【疾風迅雷発動】を作ります。 こちらはターン終了時に解除する設定にし、1ターンで効果が消えるようにします。他の設定はいりません。 *【疾風迅雷】ステートの代わりに装備品のメモ欄を利用しても可能。スキルのメモ欄ではプラグインが動作しないため注意。 3.行動中のイベントIDを取得する処理 戦闘開始時のコモンイベントを利用して行動中のイベントIDを変数に格納する処理(デフォルトでは変数4番)を 「最後に行動したユニットの変数」に代入処理(今回は変数8番とします)します。 これにより戦闘後も「最後に行動したユニットのイベントid」が変数8番に記録された状態になります。 4.を利用して再行動処理 まず疾風迅雷が何度も発動しないように疾風迅雷発動済み判定用のスイッチを作ります。 とメモ欄に記述されたイベントはユニットの行動後に呼び出されるようになっているため、 条件分岐を利用し、 ○○(疾風迅雷ステート持ちのアクター)が疾風迅雷発動になっている  疾風迅雷発動済みがOFF   スクリプトでthis.unitReaction(this.v(8));   疾風迅雷発動済みをON と設定すれば1ターンに一度だけ再行動処理が行われるようになります。 5.を利用して疾風迅雷発動済みの解除 ターン開始時のイベントに疾風迅雷発動済みをOFFにする処理を入れれば完成です。     ■敵の隣にワープして攻撃するスキルの作り方。(未完成) いわゆるワープライナの再現方法。プラグインなしで作れます。 ただし対象選択時に隣に移動できるか判定する処理を足す必要あり。 1.スキルの作成 ワープライナという項目を作り、メモ欄に射程を設定。 とすれば「射程10」「敵は反撃不可」というスキルになります。 対象を敵単体にしHPダメージに設定する。 スキルの効果にコモンイベント戦闘後に隣へワープを設定します。 2.コモンイベント戦闘後に対象の隣にワープ SRPGギアの基本機能である行動中のイベントIDと対象のイベントIDを変数に格納する機能を利用します。 コモンイベントに以下のスクリプトを記述すれば可能です。 *現在の場合、対象の隣に移動できない場合の処理が抜けています。後程改訂版を公開するためお待ちください。 // 変数からイベントIDを取得 var targetEventId = $gameVariables.value(5); // 変数5に保存された対象のイベントID var userEventId = $gameVariables.value(4); // 変数4に保存された使用者のイベントID // イベントオブジェクトを取得 var targetEvent = $gameMap.event(targetEventId); var userEvent = $gameMap.event(userEventId); if (targetEvent && userEvent) { var directions = [2, 4, 6, 8]; // 下、左、右、上の順 var newX = targetEvent.x; var newY = targetEvent.y; var found = false; // 対象の隣接位置をチェック for (var i = 0; i < directions.length; i++) { var dir = directions[i]; var dx = $gameMap.roundXWithDirection(targetEvent.x, dir); var dy = $gameMap.roundYWithDirection(targetEvent.y, dir); if ($gameMap.isPassable(dx, dy, dir) && !$gameMap.eventIdXy(dx, dy)) { newX = dx; newY = dy; found = true; break; } } // 新しい位置に移動 if (found) { userEvent.locate(newX, newY); } } ■離れた味方を隣に引き寄せるスキル いわゆるレスキュー。 こちらは味方を対象にして使用する。 ワープライナと同じくコモンイベントで座標移動を設定します。 メモ欄の記述は以下 これで7マス以内の味方を対象にできます。 コモンイベントのスクリプト // 変数からイベントIDを取得 var targetEventId = $gameVariables.value(5); // 変数4に保存された対象のイベントID var userEventId = $gameVariables.value(4); // 変数5に保存された使用者のイベントID // イベントオブジェクトを取得 var targetEvent = $gameMap.event(targetEventId); var userEvent = $gameMap.event(userEventId); if (targetEvent && userEvent) { var directions = [2, 4, 6, 8]; // 下、左、右、上の順 var newX = userEvent.x; var newY = userEvent.y; var found = false; // 使用者の隣接位置をチェック for (var i = 0; i < directions.length; i++) { var dir = directions[i]; var dx = $gameMap.roundXWithDirection(userEvent.x, dir); var dy = $gameMap.roundYWithDirection(userEvent.y, dir); if ($gameMap.isPassable(dx, dy, dir) && !$gameMap.eventIdXy(dx, dy)) { newX = dx; newY = dy; found = true; break; } } // 新しい位置に移動 if (found) { targetEvent.locate(newX, newY); } } ■戦闘中に隣の味方が追撃してくれるスキル いわゆる攻陣やデュアルアタック。特定のスキルを持っている場合、隣接する味方が攻撃しかけたら追撃するという効果を再現します。 (ここではこちらから攻撃をしかけたとき、味方の攻撃に1回だけ追撃する仕様にします。) ステートと2種のプラグインを組み合わせ再現します。 SRPGギアの1つであるSRPG_Auraと 疾風迅雷再現でも使用したムノクラ様制作のMNKR 戦闘開始/終了コモンイベントMZを導入します。 こちらでも戦闘中に変数操作を行うために利用します。 1.隣接する味方に追撃状態を付与するスキルの作成 スキル欄にデュアルアタックを作り、メモ欄に // xを付与したいステートのIDに置き換えてください // 影響を受けるユニットを指定。味方の場合は"friend" // yをオーラの射程に置き換えてください。例えば、2なら周囲2マス // オーラの形状。デフォルトは円形 // オーラのタイルの色。任意で変更可能 これで隣接する味方にステート80を付与するというスキルを作成できます。 2.付与される追撃ステート(ここでは80番)の設定 メモ欄に と入れます。このタグを付与することで、ユニットがオーラの射程外に出た場合にステートが解除されます 3.コモンイベントでデュアルアタックの設定 スクリプトによって設定します。 まず攻撃者側にステート80が付与されているか確認し、されているならデュアルアタック用のスイッチをONにします(ここではスイッチ84番) SRPGギアには戦闘時のアクターかどうかの区別はなく、攻撃を仕掛けた側と反撃された側という処理が行われます。 そのため「自ターン時かどうか」というスイッチを作って攻撃側と反撃側のどちらが味方かを判定し、1回だけ攻撃を仕掛けるようにします。 デュアルアタック回数をカウントするためにデュアルアタック回数という変数を作っておくとよい。(ここでは変数20番とします) ここではアクターid6番のキャラがデュアルアタック持ちで追撃に参加するという設定で記述します。 自ターンスイッチは(アクターターン開始演出とエネミーターン開始演出のコモンイベント内に仕込んでおくと便利です) // アクティブなユニットの取得 var activeUnit = $gameSystem.EventToUnit(this.activeEventId())[1]; // アクティブなユニットがステート80を持っているかを確認 if (activeUnit.isStateAffected(80)) { // スイッチ84をONにする $gameSwitches.setValue(84, true); } 条件分岐 自ターンがON  条件分岐 スイッチ84がON   条件分岐 変数20番が0 変数20番 +1 以下スクリプト // 行動を行うアクターのID const actorId = 6; // ここでアクターのIDを指定 // 使用するスキルのID const skillId = 1; // ここでスキルのIDを指定 // ターゲットの敵のイベントID const targetEventId = $gameVariables.value(5); // ここでターゲットのイベントIDを指定 // アクターを取得 const actor = $gameActors.actor(actorId); // ターゲットの敵を取得 const targetEvent = $gameMap.event(targetEventId); const target = $gameSystem.EventToUnit(targetEventId)[1]; // ターゲットのHPが0でない場合のみ実行 if (target && target.hp > 0) { // アクターが行動を実行 actor.forceAction(skillId, -1); // -1はランダムターゲット BattleManager.forceAction(actor); // ターゲットにダメージを与える const action = new Game_Action(actor); action.setSkill(skillId); action.apply(target); target.performActionEnd(); } 3.戦闘終了時にデュアルアタック回数をリセット 戦闘終了時コモンイベントで変数20番を0、スイッチ84番をOFFとしてデュアルアタック関連の設定をリセット 4.スキルの効果にデュアルアタックのコモンイベントを設定する スキルに設定したコモンイベントはスキル発生後に動きます。 なのでデュアルアタック適応となるスキルすべてに仕込んでおきます。 これで隣接した味方が攻撃をしかけたとき、一回だけ攻撃に参加するというスキルを作成できました。 ■特攻武器で攻撃する時、武器の攻撃力だけを3倍にする方法 プラグインとステートを組み合わせることで、特攻武器による武器威力を3倍にするなどの処理が行えます。 今回は竜に対してのみ武器の威力が3倍になるドラゴンキラーを作る例を書きます。 1.属性ステートの作成 ステート欄で竜属性という項目を作成します。(今回はステート番号59番とします。) 2.武器の威力の設定 フトコロ様作のFTKR Add Original Parametersを導入します。 https://plugin.fungamemake.com/archives/1301 これを利用し、武器威力を表すオリジナルパラメータwpnを作成します。 例えば鋼の剣という武器のメモ欄に 等のように威力を設定し、 スキル欄の攻撃計算式を a.atk + a.wpn - b.def とすることで、アクターの攻撃力と武器攻撃力の合算値がダメージ計算式に反映されるという仕様にできます。 3.特攻武器の設定 竜特攻の武器を装備した場合は、竜特攻攻撃という専用のスキルに代わるように、武器のメモ欄に記述をします。 例:ドラゴンキラーという武器を作りメモ欄に以下の記述をする。 これによってドラゴンキラー装備時は通常攻撃の代わりにスキル55番が実行されるようになります。 4.特攻スキルの設定 55番のスキルを竜特攻攻撃とし、ダメージ計算式を以下の通りに設定する。 a.atk + a.wpn* (b.isStateAffected(59) ? 3 : 1) - b.def これにより、対象が竜属性(ステート59番)を持っている場合は武器の威力が3倍(武器威力10➡30)、そうでないなら1倍という処理になります。 ■特攻武器で攻撃する時、武器の攻撃力だけを3倍にする方法(応用) 先ほどは相手側の属性を表すステートだけで行っていましたが、さらに攻撃側が特攻ステートを持っている場合にのみ武器の威力が3倍という処理もできます。 これを行う利点は、全てのダメージ計算式を統一することで竜特攻攻撃のような専用のスキルを必要とせず、どのスキルを使用した場合でもドラゴンキラーによる特攻効果が反映されるようになる点が挙げられます。 また、味方に○○特攻というステートを付与する等のスキルを作成することも出来るようになります。 1.特攻ステートの作成 竜属性(59)の対となる竜特攻(64)というステートを作成します。 そしてダメージ計算式を a.atk + a.wpn + a.wpn * ((a.isStateAffected(64) && b.isStateAffected(59)) ? 2 : 0) - b.def に変更。 これにより、攻撃側が竜特攻状態かつ対象が竜属性のときのみ武器の威力が3倍になるという処理になります。 2.武器にステート付与 ステート付与装備(うなぎおおとろ様作) - EquipState.jsを使用して特攻ステートを付与する武器を作ります。 例えばドラゴンキラーのメモ欄に と記述することでドラゴンキラー(威力10)を装備していると、竜特攻ステートが付与された状態で通常攻撃を行うという処理になります。 3.属性を増やす この方法のもう一つの利点として複数の特攻判定を一度に処理できるというものがあります。 例えば竜属性に加えて 騎馬属性(60)と騎馬特攻(65) 重装属性(61)と重装特攻(66)等を追加し、 a.atk + a.wpn + a.wpn * ((a.isStateAffected(64) && b.isStateAffected(59)) ? 2 : 0) + a.wpn * ((a.isStateAffected(60) && b.isStateAffected(65)) ? 2 : 0) + a.wpn * ((a.isStateAffected(61) && b.isStateAffected(66)) ? 2 : 0) - b.def というダメージ計算式に統合することで、どのスキルであってもアーマーキラー装備時はアーマー特攻が発動、ホースキラー装備時は騎馬特攻が発動といったようにダメージに反映されるようになります。 ■敵を撃破すると能力が上昇するステート いわゆる○○の吸収。 敵を倒すたびに特定のステータスを定数上昇させるにはまっつUP様作のBordSkin.jsがオススメ https://plugin.fungamemake.com/archives/19664 疾風迅雷と同様に撃破ボーナスプラグイン(KillBonus.js)を利用し、敵を倒すと特定のステータスが上昇するステートが付与されるようにします。 そこから更にトリアコンタン様制作のステート重ね掛けプラグインを使って段々上昇していく作りにすればいけるはず…。(要検証) https://raw.githubusercontent.com/triacontane/RPGMakerMV/mz_master/StateDuplication.js ■ワープ ■ワープ後に移動して攻撃 いわゆる外伝式魔女のワープ ■攻撃後にワープ いわゆるグリ式ライナワープ ■守備隊形 未実装。 2回攻撃そのものはスキルのメモ欄にと入れることで封じられるので俊敏性補正+999とかすればできる…? ■迎撃隊形 同じく追撃判定の時にだけ関与する補正値を設定とかすれば多分できる。 ■突撃 まったく方法が思い浮かばない。 ■連続 https://torigoya-plugin.rutan.dev/battle/skillChangeTo/ 鳥小屋様制作Torigoya_SkillChangeTo.jsを使用すると楽。 確率でスキルが変わるようにできるので、、通常攻撃が2回攻撃に変化するようにすればいける。 ■奥義系 同上。確率発動にできるので便利。