如果把游戏架构比喻成一个人的话,那么公式无疑就是这个人的筋骨。不管是什么数据,最终想发挥作用都是要通过公式环节,而在公式中的价值才是衡量属性价值的最终标准。下面给讲解一下战斗的流程。

战斗流程解析

在这里我们讲解的是即时制MMORPG的攻击流。传统回合制的流程会略有差别,因为传统回合制一方攻击的时候,另一方没有任何操作行为来干扰攻击者。
对数值来说,战斗由两大模块组成,一个是战斗公式生效前的战斗攻击流程,一个是战斗公式与自身流程。大家比较容易理解战斗公式与数值关系密切,而战斗攻击流程和数值策划有哪些关系?相信介绍之后大家就会有所了解,下面我们给大家讲解战斗攻击流程。

近战模式

假设此时的我们是战士,正在杀怪升级,突然发现了一只兔子,这时我们发动了攻击。同时我们的状态发生了改变,我们进入了战斗状态(战斗状态会涉及一些逻辑判断,在这里不对状态机做过多讲解)。

还原一下真实的物理环境,第一步我们应该做什么?没错,挥动我们的武器,一把斧子,这就是第一个环节:动作的前摇。这斧子可真是沉重,足足消耗了0.5秒(这里说明一下,前摇时间包含从蓄力到出手的时间,我们不是动作游戏,就不做更进一步的细分了)。

成功发动前摇动作后,斧子会完成向下砍的攻击动作。这时候大部分的MMORPG游戏就已经认定本次攻击成功发动。我们会进入战斗公式自身的判断流程。

这里要搞清楚为什么会有一个前摇动作判定。这其实主要是用来判断攻击方状态的缓冲状态,如果我们的战士在前摇时间内被第三方发动的攻击晕住了,那么战士的攻击会被打断,后续的流程也就停止了。但如果过了前摇时间,那么攻击其实就成功发动了。大家可以仔细观察一些MMORPG,你会发现明明自己已经打断了怪物的攻击前摇,但你依然受到了伤害,那是因为你并没有真正打断他的攻击前摇,或是它根本就没有攻击前摇。

接下来继续之前的流程。我们的战士攻击力还是很可观的,一斧子就砍死了兔子(后面会对战斗公式进行详细介绍,这里先不用在意造成了多少伤害)。斧子还在兔子身上,我们又消耗了0.5秒拔出斧子,这就是我们的后摇时间。此时我们恢复到攻击之前的身位,这也代表我们完成了一次攻击,然后可以进行下一个攻击循环。

我们用图来解释一下本次攻击,如图1-1所示
1-1

在进行下一次攻击循环之前,我们还有一段时间,那就是冷却时间。一般来说普通攻击不会有冷却时间,技能会根据技能的强度以及技能的功能性来决定冷却时间的长短。冷却时间在工作过程中往往被设计人员称为CD(cool down的缩写)。

这时候对于数值策划来说,我们需要关注一个重要问题:冷却时间的计算方式。

在图1-1中我们可以看到有3个可以计算冷却时间的点。①前摇之前;②前摇之后,后摇之前;③后摇之后。我们假设冷却时间为1秒,下来看一下1分钟之内不同情况下的攻击次数,如图1-2所示。
1-2

大家可以清晰地看到不同时间点结算的情况,会有非常大的攻击次数差距。所以在工作过程中一定要弄清楚这个问题,到底从何时开始、何时结束以完成一次攻击流程。因为这个影响到你计算职业或是武器的输出能力。

远程模式

之前给大家介绍的是近战模式的战斗流程,那么远程模式会有何不同吗?在这里我们选取了最具代表性的职业:法师。

还是要寻找怪物升级,我们发现了一只野猪,目标已锁定,法师要开始发动攻击了。

首先,法师在释放法术之前要吟唱。第一个步骤吟唱所需的时间,你也可以看成是远程模式的一种另类前摇时间。我们释放了一个简单的小火球,吟唱时间非常快地完成了。

然后火球从我们双手飞出,进入了飞行时间。这是一个非常不好衡量的时间。一般来说,我们会把游戏中的物品飞行速度调得尽量快。从数值角度来讲,我们不希望不同弹道的速度导致的差异对数值产生较大冲击。

火球终于飞到了野猪身上,而此时才会进入战斗公式自身计算的流程。为什么不是之前就计算?虽然火球飞行的时间很短,但是在这段时间还是会发生很多事情。比如野猪被其他人击杀等。所以会等待子弹触碰到目标的这个时间点再去计算战斗公式。

而当火球从我们双手飞出去的时候,法师已经开始恢复之前的身位了。也就是说,火球的飞行时间和后摇时间是同步的。

我们再用图来解释一下本次攻击,如图1-3所示。
1-3

此处,飞行时间不可控,请大家不要误以为它一定会比后摇时间长。

公共攻击冷却时间

之前给大家介绍了两种模式下的攻击流程。而这里要给大家介绍的是公共攻击冷却时间,也就是大家所说的公共CD。(这里不对公共CD规则做深入探讨,其实从严格意义来说,它定义了很多互斥的技能集合。)

为什么要有这样的设计呢?

最直观的原因就是限制角色在单位时间内的指令量和输出量。这就相当于给所有技能加入一段固有的冷却时间。这样可以更好地控制技能的输出量,不会让秒伤达到难以控制的地步。而玩家在实际战斗过程中,往往都是以技能序列的方式(就是先用技能A,然后用技能B,之后接技能C,再循环到技能A)输出的。如果没有公共CD,那会对输出量的计算造成非常大的冲击,不好控制这个量级。建议大家在自己做MMORPG的时候也设置公共CD。

攻速

攻击速度简称攻速,一般在即时游戏中用来衡量攻击的快慢,而在回合制游戏中攻速(也有叫先手值,或是用敏捷来衡量的)往往是用来决定出手的先后次序的。

而这里说的攻速,其实就是用之前看到的整个攻击环节所需时间换算出来的。比如之前我们一共消耗了1秒完成一次攻击,那攻速就是1次/秒;如果我们用0.5秒完成一次攻击,那么攻速就是2次/秒。当然你也可以用X秒/次来衡量攻速。只要衡量单位统一就可以。

大部分即时游戏会将攻击速度和武器挂钩,也有游戏用敏捷来衡量攻速。这其实也是很容易理解的,一个敏捷高的人肯定挥动武器的速度更快,一个质量大的武器肯定比质量小的武器攻速慢,但也由于质量的原因它的攻击力会高一些。

那斧子和匕首在数值角度有哪些优劣?首先斧子攻击力高,在面对高防御的怪物时,斧子比匕首更容易造成高伤害。匕首虽然攻击力低一些,可是由于单位时间攻击次数多,它的输出其实更加稳定。

如果你拥有匕首或是斧子,那之前的属性发展方向又是什么?匕首攻击平稳,提升攻击力更为划算,而斧子则提升命中和暴击一类的属性更为划算。

战斗公式流程

战斗公式的流程在此介绍两种,一种是圆桌理论,一种是逐步判断理论。

战斗在结算的过程中,会遇到下面这样的一些问题。

1.攻击的类型是什么?(某些游戏因不同攻击类型,公式差异很大。比如《魔兽世界》,物理和魔法两种攻击的公式是完全不同的。)

2.确定攻击类型之后,本次攻击会产生哪种结果?暴击、未命中、普通攻击、神圣一击(一种特殊结算,类似暴击)、格挡、抵抗等。

3.各个环节会有不同的计算公式,比如暴击有暴击公式、命中有命中公式。那么这些公式如何设计?

这里将介绍如何解决第二个问题:如何计算攻击产生的结果。而第一个问题是由技能表中的一个标示攻击结算类型的字段进行区分的。第三个问题我们会在后续文章中进行讲解。

逐步判断

逐步判断,顾名思义,就是一步一步判断下来,我们假设本次攻击是物理攻击,目前已经进入物理攻击流程。下面通过流程图来理解一下,如图2-1所示。
2-1
从图2-1中可以看出,这种流程是非常清晰易懂的,我们先判断是不是命中目标,如果没有命中那直接判断结果为未命中,命中的话我们再判断是否暴击,没暴击则产生的是普通攻击。当战斗可产生的结果类型没那么多的时候,这种流程是一种非常好的选择。而一旦判断结果类型多了以后,想要控制数值就比“圆桌理论”更为艰难了。下面来看下“圆桌理论”,然后再对比讲解。

圆桌理论

“圆桌理论”来源于“一个圆桌的面积是固定的,如果几件物品已经占据了圆桌的所有面积,其他物品将无法再被摆上圆桌”。

《魔兽世界》中,“攻击”的结果由以下部分组成,并按照攻击结果的优先级递减排列(顶部结果的优先级高于其下面的部分)。

先判定是否未命中→如果命中是否躲闪→如果未躲闪是否招架(从背后攻击则没有)→如果未招架是否偏斜(仅出现在玩家和玩家宠物对怪物时,因为Boss等级比玩家高3级)→如果未偏斜是否格挡(从背后攻击则没有)→是否被怪物碾压(仅出现在怪物对玩家和玩家宝宝时)→最后才是普通攻击。

也就是说,每次近战攻击(除玩家造成黄色伤害的技能攻击外)都可能会出现未命中、躲闪、招架、格挡、偏斜、暴击、碾压,除此之外将是一次普通攻击。由于存在优先级的问题,所以这个列表中有些近战攻击结果有0%概率存在。例如,玩家的自动攻击造成碾压的概率是0%,怪物的攻击有0%的概率被偏斜,对没有装备盾牌的玩家的攻击被格挡的概率是0%等。

如果未命中、躲闪、招架、格挡概率的和达到100%或更高,攻击的结果不仅不会出现普通攻击,还不会出现暴击和碾压。

也就是说,如果优先级高的各结果的和超过100%,会把优先级低的各种结果挤出桌面——即为“圆桌理论”。

对比

现在对比一下这两个理论。首先假设一个战士(人物属性如下)对目标做出攻击,并且判断为物理攻击。

命中率:70%(未命中率30%)
暴击率:10%

我们先看下逐步判断的结果。

①未命中目标,概率为30%。
②命中目标并且产生了暴击,概率为(1-30%)×10%=7%。
③命中目标但未暴击产生了普通攻击,概率为(1-30%)×(1-10%)=63%。

最终30%+7%+63%=100%,结果是没问题的,也涵盖了我们列举的情况。

相信对数值敏感的同学已经看出问题了,优先级高的判定情况获益更高。不管优先级怎样排列,处于低优先级的判定情况在计算其最终出现概率时,都要乘以(1-n%)的因子,使之低于原始概率。这对于各种情况来讲就造成了不平衡。比如当战士攻击目标降低了1%命中率,那它是实实在在的1%。但是如果提升了暴击1%的概率,其实际作用效果永远要先乘以命中概率,几乎说肯定是低于1%的。如果我们暴击之后还有别的判定,那就更加会受到衰减。这也是很多国产游戏会面临的一个问题,游戏中闪避的价值在后期会高于其他属性(前期攻防低收益不大),因为它的判定优先级高。

然后我们再来做一个假设,之前命中率为70%,现在我们遇到了一个极为强大的BOSS,命中率只有20%了,那其他情况还有多少概率?

①未命中目标,概率为80%。
②命中目标并且产生了暴击,概率为(1-80%)×10%=2%。
③命中目标但未暴击产生了普通攻击,概率为(1-80%)×(1-10%)=18%。

我们来对比改变前后的数据,暴击从之前的7%降低到2%,命中从63%降低到18%。从等比稀释角度来讲,逐步判断公式能将各种可能性维持在一个稳定的比例,这是它的优势所在。

下面再来看看“圆桌理论”。

命中率:70%(未命中率30%)
暴击率:10%

通过“圆桌理论”我们得出普通攻击的概率为60%。

假设未命中概率增加1%,这时候未命中概率为31%,而暴击率依然是10%,则普通攻击概率为59%。这时候我们就会发现,所有除普通攻击之外的出现概率在普通攻击被挤出“圆桌”之前都是不会互相影响的。我们的暴击不会因为对方增加了闪避而受到概率衰减。这就是“圆桌理论”的优点,几乎所有被考虑的情况都能够直接在大量的攻击中表现出原始的概率,不存在优先级造成的衰减因子,而作为唯一的牺牲品,普通攻击的出现概率完全依附于其他的情况,也即相当于,将闪避、暴击处于同一优先级,而普通攻击作为最低级的情况存在。

“圆桌理论”的最终判定方式和逐步判断不太一样。还是之前的例子,我们会先计算出“圆桌”中优先级高的情况的概率。比如之前的例子我们会先计算未命中情况,它代表了数值1~31,接下来暴击代表数值32~41,最后42~100代表普通攻击。然后取一个1~100的随机数。数字落在哪个区间就代表哪种情况发生。

“圆桌理论”在某一属性极端增大的情况下,会出现不均衡情况。比如之前的例子,假设未命中增大到85%,暴击增大到20%,这样其实已经突破了“圆桌”的上限。按之前的算法,1~85代表未命中,86~105代表暴击。然而我们取的是一个1~100的随机数。所以暴击的真实概率是15%,并非理论值20%。

小结:

“圆桌理论”在底层情况被挤出“圆桌”前,各高优先级可能性之间不会产生关联影响,概率相对更为合理。可一旦出现“圆桌”不够用的情况后,被挤出去的情况会受异常大的影响。

逐步判断则是优先级高的情况会严重影响优先级低的情况,而且逐级影响,层级越多情况越复杂。但这个情况都是按比例稀释的,不会出现非常极端的情况。

一级属性和二级属性

我们在前文介绍《龙与地下城》游戏时介绍过一级属性:力量、体质、敏捷、智力、感知、魅力。二级属性则是由一级属性加入换算系数计算出来的。比如HP=体质×体质换算HP系数,系数还有可能由于职业不同而不同。在传统的RPG中,一级属性是可随人物成长并且可以加点的属性。而二级属性不单独成长,它们依附于一级属性的成长而成长。但随着我国游戏业的迅猛发展,目前对一级属性和二级属性已经没有严格区分,一切都是以设计目的为导向的。

那么我们在设计过程中是否需要有一级属性?一般来说,如果游戏有加点或洗点系统(装备有很大属性差异选择也算),我们需要有一级属性。如果没有加点或洗点系统,一级属性有无影响不大。

这里我们来看《魔兽世界》的例子,关于攻击力(Attack Power,下文简称AP)的计算公式如下。

猎人/盗贼:AP=角色等级×2+力量+敏捷-20
战士/圣骑士:AP=角色等级×3+力量×2-20
萨满:AP=角色等级×2+力量×2-20
德鲁伊:AP=力量×2-20
法师/牧师/术士:AP=力量-10

可以观察到,肉搏职业受到角色等级加成最多,然后是敏捷职业,最后是法系职业。敏捷职业会额外再受到敏捷的加成。这就会让玩家在考虑增加自己攻击力的时候考虑针对自己主要的一级属性进行提升。

属性计算的次序

目前的国产游戏会有非常多的针对属性加成的系统,在计算某一属性总值的时候我们要严格定义计算的次序,在公式中的不同位置产生的效果是有差异的,下面还是给大家举一个实例。比如某游戏中角色有力量这个属性,然后有加点系统、升阶系统以及人物自身和装备系统会对其有影响,计算力量的公式比较复杂,有针对所有装备力量的百分比加成,也有针对所有力量的百分比加成。公式如下。

装备力量和=武器力量×(1+武器力量百分比加成)+头盔力量×(1+头盔力量百分比加成)……(计算所有装备力量和)

力量总值=装备力量和×(1+装备力量百分比)+加点系统力量和×(1+加点系统力量百分比)+升阶系统力量和×(1+升阶系统力量百分比)+人物自身力量×(整体力量百分比加成+预留位置)

大家可以看到,整体力量百分比加成这个属性是非常恐怖的,它会使所有系统的力量和得到一定的增幅。而如果我们把加点系统力量百分比这个系数放在预留位置上,那么会出现什么影响?我们把公式用字母代表来看看结果。

S表示力量总值

A表示装备力量和

K1表示力量百分比

B表示加点系统力量和

K2表示加点系统力量百分比

C表示升阶系统力量和

K3表示升阶系统力量百分比

D表示人物自身力量

K4表示整体力量百分比加成

最开始的公式是这样的:

S1=(A×(1+K1)+B×(1+K2)+C×(1+K3)+D)×K4

调整位置之后的公式是这样的:

S2=(A×(1+K1)+B+C×(1+K3)+D)×(K4+K2)

用S2减去S1就可以看到多出来的部分:

(A×(1+K1)+C×(1+K3)+D)×K2

从公式对比可以清晰地看到加成总数值百分比是多么重要。

大家务必写清楚不同参数的位置,根据设计目的将它们放置到最合适的位置。在设计公式的时候务必控制好这种百分比数值,它会让你的数值成倍放大。此外上次参数并没有描述负数情况的处理方式,实际的战斗公式会更为详细、细致,这里的公式仅供讲解使用。

闪避公式

首先声明一下,在这里用的属性,都是已经计算了游戏中各个系统的接口值的总值。

经过之前的讲解,大家知道有逐步判断和“圆桌理论”两种计算流程。我们在这里介绍的是逐步判断中单独判断闪避的公式。

游戏公式都是关乎攻方和守方两者,所以公式有最核心的两个属性,攻属性和防属性。在闪避公式中,攻属性是命中,而防属性是闪避,其他参数和属性都是围绕和补充它们展开的。

闪避公式有两种思路方向:

·命中先减去闪避,由差距的大小来决定命中的概率有多大。这种做法相对较少。

·命中和闪避进行除法公式计算,最终决定概率有多大。

先来看第一种思路,情况又有如下细分。

1.闪避大于等于命中时,命中率等于保底命中下限30%(我们定的一个系数,具体值可以根据游戏改变)。由于闪避投放会远小于命中,所以我们会尽量避免这种情况发生。

2.命中大于闪避时,计算命中差值并换算出最终命中。我们的思路是命中大于闪避之后会获得60%的基础命中率,之后差值增加1点,命中率增加0.5%,最大值到95%。

我们来看一下命中率曲线,如图5-1所示。
5-1

这时候我们会发现几个问题。

1.命中差值大于130以后,再增加会毫无作用。

2.1点差值带来的收益永远恒定为0.5%,对游戏后期投放不是十分有利。

我们再来看看第二种思路,除法公式:

命中率=命中/(命中+闪避)

这是公式最基础的原型,没有加任何影响,命中率如图5-2所示。

5-2

再回来看一下公式,这里要运用一些数学知识。命中率公式中一共有两个变量,命中和闪避。当闪避不变,作为攻击方不断提升命中并趋于无穷大时,命中率无限接近于1(闪避等于0时,命中率等于1)。反之当命中不变,闪避趋于无穷大时,命中率无限接近于1/闪避。

再来看下命中和闪避的每一点增量会带来的影响。先来研究命中。我们把闪避设置为1,然后命中从1增长到100,如图5-3所示。

5-3

大家从图5-3中可以清晰地看出,命中率飞快地增长到了90%,然后缓慢增加。命中收益一列表示每增加1点命中带来的命中率收益。可以看出第一点的收益是最高的,越往后带来的收益就越少。再来看看闪避值为10的时候,曲线会发生哪些变化,如图5-4所示。

5-4

大家可以看到,不变的是最开始的命中带来的收益最高,之后逐步递减。变化的是曲线成长的趋势没有那么陡,平缓了一些。再来看一下如果闪避值为100的时候,曲线会怎样变化,如图5-5所示。

5-5

可以看到收益的趋势和之前还是一样的,但命中率曲线已经变得趋近于一条直线了。

此时可以得出如下结论。

1.命中属性带来的收益会逐步递减。
2.当闪避逐步变大时,命中属性带来的收益被逐步稀释。换句话说,我们兑换同样的命中率的时候,花费的命中比之前变多了。

大家把闪避等于100那个表中的命中放大100倍,图就会还原到闪避等于1的那张曲线图。

前面我们都选取的是命中变化闪避不变的样本,下面再来看看闪避变化命中不变的情况会怎么样,如图5-6所示。

5-6

相信大家已经看出来,其实变化趋势几乎是相同的。大家可以自己修改命中和闪避数值看看趋势。

我们再结合游戏来思考一下这个公式,就会发现如下结论。

1.命中和闪避在前期的加点效果非常明显,玩家很容易从数值提升感受到战斗效果提升,从而对属性的需求变得强烈,进而促进消费。
2.命中和闪避在达到一定数值时,开始产生边际效应,但也不会完全无效,玩家依然有提升意义。

小结:

大部分游戏都是基于这个公式原型进行设计的,然后加入一些参数和等级影响因素。推荐大家用这个模式,根据具体的需求再做细微调整。

更早期的游戏也有命中和闪避分别计算的,原理都是相同的,在此就不一一介绍了。

此外还有些游戏中没有闪避值的概念,只有真实的概率。目前类似设计在《DotA》中出现过,而《DotA》是基于《魔兽争霸3》的编辑器制作的。但具体的实现方式和概率作用机制并没有被官方印证,下面内容仅供大家参考。目前的推测结果是这样的。

1.加闪避的物品在参与计算的时候只会取最高值进行计算。
2.技能闪避可以和物品闪避叠加。

暴击公式

在玩游戏的时候,玩家应该会非常希望发生暴击事件。暴击事件发生之后会产生更大的伤害,并且有不同的视觉效果。暴击事件是由暴击公式控制的,下面介绍逐步判断的暴击公式。

首先是挂在人物角色身上,由于职业不同而带来的暴击加成。早期游戏根据职业的区分会在这些细微的属性上设置一定的差异,大家可以看自己的游戏设计需求来决定需不需要在职业上做暴击差异(同理,其他属性也是可以做职业差异的)。

之前在介绍闪避公式的时候我们说到过攻防属性。而在暴击公式中,会遇到只有暴击值的情况,可以参考第一种设计。

暴击公式有两种设计。

1.暴击减去抗暴击(如果没有防属性,那就直接算暴击),然后差值换算为暴击率。

2.暴击和抗暴击进行除法,计算出暴击率。

我们先来看第一种设计,并且在设计过程中加入职业影响参数。

暴击率=职业基础暴击率+暴击值转换暴击率

我们先了解下职业基础暴击率,这是通过表格数据得到的一个数值,如图6-1所示。

6-1

玩家是看不到最终数据的,而面板一般不会显示职业的暴击率(除非你非要显示)。最终大部分玩家会根据自己的游戏体验来判断一切。

这样的设计会给玩家一种职业暴击差异感。

1.战士暴击很低。
2.法师暴击还不错。
3.刺客开始暴击很高,升到10级以后感觉暴击没有之前高了,是不是我的装备或技能等级不够了。

职业的暴击率是固定的,在早期游戏中这种设计是希望职业有区分。但近期的游戏更强调在技能中体验职业差异,此外,数值策划也希望可以更严格地控制暴击属性的投放,所以现在的游戏基本不会给职业加固定暴击率了。

然后再来看暴击值转换暴击率。之前在介绍闪避公式的时候给大家演示了固定系数的公式。这里要给大家一个新的公式,在这个公式中我们会关联人物自身的等级,暴击等级在这里相当于暴击值(暴击成长的数值)。我们来看一下公式:

暴击率=K1×(暴击等级/(暴击等级+K2×人物等级+K3))

K1、K2、K3为3个系数。K1代表最终暴击率理论极限值。

我们按照图6-1中的系数得到暴击率曲线。

6-2

从图6-1中可以看出这个公式的好处是,前期加暴击的效果非常明显,玩家在1级的时候提升14的暴击等级就可以换来28%的暴击率。之后很不幸,这位玩家达到10级的时候仍只有14的暴击等级,而此时他只有可怜的6.09%的暴击率,足足缩水4倍多。(在这里为了体现差异,系数比较特殊。)

玩家如果为了保持之前的28%暴击率,那他需要更多的暴击等级来减少等级对暴击率所带来的影响。这也是暴击等级的由来,暴击不变人物等级变,暴击率的结果会变。

第二种设计和之前的闪避公式的差不多,这里就不再做额外说明了。

圆桌理论的闪避公式和暴击公式

“圆桌理论”的闪避公式和暴击公式其实和逐步判断是一样的。只是在最终计算的时候有一定的差异。

下面给大家举个例子说明。

首先从战斗流程来说,逐步判断会先计算闪避公式,如果未命中,那就不会去计算暴击公式,因为直接返回结果为未命中了。而“圆桌理论”不是的,它会计算所有情况所占有的那块“桌子”。

比如我们根据公式算出如下数据。

未命中概率:30%

暴击概率:15%

这样就会得到如图7-1所示的“圆桌”,之后取1~100的随机数字,数字落在哪个区间就发生哪种情况。
7-1

伤害计算公式(减法)

经过前面的层层流程,终于可以进入到伤害的计算了。

先看一下公式:

伤害=攻击-防御

伤害曲线如图8-1所示。

8-1

减法公式非常容易看懂,关联系数也相对较少。从公式来看,乘除法公式更容易达到平衡。但问题在于,在减法公式体系中,攻防并不是看上去的那么等价。特别是对于防御属性,一旦发生防御大于等于攻击的情况,攻击几乎毫无作用。如图4-17所示的就是没有加任何处理的情况,伤害等于0,这对低级玩家来说是非常郁闷的一件事。

早期游戏的处理方式都是比较粗暴的,伤害直接等于1,或是在一定的小范围内产生随机值。这样带来的后果就是,超级人民币玩家几乎是神一样的存在,再多的玩家攻击超级玩家也只是多了很多个伤害1而已。我们不能否认这样给超级人民币玩家带来了爽快体验,但如果你希望游戏缓和一点,不希望造成如此强烈的差距感,应该怎么设计呢?

目前大家的解决方案是这样的:先判断防御是否大于攻击的1%~10%(数值视情况而定)。如果大于则在攻击的1%~10%的范围内浮动。如果小于则按减法公式计算。这样就可以保证哪怕是不破防,依然可以发挥攻击的1%~10%的效果。

说到这里,大家千万不要觉得减法公式就不如乘除法公式。减法公式还有一个好处就是数值敏感。玩家每增加1点攻击,在不会出现不破防的情况下,伤害也会加1点,玩家会有所得即所见的感觉。

下面再深入考虑一个杀怪问题。假设玩家初始攻击为10,此时新手村的弱鸡生命值为80。不难计算出空手情况下我们需要8次攻击才可以击杀弱鸡。此时我们做任务获得了一把攻击加5的武器,装备之后只需要6次攻击,弱鸡就会死掉,整整提升了33%的效率。而大部分国产游戏肯定会来一个类似1元送攻击加100的充值奖励。你充值之后,几乎在一定等级之内的怪物都可以被秒杀。这种效率的提升给玩家带来了巨大的诱惑。

通过这个例子可以体会出减法公式对小数值的敏感性,这也是很多策略游戏更倾向减法公式的原因,攻击次数的缩减会导致策略和操作的大幅改变。

小结:

减法公式的优点在于数值敏感性高、反馈明显,缺点在于不破防情况下的处理和如何投放攻击和防御属性。

伤害计算公式(乘除法)

乘除法的伤害公式主要分两种,第一种是通过护甲计算出减免系数,第二种是通过攻击和防御一起计算出伤害。我们首先看一下第一种公式:

伤害=攻击×(1-伤害减免百分比)

伤害减免百分比=护甲/(护甲+人物等级×K1+K2)

K1、K2为系数。

我们按照K1=100、K2=400来查看伤害曲线,如图9-1所示。

9-1

我们再看公式本身,护甲值非常大的时候,伤害减免百分比趋近于100%,但是永远不能到达100%。当护甲等于0时,伤害减免百分比等于0。当伤害减免百分比为负数的时候,是可以反向来加强攻击者的攻击的(负数护甲肯定是敌方给了DEBUFF)。

如果没有K1和K2这两个参数,那么这个公式等于1。那为什么会设置这两个值呢?人物等级×K1其实是加入了一个随着等级成长对护甲转换伤害减免百分比的变相削弱(变相地让玩家追求更高等级的装备)。而K2的作用在于控制防御转换成伤害减免百分比的一个密度分布。

这个公式的模型就像一个浓度公式一样。如果没有任何影响,浓度是100%,一旦在分母中加入数字,将不会维持浓度100%。人物等级×K1就像每次升级都往里面注水一样,你要通过更多的护甲来把伤害减免百分比维持在原来的数值。而你需要什么样的稀释比例是通过系数K2去调节的。

目前运用此类型的游戏以《魔兽世界》为代表。采用这样的公式也是和整体游戏设置相关的。该游戏并不像国产游戏有非常多的系统提升玩家的属性。等级和装备是最关键的人物战斗能力提升点。设计人员不想让游戏中出现超级玩家,他们希望玩家之间的属性相对公平,不会有非常大的差距。

再来看一下第二种方案的公式:

伤害=攻击×攻击/(攻击+防御)

第二种公式的伤害曲线如图9-2所示。

9-2

由于这个公式在趋势上看不出明显倾向性,所以在这里把它和减法公式做一个比较。这样大家就可以发现其实它并不是一条直线。如果说减法公式是强调了防御的价值,那么这个公式则是强调了攻击的价值。

这个公式随着游戏的发展,目前比较流行的版本是如下这样的:

伤害=(攻击×参数1+参数2)/(攻击+防御×参数3+参数4)

这样设计可以通过4个参数形成多种不同变化的曲线,其可扩展能力是非常强的。

小结:

除法公式的两种思路终其根本反映了两个方向的设计。第一种是将防御换算为固定减免率,这样衡量属性价值会更容易计算。第二种则是强调游戏攻击属性的重要程度。

暴击伤害计算公式

前面的公式计算出来的伤害为普通伤害,当我们暴击之后,要计算的是暴击伤害,常规公式如下:

暴击伤害=普通伤害×(1+伤害暴击系数+特殊效果系数)+暴击后附加伤害

首先是伤害暴击系数,这是常规参数。早些年的游戏中,这个系数等于1,这样暴击产生的是2倍伤害。近些年的游戏则慢慢演变为了0.5,这样暴击产生的是1.5倍伤害,笔者猜测其目的是让玩家可以获得比之前更多的游戏暴击次数,但单次伤害降低,维持输出总量的平衡。

而特殊效果系数这里泛指技能、装备以及其他可能影响暴击伤害倍率的系数。比如《英雄联盟》中有“无尽之刃”,装备效果是增加暴击伤害的倍数。另外有些游戏中技能也可以增加这个参数。

暴击后附加伤害是暴击之后直接附加的伤害,这是无视防御的。如果你想计算防御,那就把这个影响加在之前计算伤害的公式中并额外说明。

还有的技能在暴击之后会有自己额外的计算方式,在这里也就不做一一列举了。

其他公式

除了上述介绍的公式之外,还有一些独特的计算公式,比如格挡、招架、抵抗等。其实设计的原理都是相同的,可以用设计闪避和暴击的思路去思考。

除此之外,还有一些特殊技能带来的自己独特的计算方式。

比如《DotA》中有一位英雄的技能计算公式如下:

伤害=(我方智力-敌方智力)×8(根据技能等级有所提升)

这就形成了一种独特的策略,低智力英雄面对这个英雄的技能有被秒杀的风险,所以一定要视情况增加智力。

再来看看《英雄联盟》中的技能。

伤害=175+对方英雄每少3.5点生命值×1

非常独特的公式,这无疑增加了这个技能的斩杀威力,非常克制低生命高属性的英雄。

再来看下伤害公式,我们之前的流程计算出的伤害公式都是简单的只面对攻防属性的基础公式模型。一般游戏在计算伤害的时候还会有两个系数,一个是伤害加成系数,一个是最终伤害减免系数。

最终的公式是如下这样的:

最终伤害=伤害×(1+伤害加成系数)×(1-最终伤害减免系数)

诸如此类的公式不胜枚举,我们设计公式的最终目的都是为设计服务的,大家可以根据自己项目的具体情况来选择适合自己的公式原型然后去细化。

属性价值

在设计游戏的过程中,人物会有不同的属性,玩家在游戏过程中也会根据自己的喜好来追求属性。这就带来了一个问题,如何平衡选择不同属性带来的差异?数值策划希望各个属性像不同国家货币一样,只要找到中间的汇率,这样就可以统一价值。

那么如何寻找最关键的通用货币?

攻击属性我们是以提升了多少输出能力作为依据的,而防御属性我们是以提升了多少生存能力作为依据的。

输出能力是看属性可以提升多少每秒输出(DPS),生存能力则是看属性可以提升多少有效生命值(EHP)。最终输出和生命的平衡看我们预期的战斗时长或回合次数。

由于人物随着等级成长,属性的基数是不一样的,所以属性之间的“汇率”也是跟着等级而变化的。比如在游戏初期,玩家的攻击力相对较小,此时提升攻击的价值会比提升闪避或暴击的价值要高。

下面来看两个例子以方便大家理解。

第一个例子我们来看输出。我们假定目前人物属性如下:

攻击力100点
每次普通攻击所用时间2秒
目前暴击率1%
暴击增幅系数50%

游戏采用逐步判断的计算方式并且无其他特殊判断伤害,根据上述属性可以算出人物的输出能力:

DPS=攻击/攻击时间×(1-暴击率)+攻击/攻击时间×暴击率×(1+暴击增幅系数)

DPS=100/2×(1-1%)+100/2×1%×(1+50%)=50.25

此时我们增加1%暴击再来看DPS:

DPS=100/2×(1-2%)+100/2×2%×(1+50%)=50.5

我们得出了增量0.25,这就表示目前增加1%暴击所能换来的输出增量。下面再根据暴击值换算暴击率的公式,就可以得出暴击的价值。

然后通过第二个例子来看生存。假定人物属性如下:

生命值500点
闪避率2%
伤害减免比例10%

游戏采用逐步判断的计算方式,有闪避但无其他特殊事件减少伤害。然后可计算出人物的有效生命:

有效生命=生命值/(1-伤害减免比例)/(1-闪避率)

有效生命=500/(1-10%)/(1-2%)=566.89

此时我们增加1%闪避再来看有效生命:

有效生命=500/(1-10%)/(1-3%)=572.73

我们得出增量为5.84,这表示,目前增加1%闪避所能换来的有效生命增量。下面再根据闪避值换算闪避率的公式,就可以得出闪避的价值。

小结:

大家从计算过程中可以看出,影响输出和生存的属性是非常多的,只有把数值固定在特定条件下才可以确定属性价值。在后续文章中会介绍“标准人”的概念,大部分游戏都是通过这样的设计来衡量属性的价值的。

伤害公式对比

经过前面的介绍,大家已经对公式有了初步的概念,但不同的伤害公式之间有什么样的差异呢?这里做一个简单的对比。我们主要从两方面入手。

1.相同防御条件下,攻击的曲线对比。
2.相同攻击条件下,防御的曲线对比。

攻击成长对比

让我们先来看一下攻击对比,这里给出公式如下。

减法公式:

伤害=攻击-防御(伤害保底值1)

乘除法公式1:

伤害=攻击×(1-伤害减免百分比)

伤害减免百分比=护甲/(护甲+人物等级×80+400)

乘除法公式2:

伤害=攻击×攻击/(攻击+防御)

我们假设防御为100点,攻击从1增长到1000,得到的伤害曲线如图13-1所示。

13-1

从图13-1中的曲线趋势我们可以看出:

①在大概攻击等于防御的这个拐点前,减法公式的伤害是最低的。乘除法1的伤害是最高的。
②拐点之后,乘除法2的伤害是最高的,而乘除法1的伤害是最低的。
③减法公式在不破防的情况下,防御非常明显。

下面换个角度来看一下这3个公式,在攻击不断增长的过程中,防御带来的伤害减免的变化情况,如图13-2所示。

13-2

从图13-2中的曲线趋势我们可以看出:

①乘除法1的减免非常稳定,它的减免系数不会随着攻击改变而变化。
②乘除法2和减法的衰减趋势相同。乘除法2比减法公式更有优势的是,不会出现不破防的时候攻击越高反而减免系数越高的情况。

防御成长对比

下面再让我们来看看防御成长的对比,公式还是用之前的公式。我们这次的攻击等于100,防御从1成长到1000,如图4-22所示。

13-3

从图13-3中的曲线趋势我们可以看出:

①减法公式的防御体现最为直接明显,伤害呈线性减少,但不破防之后几乎无任何提升价值。
②乘除法2公式在前期对伤害减少得明显,但后期逐步减弱,甚至趋势还不如乘除1公式,可以看出该公式前期的防御性价比高。
③乘除法1公式防御体现非常平稳,但防御价值的体现相对是最弱的。

我们再来看看伤害减免曲线,如图13-4所示。

13-4

可以看出同样减免20%的伤害,减法公式和乘除法1公式用了大概20多点的防御,而乘除法2公式用了140点左右的防御。

综合上述,我们对这3个公式进行总结。

1.减法公式

减法公式防御对攻击减免非常明显,防御价值在和攻击相同数量级时远大于攻击。但在游戏体验过程中,玩家对攻击和防御的选择其实是根据当前的杀怪效率来决定的。所以如何平衡攻击和防御的投放会更难一些。从曲线中也可以看出,不管是攻击还是防御都会让伤害本身有较大幅度的动荡。

总结来说,减法公式的攻防属性对成长体验敏感,但不易控制,对数值策划产出投放的控制要求更高。

2.乘除法 1公式

乘除法1公式整体更加平稳,防御和伤害减免直接挂钩不会受到攻击的影响。攻击和防御在初期可能表现并不是十分敏感,但反过来看,成长会给人感觉有价值,哪怕对战高属性的玩家。

总结来说,乘除法1公式整体平稳,攻击和防御相对变化区间较小,这种设计对属性的价值也更容易衡量。

3.乘除法 2公式

乘除法2公式攻击属性价值明显,而防御在前期的效果也比较显著。伤害变动幅度介于之前的减法公式和乘除法1公式之间。

总结来说,乘除法2公式对攻击更为敏感,但同时也能顾及防御。伤害波动幅度一般。

小结:

从上述公式的对比中,大家应该对这3个公式有了更深入的了解和体会。就目前市面的主流游戏来看,3种做法都有不少的游戏采用。

以《传奇》《征途》为代表的游戏是以减法公式为基础的。首先针对目标群体来说,减法公式理解成本低,玩家每加1点攻击和防御都会有体现。并且这类游戏买数值的点相对较多,花钱砸数值是非常保值的,之前大家也都看到了公式敏感程度之高,最终体现的战斗的差异感也会非常大。

乘除法1公式的最典型代表还是《魔兽世界》。暴雪公司一直以来在游戏对抗平衡性中讲求数值和操作并重,他们在公式的选择上也是更为平滑。在《魔兽世界》中任何强大的角色在只考虑输出的情况下也是难以抵抗5人以上的围攻的。从公式层面变现使整体区间波动情况不会十分剧烈,这也是经前面的图验证的结果。

乘除法2公式在新生代国产游戏中使用得更多。不管是提升攻击还是防御,前期的价值体现都是非常明显的。笔者在做MMORPG的时候也是更偏爱这个公式。