下载 App
简析《土豆兄弟》护甲属性,重新整理了一下
修改于15 分钟前46 浏览攻略合集
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),渐进线为y=±1,其特点用通俗的话来说就是±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(h>0)与护甲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)这一命题的数学本质。但若玩家的护甲值为负,则该命题不再成立,原因在于当x<0时,∂ε/∂x=15h/(15-2x)^2,此时有效生命值ε对x的偏导数为x的函数,而非常数。
2.3 偏导数方法对比护甲与生命值词条收益
根据上述偏导数可得,理论上说,在面对升级选项的加点时,假设玩家目前的最大生命值为h0(h0>0),护甲为x0,最大生命值选项为+Δh,护甲选项为+Δx,那么在加点时只需计算并比较(Δh)∂ε/∂h|(h0,x0)与(Δx)∂ε/∂x|(h0,x0)的大小,选择值较大(即有效生命值ε提升更大)的选项即可。
但在实际游玩过程中,上述方法存在明显的问题。第一,普通玩家大多没有耐心去记忆并每次都临场计算上面4个偏导数公式;第二,《土豆兄弟》中的数值较小,且普遍采用四舍五入的方式来计算,因此前期直接堆护甲显然是并不划算的,打个比方,假设前期某敌人的伤害为4,则你需要堆3点护甲才能将其伤害降为3(除非你游玩的是骑士或尖刺盾等靠护甲转伤害的角色或武器,但这就是另一回事了),此时显然不如直接加最大生命值来得划算;第三,若玩家为负护甲,则∂ε/∂x为x的函数(见前文),偏导数(瞬时变化率)∂ε/∂x|(h0,x0)并不能代表它在[x0,x0+1]区间内的平均变化率,打个比方,设函数f(x)=lnx,我们知道f(1)=0,f'(1)=1[即y=f(x)在(1,0)处的切线方程为y=x-1],但f(2)=ln2≠1,曲线y=lnx是被直线y=x-1“压在下面”的。
基于前文的分析,我们的思路即为“通常情况下,前期在防御端优先考虑最大生命值而非护甲”,那么我们需要堆到多少血再转护甲呢?在《土豆兄弟》中,对于相同品质(等级)的升级选项而言,最大生命值在数值上等于护甲的3倍,如白色(1级)品质为最大生命值+3或护甲+1,蓝色(2级)品质为最大生命值+6或护甲+2,以此类推。因此“何时转护甲”即为解关于h的不等式∂ε/∂x|(h,0)>3∂ε/∂h|(h,0),代入得h/15>3,解得h>45。所以结论即为:若玩家的护甲值为零,则当面对相同品质的最大生命值和护甲升级选项时,若玩家的最大生命值大于45,则加护甲的收益更高,否则加最大生命值收益更高(很多玩家可能知道“45血”这个阈值,但是并不知道它是如何被计算出来的,这里我帮大家拆解出来了)。注意“45血阈值”成立的充要条件为玩家当前的护甲为零(x=0),否则该值会发生偏移,大伙如果有兴趣的话可以自行尝试计算。
再补充一个点,部分玩家可能会好奇幽灵(自带-100护甲)这个角色是否需要补护甲,毕竟-100这个数字看起来确实有些吓人。这里我的答案是不需要,且购买筹码、玻璃大炮等减护甲的强力道具时也不需要有任何顾虑,实在不放心的话只需补点最大生命值即可。证明如下:当x<0时,dy/dx=15/(-x+15)^2①,∂ε/∂x=15h/(15-2x)^2②,∂ε/∂h=(15-x)/(15-2x)③。当x=-100时,由①得,减伤比例的瞬时变化率仅约为0.11%;由②得,有效生命值对护甲的瞬时变化率更是仅约为(3.24*10^-4)h;由③得,有效生命值对最大生命值的瞬时变化率约为53.49%。可以看出,此时加最大生命值的收益仅仅只是“砍一半”而已,但加护甲的收益却几乎可以忽略不计,同时减护甲带来的影响也几乎可以忽略不计。因此,幽灵还是应该考虑如何把闪避堆满90%,并通过走位以及水熊虫等特殊道具来保证容错率,而不是想着补护甲。
PS:
1. 这篇帖子是我根据此前7月份的帖子进行了一些补充、完善和修正,并重新整理上传的。同样难免可能存在一些纰漏,恳请各位土豆大佬批评指正。
2. 有效生命值ε对护甲x的二阶偏导数∂^2ε/∂x^2在x=0处是不存在的,这一点大伙有兴趣(以及无聊)的可以自己试着证一下。
3. 上述几个函数大家可以用“图形计算器”(对一元函数)和“3D计算器”(对二元函数)这两个App来自行绘图(在应用商店搜索“GeoGebra”即可),从而更直观地观察其性质。
4. 我写这个帖子的主要原因是近期《土豆兄弟》国服社区的萌新和路人玩家较多,他们也许并不了解原版《土豆兄弟》具体长什么样,且很可能会被国服中错误的难度标注、荒诞的局外养成与数值膨胀,以及社区中错误的劣质攻略(如霰弹枪企业家)所带偏,因此我在此帮他们科普一下,同时我也想让大家知道,没有国服特色氪金框架和重度局外养成的原版《土豆兄弟》的数值设计和构筑深度有多么精妙。最后,我希望真正热爱这款游戏的路人玩家有条件的话能支持Steam版或手游国际服买断版等原汁原味的纯粹正版(后者可私我指路),从而真正领略它的魅力所在。

















