7评论

暗黑2经典数值公式分析总结(三)

2018-07-17 1.9k浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏美术行业精英群167422913

十三、动作帧数的计算公式。

 

帧数= {常量256 * 该动作长度 / [该动作速度 * (基础效率数值 + 攻速增加量 / 100)]} – 1

 

这篇文章主要来讲解游戏内攻击速度快慢方面的设计。这个游戏的攻击速度主要包括这几个部分的概念:普通的武器攻击敌人的快慢,施法的快慢,或者格挡的快慢。那么整个游戏机制中,是如何去精确控制这种快慢的?

其实本质上是对应的各种类型动作帧数的调节。做AmmoRPG的同学,想加入动作帧数可控的概念,可以重点看一下。

施法是动作,站立是动作,格挡是动作,跑步是动作,死亡是动作,被打也是动作。

动作的运作机制理解基础打好,后面我们才好剖析技能或实际作战层面的设计。

 

作为一款Arpg,攻击速度的设计可以大幅提升操作手感上限,但凡体验过暗黑2的应该都知道,近战中典型的野蛮人,前期学到双手挥击,狂乱这类技能,双斧一顿砍下来体验明显跟初期大不相同;圣骑士的狂热加攻速,那种打击速度和音效也着实让人热血沸腾。

之前体验过几个手游大作MMO,也有光环buff之类设计,主要都在提高攻击力,或者冷却cd等属性中,大概是出于整体考虑没有去设计动作的帧数变化,打斗起来总感觉少了点什么。年初体验了某古龙小说题材武侠mmo几个月,最燃的点个人来讲最后还是get不到~几个月反复玩的还是那些重复千万遍的清兵技能。此类燃点大概算是游戏直观体验里的一个设计点吧。

比如暗黑2打斗中我的感官燃点:协同技能,装备与人物build,把攻速命中达到一个水准之后,那种体验瞬间改变的高速打击感:游戏线并不是一成不变的体验。

==============================================================================

 

先从装备上显性的一些直观数据概念说起,由浅入深慢慢引出。

游戏中每个武器都有设计对应的speed数据,称为基础武器自带攻速。这个数据越低,攻速越快。右边的大锤,攻速是20使用起来就会慢很多。

前面提到多次,暗黑2是一款25帧的游戏,也就是一秒25刷。当今看来这个帧数有点够呛。游戏内任何动作都按照这个帧数去运行。

给出一个初始框架向数据:野外出生铁剑出门砍一刀是16帧数。

这里武器的攻速越快,也就是如图的speed数值越低,比如比图上拳剑还要更低的匕首:-30攻速,那么攻击完整动作完成需要的帧数就显著减少。

 

游戏角色输出动作的帧数才代表真正的攻击快慢,实际上,这个帧数不仅仅跟武器有关,跟角色性能也有关系。职业设定上,同一把大剑,法师、战士的使用效果都是不同的,战士使用明显会快,也跟提到好多次的:暗黑2中的真实模拟设计原则契合。

一样的武器,不同的职业各自数据表里会设定大量针对武器的数据,或者说天生特性,天生对武器的掌控能力数据。根据这些数据,细心点看,不同职业看到的武器类别参考描述都不同。你是法师,看到刺客的匕首,速度就变成缓慢(读表得到实际运用数据,然后生成描述结果)

再强调,刺客看自己的爪武器,是急速攻击速度;而其他职业,看到的可能就是缓慢攻击速度,虽然大家武器上写的speed数据一样。

也就是说职业先天就有对各种武器的使用攻速调整系数,配合这把武器,才能确定一套攻速计算模式或者说档位。

 

为什么武器会使用这个一个-3020之类的speed属性来代表武器的自带攻速?其实是因为后面这些数据后续都会带入一个特别的帧数公式计算得到动作的帧数,总之目前记住帧数越低动作越快。

下面这个就是帧数公式了,涵盖东西会较多,会分好几个公式来补充(涉及到一个个动作是如何去实现,甚至如何去精确控制)

动作帧数的计算公式:

 

帧数= {常量256 * 该动作长度 / [该动作速度 * (基础效率数值 + 攻速增加量 / 100)]} – 1

 

很明显的可以看到,所谓帧数,其实是常量跟很多策划定好的动作参数,职业表格确定的系数,运算之后得到的整数。(暗黑2大多计算int向下取整)。

有了公式后可以大致模糊得看到设计手法:给不同的人物与动作设定不同系数,做某个动作就提取对应数据。得到的数据,跟攻速变化量再结合运算就可以得出最终的帧数。这样可以使得任何单位、不同职业做各种技能动作、使用不同武器都快慢可控。

 

下面开始对这个公式中的数据进行补充说明:

1、  常量256,这个数据是根据游戏机制来定的,用于计算出帧数的定值,因为后面都是小数,需要乘以这个数才可以得到一个准确的个位数帧数。其实这常量定多少关系不大,因为后面的一个叫动作速度的定值,会考虑到跟这个数据的比值,基本上大多动作的情况下直接抵消了。设定的原因是后续反复调整的需要。这一点后面会明白。

 

2、  关于动作长度和动作速度,每个动作都各不相同。前面提过甚至不同职业做同一个普攻动作,数据也不同。一个人用不同武器的普攻,动作长度也不同,比如大锤的动作长度,自然时间就会长。这些都在表格中填好的,并且根据职业、武器、动作、技能、受伤、格挡等动作,分门别类规划好。

脑补一下,比如大锤动作长度,时间长度,填25帧;小匕首动作长度要5帧就填5帧,是不是数据填多少,就直接实现了动作的快慢控制?


再便于读者理解,看一下上述帧数公式,这里我取动作速度为256,其实游戏内绝大多动作速度都是这个数值,暂且理解为常量都没关系,当然这个常量跟公式初始的256不同,而是在数值表中大多的动作速度,都填上了256,这样数值不会锁死,后续怎么调节都方便

 

(常量256 * 普攻动作长度16帧数) /

[该动作速度256 * (这个动作当前基础效率数值100 + 攻速增加量 / 100)]

 

如此一来代入公式中,跟分子第一个常量256直接抵消就变成1,那么后续各种光环技能、装备加成带来的百分比攻速增幅不考虑的情况下。动作长度,就可以直接代表了动作帧数。你填的帧数就是游戏中裸装表现出来的帧数。

 

至此这个公式应该就更形象了。正因为游戏内大多数动作的执行速度,设定在了256.所以简化把两个256相除,得到的动作长度就是核心数值。

举个例子战士野蛮人普攻,查数值表普攻长度设定了16这个数字,带入之后帧数 = {256 * 16 / [256 * (1 + 加成 / 100)]} – 1

外在加成没有的情况下,是不是正好也就16帧数完成一次攻击。

 

题外话,印象中以前cocos平台上参与开发MMORPG的时候,有些功能极为便捷,比如这类攻击速度或者简单技能,有的可以现成调用。输入一些数字可能就可以调动作帧数控制快慢,而暗黑当时是完全一步一步根据帧数设定推算出来,再在自我程序上去实现这些每一帧的。偏偏现在大多mmo游戏重玩法,嫌麻烦大多不会去做这类数值,动作技能自然也是千篇一律的输出速度了,表现力上自然也没什么竞争力。大多都有的可控变帧应该主要是一个3倍速战斗,v1可以提前开放。

 

3、  关于这个基础效率值。这个也是一个用于调节的量。实际游戏中其实可以不用管,因为大多都固定为100,也就是100%的百分比加成了。这个数值设定不受装备影响,取决于角色使用的动作类型。针对一些特殊的动作,比如不同职业的格挡恢复,会调数据给予相应惩罚控制平衡性。因为在分母上,这个数值越大,帧数越小。动作也就越快。

这个数值越小,动作就越慢。这里再举个实例,后面会讲到,你被攻击,分母这个数据就变成50,你恢复的动作是不是帧数就变多。

 

4、  最后再提一下,公式的最后部分为什么减去了1,因为前面用的是递进取整,所以最后都减去了1。大概是策划的个人习惯问题。忠于原著都照搬公式了。

虽然我我个人觉得直接这条公式

常量256 * 该动作长度 / [该动作速度 * (基础效率数值 + 攻速增加量 / 100)]

向下取整就完事了。但是暗黑2的策划就这样写了~当然计算结果也不会出现整数,没什么区别。

可以考虑到的意外状况,无非是直接得出整数或者小数。按照程序取整的方法,应该也不会导致出现数值bug少掉一帧。所以怎么写其实也无所谓了。根据程序功能来,不出问题优先。

 

最后公式的实用性简化:

该动作帧数*1+该动作职业效率值%+攻速整体增加量%

 

去掉了职业武器的各种细分,当然想直接做到暗黑2这种程度的各种职业细节区分的话,基本得直接照搬。各职业针对的武器都好好想想,技能表格会延伸出很多份。虽然精力成本几何式叠加,游戏水准也一样。

 

至此,帧数的主要计算公式框架讲完,下一个公式重点写该条公式里面的攻速增加量。因为篇幅过多所以放在十四条内。

 

 =======================================

十四、游戏内投放的各种攻速加成。


上条公式,其中攻速增加量,公式为 

攻速增量=技能的实际加成环境与敌人给的衰减武器总攻速结算+装备方面攻速加成ias

 

游戏内攻速加成都用ias来表示,尤其装备上是很常见的投放:+X%提升攻击速度。

 

这条公式主要也根据构成来分四块解析:
第一部分:技能加成:

比如刺客的速度爆发、圣骑士的狂热等,技能持续下直接给你一部分攻速加成。

开启这个灵气/装备光环,这14%直接带入公式中加上去。

 

第二部分:惩罚衰减。

比如boss给你的衰老诅咒,死灵的黏土石魔粘着敌人的控制效果,同一类效果都是直接叠加得到总衰减。这部分汇总带入公式中,减掉。

 

第三部分:武器的自身总攻速结算,注意只是speed

其实正常情况计算很简单,比如之前的刺客拳剑写的speed-10.这个-10数值带进去就OK了。公式上是减去武器攻速,所以这正是为什么前面我说武器数值越低,反而越快,倒是那些笨重的大铁锤,会有40甚至50的很慢又数字大的攻速。带进去减得攻速多自然就慢啦。

原著这里公式用的就是—武器攻速。全篇不会更改原著的公式。

 

武器写的比如是—30,带进去负负得正,是不是就增加了30%。出现负数的情况,是因为整体的数值模型,投放的量也就几十,来回加减,确保稳定体验的情况下很难将所有数值都提到一个直观的整数。况且这个spped数据其实是隐形的玩家看不到,实际上不会影响体验,上面提过关于攻速装备上有一个直观的快慢的描述。

 

这里关于双手都拿武器的情况做点补充:

前面的图片展示过,比如刺客那把拳剑的攻速是-10,右边的大锤的攻速是20。这2个数据正是计算帧数使用到的武器攻速。经过公式处理这种攻速数据,后面才可以得到准确的动作帧数。

职业设定都可以一手拿武器一手拿盾,或者常见的亚马逊也可以双手持矛,但是也有部分职业可以双手都拿单手武器。其中包括刺客可以拿两把自己的专属武器,副武器还可以直接点出格挡技能实现爪格挡;最典型的双持当然是野蛮人:可以双手拿两把单手武器或者双手剑。这里就涉及到几个双手武器攻速计算的公式了。在下下条公式中列出。

 

第四部分:装备方面攻速加成

这部分应该是最贴近游戏大家最常见的了。各种装备的ias加成,照样是汇总加起来,加到一起就是完整的装备ias,武器上也有,提升多少ias照样加上去,只要别加speed就行。宝石、戒指、护身符、头盔腰带鞋子手套武器等等都有ias这种常见属性的加成。但是带入计算的攻速增加量不是简单的相加得到的结果,而是要用下一条公式再平衡调整一下。

 

再回顾一下帧数公式

常量256 * 该动作的长度 / [该动作速度 * (基础效率数值 + 攻速增加量 / 100)]  

基础效率值其实大多情况设定100不动,大多攻击施法都是一百;动作速度跟常量256再抵消掉。

 

 

总结:技能和作战方面的加成与衰减,加上武器自身的攻速,加上身上装备的攻速加成,得到一个总的攻速变量。这个变量结合动作本身的长度,相乘,那么一个动作的快慢标准就可以得出,且可控。属于经典的设定常量乘以后续百分比投放加成。

 

==================================================

十五、装备方面的ias(攻速加成),在实际运算中的调整公式。

实际攻速=120*装备攻速(120+装备攻速)

 

即常数*a/(常数+a

 

参与帧数总公式运算的实际IAS,这个实际攻速增加量= [120*IAS/(120+IAS)]

也就是说不管装备上有多少攻速ias加成,都要被120这个关键参数修正一下。

公式变形实际ias就等于常数120* a/120+a

A很小的时候整个实际ias数值自然就很小

A很大的时候,a/120+a也不会超过1,那么不管玩家如何叠加ias,永远不会超过120这个策划设定的门槛。是一个经典的上限设定公式。

 

120是期望的上限值,这个设定决定了常数的具体量。

 

你所期望的ias其实并不是游戏中玩家叠加出来的那个数据,虽然给他大量的投放和无限叠加的可能,但是实际上期望的运作数据,总是要比玩家实际拿到得少。

举例玩家叠加到了60,带入计算最终实际ias40.

120a/120+a),变形也可以写成a* 120/120+a,也就是肯定会比叠加的装备iasa这个数值要小,括号中永远小于1了。不管叠加多少攻速,永远都是被这个公式衰减,并且无限大的情况下峰值也是120以下。

一般情况下叠到120真的就不低了,初期叠加305070还算常见,用120这个系数得到的修正数值结果也都很ok。只能说越高,越接近120。有点类似LOL的魔抗护甲减免了。

 

再讲一下期望值逆推运算,得到装备投入多少的算法。

其实就是公式变形运算即可得到

装备的ias=120*实际ias/120—实际ias

根据期望的动作帧数是多少,放入帧数公式计算,得到你期望总装备参与运算的实际ias,根据这个公式正好可以得到你在游戏投放给玩家,那些零零碎碎ias的总值。

游戏中看到的正是装备自身的ias

 

公式总结:

投放量=实际值 *期望峰值/(峰值—实际值)

实际值=峰值*投放量(峰值+投放量)

 

 

 ===================================

十六、双手双持武器的攻速计算法

 

仅仅攻速构成方面,这一整篇基础拆分就已经写了这么多。但是正是经典的概念原则,加上严谨的设计态度,才可以让游戏成为经典。

讲完装备的修正计算,下面就是武器了。前面十四条第三部分提到过,角色双手持武器会有一些不同的公式运算得出不同的武器实际攻速。

依旧以野蛮人举例,左右手各拿一把武器的情况。

游戏中法师游侠等角色都是经典的左手盾牌,右手武器。下图左中盾牌在角色左手,剑在盾牌右手。左手放防御物品一般不放武器,右手一般故此在双持情况下称呼其为主武器位置。左手就是副手位置。

右图这样两手剑的不用看肯定是野蛮人了,头盔也是职业特色专属。而左图的还真不能确定职业。

 

双持攻速设定细则:左右手攻击独立,2个武器也不会一起造成伤害输出。每个武器虽然有自己的速度,但是运算上有差别。左右武器的攻速存在着互相影响。

 

流程计算公式,依旧以帧数公式为准,算出一身装备(装备前面说过存在修正公式)与技能的ias,带入运算得到左手或者右手武器的一次攻击的具体帧数。

 

这里注意一下,装备的ias属性,跟武器自带的ias是不同的,武器自身的叫做SPEED。前文写的装备总ias也不涉及武器自身的那个speed数据。

 

右手计算:

1、  装备总ias上减去左手武器带的ias加成(非自身speed攻速),得到的装备总ias参与修正得到实际装备ias

2、  到十四条公式讲的攻速增量中,攻速增量=技能增量(左手武器自身speed攻速+右手武器自身speed攻速)/2+实际装备ias

3、得到的这个攻速增量为a,设定a不超过75,一旦超过75取整75

4、代入野蛮人前面提到的普攻帧数公式

帧数=256 * 16 / [256 * (1 + SI / 100)] – 1

简化一下,也就是普攻帧数16/1+攻速增量),
这里让攻速增量达到75,衰减可以得到这情况下普攻的极限帧数9帧。为什么设定75这个门槛,答案也是为了平衡性。

 

总结一下右手公式的要点:1、装备总量IAS上要去掉来自左手的影响,2、右手这武器攻速取的是双武器攻速speed平均值。

 

另外部分技能,如果使用技能动作只用右手武器,那么技能所读取到的攻速也就是这条公式内的右手攻速了。其快慢跟普攻运算法则一样。

 

左手计算:

装备ias方面,类似右手计算,也是减去右手的ias,然后继续120 * a/ (120 +a)计算出装备修正部分。

接着攻速增量中有不同。

攻速增量=0.5右手武器攻速-1.5武器攻速+技能增量+实际装备ias

可以看出把右手的 (左手攻速+右手攻速)/2这部分换成了0.5右手武器攻速-1.5左手武器攻速,这其中的差别通过变形观察一下。

 

之前是—0.5左手—0.5右手

现在是—0.5左手+0.5右手左手武器攻速

 

这里可以再次看出暗黑2的各个细节严谨的程度。

左右手的侧重也设计的不同l 。我们直接把前后的公式相等看一下。

 

—0.5左手—0.5右手=—0.5左手+0.5右手左手武器攻速

 

然后直接就能变成  右手攻击速度=左手攻击速度。在这个条件下2个公式没区别,也就是说左右手速度完全相同;

 

速度不同的话,右手自然取均值很好理解,但左手方面这个ias计算比较特殊:分成2个部分来看,第一部分 【左手武器攻速】;第二部分:【—0.5左手+0.5右手】

这个地方本来不是放武器的,策划的想法是,首先直接当作常见的单手拿武器完整算,就是【左手武器攻速】。额外多出了一部分,就是【0.5*(右手—左手)】。

如果右手主武器比左手副武器的武器基速快,攻速有增加;如果右手比左手基速慢,整体就要会慢一点。这一点就形成了一个隐藏技巧:主副手武器的摆放。两把武器的攻速不同,那么正确的放置有可能对应的给副手提高攻速,有一点加强副手位置的意思。

而右手的主位置,让2把武器的攻速都有作用,2把武器的基础速度,都对右手的输出做出贡献。

而实际上两把武器是随便摆放的,也就是说不管怎么安排其中某一把武器为主武器,或许都有待玩家去挖掘一个最优解,2把剑2个坑,加上主副手的一些机制,排列组合其实是有不止2种的。何况这里的设计还延伸出了一个经典的bug玩法,后文再提。

 

 

最后公式总结梳理一下:

装备ias=全身ias—左手武器魔法ias

有效的装备ias=120*装备ias(120+装备ias)

攻速加成=技能光环ias加成+有效装备+2装备天生攻速的均值

带入计算得出普攻帧数为,设定好的普攻16/1+攻速加成)




================================

十七、被击、格挡、施法等动作快慢的计算

有普攻的铺垫,其实这几个部分基本上帧数算法类似,只是细节做的有差异。

比如施法速度,其实就是简单的把ias变成了FCR,攻速大量投放在武器上,施法这类魔法的属性,也大多很贴切的投放在了偏魔法的装备上,比如戒指。请看下图的戒指。

公式结构大致一样。

==============================================

 

打击恢复属性游戏中叫做FHRfast hit recovery

帧数计算公式跟之前的攻击帧数也是类似的,如下

 

帧数= {常量256 * 该动作长度 / [该动作速度 * (基础效率数值50 + FHR增加量 / 100)]} – 1

前面说到普攻基础效率是100,大多动作是100这里就变成了50

因为你是被打,那么自然是不是要恢复动作慢一些~这类再次看出调整数据,科学真实投放的好处,怎么调都可以。

中间的常量应该都不用再说一遍了,前面都提过。格挡,被打也是动作,每个职业都有自己的时间长度的。

这里再讲一下关于打击回复这个公式里面的属性,大家在各种装备应该常看到增加FHR这个数据,类似ias,也是直接一身的fhr相加,最后这个公式

有效FHR = [FHR x 120 / (FHR + 120)],依旧存在类似的修正,然后按照帧数公式的程序去运行。

 

被打上面因为动作较单一,各个职业基本上动作速度都可以确定。

这里顺便写一下被攻击时候,不同职业上恢复的帧数设定,也就是完整动作持续时间。

法师:8

德鲁伊:7

死灵:7

亚马逊:6

野蛮人 刺客 圣骑士:5

下面再谈格挡的动作恢复,格挡成功有一个收盾动作,这个动作依照帧数公式去计算。

公式你可以猜到是什么样的了吗。

跟上述被攻击的计算一样,里面的FHR换成FBRblock)就对了。

帧数= {常量256 * 格挡动作长度 / [该动作速度 * (基础效率数值50 + FBR增加量 / 100)]} – 1

注意这个基础效率也是50,跟被打一样,但是跟其他攻击和正常技能的100不同。

基本上这一套格挡流程中,游戏内只有圣骑士的圣盾技能对格挡有持续速度百分比加成,这个加成是50,来自于技能。

也就是说FBR[FBR x 120 / (FBR + 120)]换算之后,通常圣骑士一旦开启圣盾,这里的总值就是[FBR x 120 / (FBR + 120)]+50

这个50也算是比较隐形的游戏设计,玩家根本看不到,只有查看代码才能知道计算细节。但是圣盾描述中,只是有基础格挡概率的提高说明。玩家并不知道实际上这个技能期间,格挡的硬直也有优化,这个就叫良心的隐性体验优化吧。

 

其次各个职业格挡效率也不同。这几个数值自然就对应设定在了格挡长度中了,游戏中理解为:裸装成功格挡后,恢复正常行动需要的时间。

 

设定定值如下:

德鲁伊跟死灵法师,需要6帧数;

法师要5帧数,

野蛮人要4帧;

亚马逊刺客以及圣骑士,都是3帧。

 

皮糙肉厚的野蛮人反而帧数比灵敏的刺客弓箭手多一帧,想想也是蛮合理的。

 

 



十八、未完待续。