スキルの計算式を共通化しよう【RPGツクールMV】

2020年06月21日

 JavaScript初心者向けに、スキル(およびアイテム)の計算式を共通化する手順を紹介します。


 共通化すれば、制作途中で計算式を変えたくなった場合も一箇所を変更するだけで済みます。特に「クリティカル時は防御力を無視する」など複雑な式を作りたい場合は便利です。

 具体的には計算式をJavaScriptのグローバル関数として定義し、どこからでも参照できるようにします。
 ……といっても意味が分からないと思うので、サンプルを用意しました。

 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールMVのプラグイン管理から機能をONにしてください。その際、ファイル名は好きなように変えていただいて構いません。

 SkillFormula.js

 でもって、ファイルをエディタで開きます。
 ※本格的にJavaScriptを触るつもりならVisual Studio Codeなど専用エディタの導入を推奨します。ちょっと触るだけなら通常のテキストエディタで十分です。

 中身は以下のようになっています。

/**
* ●物理攻撃計算式
* a:行動主体、b:対象
*/
function $atk(a, b) {
// 変数を移し替え
var atk = a.atk;
var def = b.def;

// クリティカル時
if (b.result().critical) {
def = 0; // 防御を0として計算
}


var damage = atk * 4 - def * 2;
return damage;
}

/**
* ●魔法攻撃計算式
* a:行動主体、b:対象
*/
function $mat(a, b) {
// 変数を移し替え
var mat = a.mat;
var mdf = b.mdf;

// クリティカル時
if (b.result().critical) {
mdf = 0; // 魔法防御を0として計算
}


var damage = mat * 2 - mdf * 2;
return damage;
}


 見ての通り、物理攻撃と魔法攻撃の二種類の計算式を定義しています。
 内容は標準の計算式に「クリティカル時の防御力(魔法防御)を0にする式」を追加(赤字部分)しただけです。

 これを好きなように変えてください。特にややこしいことはしていないので、スキルの計算式を普段から触っている方なら大丈夫かと思います。
 クリティカル時の処理が不要なら該当部分を削除してください。

 $atk, $matというのが関数名なので、後はこれをスキルの計算式欄に設定するだけです。関数名は好きなように変えられます。$も別にいらないです。
 例えば、「100 + ダメージ2倍の物理攻撃」なら以下のように設定します。

100 + $atk(a, b) * 2


 なお、このままだとクリティカル時のダメージ3倍は残ったままです。必要なら以下のプラグインなどで変更してください。

 基本システムの倍率を変更できるプラグイン(むーてぃ様)

 関数はいくらでも追加できますので、後はご自由にどうぞ。レベルや運などももちろん使えます。
 参考までに、MVでスキル計算式にカーソルを合わせた場合のヘルプを貼っておきます。



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

ダメージ処理の演出を変更【RPGツクールMVプラグイン】

2020年06月13日

 ダメージ処理の演出を変更します。


 できること。

  • 敵味方の点滅演出の有効・無効化。
    通常は点滅しないアクターも点滅させられます。
  • クリティカルや弱点を突いた際の演出を変更。
    ※実際にはアニメーションを使って演出します。
  • ダメージポップアップの表示位置を調整。

目次


導入方法(install)

更新履歴(history)

プラグインパラメータ(点滅演出)

敵を点滅(enemyBlink)

アクターを点滅(actorBlink)

点滅時間(blinkDuration)


プラグインパラメータ(クリティカル演出)

クリティカル時のアニメ(criticalAnimation)

クリティカル時の点滅オフ(criticalBlinkOff)


プラグインパラメータ(弱点演出)

弱点時のアニメ(weakAnimation)

弱点時の点滅オフ(weakBlinkOff)

弱点演出を行う条件(weakCondition)


プラグインパラメータ(クリティカル/弱点共通)

クリティカル弱点優先度(effectPriority)


プラグインパラメータ(ダメージ表示位置)

敵のダメージX調整(enemyDamageOffsetX)

敵のダメージY調整(enemyDamageOffsetY)

アクターのダメージX調整(actorDamageOffsetX)

アクターのダメージY調整(actorDamageOffsetY)


導入方法(install)


 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールMVのプラグイン管理から機能をONにしてください。

 NRP_DamageEffect.js ver1.00(2020/06/13)

 ※DynamicAnimationと併用する場合は、あちらをver1.11〜に更新してください。さもないと、アニメーションによる演出が適切なタイミングで表示されません。

更新履歴(history)


2020/06/13(ver1.00)

  • 公開開始!



 ダメージ時に敵を点滅させます。
 初期値はtrueです。

 falseにすると点滅しなくなります。FF派の人はどうぞ。


 ダメージ時にアクターを点滅させます。
 初期値はfalseです。

 trueにすると、通常は点滅しないアクターが点滅するようになります。

点滅時間(blinkDuration)

 点滅時間です。初期値は20です。

プラグインパラメータ(クリティカル演出)


クリティカル時のアニメ(criticalAnimation)

 クリティカル時、対象に再生するアニメーションです。


 基本的には、フラッシュや効果音によって演出を行う想定です。この際、通常のダメージ音は再生されなくなります。
 
 プラグイン画面ではアニメーションを選択する仕様になっていますが、テキストタブから数式も入力可能です。
 例えば、以下の式は「対象が敵ならアニメーション1、アクターなら2を再生」するものです。
target.isEnemy() ? 1 : 2


クリティカル時の点滅オフ(criticalBlinkOff)

 クリティカル時、対象を点滅させません。
 アニメーションのみに演出を任せたい場合にどうぞ。

 エディタ上の『対象消去』と組み合わせれば、独自の点滅動作を実装することも可能です。

プラグインパラメータ(弱点演出)


弱点時のアニメ(weakAnimation)

 弱点を突いた際、対象に再生するアニメーションです。
 仕様はクリティカル時と同様です。

弱点時の点滅オフ(weakBlinkOff)

 弱点を突いた際、対象を点滅させません。
 仕様はクリティカル時と同様です。

弱点演出を行う条件(weakCondition)

 弱点を突いたと見なし、演出を行う条件です。
 初期値は有効度150%以上が条件です。

 以下の数式が入っているので、条件を変更したい場合は150の部分を好きな値に変更してください。
150 <= action.calcElementRate(target) * 100


プラグインパラメータ(クリティカル/弱点共通)


クリティカル弱点優先度(effectPriority)

 クリティカル/弱点演出の優先度です。
 同時に発生した場合に、どちらの演出を優先するか決めてください。

 初期値はクリティカル優先です。
 両方再生することも可能です。

プラグインパラメータ(ダメージ表示位置)


 敵/アクターのダメージポップアップの位置をそれぞれ調整します。

 一応、数式も有効です。
 例えば、『敵のダメージY調整』に以下を設定すると敵の縦中央にダメージが表示されます。16は数値自身の幅を調整するためのものです。
-this.height/2 + 16


敵のダメージX調整(enemyDamageOffsetX)

 初期値は0です。

敵のダメージY調整(enemyDamageOffsetY)

 初期値は-8です。

アクターのダメージX調整(actorDamageOffsetX)

 初期値は-32です。
 なぜか、アクターのダメージが左寄りに表示されるのはこの値のためです。
 気になる方は、0にすると中央になるのでオススメ。

アクターのダメージY調整(actorDamageOffsetY)

 初期値は0です。

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

DynamicAnimation(戦闘アニメを自動化&超強化)【RPGツクールMVプラグイン】

 戦闘アニメを自動化&超強化するプラグインです。

 スキル(アイテム)から自在に戦闘アニメーションを呼び出せます。異なるIDのアニメーションを同時表示させたり、移動させたりすることが可能です。
 非常に自由度の高い仕様になっていますが、テンプレートを呼び出せばメモ欄に一行記述(例:<D-Animation:shot/>)するだけでも動作します。

 さらにDynamicMotionと連携すれば、バトラーの動作も自在に設定できます。

 以下は紹介動画です。
※画面が小さい場合は右下の全画面表示をクリックしてください。

目次


導入方法

更新履歴

使用方法


テンプレートの解説


その他情報


競合について


処理負荷について

今後の課題


導入方法


 以下のファイルをダウンロードし 、[プロジェクト]\js\plugins に放り込みます。ツクールMVのプラグイン管理から機能をONにしてください。

 NRP_DynamicAnimation.js ver1.11(2020/06/13)

 アニメーション軽量化プラグイン(解説)も作りましたので、よければどうぞ。
 NRP_LightAnimation.js ver2.01(2020/04/11)

更新履歴


2020/06/13(ver1.11)

  • バラマキ調整機能を強化。
    設定した数値によって、ランダム座標のアニメをそれっぽくバラつかせます。
  • 外部プラグインからアニメを割り込ませた場合、再生が遅れる問題に対応。

2020/06/07(ver1.10 -> 1.101)

  • プラグインコマンドに対応。
    例:『plugin = hoge 100 200』という感じで呼び出せます。
  • ランダム座標のアニメで残像が正しく表示されない不具合修正。(ver1.101)

2020/05/18(ver1.09 -> 1.096)

  • コモンイベント&スクリプト機能を追加。
  • 参照先バトラー(a, b)の変更機能を追加。
  • それに伴い『水平(horizontal)』『貫通(pierce)』『魔法発動(spell)』型のテンプレートを修正。
    ※互換性があるため反映しなくとも動作上の差は出ません。(ver1.092で調整)
  • また『貫通(pierce)』型テンプレートで複数対象の際に複数アニメーションが表示される不具合を修正。
  • ダメージ機能を追加。
    アニメーションの終了に合わせてダメージ処理を実施してくれます。
  • それに伴い『ダメージ(damage)』型テンプレートを追加。
    参考にサンプルも修正しています。
  • 指定が<D-Motion>のみの場合、フリーズする不具合修正。
  • 開発中のダメージ一括表示プラグイン用に調整。(ver1.093)
  • ダメージ機能にフレーム指定を追加。(ver1.094)
  • 『damage=false』を指定した際にもダメージ処理がされてしまう不具合修正。(ver1.095)
  • 不要なデバッグ用処理を削除。(ver1.096)
  • 参照先バトラーの互換機能でindexが取得できない不具合修正。(ver1.096)

    ※テンプレートの追加・修正はプラグインを再登録しないと反映されません。
    ただし、再登録すると全ての設定変更が初期化されてしまいます。
    それを避けたい場合、テンプレート定義一覧からのコピペをオススメします。


2020/05/09(ver1.08)

  • 大量アニメーションの動作を大幅軽量化。
  • 継続(keep)型テンプレートの定義修正。
    delay値は最初のアニメーションの終点に合わせるようにした。

2020/05/06(ver1.07)


2020/04/20(ver1.06 -> 1.062)

  • 効果音を先読みして遅延を減らすようにした。
  • 画面(screen)型をテンプレートに追加。(詳細
  • 戦闘不能対象に空振りでエラーとなる不具合修正。(04/24 ver1.061)
  • animationBaseDelayが0だと再生されない不具合修正。(04/26 ver1.062)

2020/04/10(ver1.05)

  • タグ名のユーザ設定機能を追加。
    <D-Animation:shot/>→<da:shot/>みたいに書けます。
  • アニメーション軽量化プラグインに『対象のフラッシュ』の軽量化を実装。
    →4/11 アクターにフラッシュがかからない不具合があったため修正しました!
  • 色調(color)のパラメータを実装。
  • 『水平(horizontal)』『水平射撃(shotHorizontal)』『垂直(vertical)』テンプレートのアニメ表示位置の誤りを修正。
  • 回転(roll)型のテンプレートを追加。(詳細

2020/03/28(ver1.04 -> 1.041)

  • 進路を向く(lookCourse)型テンプレートの追加。(使用例
  • ↑に伴い貫通(pierce)型テンプレートの角度変更を削除。
  • 『通常攻撃』のアニメーションが表示されない不具合修正。(ver1.041)

2020/03/16(ver1.03)

  • 開発中のモーションプラグインとの連携機能をさらに追加。
  • delay=auto時に前回のウェイトを無視する不具合修正。
  • 対象ごとの時間差(delay)の値をアニメーションフレーム単位に修正。
  • ウェイト(wait)型、ディレイ(delay)型のテンプレートを追加。
  • shot, shotRandom, arc, arcRandom, horizontal, shotHorizontal, vertical, pierce, spell, followの各テンプレートについて、アニメーションに設定された『位置』を参照するように修正。
  • follow型の定義再修正
  • 自分(self)型のテンプレートを追加。(ver1.031)
    追加のテンプレートの解説はこちらをご覧ください。
  • noMirror属性が機能しない不具合修正。(ver1.032)

2020/02/29(ver1.02)

  • 『Y座標の反転後調整』『dx』『dy』のパラメータが機能しない不具合修正。
  • アニメーション同士をつなぐタイミングを微調整。
  • ウェイトが過剰にかかる不具合を修正。
  • テンプレートの&融合機能を実装。(詳細
  • 開発中のモーションプラグインとの連携処理を実装。
  • 追従(follow)型をテンプレートに追加。(詳細

2020/02/23(ver1.01)

  • ツクールMV1.5.Xでも動作するよう対応。

2020/02/20(ver1.00)

  • 公開!
  • 一部の数式でエラーとなる不具合修正。(ver1.001 02/22)

使用方法


 スキル(アイテム)のメモ欄からテンプレートを呼び出すことでアニメーションの動作が変化します。以下は射撃(shot)型のテンプレートを呼び出した例です。
<D-Animation:shot/>

 さらにテンプレートに対して、パラメータの追加・上書が可能です。
<D-Animation:shot>
repeat = 5 // 繰返し回数
</D-Animation>

 最低限の使用法は上記の通りですが、パラメータは非常に多くあります。
 まずは以下の『基本的な使用法』のページから見ると分かりやすいでしょう。
 その後、『テンプレートの解説』や『プラグインパラメータ一覧』を参照していくのがオススメです。


テンプレートの解説


射撃系テンプレート

└射撃(shot)└乱射(shotRandom)
└全乱射(shotRandomAll)└投射(arc)
└乱投射(arcRandom)└全乱投射(arcRandomAll)

ランダム系テンプレート

└ランダム(random)└全ランダム(randomAll)
└円ランダム(randomCircle)└雨(rain)

範囲系テンプレート

└水平(horizontal)└水平射撃(shotHorizontal)
└垂直(vertical)└貫通(pierce)

円系テンプレート

└円周(circle)└渦(vortex)
└発散渦(spreadVortex)└公転(revolve)
└移動渦(moveVortex)└発散移動渦(spreadMoveVortex)
└ブレス(breath)└FVブレス(fv_breath)
└収束(converge)└放射(radiate)

その他テンプレート

└ビーム(beem)└拡散ビーム(diffusionBeam)
└継続(keep)└ブーメラン(boomerang)
└魔法発動(spell)└追従(follow)
└自分(self)└進路を向く(lookCourse)
└ウェイト(wait)└ディレイ(delay)
└ダメージ(damage)

その他情報



競合について


YEP

 『YEP_CoreEngine.js』と共用する場合、NRP_DynamicAnimation.jsのほうを下に配置してください。同一の関数を上書きしているため、そうしないと動きません。

 また、『YEP_BattleEngineCore.js』と併用する場合は競合対策モード(詳細)を1に変更すると一応は動きます。
 YEP_BattleEngineCore v1.50でそれなりに安定していることを確認しています。MVの公式からDLできる古いバージョンだと、背景が消し飛んだりと挙動が怪しいです。

MOG

 『MOG_BattleHud.js』と共用する場合は、MOG側を下に配置してください。そうしないとアクターが対象のアニメーションが動作しません。
 
 ソースを触れる人なら『_alias_mog_bhud_sprt_actor_setupAnimation.call(this);』とある行を『Sprite_Battler.prototype.setupAnimation.call(this);』に修正してもOKです。これなら順番は影響しないはず……。

 非サイドビューの場合は同じくMOG_BattleHud側の『Sprite_Actor.prototype.setupAnimation』をまるまる消さないと動かないかも……。(未検証)

処理負荷について


 当プラグインでは大量のアニメーションを同時に呼び出せますが、必然的に動作も重くなります。
 特に注意が必要なのは『対象のフラッシュ』で、高い頻度で呼び出すとアニメーションそのものより遥かに負荷がかかります。

 以下、fuku様制作の『スプライト色変換効率化(fuku_OptSpriteTint.js)』プラグインで大幅に軽量化できるので超オススメです。
 http://www5f.biglobe.ne.jp/~fuku-labo/library/etc/
 ※『ツクールMV用プラグインの素』より一括DLできる中に含まれています。

今後の課題


  • 戦闘以外での使用(スキルIDから起動が現実的?)。

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