属性(タイプ)とステートのダメージ計算について

しおみ
記事: 12
登録日時: 2018年7月26日(木) 04:50
お住まい: 東京都

属性(タイプ)とステートのダメージ計算について

投稿記事by しおみ » 2022年1月06日(木) 21:29

ダメージの計算方法について質問です。
現在制作している箇所から、暫く先のことまで考慮して、
「例えば」で恐縮ですが、以下の全ての場合に通じる計算式を教えて頂きたいです。
計算式以外にもパラメータなど調整する必要があれば教えて頂きたいです。


プレイヤー想定スキル(例)
A.通常攻撃(物理ダメージ)
B.炎属性付与(対象に自分の魔法力の10%[実数・切り捨て]の炎属性を加算させる)
 →ステート「炎の力(仮称)」を設定するとよい?
C.火炎斬り(物理+炎属性ダメージ[使用者の魔法力の10%])
D.ファイアボール(魔法力分の炎属性ダメージ)

想定パーティー(例)
a.剣士(技構成・A,C)ATK…100、魔法力…100とします
b.魔法使い(技構成・B,D)魔法力…200とします。

想定敵(属性耐性は考慮しない)
①通常の敵
②物理攻撃完全無効化の敵
③炎属性完全無効化の敵


想定パターン
①に対して
・Aで100ダメージ、Cだと110ダメージ、Dだと200ダメージ
 Bを付与した場合、Aで120、Cで130、Dで220
②に対して
・Aは0ダメージ、Bは物理分を除いた10ダメージ、Dだと200ダメージ
 Bを付与した場合、Aだと物理分を除いた20ダメージ、Bは30ダメージ、Dだと220ダメージ
③に対して
・Aは100ダメージ、Bは炎属性分を除いた100ダメージ、Dだと0ダメージ
 Bを付与した場合でも、同上のダメージ量


というような場合、それぞれにどのような設定を行えばよいでしょうか。
想定している変更先は、
Ⅰ…スキル設定(Bにステート付加)
Ⅱ…敵キャラ設定(②で物理有効度0%など?)
Ⅲ…ステート設定(特徴のあたり、どのように設定すればよい?)
Ⅳ…その他(第三者からの魔法力を参照するにはプラグインが必要?)



現在、序盤のスライム(強敵)戦で、
物理攻撃を無効化してくる相手に、仲間からの魔法の力を得て属性ダメージで倒そうというシチュエーション(Dは未収得)で、取り急ぎ敵キャラの「物理有効度0%」にさえすれば、何だかんだ計算上倒せはするのですが、そもそも物理で倒せないというだけで、属性ダメージはどのように計算されているのかわかっていません。現時点でステート「炎の力」はデフォルトのままです。

ご教授お願いします。

しおみ
記事: 12
登録日時: 2018年7月26日(木) 04:50
お住まい: 東京都

Re: 属性(タイプ)とステートのダメージ計算について

投稿記事by しおみ » 2022年1月07日(金) 21:24

念のため補足ですが、要約すると、
通常攻撃を含む物理攻撃を行う際、
(物理攻撃*物理有効度-敵防御)+(炎攻撃*炎有効度+氷攻撃*氷有効度+…+闇攻撃*闇有効度)-敵魔法防御
という計算を行いたいです。
アバター
アーヴェル
記事: 48
登録日時: 2019年5月18日(土) 12:02

Re: 属性(タイプ)とステートのダメージ計算について

投稿記事by アーヴェル » 2022年1月08日(土) 00:32

こんばんわー。


ツクールの属性は、計算式で出た結果に属性有効度を掛けるものです。
属性が通常攻撃である場合は、特徴で有する攻撃属性のうち、
最も有効な属性が選択されダメージが出力されます。

例として、炎・氷の攻撃属性を持つ武器で属性が通常攻撃のスキルで、

A・炎有効度70%・氷有効度70%
B・炎有効度120%・氷有効度0%

の敵にそれぞれ攻撃した場合、Aの敵には計算式の70%の威力。
Bの敵には計算式の120%の威力が出ることになります。

複数属性のスキルを作りたい場合はこの辺は割と厄介なところですね。
(何かしらのプラグインをお借りする手もあるかと思います)


さて、デフォルト挙動についての解説はこんなところで、
しおみさんの目的を達成する為にはかなり複雑な計算式を組む必要があるかと思います。

そもそもとして、炎攻撃等に該当するパラメータが存在しないため、
パラメータ自体を増設するか、或いは既存のパラメータから特定の計算式をつくって値を割り出し、
それを炎攻撃として扱う。……のような手段になります。今回は後者です。

炎攻撃などは魔力と魔防基準で計算し、威力係数を乗算しています。

例としては魔法力の10%というように挙げられておりましたが、
味方の攻撃力が100程度と想定されるエリアで、
攻撃10や魔力10で計算したところで、追加ダメージが0になってしまうと思われるので、
一律魔法力で計算し、最後に乗算で加算するダメージを減らしています。

炎の力(追加炎補正10%)のついた攻撃100・魔力100のキャラクターなら、
物理100の威力 + 魔力100の威力×追加炎補正×敵の炎有効度
と言った感じですね。


とりあえずは、ダメージ計算式に自作の関数を使えることを知るというのが大事かなと。

叩き台としてデフォルト準拠のプラグインを作成しました。
https://drive.google.com/file/d/1AQi-rl ... sp=sharing

『以下の全ての場合に通じる計算式を教えて頂きたい』
に対する、答えの一例として参考になればと思います。
中身に注釈を多くつけましたので、
どういった計算式であればこのような形になるかは、わかって頂けるかなぁと。


以下記述例です。

A.通常攻撃(物理ダメージ)
Game_BattlerBase.AvDDf(a,b,1)
aとbは主体と対象の情報です。必須。
主体属性をID1(物理)に。威力係数等は省略しています。

B.炎属性付与(対象に自分の魔法力の10%[実数・切り捨て]の炎属性を加算させる)
ステートに対応する○加算の属性有効度に110%をつける事で可能です。
プラグインパラメータと、それに対応する属性を正しく設定して下さい。

完全にデフォルトでプラグインパラメータがそのままならば、
1番が物理。
2番が炎で9番が闇。
10番から炎加算が始まり、17番が闇加算に対応する属性となります。
この例であれば、ID10番の属性有効度を110%にすれば、炎10%付与のステートになります。

C.火炎斬り(物理+炎属性ダメージ[使用者の魔法力の10%])
Game_BattlerBase.AvDDf(a,b,1,100,2,10)
通常攻撃では威力係数を省略して記述しましたが、100%で計算されています。
その100に加えて、ID2(炎)の属性を10%持つ記述です。

D.ファイアボール(魔法力分の炎属性ダメージ)
Game_BattlerBase.AvDDf(a,b,2)
主体属性を先頭属性ID以上のIDで指定した場合、勝手にmatとmdfを使います。
純粋な炎属性の物理攻撃とかが作れなくなりますが、今回の例にはそういうのはなかったので。


いずれもそれぞれ計算しているので、物理有効度0の敵ならAは0です。
CならBのついた通常攻撃と同じダメージが。Bが付与されたCならば、更にダメージが出ます。


ともあれ複雑な計算式を考える以上プラグイン化するのも自然な事で、
かつ自分が使うわけではないので、しおみさんの希望に沿うつもりで作成を進め、
プラグインの配布という形にはなりましたが、
専用プラグインを作成して提供する意図ではありませんのであしからず。
自身の理想やプロジェクトに合わせて改変なり参考になりして頂ければと思います。

デフォルト準拠のプラグインなので、
プラグインパラメータはご自身のプロジェクトに合わせて変更をしてください。
デフォ準拠かつ最低限の機能で作成したので、

斬撃

刺突


のように、物理系属性が飛び飛びで配置されていたり、




物理

のように、デフォルトと真逆の配置の場合は正しく機能しません。ご了承下さい。


物理の場合(剣技等を想定)は追加補正を全属性分計算し、最終ダメージに加算します。
属性の場合(炎の魔法等を想定)は、主体属性と合致する追加補正を最終ダメージに加算します。

どちらも追加補正はmatとmdf基準で計算し、対象の属性有効度や防御力もそれぞれ考慮されます。
物理有効度0%の敵に、主体属性が物理の技で攻撃した場合、
炎の追加補正を持ち、かつ炎が有効な敵であれば、炎分だけのダメージが通るような感じです。

設定方法としては、プラグインパラメータを正しく設定した後は、
炎補正に該当するステートを100%以上の有効度にするだけです。
計算上で、補正率 - 100% という形で計算し、0以上の場合のみ加算という式になっている為、

例の魔法力の10%分、炎攻撃を追加したい場合などは、
炎補正の属性有効度を110%にすれば、
主体属性が物理の場合と炎の場合に威力が加算される仕組みになっています。

これをステートでつけたり、武器につけたりするだけですね。


計算式に各種属性の威力加算が含まれているが、属性自体はなしのスキルという扱いなので、
属性に合わせて何かをする。というようなプラグイン等とは相性が悪いですが、
概ね一つの計算式でどうにかする以上は仕方ないのかなぁと。

============================================================================*/
* @help
* ダメージ計算式に Game_BattlerBase.AvDDf(a,b,1,100)のように記載し、
* 属性をなしにしてください。ツクール基準の属性補正を避ける為です。
*
* 上記の例で Game_BattlerBase.AvDDf(a,b,1,100) の 1は、主体属性を指定しています。
* デフォルトでは物理は1。炎は2となっています。
* 100はスキルの威力係数となります。100を基準値としています。
*
* 例としてデフォルトデータベースで Game_BattlerBase.AvDDf(a,b,2,350)
* とした場合は、主体属性炎で、威力は350%という感じです。
*
* 記述の省略も可能ですが、
* Game_BattlerBase.AvDDf(a,b,1,100,2,50)
* とした場合は、主体属性以外に炎を持ち、その威力係数が50%という記述になります。
*
*
* デフォルトを参考にデータベースを組んでいれば、恐らく物理の下に任意の属性が入ると思います。
* その下に属性補正用の属性を設定して下さい。
* ゲーム中に使う物理以外の属性が炎・氷・雷の3つであれば下記の様に設定します。
* 物理
* 炎
* 氷
* 雷
* 炎補正
* 氷補正
* 雷補正
*
* 主体属性を決めれば、ダメージ計算式で補正を勝手に拾うようにしてありますので、
* プラグインパラメータプロジェクトに合うように設定出来れば、
* 後はステートで炎補正等の有効度を決めるだけです。
* -----------------------------------------------------------------------------
しおみ
記事: 12
登録日時: 2018年7月26日(木) 04:50
お住まい: 東京都

Re: 属性(タイプ)とステートのダメージ計算について

投稿記事by しおみ » 2022年1月09日(日) 00:14

ありがとうございます。
取り敢えず思っていることはできそうなので色々と参考にさせて頂きます。
しおみ
記事: 12
登録日時: 2018年7月26日(木) 04:50
お住まい: 東京都

Re: 属性(タイプ)とステートのダメージ計算について

投稿記事by しおみ » 2022年1月10日(月) 09:33

取り急ぎ、試したいことを全部試してみました。
思っていた理想の形のプラグインでした。

係数等調整し、パラメータも操作したところ、
現時点で想定していたことは全てクリアしました。

他に使用しているプラグインとの競合もなさそうです。
戦闘に関するプラグイン(属性関係)については、今後増えるようであっても、
今回増設した「(属性)加算」を上手く利用して扱いたいと思います。

ありがとうございました。

“MZ:質問” へ戻る