战斗力量化模型探讨
内容简介
战斗力量化是战斗数值设计中极为重要的一环,战斗数值中涉及平衡性的设定基本都会以战斗力为衡量标准。本文以角色战力=EHP*EDPS这一表达式为抽象模型,尝试量化单个角色的战斗能力,介绍了将各类属性和角色技能量化为战斗力的方法,并分析了该量化方法的准确性与普适性。
抽象模型的建立
EHP=EDPS*TIME——这是战斗数值的平衡性设计的关键等式,也是战斗能力量化的核心与起点。假想A、B两个角色,双方同时出手,同时死亡,则有如下表达式:
n EHP(A)/EDPS(B)=TIME=EHP(B)/EDPS(A)
由此,我们可以得到单个角色战斗能力的表达式:
n 角色战斗力=EHP*EDPS
对单个角色战斗能力的量化,便是将该角色各个维度的属性与能力,转化为EHP与EDPS的过程。
值得澄清的是,对战斗能力进行量化,其目的主要在于提供一个角色能力的衡量依据,从而更好地指导角色及职业设计,而非机械性地将各类角色的能力进行绝对平衡。一般来说,“特性>平衡”或是“平衡>特性”,取决于游戏的核心玩法是1VS1的单人竞技,还是多VS多的团队配合战;取决于游戏的基调是更强调策略搭配还是更强调数值比拼。而就个人喜好而言,笔者更喜欢强职业区分的游戏,也更倾向于“特性>平衡”的数值设计。
注:文中表述的战斗力,指的是角色实际战斗能力的抽象数学模型,而非游戏中显示的角色面板战力。
各类属性及能力的转化
1. 常规攻击属性与防御属性
一般来说,在衡量战斗能力时,我们会将命中率、暴击率等攻击类属性转化为EDPS,将免伤率、闪避率、招架率等防御类属性转化为EHP。但是不少策划在属性转化时选用的公式非常随性,有的甚至对每个游戏都使用了统一的表达式。
在笔者的《攻击判定流程研究》一文中,我们已经推演出:基于不同的攻击判定流程,EHP和EDPS的表达式是不同的。值得提前说明的是,文中大多数的EHP和EDPS表达式仅为应用乘法伤害公式时的示例。
n 瀑布算法下:
若命中闪避分两次判定:
EHP=HP/(1-免伤率)/(1-闪避率)/(1-招架率)
EDPS=DPS*命中率*[1+暴击率*(暴击伤害倍率-1)]
若命中闪避合并判定:
EHP=HP/(1-免伤率)/(敌方命中率-闪避率)/(1-招架率)
EDPS=DPS*(1+暴击率*(暴击伤害倍率-1))
n 圆桌算法下:
EHP=HP/(1-免伤率)/(1-闪避率-招架率)
EDPS=DPS*[命中率-敌方闪避率-敌方招架率+暴击率*(暴击伤害倍率-1)]
注:闪避、招架>暴击>普通命中,且各状态发生概率之和未超过圆桌大小
在计算角色的战斗能力时,其计算式务必与攻击判定流程匹配,并不是在所有游戏中EHP和EDPS的计算都有统一的表达式。
2. 技能
角色的攻击属性通过技能这一载体对敌方目标造成伤害(普攻也可以理解成一种技能)。在量化角色的攻击能力时,可以以标杆输出技能为衡量基准,也可以尝试制定一个在特定的战斗时长中,角色技能的施放组合(例如:法师在45秒的PVP战斗内施放8次寒冰箭、4次烈焰冲击、2次冰环、1次冰锥;术士在5分钟的PVE战斗中使用混乱箭、献祭、烧尽、点燃的循环等等),并不断实测修正一个组合。用这个技能组合提供的伤害量之和除以战斗时长,可以得出角色在该战斗情景下的EDPS能力。
除此之外,单个技能的EDPS,也能通过计算量化。
(1) 标杆输出技能
无论是魔兽世界中战士的英勇打击(60、70版本),还是暗黑3中野蛮人的先祖之锤,它们或是附加在下一次普攻之上,或是以该技能替代普攻打出,都可以理解为一次威力增幅版的普通攻击:
n 类普攻技能的EDPS=技能伤害/攻击间隔
而读条施法的技能,也可以依此抽象出单位时间内的EDPS:
n 读条施法技能的EDPS=技能伤害/施法时间
值得思考的是,施法时间越长的技能,其施放失败的可能性越大(被打断,目标跑出施法距离等),因而在设计的时候往往会补足额外的伤害量,即所谓的高风险高回报。所以,在量化战斗力时,同样需要进行适当的削弱还原。
至于补足伤害量是多少,以及施法时长超过多少的技能需要补正,均需要反复测试,不能一概而论,因为它与其他的相关设计及游戏的特点密切相关,例如:游戏中各种职业、怪物的打断技能数量与施放频率,受到伤害是否造成施法延迟,游戏的类型,操作的流畅性,服务器的平均延迟时间等等。同理,量化战斗力时需要削弱多少,也可能需要多次测试。
(2) 瞬发输出技能
若是没有公共CD的设定,则瞬发技能带来的EDPS增幅具有如下表达式:
n 瞬发技能的EDPS=技能伤害*(TIME/技能CD+1)/TIME
注:战斗刚开始先施放一次
若是有公共CD的设定,则:
n 瞬发技能的EDPS=(技能伤害-公共CD时长*标杆技能的EDPS) *(TIME/技能CD+1)/TIME
注:当然也可以按照先前设定的技能施放组合中设置的次数计算。
(3) 伤害吸收技能
显而易见,伤害吸收类技能可以简单地换算为EHP:
n 伤害吸收技能的EHP =伤害吸收量/(1-角色免伤率)
注:此处设计为受到的伤害先被角色免伤减免一部分,当然也可以设计为不受减免
(4) 控制型技能
控制技能可以理解为对战斗时间的延长,即在控制技能持续的时间内,我方受到的伤害降低,甚至可以单方面地对敌方造成伤害。通过我方EHP=敌方EDPS*TIME的表达式,可以理解为削弱了敌方的EDPS,进而可以变相增加了我方的EHP:
n 换算后的我方EHP增幅=敌方EDPS*控制技能削弱百分比*控制持续时间
注:降低攻击速度的控制技能相当于百分比削弱了敌方的DPS,晕眩等技能相当于在这段时间内敌方的DPS降为0。
(5) 友情提示
技能可以量化为战斗能力,但其实在常规的数值设计流程下,应该以角色战力为出发点,进行技能的设计。我们可以将EHP转化为控制技能和伤害吸收技能,将EDPS转化为物理技能、施法时间不同的各类伤害技能和瞬发技能等。事实上,战斗能力相近的属性模板,通过各具特点的技能设计,可以衍生出多个特性鲜明的职业。
3. 格挡属性的计算——固定免伤与百分比免伤
常见的格挡属性有两种不同的设计:
A. 成功格挡后百分比免伤
这种格挡效果相当于自身免伤的一部分,只不过是概率触发的:
n 瀑布算法下:
EHP=HP/(1-免伤率)/(1-闪避率)/(1-招架率)(1-格挡率*格挡免伤百分比)
n 圆桌算法下:
EHP=HP/(1-免伤率)/(1-闪避率-招架率-格挡率*格挡免伤百分比)
应用实例:魔兽世界、龙珠
B. 成功格挡后减免固定值的伤害
这种格挡效果可以抽象为对敌方EDPS的削弱,也可以进而换算为我方EHP的增幅:
n 敌方EDPS削弱值=格挡免伤值*格挡率/敌方攻击间隔
n 换算后的我方EHP增幅=格挡免伤值*格挡率*TIME/敌方攻击间隔
应用实例:暗黑3
注:这个算法不能算很严谨,极端情况下,格挡免伤值大于了敌方的EDPS,溢出的部分就是浪费的。但大多数情况下仍是适用的。
可以看出,不光格挡属性,类似格挡效果的天赋、被动免伤技能,均可以按此计算。
4. HPS的计算
这里所指的HPS包括:持续治疗的HOT类技能、每秒生命回复、击中生命回复等等。这类效果同样可以抽象为对敌方EDPS的削弱:
n 敌方EDPS削弱值=我方HPS
也可以将HPS专门看作生命回复能力,代入EHP=EDPS*TIME的战力平衡等式进行计算:
n 角色HP=[敌方EDPS*(1-免伤率)*(1-闪避率)*(1-招架率)-HPS]*TIME
n 角色EHP= [敌方EDPS-HPS/(1-免伤率)/(1-闪避率)/ (1-招架率)]*TIME
注:攻击判定流程为瀑布算法
n 角色EHP=[敌方EDPS-EHPS]*TIME
通过这个等式我们可以发现一些微妙的情况:
n HPS的效果会被人物的免伤、闪避等防御属性放大,设计其数值时务必将这一点纳入考量,必要时应加入降低治疗效果的属性应对之。
换言之,当EHPS(被增幅后的HPS)大于敌方角色的EDPS时,玩家角色永远不会死。 正如同暗黑3早期版本中,秘术师通过能量护盾的天赋搭配高秒回装备,只要不被秒杀,瞬间就回满了。国产游戏由于强调付费成长,当超R撑高了防御属性后,HPS的效果被大幅放大,就可能使得这类属性或是能治疗的职业过于强势的情况。应提前考虑应对之策,以免职业平衡严重崩坏。
战斗力量化的准确性与普适性分析
在上一块内容中,我们将角色各个维度的属性和能力转化成了与EHP和EDPS相关的表达式,在大功告成之际,我们是否可以认为,剥离操作等人为因素、网络延迟等不可抗力因素,每个角色的战斗能力都已经转化为了精准的数字表达了呢?
似乎在部分数值策划的认知之下,角色战斗能力=角色EHP*角色EDPS这一表达式仅与己方角色的属性相关,能够完美地反应出一个角色的绝对战斗力。据笔者观察,这种认知在各种论坛的数值版块广泛存在,而许多游戏设计者论坛推送的“深度好文”也似乎都没有深入地探讨过这一点。
在这一模块,让我们暂时从幻想中抽身出来,审视一下以这个模型量化出的战斗力的准确性与普适性。
1. 对抗属性的参与计算
其实细心推演一下就能发现,在角色EHP和EDPS的表达式中,有大量敌方的属性参与了计算。现阶段的游戏中对抗属性的存在随处可见(暴击与抗暴、闪避与精准、护甲与穿甲、特攻与特防等等)。只要有对抗属性的存在,EHP或是EDPS的表达式必然与敌方属性相关,几乎不可能剥离得开,也就意味着玩家角色的战斗力随敌方属性的变化而变化。
n 游戏的数值体系中若存在对抗属性,则角色的战斗力会随对抗目标的属性变化而变化,不具有普适性。
2. 攻击判定流程
假设在一个没有任何对抗属性存在的数值体系,是否可以认为以EHP*EDPS表达的角色战斗能力具有普适性呢?也未必。
(1) 圆桌算法
若攻击判定流程采用圆桌算法,一定无法抽象出仅与己方属性相关的EHP和EDPS。由于只有一次状态判定,所以必然无法剥离攻守双方的属性对抗,EHP和EDPS的计算式依赖于敌方属性。
这里所指的无法剥离的属性,已经不是指精准与闪避、暴击与抗暴的成对对抗的属性,而是指:我方EHP计算式与敌方命中率相关,我方EDPS计算式与敌方防御属性相关
EDPS=DPS*(命中率-敌方闪避率-敌方招架率+暴击率*(暴击伤害倍率-100%))
EHP=HP/(1-免伤率)/(敌方命中率-我方闪避率-我方招架率)
(2) 瀑布算法
即便采用瀑布算法,若是将命中与闪避的判定合并掷骰(将命中率与闪避率合并计算出实际击中概率再进行掷骰判定),则我方战斗力的表达式仍然与敌方的属性脱不了关系。
EDPS=DPS*(命中率-敌方闪避率)(1+暴击率*(暴击伤害倍率-100%))
EHP=HP/(1-免伤率)/(敌方命中率-我方闪避率)
n 攻击判定流程的每一次掷骰判定都没有对抗目标的属性参与计算,角色的战斗力量化才可能具有普适性。
3. 伤害计算公式
若是不设计对抗属性,同时选用瀑布算法进行攻击判定,一次掷骰只掷单方事件,且不掺杂对抗目标的属性,那么对其战斗力的量化就是绝对准确的了吗?仍然未必。
(1) 减法公式:伤害=我方攻击-敌方防御
显而易见,若是游戏的伤害计算使用减法公式,一定无法抽象出与敌方属性无关的EHP或EDPS,伤害=攻-防的计算过程与对抗双方的属性均相关。
(2) 乘法公式:伤害=我方攻击*(1-敌方免伤率)
在乘法公式的体系下,可以得出与敌方属性无关的EDPS、EHP表达式。
(3) 除法公式:伤害=我方攻击*我方攻击/(我方攻击+敌方防御)
除法公式的体系下,敌我双方的属性在伤害计算的环节仍然混杂在一起,无法剥离。
n 伤害公式若为减法或除法,则角色的战斗力会随对抗目标的属性变化而变化,不具有普适性。
4. HPS属性
HPS属性的作用方式与减法体系的伤害计算方法相当,必然与敌方属性相关。
n 将HPS的效用纳入计算时,角色的战斗力会随对抗目标的属性变化而变化,不具有普适性。
5. 控制技能
无需赘述,通过控制敌方产生效果的技能,其战斗能力的量化怎能不与敌方属性相关……
n 若考虑控制类技能,则角色的战斗力会随对抗目标的能力变化而变化,不具有普适性。
6. 泼冷水的总结
只有在EHP和EDPS的表达式仅与己方属性相关的情况下,通过文中所述的方式量化出的角色战斗能力才是最具普适性和准确性的绝对数值;其他时候,角色的EHP和EDPS计算基本都是以预设的敌人为基准的一个参考值。
而EHP和EDPS的表达式仅与己方属性相关的必要条件有:
n 攻击判定流程中,单次掷骰只有单方的属性参与计算。
n 伤害结算公式为乘法体系。
应用实例:暗黑3中攻击判定流程采用了瀑布算法,伤害公式为乘法公式,并且不存在对抗属性,在将击回、秒回等算作回复能力(EHPS)的情况下,玩家角色的EHP和EDPS仅与己方属性相关,因而才可以在面板显示,以方便玩家选择装备和比较属性价值。
看到此处,是否有一股绝望与悲凉涌上心头?平常拿来即用的EHP和EDPS表达式,所量化出来的战斗能力不过是一个基于特定敌人的参考值,几乎永远都不具备普适性。这并不是该模型本身的缺陷导致的,事实上在笔者的认知之下,这个量化模型已经是适用性最高,同时也是模拟得最为准确的了。
注:如果你知道更为精准、适用性更广的战斗能力量化方法,请不吝赐教~
7. 暖心的鸡汤
我们已经得出:在绝大多数情况下,对角色战斗能力的量化,需要以预设的敌人为参照系,计算得出的也仅仅是参考值。那么,对角色战斗能力的计算,是不是徒劳无功的,又是否还有进行的必要呢?
答案十分确定——非常有必要!因为即便是参考值,只要设置了合适的参照系,就具有极为重要的意义。作为数值的设计者,我们无法左右玩家的行为,无法保证玩家按照我们的预期进行游戏,自然也就无法保证玩家角色的各维属性按设计者规划的方式稳步成长。
我们虽然无法控制玩家角色在成长过程中每一次战斗的体验,但我们能够控制玩家角色战斗能力的极限。通过对玩家角色EHP、EDPS、EHPS极限值的控制,我们可以限定不同阶段玩家角色的能力范围,我们可以把控RMB玩家与免费玩家间的能力差距,我们可以保证玩家的行为,无法越界。
无论何时,我们都应牢牢握有对属性和技能极限值的把控。作为战斗数值的设计者,我们非但应该确保角色能力的投放有明确的极限,还必须能清晰地模拟出角色获得极限战力时的战斗情况。而这,正是战斗力量化模型的实际应用价值所在。
应用这种极值设计法,或许无法做到对玩家体验的精准定制,但至少能保证数值体系的稳固和有序。
8. 一点点吐槽
曾见过不少论坛里的教学帖,将EHP与EDPS的算法讲的绘声绘色,却只字未提相应的攻击判定流程设计。也曾见过不少的数值策划,甚至没有搞清楚一款游戏的整体数值架构,就用统一的EHP、EDPS计算式将角色战斗力分析得风生水起。这种文章和这种风气其实害人匪浅,也曾使我一叶障目不见泰山。
笔者绝不否认有一些经验丰富的大佬仅凭feeling就能设计出体验绝佳的游戏数值,但我们大多数的普通人,是否应该放下这种似懂非懂的治学态度,审问之,慎思之,明辨之。
写在最后
笔者刚入行的前半年来,四处浏览游戏设计网站数值区的文章,发现一个有趣的现象:那些肤浅空泛到不值一读的文章,往往有着气吞山河的宏大标题,同时正文的字里行间无不透露出身为规则制定者的隐隐自傲。这可能是因为国内市场收入导向的大环境,将游戏的付费数值设计的重要性抬到了前所未有的高度。
但那些真正有价值的文章,反而用最平和的措辞,传递了经过实战洗礼才得出的真知灼见。随着对数值设计理解的不断深入,我越发感受到前人经验的可贵。其可贵之处,不光在于不断实践反复验证得来的经典模型与成熟设计,更在于对设计理念的革新与重塑。
在入行之初,我的leader对我说:
数值设计若是只停留在EXCEL表格中,永远无法有大作为。
在我初窥门径之际,我的leader又对我说:
身为数值策划,能够掌控的东西其实很少。但若真能牢牢掌控住那些东西,也就足够了。
一位卓越的数值策划,正是清楚地明白自己无法全知全能,才构建出了虚拟世界的坚实边界。
正是在这样的引领之下,我清晰地认知了理论推演的局限;明白了再优秀的模型也无法精准模拟一切;知道了所有优秀的项目,都经历过无数次从实测到修正模型的循环往复。
数值只是工具,其依托于系统,也服务于系统。既然身处服务业,不如抛下那份“数值凌驾一切”的自傲,拾起服务行业的基本素养——一颗谦卑的心。
试图掌控一切,不过只是妄念。