開発日誌

テクニック

[ テクニック ] プラグインなしでムチ攻撃

2020-11-20 04:11:21

ドラクエの武器で鞭やブーメランは、敵グループや全体攻撃ができますが、フルダメージが出るのは1体目の敵だけで、2体目以降は徐々にダメージが減衰していきます。

これをRPGツクールMZで実現しました。

プラグインじゃないとダメかなと思っていましたが、デフォルト機能の範囲内でできそうだったので、何とかプラグインなしで実装してみました。以下にその手順を記述します。

※追記:
プラグインなしでムチ攻撃・改」でよりシンプルな式に改良しています。そちらもご参照ください。

まずは、ダメージ減衰率を保持する変数を用意し、その変数をリセットするだけのコモンイベントを作成します。

次に、ムチ攻撃用のスキルを作成します。

1番の通常攻撃をコピーして作るのが楽だと思います。範囲は敵全体、使用効果に先ほどの減衰率をリセットするコモンイベントを指定します。

そしてここがキモですが、ダメージの計算式を以下のようにします。

d = (a.atk * 4 - b.def * 2) * ((100 - $gameVariables.value(1)) / 100);
$gameVariables.setValue(1, (100 - (100 - $gameVariables.value(1)) * 0.67));
d;

説明の都合上、3行に分けていますが、実際には続けて1行で書いてください。

まず1行目。デフォルトの通常攻撃ダメージ(a.atk * 4 - b.def * 2)に、ダメージ減衰率(1番の変数の値)をもとにした値((100 - $gameVariables.value(1)) / 100)を掛けて、変数dに代入しています。なお、変数の番号は、ダメージ減衰率に使った変数番号に合わせてください。

掛けている値がダメージの威力を表しており、最初は減衰率が0なので威力は100%、減衰率が30%のときは威力が逆の70%となります。

次に2行目で減衰率を更新します。現在の減衰率から次の減衰率を計算して、減衰率の変数に値をセットしています。ちょっと式が複雑ですが、威力が直前の67%になるようにしています。すなわち与えるダメージが、100%→67%→45%→31%……と徐々に減っていきます。0.67の部分を変更すれば減り方を調整することができます。

ダメージ計算式では最後に評価された式の値が採用されるので、最後にdを評価してやることで、初めに計算したダメージが返されます。これをしないと、減衰率の更新は何も値が返されないため、ダメージが0になってしまいます。

ダメージ計算式では、v[n]と記述することでn番の変数の値が使えます。なので上記の式で、$gameVariables.value(1)となっている2カ所の記述は、v[1]と置き換えることが可能です。

ですが、この記述法は、該当の変数が定義されていないとエラーを返すようで、結果としてダメージが0になってしまいます。通常のゲーム中であれば、一番最初に変数を初期化してやればいいのですが、戦闘テストの場合は全ての変数が未定義状態で始まるため、戦闘イベントで開始時に変数を初期化してやる必要がありますが、全ての敵グループにそれを仕込むのも面倒です。$gameVariables.value(n)であれば、未定義なら0が返ってくるので、戦闘テストでも問題なく使えます。うーん、こうするしかないのかな……。

変数の方も、減衰率ではなく威力にして、リセット時に0でなく100を代入するようにしてやれば、いちいちダメージ計算式で100 - ○○とかしなくて済むのですが、やはり戦闘テスト時の都合で面倒な式に。攻撃発動前に起動するコモンイベントとかが作れればいいのですけど。

ともかく、以上でスキルの設定ができました。

最後に、実際の武器を作成すれば完了です。

武器の特徴で、「攻撃スキル」に先ほど作成したスキルを指定すればOKです。

RPGツクールMZから新たに追加された機能の、「攻撃スキル」を利用しています。通常攻撃の代わりに特定のスキルを発動させられる機能で、数少ないMZの新機能の割に、これといった使い道が思い浮かばなかったのですが、全体攻撃とか特殊なダメージ計算とかを簡単に適用させられるので、工夫次第でいろいろできそうな気がします。

以上で、ドラクエの鞭のように、全体攻撃の代わりにダメージが減衰していく武器を、プラグインなしで作ることができました。まあ、ダメージ計算式のあたりはプラグイン&スクリプトの知識を必要としますが、デフォルトの機能で作れば競合とかを意識しないで済むので楽ですね。

いい感じで反映されています。

コメント
お名前
コメント
※ 確認画面はありません。