ゲーム(RPG)作る人の永遠のテーマ、ダメージ計算式。
今後のためにいろいろまとめてみようと思う。
それぞれの式ごとに、メリットやデメリットを挙げているが、デメリットを上手くメリットに転化しているゲームもあることを確認しておく。
なお、計算法の名前は断りが無ければあくまで私が勝手に付けたものである。

用語の定義

話を簡単にする為に、用語を定義しておく。
用語概要
攻撃力(断りが無ければ)攻撃を仕掛けた側の攻撃力(あるいはそれに相当するもの:以下「など」と表記する)の値。
防御力(断りが無ければ)攻撃を受ける側の防御力など。
定数何らかの値。計算式によっては、攻撃力*4-防御力*2のような計算をするが、このときの2や4を一般化して定数としている。
基礎ダメージ攻撃力と防御力によって計算されたダメージの基準。下記の補正を考慮しない場合のダメージ。
補正乱数補正、属性相性、技の威力係数など、基礎ダメージにかけられるもろもろの値。

減算式

一般にはアルテリオス式、ドラクエ式などと呼ばれる。
( 攻撃力*定数1 - 防御力*定数2 )*補正
もしくは
攻撃力*定数1*補正 - 防御力*定数2
攻撃力から防御力を引き去るシンプルなもの。

メリット

  • 兎にも角にも実装がラク。
  • 攻撃力から防御力を引けばダメージが大体分かるので、見当がつきやすい。
  • (属性などの補正を除いた)ダメージ基礎値の最大値は攻撃力のみに依って決まるため、相手の防御力が低くても極端なダメージが発生することが避けられる。(インフレしにくい)
  • 防御無視の計算も行える。

メリットともデメリットとも

  • 攻撃力に直接、属性補正などをかけると、(特に防御と攻撃が近い場合は) ダメージの値が一気に何倍にもなることがある。

デメリット

  • 防御側のダメージ要素(防御力*定数)>攻撃側の要素(攻撃力*定数など)においては、ダメージが0になる。
(これの回避に最低保障ダメージや、確率で1や2ダメージに変える処理を行う場合がある。)
  • 複数味方キャラがいる場合、防御力が高くダメージを一桁に抑えるキャラと、防御力が低く一撃で致命傷を負うキャラが出てくるなど、キャラ間格差が出やすい。(役割分担が明確になるメリットにもなりうる。)
  • 攻撃側の要素と防御側の要素が同じスケールで成長すると、ダメージの深刻度(HPを何割減らしたか)はどんどん下がってゆく。

二乗除算式

攻撃力^2/防御力 * 補正
攻撃力の平方を防御力で割るもの。
なぜ攻撃力を2乗するか(長いので折りたたみ)

メリット

  • 防御力>攻撃力でもダメージが入り、防御力がかなり高くてもそれなりにダメージが入る。

デメリット

  • 防御力=0が扱えない。また、防御無視時(回復など)の処理は別に用意する必要がある。
  • ステータスの差によってかなりダメージが変わる。とくに、攻撃力>>防御力や、防御力が0に近い場合は、極端に膨大なダメージが生まれることも。(成長度の調整などで回避・軽減することはできる。)
  • 防御力がダメージに与える影響が小さくなる。具体的に、相手の防御力を下げることでダメージを2倍にするには、防御力を半分にする必要がある一方、こちらの攻撃力を上げるのであれば1.14(√2)倍で済む。そのため、バフ効果の設定が難しい。

レベル補正付き除算式

二乗除算式の亜種。攻撃力を2乗する代わりに、攻撃*Lvの値を使っている。
攻撃側のLv(など) * 攻撃力/防御力 * 補正
補正に攻撃側Lvを使った除算式。
ポケモンはこんな感じの計算式らしい。(実際はLvに定数を加えたりしている)

メリット

(基本的には二乗除算式に同じだが、それに加えて以下の通り)
  • 攻撃力の影響がマイルドになっていて、極端なダメージ値が比較的出にくくなる。
  • Lvを定数とみなせば攻撃力とダメージが比例するので、戦闘中の攻撃力の変化によって、ダメージがどれくらい変わるか簡単に分かる。

デメリット

(基本的には二乗除算式に同じだが、それに加えて以下の通り)
  • 環境次第ではLvを取得するのに手間がかかることも。
  • 低レベルの場合は(Lvに大きめの定数を加えないと)レベルが1違うだけでもダメージがかなり変わってしまう。

加算除算複合式

中の人が作った式、とはいっても比較的シンプルなので既にどこかで実装されていると思う。
攻撃力^2/(攻撃力+防御力) * 補正
二乗減算式に近いが、分母に攻撃力を加算している。(これにより、防御力=0でも計算可、またこのとき基礎ダメージが攻撃力の値になるなど、便利な性質を得られる。)

メリット(手前味噌だけど)

  • 二乗除算式と同様、防御力>攻撃力でも、ダメージが発生する。
  • 加算式と同様、防御力=0を使える、また、このときは攻撃力(に補正を書けた値)がそのままダメージとなる。つまり、最大ダメージは攻撃力によってのみ決定し、インフレしにくい。

デメリット

  • 癖がない分、ダメージ計算式の特性を上手く使った戦い方を楽しむのは難しい。
  • 攻撃力の増減によるダメージの変化具合が分かりにくい。
  • 環境次第では実装は少し大変。
  • 攻撃力が0でかつ、防御力が0だとゼロ除算が起こる。このときは攻撃力が0なのでダメージは0にしてしまえばよいが、場合によってはそのための処理が必要。
  • 除算式同様、攻撃力と防御力がそれぞれ与えるダメージへの影響が大きく異なる

このページへのコメント

加算除算複合式は遠回しな書き方してるけど
実質「攻撃-防御/2」
通常の減算とは違うメリットは防御が攻撃の1.5倍以上になると引かれる割合が段々減っていくという便利な関数

癖が無いというが、二乗除算するタイプの応用型はどれでも
数値に定数を足し引きしたり、補正の付け方を変えることで好きに癖をつけられる

3
Posted by 名無し(ID:BqpIJ2mNog) 2018年09月13日(木) 22:43:08 返信

二乗除算式のデメリットのとこ、√2≒1.414

1
Posted by 名無し(ID:evFCGQPuLA) 2018年05月27日(日) 17:35:17 返信

初期の不思議のダンジョンシリーズの計算式は、
攻撃力*((特定の分数)^防御力)だそうです。
これのメリットとデメリットってなんなのでしょうか?

0
Posted by keito940 2017年10月30日(月) 19:28:28 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます