关于《土豆兄弟》护甲属性的个人理解与分析
5 小时前52 浏览
1. 护甲的定义及计算方法
1.1 定义
在《土豆兄弟》中,护甲(Armor,图1)是可以将玩家每次受到的伤害量减少或增加一个百分比的属性。当护甲值大于零时,其表现为减少,反之则表现为增加。
1.2 函数解析式及其性质
设玩家的护甲为x(x∈R),减伤比例为y(定义y>0时为减伤,y=0时伤害不变,y<0时为加伤,与游戏中对护甲的说明“你受到的伤害增加/减少|100y|%”相对应)。Brotato Wiki给出的公式(图2)为:
% of damage received after being reduced by positive armor = 1 / ( 1 + ( ARMOR / 15 ) )①
% of damage received after being increased by negative armor = (15 - 2 * ARMOR) / (15 - ARMOR)②
在①式中(护甲为正时),等式左边为y,右边的ARMOR为x,整理可得y=x/(x+15)(x>0)。
在②式中(护甲为负时),等式左边为“负护甲使玩家受到的伤害百分比”,根据我们对y的定义,它对应的是(1-y),右边的ARMOR同样为x。将1-y=(15-2x)/(15-x)进行整理可得y=x/(-x+15)(x<0)。
当x=0时,y=0,即护甲为零时玩家所受伤害不变。
显然,lim(x→0-)y(x)=lim(x→0+)y(x)=y(0)=0,所以函数y=y(x)在R上连续,可将其合并为一个解析式y=x/(|x|+15)(*),这也就是减伤比例与护甲的函数解析式。
(这里必须吐槽一句,Brotato Wiki这一点整的确实不算好,明明直接给一个*式外加一点简单说明即可。结果他们却整成了分段函数,甚至两个区间对因变量的定义都不同,同时列大表格和用大量篇幅来说明,导致信息密度过低,且给读者的阅读带来了不便,如图3所示。)
经证明,y=y(x)在R上可导,y'(x)=15/(|x|+15)^2(具体过程就不展开了,否则篇幅会过长。大家可以自己写一下,注意x=0处要用导数定义)。该函数为奇函数,定义域为R(护甲可正、可负、可零),值域为(-1,1)开区间,在R上单调递增[y'(x)>0对∀x∈R恒成立],存在上界1和下界-1(形状类似于y=arctanx)。其特点用通俗的话来说就是±1可以无限接近,却永远取不到。所以就不要考虑护甲堆高点可以100%减伤了,不可能的(同理,负护甲也不可能导致玩家受到超过2倍的伤害)。
1.3 护甲的主要构筑要点
观察y=y(x)的导函数y'(x)=15/(|x|+15)^2可以看出,y'(x)max=y'(0)=1/15,即该函数在原点处的导数值最大,这也就是很多玩家指出的“前几点正护甲的提升最显著,前几点负护甲的副作用最致命”这一命题的数学本质。这意味着在实战中,玩家在游戏前中期一定要谨慎选用减护甲的软糖狂战士、玻璃大炮等道具,或复数件虚灵类武器(它们同样会减少护甲),除非玩家对自己的操作很自信,或游玩的是伤者等特殊角色。当然这也并不意味着前期就要直接无脑梭哈护甲,详见下文2.3部分。
2. 有效生命值定义及计算方法
2.1 定义
击杀玩家角色所需的理论伤害量即为玩家的有效生命值(Effective HP)。
2.2 函数解析式及其性质
根据前文中对减伤比例y(x)的定义,有效生命值ε可表示为最大生命值h与护甲x的二元函数,即ε(h,x)=h/[1-y(x)] = h(|x|+15)/(|x|-x+15),其定义域为{(h,x)|h>0,x∈R},值域为(0,+∞)。
经证明,ε=ε(h,x)在定义域内同样连续且可导(具体过程同样不展开了)。当x≥0时,∂ε/∂h=(x+15)/15,∂ε/∂x=h/15。当x<0时,∂ε/∂h=(15-x)/(15-2x),∂ε/∂x=15h/(15-2x)^2。
此处我们可以特别注意一下,当x>0时,∂ε/∂x=h/15这个式子。通过它可以得出,当最大生命值不变时,每1点护甲可以使有效生命值在当前最大生命值的基础上提高6.66个百分点(1/15=0.066……),这也就是Brotato Wiki中指出的“……each point of armor increases your Effective HP by 6.66%.”(图4)这一说法的数学本质。
2.3 偏导数方法对比护甲与生命值词条收益
根据上述偏导数可得,理论上说,在面对升级选项的加点时,假设玩家目前的最大生命值为h0(h0>0),护甲为x0,最大生命值选项为+Δh,护甲选项为+Δx,那么在加点时只需计算并比较(Δh)∂ε/∂h|(h0,x0)与(Δx)∂ε/∂x|(h0,x0)的大小,选择值较大(即有效生命值ε提升更大)的选项即可。
但在实际游玩过程中,上述方法存在明显的问题。一方面普通玩家大多没有耐心去记忆并每次都临场计算上面4个偏导数公式;另一方面,考虑到《土豆兄弟》中的数值较小,且普遍采用四舍五入的方式来计算,因此前期直接堆护甲显然是并不划算的(打个比方,假设某敌人的伤害为4,则你需要堆3点护甲才能将其伤害降为3),除非你游玩的是骑士或尖刺盾等靠护甲转伤害的角色或武器,但这就是另一回事了。
基于前文的分析,我们的思路即为“通常情况下,前期在防御端优先考虑最大生命值而非护甲”,那么我们需要堆到多少血再转护甲呢?在《土豆兄弟》中,对于相同品质(等级)的升级选项而言,最大生命值在数值上等于护甲的3倍,如白色(1级)品质为最大生命值+3或护甲+1,蓝色(2级)品质为最大生命值+6或护甲+2,以此类推。因此“何时转护甲”即为解关于h的不等式∂ε/∂x|(h,0)>3∂ε/∂h|(h,0),代入得h/15>3,解得h>45。所以结论即为:当面对相同品质的最大生命值和护甲升级选项时,若玩家的最大生命值大于45,则加护甲的收益更高,否则加最大生命值收益更高(很多玩家可能知道“45血”这个阈值,但是并不知道它是如何被计算出来的,这里我帮大家拆解出来了)。
PS:
1. 这篇帖子我写得较为仓促,函数、数值计算及相关描述等内容可能存在纰漏,恳请各位土豆大佬批评指正。
2. 为什么我要写这些,其一是因为近期刷到了有玩家问关于护甲的问题,这里我就详细解答一下了;其二是因为最近TapTap土豆区的萌新和路人玩家较多,很多人可能都是被国服的预约宣传引流来的路人,不知道原版《土豆兄弟》长什么样,因此我在此帮他们科普一下,同时我也想让大家知道,没有国服特色氪金框架和重度局外成长的原版《土豆兄弟》的数值设计和构筑深度有多么精妙。最后,我希望真正热爱这款游戏的路人玩家有条件的话能支持Steam版或手游国际服买断版等原汁原味的纯粹正版,真正领略它的魅力。







