ダメージ
ダメージとは、敵に攻撃をしたときに減らすことができるHPの量である。
概要
コンピュータゲームとしてのRPGでは、それぞれのキャラクターにHPが設定されており、戦闘に入ると、相手のHPを全て0にすることを目標にして戦闘が行われる。このとき、当たれば一撃で相手を倒す技以外の手段を使うなら、ダメージによって相手のHPを減らすだろう。ダメージは、基本的には自分の攻撃力と相手の防御力、他には特技の倍率や相手の属性耐性などを使って、それぞれのゲームに仕込まれているダメージ計算式によって計算される。このとき、あまりにも敵の攻撃力が高かったり、敵の防御力が高かったりすると、戦闘の難易度がとても上がるため、敵のステータス設定をするときは気をつけなければならないが、時には使用するダメージ計算式を吟味する必要があるかもしれない。
キャラを回復する処理は、HPを減らす攻撃としてのダメージ処理と同じ処理を用いて、マイナスのダメージとして処理されることが多い。[要出典]
ダメージ計算式は、攻撃力や防御力などのステータスをもとに計算されるが、これらの値が変化しないとダメージが変わらないということになる。攻撃するたびに全く同じダメージが出てつまらなくなることを回避するために、しばしば計算されるダメージを乱数によってばらつかせる処理が組み込まれる。ただし、乱数によるばらつきを採用しない作品もある。主にアクションゲーム、シューティングゲームに多いが、RPGでは原神などで乱数によるばらつきを採用していない[1]。
計算式
RPGを自作しようとする人にとって、最も高い壁のうちの一つがダメージ計算式である。与えるダメージを計算するための計算式にはいくつか種類がある。
アルテリオス計算式(加減式)
恐らく最も有名な計算式であるだろう[要出典] 。
ダメージ = 攻撃力 - 防御力
攻撃力が上がればダメージが上がり、防御力が上がるとダメージが下がることを素直に表した、至極簡単な式である。
この計算式を採用する際に注意すべき点は、防御力が少し上がるだけで、ダメージの変化する割合が大きくなることがある点である。例えば、この計算式の下で、攻撃力50、防御力40の場合は、ダメージが30になる。防御力を2倍にすると、攻撃力50、防御力40になり、ダメージが10と、ダメージが3分の1になってしまう。また、これに派生して、攻撃を受ける側の防御力が高すぎると、ほとんどダメージが通らなくなるどころかダメージが無効化されることがある。[2]その場合は、例外的にダメージを0か1にする処理を入れる作品や、敵モンスターがプレイヤーキャラにダメージを与えられないときにのみ敵モンスターの攻撃力/8のダメージになるなどの処理を入れる作品がある。
よって、敵の防御力を設定するときに、プレイヤーキャラの攻撃力に気をつけてHPと防御力を設定する必要がある。
また、これに似た計算式を採用しているドラゴンクエストでは、攻撃力は2分の1に、防御力は4分の1にして計算される。
乗除算式計算式
有名なところで言うとポケモンで採用されている計算式である。
ダメージ = 攻撃力 / 防御力
ダメージを攻撃力と防御力の割合で計算するので、極端にステータスが大きくなっても、登場するキャラクターごとに得意不得意があるにしても、ほとんど一定のダメージが発生する。HPの値を成長させつつ戦闘バランスを保ちたいなら、この式にレベルの値を乗算するとよいかもしれない。
実際に、ポケモンにおけるダメージ計算式は、
ダメージ = (((レベル × 2/5 + 2) × 威力 × A/D) / 50 + 2) × M[3] A:攻撃するポケモンの「攻撃力」。物理技ならこうげき、特殊技ならとくこう D:防御側のポケモンの「防御力」。物理技ならぼうぎょ、特殊技ならとくぼう M:様々なダメージ補正(乱数によるダメージのブレや、タイプ相性、天候による威力の変化など) ※各括弧内の計算を終えるごとに小数点以下を切り捨てる。
となっている。
定数式計算式
プレイヤーへの分かりやすさ重視で、「攻撃力 - 防御力」よりも単純な計算式を採用する作品もある。
ダメージ = 攻撃力
主にカードゲーム(TCG)や防衛ゲーム、アクションゲーム、シューティングゲームで採用される。
防御力を参照せず、耐久力はそのままHPの値とすることで、RPGにおけるキャラクターが成長する喜びよりも、キャラクターがどう攻撃するか(敵の攻撃を回避して敵に攻撃するタイミングを計るなど)といった戦略に重きを置くことができる。
もちろん、特定の条件で敵が受けるダメージが減るという仕様を入れてもよい。例えば、東方Projectでは、敵がスペルカードアタックを発動してから1秒の間に自機のボムを打つと、敵に与えるダメージが30分の1になるという仕様がある。
アクションエディターでは、主人公を含めて全てのキャラクターに防御力を設定することができる。防御力を設定した場合は、アルテリオス計算式で計算されるが、アクションゲームを制作する上で、防御力を設定しないことがほとんどであるため、大抵の場合ダメージ計算式は定数式計算式とみなすことができる。
ウディタの計算式
ウディタでは、標準の機能を使うと、基本的に全て同じ計算式でダメージが計算される。クリティカルが発生するかどうかで式が少し変わる。基本的に上述したアルテリオス計算式と同じである。※現在計算式を精査しています。間違いが少なくとも1箇所発覚しました。
通常ダメージ = { 基本効果量 + 攻撃項 + 精神項 } * { (100-ダメージ分散率[%]) ~ (100+ダメージ分散率[%]) } / 100 * ( 100 + 耐性効果[%] + 弱点効果[%] )[4][5] 攻撃項 = (技能別攻撃力影響度[%]*自分攻撃力/100*通常ダメージ倍率(UDBシステム設定31)[%]/100) - (防御力*物理度合[%](下記参照)*技能別防御有効率[%]/10000*防御力影響度(UDBシステム設定32)) 精神項 = (技能別精神力影響度[%]*自分精神攻撃力/100*通常ダメージ倍率(UDBシステム設定31)[%]/100) - (精神防御力*精神度合[%](下記参照)*技能別防御有効率[%]/10000*防御力影響度(UDBシステム設定32)) 物理度合 = 技能別攻撃力影響度 / (技能別攻撃力影響度+技能別精神力影響度) 精神度合 = 技能別精神力影響度 / (技能別攻撃力影響度+技能別精神力影響度) 耐性効果と弱点効果について;属性として同時に付与できる3つの属性の受けるキャラの属性耐性計算結果を100から引いた値(1以上なら弱点、-1以下だと耐性有)それぞれについて、弱点効果の最大値、耐性効果の最小値を取って、100%に弱点効果[+%]と耐性効果[-%]を加算した値を上で求めたダメージに乗算して最終的なダメージが算出される。
クリティカル時ダメージ = { 基本効果量 + 攻撃項 + 精神項 } * { (100-ダメージ分散率[%]) ~ (100+ダメージ分散率[%]) } / 100 * ( 100 + 耐性効果[%] + 弱点効果[%] ) 攻撃項 = (技能別攻撃力影響度[%]*自分攻撃力/100*通常ダメージ倍率(UDBシステム設定31)[%]/100*クリ時ダメージ倍率(UDBシステム設定34)[%]/100) - (防御力*物理度合[%](下記参照)*技能別防御有効率[%]/10000*クリ時防御倍率(UDBシステム設定34)) 精神項 = (技能別精神力影響度[%]*自分精神攻撃力/100*通常ダメージ倍率(UDBシステム設定31)[%]/100*クリ時ダメージ倍率(UDBシステム設定34)[%]/100) - (精神防御力*精神度合[%](下記参照)*技能別防御有効率[%]/10000*クリ時防御倍率(UDBシステム設定34))
関連項目
脚注
- ↑ ただし、通常攻撃は1段目、2段目、…で全て異なるダメージ倍率が設定されており、一連の攻撃でずっと全く同じダメージが発生するわけではない。会心が発生するか以外の乱数要素が存在しない。
- ↑ 暇つぶしで極端に弱い雑魚敵と戦うときに受けるダメージを気にしなくてよいというメリットも無くはない。
- ↑ ダメージ. (2022年10月10日07:34). ポケモンWiki, . 2022年11月25日16:54 https://wiki.xn--rckteqa2e.com/w/index.php?title=%E3%83%80%E3%83%A1%E3%83%BC%E3%82%B8&oldid=582400 にて閲覧.
- ↑ 切り捨て処理がどこで発生するかは未調査。
- ↑ [%]と付いている箇所は、%の単位を無視したそのままの値を適用し、計算式の中で百分率に直す。