乘法公式的战斗力计算过程
1.战斗力模型
在游戏中,战斗力是角色综合能力的反映。对于玩家来说,角色的战斗力有助于玩家比较和感知其能力;对于策划来说,准确的战斗力评估有助于游戏中角色的能力平衡和成长设计。乘法公式因其自身的特点,战斗力评估也容易做到相对准确,但在实际计算过程中也会遇到一些问题。
为了问题阐述的完整性,本文在第1、2部分有引用,相关文章在结尾处已给出,以方便大家查阅。本文侧重点在于阐述实际过程的一些问题。
为了更清晰的说明问题,将游戏角色的战斗力属性简化为以下几种:
ATK:攻击力
DEF:防御、可转化为减伤率DefRatio
CRP:暴击强度、可转化为暴击率CrpRatio
HP:血量
SPD:玩家攻击速度
其中
DefRatio=DEF/(DEF+A_DEF*FLV) A_DEF为DEF相关参数,FLV为等级参数
CrpRatio=CRP/(A_CRP*FLV) A_CRP为CRP相关参数,FLV为等级参数
据此,我们可以得出玩家的有效攻击(EDPS)和有效生命(EHP)。
EDPS=ATK*(1+CrpRatio*CrpBonus)*SPD 其中CrpBonus为暴击加成
EHP=HP/(1-DefRatio)
2.评判标准
在乘法公式中,通过双方的攻击回合数即可比较角色A和B的实力。即当
时,B获胜。
时,A获胜。
经过变形,可知比较 EHPA*EDPSA 与 EDHPB*EDPSB之间的大小关系,即可获得A与B的战斗结果。以上部分仅代表理论情况,未考虑实际的最后一击血量残留、出手顺序等。
令
作为战斗力的评估,同时可以获得另一个优势,通过战斗力的比较,可以获得双方对战后的结果,即战斗力残留。战斗力残留代表着战胜方在战斗结束后的剩余有效战斗力。
在理想状态下,假设A能够战胜B,
则A战胜B所需要的的回合数为:
B在此过程中造成的伤害为:
所以A的剩余有效生命为:
在理想状态下,角色A剩余的战斗力为:。
这对关卡的设计、付费与能力成长,都能提供指导作用。
3.实际过程
在实际过程中,ATK、HP等参数分布在游戏的不同系统中。同时ATK、HP等参数也受到表现形式等方面的影响,比如技能/状态效果等,这些参数不能够以集中的单纯数字直观体现,这对战斗力的计算提出了一定的要求。
游戏中的战斗力计算与实际的数据结构有直接的联系,在此不再做相关展开。
我们以输出端技能/状态效果为例对EDPS做计算,建立如下的层次:
EDPS=(ATK数值相加)*(1+ATK百分比加强相加)*(1+ATK其他层次加强)
*(1+(Crit相加*(1+Crit百分比加强相加)/(FLV*A_CRP)*CRPBONUS))
*(1+伤害百分比加成)+固定伤害
将游戏中的装备属性、被动技能、天赋等进行归类。
如武器攻击数值和人物攻击数值可以划分为ATK数值,但是,对于很多技能效果,我们无法精准的量化其影响,我们会尽量评估一个大致的战斗力效果和参数,如下表中的攻击对相邻单位造成25%。这些参数的评估需要根据游戏的实际情况,甚至在不同PVE,PVP模式中的表现形式都不相同。这一评估过程并不是在战斗力计算的时候完成,在设计技能强度的时候,我们已经需要对技能/效果做相关的数值分配。
为了满足计算,在EXCEL中建表时,我们增加两列用以评估攻击力,如下表
技能 | 技能效果 | 参数1 | 参数2 | 战斗力 | 战斗力参数 |
移动攻击力加强 | MOVE_ATK | 30 |
| ATK | 30
|
血量每降低10%攻击增加2% | HP_DEC_ATK_INC | 10 | 2 | ATK_PER | 10 |
攻击对相邻单位造成25%伤害 | ATK_AREA | 1 | 25 | ATK_OTHER | 10 |
4.战斗力呈现
在实际游戏中,战斗力的呈现方式是另一个问题。
如果以上面定义的战斗力模型作为游戏中的实际显示会带来如下问题。随着等级的增加,人物的成长,战斗力越来越高,这种增长并不是线性增长。
例如,设定以下常规参数:
初始修正为4个等级单位。即1级拥有5级属性。
每等级成长5攻击和20血量,血量/攻击的回合比为4。
当每过10级的时候,每等级成长在基础值上增加25% 。
则当角色等级达到N时,
攻击: ATK=(4+N)*5*(1+0.25*INT(N/10))
血量: HP =(4+N)*20*(1+0.25*INT(N/10))
战斗力:(4+N)*5*(1+0.25*INT(N/10))*(4+N)*20*(1+0.25*INT(N/10))
INT为取整计算。
则战斗力随等级的关系如下表所示
等级 | 攻击 | 血量 | 实际战斗力 |
1 | 25 | 100 | 2500 |
2 | 30 | 120 | 3600 |
5 | 45 | 180 | 8100 |
10 | 87.5 | 350 | 30625 |
20 | 180 | 720 | 129600 |
30 | 297.5 | 1190 | 354025 |
50 | 607.5 | 2430 | 1476225 |
75 | 1086.25 | 4345 | 4719756.25 |
100 | 1820 | 7280 | 13249600 |
从公式可知,战斗力和等级呈平方级数增长。实际过程中,直接显示也无太多的问题,在一些页游中,几百万的战斗力也很常见。
通常为了实际的表现效果,我们会对最终的战斗力显示进行一定的修正。
比如
- 乘以固定系数,如0.01
- 乘以等级相关系数。如 0.2/(4+N)
- 开方相关修正。如 10*(战斗力的开方)
相应效果如下表所示
等级 | 攻击 | 血量 | 实际战斗力 | 固定系数修正 | 等级系数修正 | 开方修正 |
1 | 25 | 100 | 2500 | 25 | 500 | 500 |
2 | 30 | 120 | 3600 | 36 | 600 | 600 |
5 | 45 | 180 | 8100 | 81 | 900 | 900 |
10 | 87.5 | 350 | 30625 | 306.25 | 2187.5 | 1750 |
20 | 180 | 720 | 129600 | 1296 | 5400 | 3600 |
30 | 297.5 | 1190 | 354025 | 3540.25 | 10412.5 | 5950 |
50 | 607.5 | 2430 | 1476225 | 14762.25 | 27337.5 | 12150 |
75 | 1086.25 | 4345 | 4719756.25 | 47197.5625 | 59743.75 | 21725 |
100 | 1820 | 7280 | 13249600 | 132496 | 127400 | 36400 |
在对攻击和生存段属性价值比比较精准估计的情况下,很多游戏也会采用
战斗力=有效攻击战斗力+有效生存战斗力
的方式进行计算,这甚至是主流的计算方式。
在上文中,如果 EHP/EDPS=ROUND
则
战斗力=EDPS*ROUND+EHP
也有一些其他战斗力评判方法,在此不再赘述,根据自己的实际需求进行调整即可。
5.说明
此文最初根据乘法公式的相关文章为基础,先后参考了《如何高效设计游戏——关于战斗力计算方式的总结》和《乘法公式下的战斗力计算》两文,未能展开过多的创新,主要关注点在实际项目中的一些具体计算过程。
在此一并感谢同事在自己实际计算过程中的指导,谢谢!