【山海镜花】最终伤害算法和防御减伤公式的验证

修改于2023/10/07293 浏览攻略
目前切磋功能关闭,无法进一步测试具体的防御减伤算法,仅就存在的问题进行简要说明。
(一)面板属性显示bug
以攻击属性为例,面板攻击=基础攻击+额外攻击
其中,基础攻击为角色随自身等级提升而加的攻击力。(为整数或有小数点暂不确定,实测伤害波动上下限误差约3)
以初始R卡0蝶的黄龙为例,其从1-10级的基础攻击分别为:
82-88-93-100-107-114-121-129-136-143
可以发现每一级提升的攻击力随机为6~8。
以0蝶1级黄龙为例,此时攻击属性面板为
82+0(额外攻击力)
当带一个灵器词条2%攻击力加成时,此时攻击面板显示为82+2,
实际2为82*2%=1.64的四舍五入取整值。
该面板属性显示的属性是正确的。
然而当升蝶后,即1蝶1级,我们会发现基础攻击力也随之提升,但是后面的额外攻击力仍显示为2,即没有随基础攻击力提升。
经过测试后发现,原因为:游戏代码将升蝶的攻击力归位额外攻击力(即不参与%攻击力的计算)的同时,却把该部分攻击力放进角色的基础攻击力显示面板里。(也许是出于游戏底层算法保护,也许就是程序员的失职,都不好说)
在进一步测试后,会发现除了将升蝶的额外攻击力放进基础攻击中以外,还有破茧(突破)也是。除此以外的荒灵、天赋等属性加成是正常放进额外攻击力显示区内。
(二)防御减伤推导阻碍
众所周知,游戏里存在防御力的目的在于减伤,称为防御减伤。如在英雄联盟里,你护甲越高,物理伤害会削弱;魔抗亦是同理。
山海镜花的防减机制更为复杂,已经实测验证的为游戏确实存在"等级压制"的设定。即你的角色会随着角色等级的提升获得一定的增伤,但这个增伤为隐藏机制。
如何验证?
采用控制变量法。一个怪物的防御为固定常数,那么它的防御减伤理应也为常数,倘若该防御减伤和角色等级和蝶数有关,那我们控制等级相同、蝶数相同、进行类比即可。
以0蝶1级黄龙为例,测试环境为金币本第一关。
黄龙普攻伤害从1到10级,实际伤害和理论伤害的比值假定为防御减伤,
按照控制变量法的理论,随着黄龙等级提升,防御减伤比应该维持不变,然而实际测试结果却相反。
1-10级的防御减伤比从0.181开始随每一等级一直增长0.191、0.201……0.284,假设增伤是固定值,有规律性,我们取整数,会发现,每一级防减比的提升为0.01。
这就验证了,如果防御不变,防减伤存在变量,该变量即为等级。即等级压制的隐藏设定,每一级的提升会有0.01的增伤。
那最关键的问题来了,如果继续控制变量法,以两个同蝶同等级的角色类比,那理应防御减伤比相同。我们验证一下:
0蝶1级雍和,基础攻击84,普攻系数1.55,理论伤害84*1.55=130.2,实测伤害为38,防御减伤比为38/130.2≈0.29
0蝶1级钦原,基础攻击76,普攻系数为1.55,理论伤害为76*1.55=117.8,实测伤害为21,防御减伤比为21/117.8≈0.18
0蝶1级毕方,基础攻击71,普攻系数1.55,理论伤害为71*1.55=110.05,实测伤害为17,防御减伤比为17/110.05≈0.15
(补充20级0蝶数据)
0蝶20级雍和,229*1.55=354.95,实测伤害143,防减比≈0.40
0蝶20级钦原,207*1.55=320.85,实测伤害121,防减比≈0.38
0蝶20级毕方,193-1.55=191.45,实测伤害105,防减比≈0.35
综上,我们可以看到怪物的防御减伤竟然在控制角色等级、蝶数相同、怪物属性固定的情况下,会随着不同的角色发生变化,简直匪夷所思。可以确定,这个游戏的防御减伤算法存在极其严重的bug。
(三)测试过程中遇到的其它问题
10级0蝶的黄龙,基础攻击力为143,普攻实测伤害为63~64波动,
11级0蝶的黄龙,基础攻击力为151,普攻实测伤害为71~72波动;
12级0蝶的黄龙,基础攻击力为158,普攻实测伤害为74~75波动。
13级0蝶的黄龙,基础攻击力为166,普攻实测伤害为81~84波动。
简直离谱,
10到11级,提升了8点攻击力,伤害提升了8点;
11到12级,提升了7点攻击力,伤害提升了3点;
12到13级,提升了8攻击力,伤害提升了7~9点
在1-10级时,每一级伤害提升均在3、4点。
(四)经历上述控制变量法之后,我们发现仍然存在一个尚未发现的隐藏变量。这个变量还能是什么呢?难道是我方角色的攻击力?突然茅塞顿开,我们直接继续控制变量法,这次直接控制“攻击力变量”再次进行测试。
20级0蝶雍和229攻击力,
20级0蝶毕方193攻击力,
雍和和毕方普攻系数均为1.55,
给毕方携带一个12+24共36攻击力的灵器,使其攻击力=229。
进行测试的结果如下:
雍和实测伤害波动区间:138~143
毕方实测伤害波动区间:139~143
不难发现,当攻击力变量一致时,二者的实测伤害一致,意味着实际伤害与除攻击力以外的其它变量无关,当攻击力相同时,任何角色对同一怪物的防御减伤相同。
至此,我们可以初步得出结论。
山海镜花的防御减伤变量为"进攻方角色的攻击力a"和"受击方怪物的防御力b"。
具体防减比公式为=a/(a+b)
据此,根据实际伤害c,我们可以推导出怪物的防御力d
d=a*(a*技能系数-c)/c
结论得出后,理所当然需要实地验证。
金币1层验证结论,怪物的防御力约为360;
继续验证金币2层怪物的防御力以及公式是否正确。
仍然以20级0蝶雍和为例,229基础攻击力,1.55普攻系数,理论伤害为229*1.55=354.95,实测伤害波动为110~114。
代入上述防御公式,可推导出怪物防御力区间为:484~510,我们取中间数490。
现已知怪物防御力为490,
20级0蝶天狐,攻击力194,技能系数1.68,代入上述伤害公式,可得实测伤害应为92.44,最终实测伤害为93,符合;
20级0蝶毕方,攻击193,技能系数1.55,代入上述伤害公式,可得实测伤害应为84.53,最终实测伤害为85,符合。
(五)最终结论
1:无等级压制;
2:怪物防御减伤由"我方攻击力"和"敌方防御力"共同决定;
3:防减系数=a/(a+b),a为我方攻击力,b为敌方防御力;
4:怪物防御推导公式=a*(a*技能系数-c)/c,a为我方攻击力,c为实测伤害。
第一次遇见把进攻方攻击力数值设定为防减系数的参量的游戏。
8
3
14