小谈伤害公式

概要

说在前面

顾名思义,伤害公式上就是攻击方和受攻击方相关战斗参数计算伤害的公式。由于国内不少游戏十分注重所谓“节奏”的设计,所以伤害公式几乎贯穿了整个游戏成长线,小到战力计算,大到装备和技能设计对战斗节奏的影响,这些都离不开伤害公式。设计合理伤害公式的重要性也因此凸显。

伤害公式分类上通常分为加法和乘法两类(也有称减法和除法的,其实都是一类,就是加负数和负指数的区别)。

缩写

方便讨论起见,先给出后文会用到的通用缩写:

MAXHP-最大生命值

ATK-攻击 DEF-防御

PEN-穿透 EVA-闪避

RES-抵抗 CRI-会心

DPS-每秒输出伤害

DRR-免伤率

DMG-总伤害

EHP-有效生命值

战斗力

为方便后续讨论,对战斗力做预定义如下:

本文中的战斗力基于战斗模拟,均以结束战斗的时间来评定,即作为攻击方,彻底击败防御方(即防御方HP降为0)的情形:

设对战双方A,B,采用最简单的互相对A的模式:

A战胜B的时间T1=EHPB/DPSA

B战胜A的时间T2=EHPA/DPSB

若T1>T2,即EHPB/DPSA>EHPA/DPSB时,B胜出

进一步整理得到EHPB×DPSB>EHPA×DPSA时,B胜出

类似的有

EHPA×DPSA>EHPB×DPSB时,A胜出

EHPB×DPSB=EHPA×DPSA时,A,B打平

故使用EHP*DPS作为角色的战斗力评价标准。

加法公式

基本形式

DMG=ATK-DEF

适用场合

ATK,DEF成长空间有限,且按比例投放

简单粗暴、体验强烈、便于属性售卖

“一人撂倒一群”

快餐类游戏,鼓励pvp,可以保证用钱砸数值一定有效

对数值投放的要求更加严格,对于道具付费类游戏既要保证消费又要保证游戏数值总体平衡。

需要设计关卡卡点,容易设计出属性不达标就几乎无法通关的关卡配置

易控制

战斗力

不考虑防御情形下击败需要的攻击次数N1=MAXHP/ATK

考虑防御情形下击败需要的攻击次数N2=MAXHP/(ATK-DEF)

EHP=MAXHP+ATK×(N2-N1)=MAXHP/(1-DEF/ATK)

即加法公式下的EHP只与MAXHP与比值【DEF/ATK】有关。【DEF/ATK】越大,即防御方防御与攻击方防御的比值越大,防御方的有效生命值越高。

A战斗力=EHPA*DPSA=DPSA × MAXHP/(1-DEFA/ATKB)

加法公式下,攻击方战斗力的计算依赖对方ATK计算自身的EHP,即加法公式下的战斗力计算依赖于交战双方。一种常见的解决方式是计算战斗力时,设立一个数值靶子(即木桩),借此靶子完成玩家攻击侧的战斗力计算。

另一个值得注意的点是由于加法公式下战斗力依赖于参照物,部分数学规则不再适用。以等式、不等式传递性为例,加法公式下的战斗力可能出现A=B,B=C,C!=A的等式无法传递的情形。

这一点有好有坏,好处是通过精心设计有机会实现属性自由组合后的循环克制,为游戏带来更多乐趣;坏处是会给数值设计和维护带来一些困难。

常见问题

不破防问题

既然说到加法方式,就不得不提一下不破防的问题。不破防即防御方的防御大于攻击方的攻击。诚然,直接使用前文提到的形如DMG=ATK-DEF的基本形式,势必会有各种各样的问题,但事实上大多游戏中使用的类加法公式都在基础形式上进行了大量的改进,解决该问题的方式试罗列如下:

  • 引入最低伤害,例如不破防时定义一个常数最小伤害
  • 分段函数,例如根据ATK与DEF的不同取值范围采用不同类型的伤害公式

伤害超量问题

ATK远大于DEF时,有效DMG过大,可能出现一击秒杀的情形,不是所有游戏的玩家都能接受此类情况。可以通过构造一个反映ATK与DEF差值大小的函数作为修正因子,随着ATK与DEF差值的增大,该因子会限制整体有效输出的增长,大致形式参考:

DMG=(ATK-DEF)*F(ATK,DEF)

攻速暴击问题

加法公式下,低攻击高攻速的角色设计难度大,若直接采用基本形式,会出现攻速越快,被防御减免掉的攻击越多的情况,导致玩家会追求高攻低速的武器,抢先出手一击重伤或秒杀。类似的,暴击也会有同样的问题。相比乘法公式,由于其自身等比等价的特性,例如低攻击高攻速的职业,乘除法就比加减法容易做得多。

乘法公式

基本形式

DMG=ATK*(1-DRR)

其中DRR为免伤率(%),通常不直接进行投放,是通过若干基础属性计算得到的复合属性。

一种比较经典的形式是:

DRR=DEF/(K1×DEF+K2×LV^(K3)+K4)

常见的例子包括:

英雄联盟中K1=1, K2=100,K3=0,K4=0(或者理解成m=0,C=100)

魔兽世界中K1=1, K2=85,K3=1,K4=400

适用场合

属性成长较快,需要平衡数据以防止玩家后期属性均衡增长而引发战斗力爆炸的场合

希望凸显职业差异,提升配装自由性,体现多路径培养特色特色,在平衡性调整上拓展性更高,调整难度更低。

等级碾压时不会出现战斗局势绝对碾压,本公式下依旧有一定操作的的空间。

战斗力

不考虑免伤率情形下击败需要的攻击次数N1=MAXHP/ATK

考虑免伤率情形下击败需要的攻击次数N2=MAXHP/[ATK*(1-DRR)]

EHP=MAXHP+ATK×(N2-N1)=MAXHP/(1-DRR)

即乘法公式下的EHP只与自身的MAXHP与免伤率DRR有关。如果DPS仅与自身有关,则不需参照物。

常见问题

瓶颈问题

加法公式中,随着属性持续投放,游戏生命周期后期容易出现属性爆炸和溢出的情形,乘法公式为了解决这个问题,引入了两个措施:

  • 等级稀释

见基本形式中减伤率DRR的定义,随着人物角色等级的提升,提升1%免伤率需要的DEF会不断增长

  • 数学极限

见基本形式中减伤率DRR的定义,由于人物角色等级存在上限,当玩家达到满级时,DEF→∞时显然DRR→1/K1。当然更安全的做法是直接定义一个最大有效值,即使理论值超出该最大有效值生效的仍为最大有效值

解决加法公式数值爆炸问题的同时,也带来了新的问题,即游戏后期属性“贬值”,这会带来一些问题:

  • 属性售卖的游戏中用户不买账

  • 用户自愿卡级:部分数值设计不合理的游戏中,假设其60级为一个公式变体分段,则可能出现59级玩家游戏体验显著高于60-70级玩家的情形,导致玩家升级热情下降

维护难度高

加法公式下,新增一个投放100点攻击的系统,只需另外投放100点防御即可;

乘法公式下,新增一个投放100点攻击的系统,可能会引起整个数值系统的变动;

如何选择合适的伤害公式

首先需要确定游戏类型和需求,游戏模式,收费点,成长线,战斗模式等等。抛开战斗方式、战斗体验谈选择什么样的伤害公式就是耍流氓。

除此之外,还要考虑游戏自身的属性设计。例如守望先锋作为竞技类游戏为什么没有选择竞技类游戏常见的乘法公式而是

公式本身不能决定以下特征,而是靠公式的各类修正因子决定。

通常来讲:

游戏节奏:乘法节奏慢,加法节奏快

属性提升体感:加法体感明显,乘法体感平缓

成长线:加法成长线短,直接;乘法成长线长,有多种选择

战斗模式:加法简单;乘法复杂

拓展性:加法拓展性强;乘法拓展性复杂

Title:小谈伤害公式

Author:Fancydz

Publish:2018.02.26 15:02

Update:2018.03.02 15:03

Path:https://fancydz.github.io/2018/02/26/2018022601/

License: Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) This work is licensed under a Creative Commons Attribution 4.0 International License.