结合一个例子。
一只满攻命玉地龙对我的满hp、无防御努力老班(血和防御的个体都是v)点出地震,打出了205伤害。老班靠着最小随机数苟活并且打了一发冰拳。
如果根据前面的伤害公式,来算算看伤害。
先算基础伤害,也就是公式括号里的部分。
地龙的攻击为182,老班的防御为130。等级为50级,地震威力100。
(2x50+10)/250=0.44
0.44x182/130x100+2=63.6
在以上两个步骤中都没有舍弃小数,因为原公式的说明中提到最后的伤害舍去小数。所以暂且保留小数。
再来算加成后的伤害。
在这个过程里参与的加成包括地龙地震的本系加成,地震克制老班,命玉加成,最小随机数。
63.6x1.5(本系)x2(克制)x1.3(命玉)x0.85(随机数)=210.834
我们的结果就是这个210.834,将其小数舍去,伤害就是210。
如果地震最小伤害是210,那上述情景就是确一,现在公式和游戏内计算结果的偏差的事实,正说明了公式有误。
我在另一家口袋百科(pokemon.name/wiki)找到了比较符合的伤害计算公式。
(题外话,这个网页经常上不去,今天突然能上了。)
它的公式对于这一次攻击的计算过程如下:
1~3.读取招式威力,攻击力,防御力。没有多的计算。
4.基础伤害计算。这步很关键,公式如下:
基础伤害=[[[攻击方等级×2÷5+2]×技能威力×攻击力÷防御力]÷50]+2
标方括号的运算需要向下取整结果。计算结果为63。
5.随机修正。使伤害乘上[0.85, 1]的随机数。取0.85,相乘后再向下取整。这一步的计算结果为53。
6.属性修正。包括属性一致加成和克制。
伤害=[[伤害×1.5]×属性相克倍率]。
这里计算算完STAB之后要先取整,乘上克制倍率之后再取整。这一步计算结果为158。
7.实际伤害修正。在这个阶段有触发的是命玉,伤害修正=1.3。
最终伤害=[伤害×伤害修正]。结果为205。
两种公式的计算的区别相当明显,前者只有最后一步舍去小数。而后者的计算过程中要多次进行取整,并且有严格的计算顺序要求。
因为中途的小数被舍去,这部分小数不会在被加成后达到整数部分,所以不同的公式计算结果会有出入。而正是因为这样,所以才要控制计算顺序,而不能简单地将各个因子相乘。游戏内的结果能证明这种中途舍去小数的计算结果才是对的。
公式的还有一个错误在于,并非所有修正都乘在最终伤害上。
像是技术高手、属性宝石、力量头带、猛火、强行这些加成,是乘在攻击或威力的修正中的。基础伤害里还有个常数“+2”,所以乘在威力或攻击上和乘在最终伤害上会有微小的区别。
Edited July 18, 20214 yr by dorybo
有一处笔误,感谢指正