对魔兽攻击伤害算法及平衡性的研究

内容摘要:

◆ 星际的攻击伤害算法回顾

魔兽3的攻击伤害算法回顾

◆ WOW的伤害算法解析(含卡服原因推测)

 

 

在阅读本文前,我强烈建议您先看一看我之前的一篇文章基础理论:对火星算法的研究,这会让您更容易理解本文的内容。

 

BLZ被称为平衡大师,其作品也一向以其严谨的平衡性和高度的可玩性而在全世界范围经久不衰,甚至开辟了电子竞技这一新的领域,因此要研究BLZ应该从其最早的平衡性大作星际说起。

 

星际的攻击伤害算法回顾

 

如果没有星际,电子竞技这一运动少说也得晚几年才会出现,作为最早一部用于电子竞技的游戏,星际至今仍然是被认为是最平衡的。

 

论平衡性,如果星际只称第二,恐怕没有哪个游戏敢称第一,之所以能够取得如此伟大的成就,并非是没有原因的。

 

1,星际仅有3个不同的种族,每种族不足20种攻击单位。

曾有人笑称:世界上最平衡的就是剪刀、石头、布。虽然说星际的3种族并不是剪刀、石头、布的关系,但却也能达到一种剪刀、石头、布的效果,不多的元素给星际的平衡性调整带来很大的便利。

 

2,以加减法为主的攻击伤害算法。

简单的加减法计算是星际的主要伤害算法,伤害=攻击-防御,因为简单所以调整起来相当容易。修正之前的一个笔误,在SC里某些有两次攻击动作的单位如狂徒、Scout(侦察机),其伤害按照x*2来算,比如狂徒是8*2=16,侦察机是14*2=28。举个例子,狂徒(俗称叉叉兵)没升科技是16点攻击,每级科技加2点;小狗没升科技是35点血,0护甲。根据星际的算法,那么在双方都没升科技的情况下狂徒需要3下才能打死一条狗,如果神族升了一级攻击而虫没有升防御,那么狂徒仅需2下就能打死一条狗((8-0)*2+2)*2=36,2点伤害带来的效果在面对狗时等同于提升了50%伤害。如果虫也升了1点防,那么狂徒仍然需要3下才能打死一只狗((8-1)*2+2)*2=32。如果狂徒升了2级而狗只升了1级,则狂徒又只需要2下打死1只狗((8-1)*2+4)*2=36,此时神族占优势;如果神的科技不变而狗升了2级防,那么狂徒又要3下才能打死1只狗((8-2)*2+4)*2=32,只要双方的科技一样,狂徒始终需要3下才能打死一只狗……这样一进一出的两方对比,总是让平衡贯穿整个游戏。再如圣堂武士和潜伏者,在修改之前圣堂武士的一把闪电风暴可以造成128点伤害,而潜伏者仅有125点血,也就是说就算潜伏者升满防御,如果被闪电电了而没有移开,那么在闪电结束后一只满血的潜伏者也会丧命,这对于虫族来说是非常不利的,因为潜伏者的造价比圣堂武士可高多了。因此为了平衡,BLZ后来削弱了闪电风暴的伤害,让潜伏者即使接受一次完整的闪电风暴也不会死,神族想用圣堂武士扫雷的难度被提高了。类似的例子举不胜举,大部分高级单位在满科技情况下都更能发挥自己的威力,而在低科技下很多时候连低级兵都不如。

 

3,以乘除法为辅的攻击伤害算法。

如果只有加减算法,那么星际是不可能达到平衡的,因为一些低级兵将永无出头之日。比如龙骑和机枪兵。龙骑的攻击是20,每级攻+2;而机枪兵的血只有40,每级防+1。如果只有加减算法,龙骑仅需2下就能打死一个机枪兵,加上龙骑强大的射程优势,机枪兵只有送死的份。因此为了平衡,BLZ给了龙骑一个限制:打机枪兵时只能造成50%的伤害——不止是机枪兵,几乎对所有的小型生物都是如此,比如虫族的狗;除此以外,龙骑打中型生物只能造成75%伤害,比如刺舌(俗称口水兵)。刺舌打机枪兵也是50%伤害,坦克打小狗也是50%伤害,等等。乘除法的计算主要用于限制远程兵,避免其过于强大,对于近战兵是没有任何限制的,也是这个原因才使得在前期神族的狂徒火力更猛,但却也更容易死。这种修正是魔兽3兵种不同攻击类型和护甲类型的雏形。

 

 

魔兽3的攻击伤害算法回顾

 

魔兽3相比于星际,除了增加了英雄这一单位以外最大的变革就是增加了一个随机数的算法,也就是类似于D&D规则中的投骰子算法,在上一篇文章中我有作过专门的分析。星际的算法虽然严谨的滴水不漏,但是一个致命的弱点就是缺乏变化性。举个简单的例子,还是拿狂徒说事:两个科技完全一样的满血狂徒对K,拼到最后肯定是一个死而另一个仅剩一丝血,全身通红——这样的结果太无趣了。为了改变这一现状,让战斗更充满变化性,于是随机数的算法被加入,攻击伤害由一个固定值变成了一个基础值加上一个随机数。比如人类步兵的伤害是11+1D2,所以显示出来是12~13,火枪兵是16+2D4,所以显示出来是18~24;每提升1点科技不再是加上一个稳定的值,而是直接加骰1,比如火枪兵升一级后加骰1伤害变成16+3D4,显示出来是19~28,升满后加骰3伤害变成16+5D4,也就是21~36。那么这个算法能带来什么呢?还是看图说话:

 

从上面可以看出来,虽然伤害有了一定的波动,但是仍然具有一定的稳定性,而这也恰恰是这个算法的优越性所在:在保证一定不确定性因素的前提下,同时兼具一定的稳定性。而它的平均值也非常好算,(最小伤害+最大伤害)/2就是准确的平均值,实际造成的伤害总是在它周围出现的概率大,在两端出现的概率小。

 

为了更明了地反映上述概率分布所带来的变化,我将计算结果的实际概率统计入下表:

伤害值

16+2D4

16+3D4

16+4d4

16+5d4

18

0.062806

 

 

 

19

0.124626

0.015461

 

 

20

0.187641

0.046891

0.003912

 

21

0.250022

0.094586

0.015693

0.000976

22

0.18698

0.155751

0.03902

0.004934

23

0.125567

0.187867

0.078235

0.014567

24

0.062358

0.187317

0.120827

0.034324

25

 

0.155828

0.156002

0.063161

26

 

0.09377

0.172467

0.098414

27

 

0.047016

0.155981

0.132257

28

 

0.015512

0.120657

0.151156

29

 

 

0.078388

0.151492

30

 

 

0.039238

0.131782

31

 

 

0.015518

0.099031

32

 

 

0.004062

0.063405

33

 

 

 

0.033984

34

 

 

 

0.014633

35

 

 

 

0.0049

36

 

 

 

0.000986

方差

0.004137 

0.004155 

0.003576 

0.003029

从上表中可以看到,无科技和1级的情况下,方差是差不多的,也就是说曲线的坡度基本一样,数值的波动比率都基本保持一致,伤害较为稳定;但是1级升2级,2级升3级方差开始下降,也就是说曲线的坡度开始变得更为平缓,数值的波动比率减小,伤害变得更不稳定。

 

在攻击开始有了浮动值的情况下,如果伤害还采用加减算法那么无疑是很不合时宜的,因为这根本就难以平衡了,在浮动范围如此高的情况下(某些单位的浮动值达到了每级17点,如投石车)再用加减算法会急剧放大随机性的效果,让战斗结果更加取决于运气,因此为了平衡,防御的计算便采用了乘除法。其公式为:

当护甲≥0时,减免的伤害比=(护甲值×0.06)/(护甲值×0.06+1);

当护甲≤0时,承受的实际伤害=2-0.94^(-护甲值)。

为了更便于理解,取护甲值从-500到500,按承受的实际伤害值来计算,得到下图:

 

可以看出,当护甲为负时极限为受到2倍伤害,由于使用的是乘方公式,因此提升额外伤害的速率非常快,仅在护甲-38时就要承受190%的伤害了;当护甲为正时减免伤害的速率则低的多。

 

为了更直观地了解每点护甲所提供的伤害减免效率请看下图:

 

随着护甲的提升,每一点护甲所能提供的伤害减免是逐渐降低的,从第1点护甲的减免5.6604%到第2点的0.53571%、第10点的3.75%,到第83点时仅能在上一级的基础上再减免1.0033%。

 

除了最基本的算法外,在星际中隐藏的伤害减免百分比被发扬光大了,在WAR3中所有的攻击和防御都分为好几种类型,不同类型之间有明显的互克关系。英雄的加入和伤害算法的大幅改变虽然使得WAR3在平衡性上面并不如星际好,但却让战斗更丰富、更有观赏性,也更加的充满戏剧性,因此而被称为即时战术游戏。

 

 

WOW的伤害算法解析(含卡服原因推测)

 

在WOW里,玩家操作的对像由若干种兵变成一个象征自己的角色,那么是否会沿用WAR3的随机数算法呢?由于在WOW中伤害的浮动主要取决于武器,那么就从武器研究起。

 

有一个很有意思的现象就是,同样DPS同样速度的武器,其伤害范围是绝对固定的,不仅竞技场装备如此,其他装备也一样如此,比如遗产绝望,都是114的DPS,3.5的攻击速度,伤害范围都是从319到479;再如血吼戈隆领主之斧纳鲁之锤,都是119.9的DPS,3.6的速度,伤害范围都是从345到518,类似的例子举不胜举。此外还有个现象就是,从大范围来看,武器最高伤害与最低伤害的差值小到1点,大到200多点都有出现,这说明范围的控制是非常精确的。

 

假如WOW的武器伤害是采用WAR3的多随机数算法,将以上2个现象相结合后便可以得出这样一个结论:WOW的武器伤害是采用多次投2面骰来确定的,公式可以写成MIN+xR, MIN表示武器最低伤害,x表示投骰的次数,R表示骰子只有2面,取值为0或1(这一记法详见我上一篇文章基础理论:对火星算法的研究),形象点来说就是武器伤害=最低伤害+随机伤害。

 

如果WOW是采用这种算法,那么就很容易地解释前面所提到的两个现象了,因为任何一把武器的伤害范围都可以表示为MIN+xR,比如遗产绝望的伤害是319+160R,血吼戈隆领主之斧纳鲁之锤的伤害是345+173R,甚至最低级的灰色和白色武器也可以这么标记,比如无力短剑的伤害是3+4R,农夫之剑的伤害是2+2R。使用这种算法的特点是:1,同DPS同速度的武器其伤害范围必然固定;2,伤害范围可以非常精确;3,便于批量添加装备。这三点非常符合WOW的现状。除此以外,还有一个不得不提的特点,那就是:过多的随机数计算让服务器不堪重负,这或许能够解释为什么在TBC开了以后经常会在大家RAID时卡副本,因为在TBC之前,一次攻击造成的伤害服务器只需要扔出100个左右的随机数,然而在TBC后全民T4级装备的情况下一次攻击造成的伤害服务器就得扔出150个左右的随机数,增加了近50%的运算量!而且随着大家装备的提升,这个运算量还会越来越大,在服务器质量和玩家人数不变的情况突然增加了如此多的运算量,不卡服才怪了。也许正是因为算法的原因,BLZ才会在TBC开时一再要求运营商升级服务器,因为以前的服务器根本无法满足TBC的运算量。

 

事实果然如此吗?为验证我的推测,我特地上了一个骑士号来做实验,洗掉天赋后去砍诅咒之地那种打不死的小怪,然后记录下所有的攻击伤害,再汇成图表。这个过程花了我近半个晚上,记录是一件非常痛苦的事情,最后的结果却很让人沮丧。实验用的武器是血吼,如果实际情况与我推测的相同,那么在加入攻击修正后的理论概率分布将会如下所示:

 

然而实际的情况,根据我的记录却是这样的:

两者相差太大,说明目前的WOW不太可能是我推测的那种算法。

 

于是我进行了两个新的推测:

1,BLZ压根就没有想过使用这个折磨服务器的算法。

对于WOW来说变化性已经够多的了,不再需要多随机数算法来达到运气和实力的平衡。从数据统计上来看,所有的高级武器浮动范围都是在±20%左右,如果再加上其他的伤害加成,这一浮动范围会缩减到±10%左右。

 

2,考虑到服务器的质量(特别是CWOW),BLZ后来把算法简化掉了。

这就是为什么近期服务器没有以前那么卡的主要原因。半年以前我还在参与RAID,一个让我印象非常深刻的事情就是服务器经常卡(注意,卡分两种,一是网络卡,一是服务器卡)——在网络延迟无比低的情况下还会经常DOWN掉,很明显是服务器处理不过来的表现,这是典型的服务器卡;而后来大家反映服务器状况大有好转,这可能就是BLZ改变了算法,由一次攻击扔出上百次的随机数再相加简化成只扔一次随机数直接得到结果,对于服务器来说由这一改变而减少的运算量是相当巨大的。它可能就是在某个补丁更新以后才做的改变。如果是这样,那么就是BLZ在无奈之下所做的一个让步,因为按照这种算法每次战斗的运气成份要比之前大的多。

 

就个人的感觉,第二种推测更有可能成立,然而我缺少在卡服时代的伤害记录做为依据来支撑这一观点。

 

或许还有其他可能?然而个人时间、精力有限,不可能再去收集更多的数据来进行推导了。

 

文章过长,分两部分发。

下部分内容摘要:

◆ 火星算法的实例分析

◆ WOW的平衡模型三层构建理论

 

内容摘要

◆ 火星算法的实例分析

◆ WOW的平衡模型三层构建理论

 

 

火星算法的实例分析

 

仍然是假如。

 

假如连WAR3的随机数算法也无法满足BLZ的设计师,他们想来点更加复杂的——比如我说的火星算法,那么WOW将会变成什么样子?

 

还是拿武器说事。假定有3把武器,伤害分别为4es、 5el和3d12,也就是说伤害范围分别为3~30,4~40和3~36,它们随机到各个数值的概率分别如下:

 

为了便于比较,我将三图合一,得到下图:

 

从上图可以看出来,4es要比5el好,但是 4es和3d12谁好谁差则难以比较了。不过让人难以接受的是,4es的范围只有3~30,而5el的范围有4~40,如果拿给玩家看,这不是捉弄人么?退一步讲,即使玩家知道4es比5el要好,可是具体好多少呢?使用模拟演算平均值是一个方法,可是即使我模拟100W次的计算,也仅能精确到小数点后1位,随便是如此也仍然难以确定它们之间的差距到底有多少。当然,如果模拟更多次,比如上万亿次的计算可以得到更精确的值,然而这些细微的差距如何体现呢?再退一步讲,即使能够使用精确的计数来区分它们之间的细微差距,可是WOW拥有如此庞大的装备库,要把它们一一区分开来要何年何月?

 

不能准确定位武器的价值是火星算法的一大弊端,如果BLZ要使用这种算法就等于是在给自己找麻烦——连最基本的装备平衡都难以保证了,还谈何其他的平衡。所以如果把火星算法用于一个MMORPG中玩家的伤害计算是极为不明智的一种作法,尽管它看上去很美,很前卫,也很先进,但是却并不是在任何时候都合适。

 

 

WOW的平衡模型三层构建理论

 

做为一个大型多人在线的游戏,WOW在平衡性方面所面临的挑战是星际和魔兽3远远无法比拟的,庞大的数据库给WOW的平衡调整带来极大的困难。

 

在星际里,由于算法的简单,对平衡性的调整主要集中在数值上面,通过不断的数值调整来达到平衡;在魔兽3里,算法开始变得复杂起来,而且增加了英雄和装备,因此对平衡性的调整除了针对数值,也开始对算法、技能和装备进行调整,比如NE流行种树的时候,BLZ修改了可移动的古树护甲类型来避免这一霸道而又缺少变化的战术过于强大,这实际上对算法的一种调整;再如以前英雄的范围魔法可以对无数目标造成同样的伤害,BLZ给其加上一个目标上限,限制了英雄的过于强大;又如以前剑圣的疾风步不能穿人而使得剑圣的这个技能几乎是废柴,BLZ让其可以穿人并增加一定伤害来让它变得实用等等,这些都属于对技能的调整。

 

魔兽3虽然在方方面面都有调整,但好在可调整的东西并不多,工作量不算太大。如果WOW在对平衡性进行调整时也对各方面进行调整,那将是不可想象的一件事情,因为影响WOW平衡性的因素实在是太多了。

 

所以WOW必须要搭建一个平衡模型,进行有重点的调整,这便是三层结构的平衡模型,如图所示:

 

第一层就是基本数值、算法和公式的构建,它是构成整个游戏平衡性的基础。

这一层的构建包括三大部分:

1,角色的成长。

它包括角色能力和成长率两部分。角色应当具备哪些能力?生命值总要有吧?技能值总要有吧?防御值也要有吧?除此以外还有哪些可以丰富角色能力或者限制角色能力的东西?于是像命中、闪躲、抗性等等各种各样的东西被加入了进来。成长率是指随着角色等级的提升所获得的能力提升幅度(含自身的提升、技能的提升和装备的提升),设计师会给出一个规划图,然后按照这个规划图来给角色设定具体的基本数值,比如生命值。为了防止等级无限上升所带来的种种问题,BLZ给了一个等级上限,并以此等级上限做为数值、算法和公式构建的基础。

 

2,战斗。

战斗是个重头戏,这部分主要包括算法和公式的构建,它通常在上一步的基本数值完成以后才进行,而且它也可以反过来影响数值的修改。算法和公式的构建是一个非常庞大的工程,它往往要经过诸多的模拟测试和反复验证才会成型,它与规划图有着非常密切的关系,而且会以角色等级上限来制定相应的公式和算法。一旦它建立,则很少再进行修改,除非遇到其他重大设计缺陷或者大游戏版本的更新(比如资料片)。

 

3,装备。

装备一直以来就是MMORPG的一个重要玩点,为了丰富这方面的内容WOW建立了空前庞大的装备库,然而如此庞大的装备库倘若缺少相应的手段来规范和管理,那么对于游戏的平衡性来说就是一场灾难。因此,BLZ制定了一套标准来给装备分配相应的属性,这个标准就是装备等级:所有的属性都可以按照一定的规律化成相应的等级,等级越高表示装备越强,从而让装备的平衡有了依据。有了这个依据,BLZ就可以批量地添加装备,而不必在每次添加装备时都要进行细致的平衡性分析——虽然装备等级不一定准确,但是有它比没有它显然要好的多。现代工业都有工业标准呢,游戏装备在游戏中与工业产品在现实中又是如此的相似,为什么不给它建立标准?装备等级换算公式的建立给BLZ省下了一个大麻烦,从而让他们有足够的精力把平衡性的调整花在更重要的方面。

 

第二层是职业、技能和天赋的构建,这是玩家最关心的部分,也是BLZ重点调整的部分。

第三层是大环境的构建,更多地指玩家与玩家之间、玩家与环境之间等等,这一部分BLZ只能给出一个理想中的大环境,由于玩家自发的行为相当的不可控,因此对这部分的调整难度相当大,而它也不如第二层重要,因此BLZ对它进行调整的力度也比较小。

 

关于第二层和第二层,我在以前的一篇文章WOW平衡性设计理念中已有提到,这里就不谈了。

 

基本数值、算法和公式是平衡模型的基础,BLZ也很少动它。事实上BLZ也差不多只动了它2次。

 

第一次是统一技能武器速度的调整。BLZ在构建这一基础时忽略了一个很大的问题,这就是技能武器速度。其一,PK与打怪不一样,打怪多数是木桩战,因此BLZ原有的技能武器速度是合适的;然而PK多数情况下是运动战,这让快速武器完全发挥不了威力,而越是慢速的武器越能发挥威力。其二,无论是持慢速武器还是快速武器,技能的消耗和冷却都一样,但使用慢速武器造成的伤害明显要比快速武器高的多,这是一个很严重的问题,是BLZ在设计时未曾考虑到的一个缺陷,它使得快速武器几乎没有多大用。统一技能武器速度的调整就是对以前的不合理设计所做的一个弥补,它大大改善了武器的平衡性。

 

第二次是在TBC开放时的一次大规模修改,其程度接近重建整个数值系统。由于等级上限的提高,以前基于60级而建立的数值系统已经不再适用,所以必须要引入新的机制。这些的修改主要包括以下几个方面:

 

1,重新部署角色的成长。

虽然等级只提升了10级,但是这10级的提升绝对不能像50级升60级所获得的能力提升那样,而应该更多,否则提升太少不便于提高玩家的积极性,所以在TBC我们才有每级1,200血的提升,这在TBC之前是不可想象的。

 

2,修改相应的算法和公式。

其一是爆击等级、命中等级、闪躲等级等战斗等级的加入,如果不加入这些东西,那么新的装备与老的T3级装备相比竞争力不会太大,如果给予新装备足够强大的竞争力那么角色又会向着无敌的方向发展,为了平衡这种关系就不得不加入战斗等级来降低老装备的价值,提高新装备的价值,同时又不会让角色变得过分强大。其二是相关公式的修改,甚至是重建,比如攻防计算公式。按照原有的公式,角色在70级时只需要拥有8000多的护甲就可以达到75%的免伤上限,这显然给新装备的设计带来极大的困难,于是一个新的公式便出现了。为实现与旧世界公式的无缝连接,TBC的公式采用一种类似于分段函数的方法,即在60级以内使用原公式,61级-70级使用新公式,这样做的好处就是它不会破坏旧世界的东西(要知道MF是有些玩家没买TBC而继续在旧世界玩的)。

 

3,装备的定向性修改。

这个更是关系到游戏整体架构的改变。TBC需要更好的满足玩家需求,开始了PVP与PVE的分流,关键性因素之一便是装备的定向性设计,韧性的加入就是满足这种需求的一个东西,因此原有的装备等级得到了一定的扩充和完善,而装备能力的提升也按着新规划的方向来设计。

 

话说回来,BLZ这种近乎滴水不漏的平衡模型也有其弊端,以装备系统为例来说明这个问题。严格的装备等级使得装备很容易平衡,然而这也让BLZ觉得这方面没什么好调的——也确实也多少好调的。问题就在于,过于模式化的东西让装备实在缺乏变化性,玩家失去了搭配和选择装备的乐趣:下副本,一身T系列装备;PK,一身S系列装备。最应该有变化性的PVP装备更是夸张到一个模板里刻出来的一样,玩家根本就不需要考虑什么不同装备搭配了,穿上打就是,因为大家都一样。如果单纯的从平衡性来考虑,这样做确实不错,可是WOW并不是一个纯粹的电子竞技游戏,玩家也许对丰富的玩法更为在意。

 

回过头来看BLZ的平衡性设定可以发现,他们的思路很清晰,方向很明确,重点也很突出,这样才能在后来进行平衡性调整时比较的得心应手。平衡性糟糕的游戏往往是出在思想上,为什么这样设计?这样设计的目的是什么?它能否达到设计的目的?等等一系列问题,如果连自己都无法回答,那么即使他是个数学天才也做不出一个让人满意的平衡系统来。我们与BLZ的真正的差距在于设计理念上,这种思想认识上的差距才是最大的。

阅读更多
上一篇《魔兽争霸3》魔兽攻防算法
下一篇Delta3D引擎
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭