乘法公式下的战斗力计算
用数值来衡量角色的战斗能力对于玩家和策划都是非常有意义的。对于玩家来说,战斗力是养成结果的最直观体现,是玩家养成成就感的最直观来源。对于策划来说,角色战斗力是人物在战斗上的标尺数值,直接影响关卡战斗数值、职业平衡等等;同时,战斗力也是战斗数值和养成数值的接口,是调节养成节奏、控制不同档次玩家差距、分配不同养成系统权重时的最重要参考。
Einsphoton先生在《如何高效设计游戏——关于战斗力计算方式的总结》中给出了战斗力计算的基本概念,并给出了一个基于减法公式的“相对战斗力”的简单例子,但并未涉及乘法公式的内容。
众所周知,乘法公式是游戏常见的另一种计算公式,两者各有特点,并没有优劣之分。但在计算战斗力时,乘法公式比减法公式要简单,且能得到更精确的结果,即“绝对战斗力”。
另外,有了“绝对战斗力”,我们就可以很方便的解决和战斗力比较相关的问题,如一个人能同时打几个怪等。
一、战斗力计算基础
游戏角色战斗必不可少的两个基础属性是攻击和血量,其中攻击的概念可以被抽象成单位时间的伤害,在回合制游戏里就是攻击,在更多的情况下就是DPS。
若角色A可以战胜角色B,则易得:
即A在B之前杀死了对方,将上式变形可得:
当上式满足时,角色A一定可以战胜角色B,反之亦然,因而战斗力的最基础形式即为:
二、乘法公式下的“绝对战斗力”
在纯粹的乘法公式体系下,所有的战斗属性都可以被等效成攻击和血量。在此,令考虑攻击、暴击、攻速等属性后的单位时间伤害为等效攻击。同理,等效血量即为考虑生命、护甲、闪避等属性后的角色生存能力。下面以一个基于乘法公式的战斗模型为例来介绍乘法公式下的战斗力计算及其“绝对性”。
设玩家有攻击Atk、暴击Crt、血量Hp、护甲Arm四种属性,战斗逻辑是每秒攻击一次,先根据暴击率判断是否暴击,进而得到最终伤害,再根据对方护甲减伤比将最终伤害减少成实际伤害,最后将对方血量扣除实际伤害。
常见的暴击率CrtRatio和护甲减伤比ArmRatio公式如下:
其中k为一个常数,powerLv是根据等级得到的一个等级修正系数。
当时间足够长时,暴击实际就是将攻击力提升一个固定的百分比,令暴击伤害为150%,则等效攻击EqAtk为:
另一方面,护甲减伤比实际是将血量增加了一部分,则等效血量Hp为:
由上可得,此模型的战斗力为:
在打木桩的情况下,此式即为角色的“绝对战斗力”,谁由此式计算的值大,谁就一定能获胜。这得益于乘法公式中的防御类属性(如护甲)可以被准确的换算成等效生命,而不用考虑其与攻击类属性的关系,进而避免了减法公式中需要给定一个参考护甲值的问题。
注意,上式计算的实际上是同等级情况下的战斗力,如果双方具有等级差,powerLv需要做相应的替换,这样才能够得出准确战斗力。在具体工作中,往往只计算同等级的战斗力作为该等级战斗力标准数值,但在做成长比较等跨级战斗力比较时,应记住这种比较是近似的而不是准确的。
另外,由上式易得,四种属性与战斗力都是线性关系,这是乘法公式与减法公式最重要的区别之一,也是乘法公式的两种常见具体形式的设计初衷:
三、战斗力比较
由前文已知,战斗力高的角色一定能战胜战斗力低的,但是在实际工作中,尤其是关卡数值上,我们往往更关心一些更复杂的情况,如一个角色能连续打几个怪物,或者一个角色能同时打几个怪物等等。
当角色A战胜角色B时,有:
由上式易得,若角色A能连续战胜N个角色B,则:
下面考虑角色A能同时打几个角色B。设A能同时打N个B,在此情况下,B方的等效攻击实际上是N个等效攻击B的和,当A打死一个B时,即A输出了一个等效血量B的伤害后,B方的等效攻击降为了(N-1)个等效攻击B,由此可得:
这两个公式可以作为关卡和怪物数值设计中的重要参考,具体应用方法很多,在此就不赘述了。需要注意的是,由于减法公式体系下不能很好将等效攻击和等效血量拆开,所以上述两式只在乘法公式上能得到准确结果,这也是乘法公式相对减法公式的一个优点。
四、总结
这周末偶然看到了Einsphoton先生的《如何高效设计游戏——关于战斗力计算方式的总结》一文,因而写了些很浅显的想法,欢迎大家指正,如果也能对读到的人有所启发,我就很高兴了。
另外,角色战斗力做为战斗数值的基础,还有很多值得研究的地方,我会在有时间时把我浅显的想法继续分享给大家。