战斗数值搭建与入门

发表于2016-08-23
评论10 1.7w浏览

 

1.战斗数值设计目标

有很多介绍数值策划应该是做什么的文章,这里不再赘述。我认为的数值策划,主要的工作目标是两点:1、玩家体验好;2、可维护性好。

玩家体验良好,最浅显的是表现在玩家是否会吐槽“策划傻X”,吐槽游戏不平衡,吐槽坑太深。略微深层次一点,是玩家是否愿意踩你挖的坑,如果玩家才得开心并且大把大把往里面砸钱,这就是成功的系统和数值。

可维护性好,表现在调整数值的便捷性。所有人都知道,数值不可能做一版数值就一劳永逸了,而是需要很多的后期调整来达到优化体验的目的。优秀的数值策划,可能在几分钟内就完成了大量的数值调整,而新手数值,可能就需要大量重复无趣的劳动去修改。

在战斗系统中,我把这两个目标简化成:1.游戏平衡性好,战斗节奏合适。2.英雄、关卡和养成系统数值的可维护性强。

 

2.确定属性

游戏中我们能看到各种各样五花八门的属性,这里我们给一个相对大致的罗列和说明,在动手做战斗系统框架之前,第一步需要确定的就是游戏内有哪些属性:

 

2.1一级属性和二级属性

我们常见的力量、敏捷、智力通常被我们成为一级属性,之所以成为一级属性,是因为这些属性自身并不参与实际的运算,而是将一级属性通过特定的计算转换成二级属性参与实际战斗系统的计算。

而攻击(物理攻击、魔法攻击等)、防御(物理防御、魔法防御等)、血量、攻速等,就是我们常说的二级属性,一部分游戏内由一级属性计算得到,也有更多的游戏根本就没有一级属性,只有攻击、防御、血量等属性,这时候我们也就不称之为二级属性了。

当然有人会问如果我游戏中有一级属性也有二级属性,那我制作数值的时候到底是应该从一级属性推出二级属性呢,还是从二级属性的数值反推回一级属性的数值呢?关于这个先有鸡还是先有蛋的问题,我认为是应该从二级属性反推一级属性,因为在游戏中实际参与运算的是二级属性,二级属性直接参与数值框架的搭建是最为有效可控的,而只要二级属性的数值增长方式不要太奇葩,通过固定运算方式反推出一级属性的分配和增长是相对比较容易的。

 

2.2随机属性和其他属性

随机属性,这是一条我随口瞎编的名字。这里所谓随机属性,就是指有一定几率触发,也有一定几率不触发的属性,包括命中率、闪避率、暴击率、格挡率等。

其他属性,包括暴击伤害率、免伤率等等。

 

2.3对抗属性

对抗属性,并不是还有额外的属性内容需要介绍说明,而是在上面介绍的那么多属性中,有一部分属性是相互对抗的,比如说命中率和闪避率。我们在数值设计的过程中,应该要巧妙的运用对抗属性,来堆砌对抗数值卖给玩家。

比如闪避率和命中率,就是对抗属性。

 

3.战斗基础

3.1战斗公式

关于战斗公式的文章,网上随便找找就能找到很多,我这边就长话短说。

战斗公式一般分为如下三种:

减法公式:伤害值 = 攻击 防御

乘法公式:伤害值 = 攻击 * (1 – 免伤率)

除法公式:伤害值 = 攻击*攻击 /(攻击 + 防御) 或者 伤害值 = k * (攻击/防御)

我自己是更加熟悉减法公式,目测市面上90%以上的手游、页游都是用的减法公式,所以我个人推荐使用减法公式,本文的内容也是基于减法公式的。

我们先来看看减法公式的优缺点:

优点:数值直观、可扩展性好,直接放大数值即可

缺点:存在不破防情况、攻防不等价

知道了缺点之后,我们就要想办法规避缺点:

不破防的情况,我有以下几条处理建议:1、不破防情况下,固定造成1点伤害;2、尽量拉开攻防比,比如攻防比10:8相对10:3就更容易出现不破防的情况;3、减法公式小调整为:伤害=max(1,(攻击-防御))+攻击*k4、减法公式和保底伤害公式,两个伤害取较大值,即:伤害 = max(攻击-防御,攻击*k),一般我建议采取24两条结合,就能很妥当的解决这个问题。

攻防不等价,这个描述对于没有了解过这方面知识的读者,理解起来稍微有点困难,稍微解释一下。攻防等价,是指攻击增加一倍,防御不变的情况下,伤害刚好增加一倍;攻击不变的情况下,防御增加一倍,伤害恰好变为原来的1/2,要说这个攻防等价有什么意义呢?意义就在于玩家A攻击=a,攻速=b,玩家B的攻击=2a,但是攻速只有b/2,那他们对同一个单位造成的dps是相同的。那对于攻防不等价的情况,我们应该怎么处理呢?那就是省去攻速这条参数。这就是为什么我们在类我叫MT的回合游戏中经常看到减法公式,而在moba游戏中经常看到用乘除法的原因。

我是比较坚定的减法公式支持者,主要是因为使用较多。但是我也考虑在之后的项目中尝试使用乘除法公式,不知道到时候会不会有种豁然开朗的感觉,希望之后能有机会跟大家分享这方面的制作体验。

 

3.2圆桌理论

       关于圆桌理论的讨论,网上也能找到很多讨论内容,我这边只简单的介绍概念和结果。

       游戏内往往会有很多的概率触发时间去判断,比如攻击是否被躲闪、是否暴击、是否被招架。这么多概率触发的事件,如果多次掷骰依次得出本次攻击是否被躲闪、本次攻击是否暴击、是否被招架,那这种算法就是瀑布理论。瀑布理论的缺点在于,多次判断的时间,在后面判断的时间的真实概率低于实际概率。如命中率80%,暴击率20%,那先判断命中,再判断暴击,这种情况下的真实暴击率是80%*20%=16%

       为了实现真实暴击率等于理论暴击率,暴雪爸爸最初使用了圆桌理论。即一次掷骰就决定了玩家会触发什么事件。即“一个圆桌的面积是固定的,如果几件物品已经占据了圆桌的所有面积时,其他的物品将无法再被摆上圆桌”,举个极端的例来说就是:

       玩家A的命中率是80%,暴击率是50%,玩家B的闪避率是0,那么A20%的概率被躲闪,50%的概率暴击,30%的概率是普通攻击;那如果玩家A的命中率低至40%呢?那玩家A60%被闪避,40%的概率暴击,而不会触发普通攻击。

       那么为什么没有普通攻击了呢,因为普通攻击的优先级较低,被优先级更高的属性挤下了圆桌。那么到底哪些属性优先级较高,哪些属性的优先级较低,暴雪是这么处理的。

优先级

属性名称

1

命中

2

躲闪

3

招架

4

偏斜

5

格挡

6

碾压

7

普通攻击

在我们的游戏中,可能并没有偏斜、碾压之类的属性,但是有暴击之类的属性,那么我们就可以删除我们没有的属性,在优先级中加入游戏中添加的属性。

 

4.英雄设定

4.1种族(势力)

在手游、页游时代,种族的概念正在弱化,少量游戏中保留种族也只是希望能够更方便的在种族之间制造冲突点和针对性系统。其实不同的种族还能根据种族特点做出相应的技能效果和表现。因为目前大部分游戏的种族与战斗系统不相关,所以只抛出这个概念,不展开讨论。

 

4.2职业

职业是英雄的特点,同一种职业一般都有相近的特点。DND将游戏内职业分为四类:控场者、防卫者、领导者、打击者。很多游戏有很多职业,大多是从这几个基础职业中衍生出的职业,比如打击者,分为物理打击者战士、法术打击者法师。

制作各职业属性之前,一般都会先制作一个标准数值模板,制作标准数值模板,最重要需要决定的是攻防血的比例,一般先将攻击定为10,防御的话,常见的从3-7都有,主要3个考量因素:1、不破防情况的考虑,最好不要把防御调的过高,否则容易出现不破防情况;2、伤害血量考虑,如果你希望游戏中后期,每次攻击造成的血量不是太夸张的大,那尽量不要把防御调的调小,但是这个影响不是太大,也有其他修正伤害血量数值的方法,所以略微考虑一下即可,不需要拘泥;3、个人偏好,就是看你之前做过或者研究过哪个比例的数值体系。确定好攻防比之后,就是确定血量的比例,这个最直观的就是单场战斗的时长,血量越多,战斗时间越长。只是需要注意的一点就是,血量最好不要设置的过小,比如说设置成2-3个回合,那战斗中一个暴击就能改变战局,除非你要的是这种战斗效果,否则不建议将战斗节奏拉得这么短。

职业标准数值模板完成之后,就需要制作不同职业的数值模板了,在不同职业的属性数值设计上就有体现出各自的特点,目前手游、页游有两种相对比较主流的做法:1、每个职业一套攻防比;2、所有职业共用一套攻防比。

       每个职业一套攻防血比例,能非常简单直观的体现出职业之间的特点。如模板是10:5:20的情况下,防御战士的攻防血比例是6:6:25,攻击战士的攻防血比例是12:4:16,治疗的攻防血比例是8:4:16,职业之间的平衡,并不是要求绝对的数值平衡,而是要求体验平衡。

       而所有职业公用一套攻防比,怎么样才能体现出各个职业的特点呢?我们从随机属性下手。防御战士,我们就增加闪避率、格挡率;攻击战士就增加暴击率;治疗就通过技能实现。

       重要的话再说一遍,职业之间的平衡,要的是体验的平衡,而不是绝对的数值平衡。数值平衡是指战士和治疗同时对砍,最后同时死亡,但是体验平衡是指每个职业在队伍中都有自己的位置,玩家不会只在游戏选择一种职业或者部分职业。而我们要的正是这种体验平衡,而不是绝对数值平衡。不需要将过多的精力消耗在怎么样将三五个职业的属性配平到绝对数值平衡。而这也是为什么要在实际游戏测试过程中,不断调整职业、英雄数值的原因,因为我们很难通过非常完美的计算达到绝对的体验平衡。

 

4.3技能

       最后说到技能,应该来说技能是战斗系统中相对比较难的部分,难的不是实现,而是比较好的体验。英雄之间的差异、克制、组合、平衡,很大一部分都需要技能来实现。这里我们只谈基本理论,不谈实现,如果谈实现和做法的话,估计征文大赛结束,这篇文章都还没有写完。

       入门级别的技能设计,就是找个成功的游戏,将他们的技能效果扒下来,技能描述和技能表现换成自己游戏的世界观即可。技能设计的加入,使英雄之间的平衡更加困难。所以需要在后续的测试中不断修改完善。

 

4.4战斗模拟

       有些数值策划会热衷于写战斗模拟器,我从来没写过,因为不同的语言、平台、随机种子,得到的结果可能会有很大的差别,怎么样去验证自己的数值呢,最科学省力的就是拿程序写的战斗逻辑来测试调优数据。自己也落得清闲。当然我不排斥写战斗模拟器的做法,可能是我没有发觉到其中的奥妙之处。

 

5.数值规划

很多人会把这个过程说的神乎其神,很多人在听到数值规划的时候就已经被震慑的直哆嗦。下面以我的理解来说说什么是数值规划,数值规划简单的说就是你是怎么规划游戏内的数值投放,这个规划很重要。最重要的是顶层设计,顶层设计合理,才能顺利的推进后续的数值生成工作。其实只要数值模型搭建的合理易懂,后续的数值生成工作,是完全可以交给执行数值或者系统策划去完成的。

 

5.1属性分配

       简单来说,属性分配就是将我们确定要在游戏中设计的属性,投放到不同的系统中。我们通常不会把所有属性都同时投放到所有的系统中,可能在装备上,只有简单的攻防血,在装备洗炼上有随机属性,这个需要我们在做游戏数值制作初期就完成规划,并且在后续数值制作过程中尽量少的改动。

系统

攻击

防御

血量

命中率

闪避率

暴击率

装备

 

 

 

洗炼

 

 

 

       确定了各个系统有哪些属性之后,就是确定买个系统分配多少属性了,这个很重要,直接影响到每个系统、每个阶段玩家投入的精力和金钱。还有会影响到怪物数值的匹配制作。

 

6.英雄养成

6.1说明

其实养成系统这部分内容,应该是跟战斗系统关联性较小的,很多实际操作中会并入到经济系统,或者单独出来的养成系统来做,之所以要放到战斗系统来说,只是想简单的说几条跟战斗系统相关的内容,并入深入的展开说明。

 

6.2横向数值

有了英雄的数值模板之后,我们要根据英雄的数值模板来制作装备、宝石、洗炼等一些列系统的数值,基于减法战斗公式的养成系统数值,只需要将英雄属性的数值倍率放大即可。

比如英雄的攻防血比例是10:7:20,那么,我们同等级的装备的属性也应该是这个比例,这种同比例放大使得游戏在任何时期的属性都能基本保证战斗节奏不变。但是我们突然想起来,前面设置职业的时候,事实上每个职业的攻防比是不一致的,防御战斗的防血较高,治疗和辅助的整体属性值都相对偏低,这样子就需要我们为每个职业都制作一套专属的装备。所以别以为游戏内每个职业一套装备只是为了增加道具数量,更大的考虑基础游戏平衡性。

装备系统是可以给每个职业做一套装备,那么宝石系统,都不能给每个职业做一套宝石吧?基于游戏平衡我们应该怎么来确定宝石的属性呢?

 

6.3纵向数值

       英雄、装备、宝石等,提升等级都会获得相应的属性提升,这部分提升内容是消耗换属性,越到后期获取相同属性值的消耗越大,这部分是经济系统讨论的内容,这边不扩展开讨论。这边我要说的是,等级或者装备,每提升一级,属性提升多少比较合适呢?如果每一级获取的属性值较大,那么等级相邻玩家的数值差距就会较大,如果每一级获取的属性值较小,那么玩家完成一次升级后的成就感就不足。那么到底这个值在多少的范围内是比较合适的呢?我的建议是游戏内养成系统较多的情况下,8%-15%,如果游戏内养成系统较少,可以控制在10%-25%,为了让玩家更直观的在战斗中能够体会到属性的提升,也可以考虑在游戏初期,将每级提升的值扩大到这个比例。当然这个比例见仁见智,每个人的看法可能都不太一致,权当抛砖引玉。

游戏平衡,分为横向平衡和纵向平衡,横向平衡指各个职业下的各个英雄在同一等级下都是相对平衡的。相对平衡,指的是在团队中的作用不容忽视。绝对平衡是指平砍中同时死亡。但是不同职业的定位和作用不同,不能用平砍来判断他们之间是否平衡。

纵向平衡:很多面试官都会问一个问题,游戏内有很多的养成系统,你是通过什么手段来保证玩家不是只把经历和金钱都投入到某一两个系统?有人会诡辩说,每个系统都是独立的,都是会免费产出资源,进而用于提升角色属性,玩家为什么会不去玩这个系统呢。在我看来,玩家没有动力花钱的系统,就是失败的系统。还有人会说,每个系统的投入产出比都是一条递增的线(有可能是直线,也可能是曲线),当游戏进行到一定程度后,总会达到一个点,玩家将金钱投入在这个系统比投入到其他系统更值,也就是边际成本更低。但是作为数值测试,我们需要知道的不仅仅是一定存在这个点,而是要知道这个点在哪里,我们能通过什么手段去调整这个平衡点,以及平衡点之后,每个系统的投入收益比。

 

7.关卡与怪物

       这部分内容其实算是执行策划的工作内容,本来不想提及的,但是前面说过,数值策划还有一个很重要的工作目标是可维护性强,所以在这边简单的提及一下。

 

7.1关卡设计

       关卡数值的设置,会有很大程度上影响玩家的体验和付费。关卡的重复性会极大的降低关卡的趣味性,增加关卡趣味性,有一部分是关卡策划和系统策划的内容,这里仅介绍数值策划的部分。

       跟着游戏的深入,会接触到越来越多的英雄,如何将这部分英雄很顺利的推到玩家面前,进而让玩家去付费,这是一个需要非常刻意去设计的点。

       通常的关卡数值的制作中,会将10级或者一个大关卡,作为一个整体去考虑,不同整理之间的数值,会有很明显的差异性。

       游戏前期,我们考虑到玩家的挫败感,一般不会放置太奇葩或者属性过于有特点的怪物,一般都是一些中规中矩的怪物。

游戏前中期,我们需要在怪物中加入一些特定的属性,比如有部分前排怪物的闪避特别高,后排有3个全体回血的奶妈,某个位置有个一直会睡你的怪物,让玩家的进攻没有那么顺利,也是数值卡点和付费点介入的时间点。

游戏中后期,需要有些主动打乱玩家阵容的队伍,比如怪物会高伤害直接后排全体,这部分内容是保证玩家在游戏内持续消耗的动力。

我想要说明的是,关卡怪物的差异性,增加趣味性的同时,也是为了将新英雄的需求推到的玩家面前。

 

7.2怪物数值

       很多游戏中,会制作两套不同的公式,一套用于pvp,一套用于pve,也有些游戏中是共用一个战斗公式的。两种方法我都做过,应该来说我更偏向与使用一个战斗公式的做法。战斗公式由pvp战斗的需求得到,而在pve战斗中,你要知道,怪物所有的数值都是出自于我们的手,没有所谓的合理与不合理,你说一个世界boss的攻击只有几百,但是血量却有几百万,你说合理吗?我说合理。因为我给了他一个设定,他是世界boss,同样在关卡中,我们也可以根据游戏需要设定一些我们想要的怪物数值。

       需要说明的是,有相当一部分数值策划喜欢通过英雄的数值模板推出怪物的数值模板,我自己觉得无可厚非,但是我们完全可以把怪物的数值做的更特别、更有趣。

 

8.关于战斗力

前面提到过,我是坚定的减法公式支持者,所以下面关于战斗力的计算,也是基于减法战斗公式,我们先从一个简单的例子说起(心急的读者可以直接跳到倒数第3段看结论):

假设游戏内每个玩家只有两条属性:攻击和血量。那么可以得到:

玩家A击杀玩家B需要的回合数为:B.hp/A.atk

玩家B击杀玩家A需要的回合数为:A.hp/B.atk

如果A击杀B的回合数小于B击杀A的回合数,则AB强,即B.hp/A.atk< A.hp/B.atk的情况下,AB强。变换不等式得到A.atk*A.hp > B.atk*B.hp的情况下,AB强。所以我们用atk*hp来衡量一个英雄的战斗力。

当加入暴击率属性之后,我们应该怎么处理这部分属性呢?当然是合并到atk这项属性中。此时,玩家的输出期望,由原来的atk,变成了现在的:atk+atk*暴击率*暴击伤害加成。(参数说明:暴击伤害加成指暴击情况下比普通攻击情况下多出的伤害部分。如普通攻击造成1倍攻击,暴击造成1.5倍攻击,则暴击伤害加成值为0.5)。我们暂且称之为有效输出吧。

当加入闪避率属性之后,我们就把这部分属性计入hp中,因为闪避率是变相的增加了自己的hp,我们称之为有效生命。加入闪避率之后的有效生命,变成:hp/(1-闪避率)。什么意思呢?就是闪避率为0的时候,有效生命不受闪避率影响,如果闪避率是100%的时候,有效生命就是无穷大了。

同样,命中率、格挡率、破击率等属性,都可以通过计算合并到有效输出和有效生命两项期望属性中,不同的是,有些属性只影响有效输出,有些属性值影响有效生命,有些属性同时影响有效输出和有效生命。

再下面,我们要引入防御,正是由于这条属性的存在,让我们突然没办法很精确的计算战斗力了,因为防御是跟对手相关的一条属性。如果对手的攻击较高,那么我的生存回合数就少,如果对手的攻击力较低,甚至到了不破防的地步,那我的生存回合数就多。那这个时候应该怎么处理呢?

说到这里我需要先抛出两条公理(公理:不需要加以证明的基本事实):1.减法公式在存在防御属性的情况,没有绝对精确的战斗力计算公式;2.战斗力只是实力强弱的一个参考,并非战斗胜负的标准。

1条公理,仅限于我的认知,如果真的存在这种计算公式,欢迎分享,我把这条删了,目前暂时不展开讨论。

2条公理,需要分两种情况来讨论:1.你觉得战斗力5000的玩家应不应该能打赢战斗力6000的玩家?如果战斗力5000太低,那战斗力5500的能不能打赢呢?我认为应该能,还是回到那句话,战斗力不是战斗胜负的标准,游戏的随机性就决定了战斗力低的玩家可以打赢战斗力高的玩家。只要不是太离谱,玩家都是理解并接受的。

2.战斗力5000的玩家C,打赢了战斗力6000的玩家D,这个对玩家C和玩家D有什么影响?先说玩家C,他会觉得特别有成就感,觉得游戏就是靠脑子,并不是纯粹花钱堆数值就行。对于玩家D,他更多的是会思考为什么我战斗力这么高,却失败了,是英雄组合不对,还是英雄站位不对,又或者是因为对方刚好触发了多个暴击,所以把自己打败了。纵观所有游戏,竞技场排行榜从来都不是战斗力的排行榜,因为总是存在一些爱钻研的玩家以较低的战斗力打赢了较高战斗力的其他玩家。

说到这里,我就要抛出我的观点:战斗力就是一个参考值,不需要为了没办法完成的任务,耗费过多的时间精力。那简单处理就能得到一个很直观易懂的战斗力计算公式:n*(k1*有效输出+k2*有效生命+k3*防御)k1/k2/k3分别是多少呢?我建议与之前数值框架中的攻防血的比例相关。

如果攻::=m1:m2:m3,那么k1=m2*m3k2=m1*m3k3=m1*m2.

例如攻::=2:1:4,那么k1=4k2=8k3=2,那么战斗力的公式即为:n*(4*有效输出+8*有效生命+2*防御)n的存在是为了调节战斗力数值的整体大小。

当然有时候我也会觉得计算有效输出和有效生命挺麻烦的,那怎么办呢?那就偷懒着来:战斗力 = k1*攻击+k2*生命+k3*防御+k4*暴击率+k5*闪避率++kn*命中率。

为什么我们敢这么计算战斗力?因为现在游戏内属性数值的投放都非常可控(说到这里,但愿不要有人吐槽说:国产游戏做不好,就是因为有我这种思想的人做游戏导致的),所有玩家都是在沿着我们给他们预设好的一条条养成线努力的跑向终点,玩家正常获得属性的顺序、数值范围都在我们可控的范围内。

又如果是遇到难以预测的大R付费行为呢?在攻::=2:1:4的例子中,只提高60点攻击、或者只提高30点防御的培养成本,将远远大于同时提高攻击20点,提高防御10点,提高生命40点的成本。如果玩家以高消耗的代价,换来低战斗力取胜,那又何妨呢?

 

写在最后

入行已经有好几年了,一直想从头到尾整理一下游戏数值的制作思路,但总感觉下不了笔,很巧合的机会在gad上看到数值征文,所以决定提笔写点东西,希望能帮助到一些希望入行或者刚入行的朋友。由于能力、时间、篇幅所限,很多内容都没有展开细说,有些则是跳过论证直接给出结论,只是希望能够以尽量简短的内容,表达出自己的观点,方便读者阅读和理解。我仅是提供了自己常用做法和步骤,实现数值的途径有很多种,殊途同归,一定有很多其他的实现方式也能达到很好、甚至更好的数值体验,本文权当抛砖引玉,能够很同行一起讨论学习。深知自己才疏学浅,文中若有错误或者不当之处,希望各位同行前辈能够不吝赐教。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引