開発日誌

テクニック

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

2020-11-21 00:07:58

昨日の記事「プラグインなしでムチ攻撃」の改良版です。

主にダメージ計算式の書き方を工夫して、昨日のものよりもずっとシンプルにしました。

具体的には以下の通り。記述量が最初の半分くらいになりました。

v[1] || (v[1] = 1);
d = (a.atk * 4 - b.def * 2) * v[1];
v[1] = v[1] * 0.67;
d;

例によって行を分割していますが、実際には1行で記述します。

変更点のキモとしては、1行目。

v[n]の記述だと、n番の変数が初期化されていない場合にエラーというか未定義値になるため、式の結果も未定義値となってダメージが0になってしまう問題があり、戦闘テスト時に不都合がありました。

そこで1行目で、v[1]が未定義値ならば、||(or)の後で1番の変数に初期値を代入するようにしています。これで、いちいち$gameVariables.valueを使わなくても、戦闘テストで正常に動作するようになりました。(今回は変数の値が仕組み上0にはならないため、このように書いています)

また、ダメージ計算式の中では、単純にv$gameVariables._dataに置き換えられるだけのようなので、わざわざ$gameVariables.setValueを用いなくとも、v[n] = xで変数に値を代入することができました。これはシンプル!

さらに、$gameVariables.setValueを用いないので、変数に整数しか入れられないという制約もありません。直接小数を扱えるので、わざわざ○○ / 100をする必要はなくなりました。

そして最後に、変数が未定義の場合に0扱いではなく任意の値を代入できるようになったので、初期値を1とすることが可能です。したがって、わざわざ100 - ○○とか複雑な計算式を書く必要がなくなり、ダメージ量が67%ずつ減衰していくのが直感的に分かりやすい記述になりました。

この場合、変数名は減衰率というよりダメージ率とでもなりますかね。

まとめるとこうなります。

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

次に、ムチ攻撃用のスキルを、1番の通常攻撃をコピーして作ります。

範囲は敵全体、使用効果に先ほどのダメージ率リセットのコモンイベントを指定、そしてダメージ計算式に以下を記述します。

v[1] || (v[1] = 1); d = (a.atk * 4 - b.def * 2) * v[1]; v[1] = v[1] * 0.67; d;

v[1]の部分は実際のダメージ率の変数番号を指定してください。

そして最後に武器の特徴で、「攻撃スキル」にムチ攻撃用のスキルを指定すればOKです。

以上で、ドラクエの鞭のように全体攻撃かつダメージが減衰していく武器をプラグインなしで、昨日よりもシンプルに実現できました。

動画は昨日のものと同じですが。

ダメージ計算式の部分には実質的にスクリプトを埋め込めるので、これ以上に複雑な処理もさせることができます。

また式の中でathis.subject()に、btargetに、それぞれ単純に置き換えられて展開されるので、ヘルプにあるようなa.atkとか以外にも、Game_Battlerが持っているプロパティーやメソッドなら何でも使えるようです。

例えば瀕死の状態だと通常の10倍のダメージを与えられるスキルであれば、

(a.atk * 4 - b.def * 2) * (a.isDying() ? 10 : 1)

とすればOKです。

最後にダメージ量または回復量を評価する必要があるとか、戦闘テスト時は変数が未定義状態だとか、いくつかクセはありますが、それさえ気を付ければ、ループ処理やウィンドウ操作なども含んだかなり複雑な処理を組み込むことが可能です。もっともあまり複雑すぎると、プラグインでやった方がいいじゃん、という話にもなりますが……。

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