如何高效设计游戏——游戏伤害公式的量身定做

发表于2015-10-16
评论1 3k浏览

自从开始写博文,已经一年之久了,其中受到很多读者的认可,也有很多读者发出许多不同意见,笔者全都感激。


  这篇博文是应一位读者的要求而写。内容上可能会比较基础且坑长。但是就笔者观点,就算是资深游戏设计者,我们也可以就此一些概念进行一下想法的交流。


  伤害公式,可能是大多数游戏类型中都会接触到的一部分内容,无论是RPG、SLG、ACT、STG还是其他一些怪异类型的游戏,只要伴随着攻击(可能在某些游戏中被换概念)与伤害,就有伤害公式的存在。伤害公式可谓是游戏规则中比较重要的一块内容。在这里我将和大家一起来讨论一下关于伤害公式的一些课题。


  按照传统,我先来吐槽一下业内的一些认识。


  按照我们大家熟知的,业内普遍把游戏策划分了好多类型,什么“主策划”、“系统策划”、“文案策划”、“脚本策划”、“视觉策划”以及“数值策划”等等。种类繁多啊~~可能按照部分人的想法,只要这几种策划分工明确,各守其责,就能够设计出好的游戏。这个槽点太大了,不用笔者来吐。当有人讨论及数值策划是做什么的时候,会有一部分人跳出来,然后行云流水一样的背诵:“数值策划负责游戏内部的数值模型搭建,整个游戏的经济体系搭建…………”,这也无可厚非。但是有人直接一句话概括,数值策划就是负责游戏的平衡,这我就想稍微吐槽一下了。现在业内已经形成一定的惯性思维了,不管什么游戏我都要去平衡,无论什么,只要挂一个“平衡”的招牌就对了。笔者想说,这个东西还真不能一刀切,要看你的游戏类型,游戏想要达成什么样的目标,因地适宜,不是什么游戏都要追求平衡的,游戏游戏你去追求各种平衡反而会造成不良体验,失去乐趣。举个最浅的例子,决定要不要做平衡之前,先要看看你的游戏PVP细分多不多,或者是不是帮派分化式(种族式地)地策略竞争游戏。本身就是一款单机RPG,或者本身游戏就是让玩家去进阶的游戏,要平衡何用?这些都可以归纳为游戏的设计目的(设计意图)。我觉得以后招游戏策划或者评价一个游戏策划,把“能够平衡游戏”改为“能够时刻明确设计目的,或者能够根据设计目的设计出合适的游戏规则”为好。总的来说,笔者想表达两点:①策划不要分那么多的界限,否则设计不出好游戏。策划的前提是一名游戏爱好者,对于游戏爱好者来说,这些分类自然会都有涉猎。②不要盲目的追求平衡,要时刻想着目的意图。


  言归正传,我觉得理解了上面两条,会对我们下面接着要讨论的伤害公式的设计有所帮助。



伤害公式在逻辑上的发展历程


伤害公式是什么?

  业内的东西,又不是学术研究,所以没什么明确定义。就是看谁讲的有理,谁概括的全,谁认同谁了。所以这里笔者也斗胆尝试给出一个伤害公式的定义:


伤害公式:就是为了能够实现定量或者按照一定的逻辑规则扣除目标一定HP的计算方式。


  这就是伤害公式,我觉得我的设计意图达到了!我就是想要设计出一个能够按照预期的效果扣除目标HP的一种规则。


伤害公式是如何在逻辑上演化发展的?

  在讲伤害公式之前,我们先来看看常用的角色基本属性是如何演化发展的。


  以下内容可能会有点流水化


  起初,我们先有了角色的概念。若我们想要两个角色在游戏中发生战斗,那游戏设计师就需要组建一个裁判组,其中计算机充当裁判,游戏设计者来制定游戏规则。就像几个小伙伴用猜拳的方式来角逐一样,我们在游戏软件中会采用一些更加细化并且量化的形式来制定规则。这时我们通常会引入HP(Health Point)来描述该角色所能够承受的最大伤害,这时我们能够做到的规则就是每次发生攻击,伤害为恒值,直到一方HP为0为止。但是这样做显然会出现维度太少而带来的结果恒定化,并且也显得无聊。


  下一步,我们引进ATK的概念,来形容该角色对目标所造成的伤害。这时,我们可以制定的规则是targetHP-a*ATK,或者有好事者可以这么干targetHP/(a*ATK),未尝不可。因为ATK已经成为角色的属性了,我们也可以在游戏中对ATK进行成长。至此战斗结果还是显得无聊。


  接着,我们引进DEF这一属性,来形容该角色对所受到的伤害的减少量。这时我们可以指定的规则有这种targetHP-(a*ATK-b*targetDEF),有这种targetHP-(a*ATK/F(b*targetDEF)),还有这种targetHP-F(ATK,DEF)等繁多种类(无穷无尽,无法枚举)。剩下的就要看读者们想用那种,或者需要那种了。


  至此,我们的战斗规则稍有起色,但是总感觉还是稍有欠缺,因为这场战斗不是那么的刺激。原因可能是少了那么一份“惊喜感”,因为每次战斗结果都一样。为此我们我们需要在前者的基础上加一点未知元素。于是我们有targetHP-DMG*Random(a,b)或者targetHP-DMG+Random(a,b)(其中DMG则为之前通过ATK与DEF计算出来的伤害),通常使用前者较多。这样会对结果产生更多随机的未知的处理,使得这场战斗更加趣味化。


  神马?!觉得还不够刺激?!!!那好吧。我们为此引入Critical%的概念。此属性无法在伤害公式层面上存在,只能安排到战斗逻辑上。例如,我们投一个骰子,如果这个骰子的值落在(0,Critical%)区间内,则系统判定该角色攻击为暴击,伤害大量提高为a*DMG。


  神马?!还不够刺激?!这样唯有引入Dodge%的概念了。同样的,此属性也无法存在于伤害公式层面上,只能安排到战斗逻辑上。例如,我们投一个骰子,如果这个骰子的值落在(0,Dodge%)区间内,则系统判定为该角色闪避此次攻击,所受到的伤害为0。


  在此注意一件事情。在游戏的战斗伤害公式与逻辑上有很多对立的属性存在,其中我们已经介绍了ATK与DEF的演化发展思路。同样的也有Critical属性与Anti-Critical(部分游戏可能叫做暴击与韧性)以及Dodge与Anti-Dodge(闪避与命中)等一些列对立属性。我们从设计目的来看,之所以存在对立属性,是因为可能从某种商业化或者趣味的角度出发,我们需要Critical以及Dodge无限增长或者可增长的空间较大,为了能使这一设计决定不失偏颇,才会想办法去引入另一个属性来进行压制。这在行业内来看是一种包装概念来做收入的手段。



伤害公式的种类



  下面来介绍一些常用的伤害公式。


DMG=a*ATK-b*targetDEF类(俗称加法公式,或减法公式)

适用情况

  俗话说,最简单的反而是最好用的。此公式特点,形式最为简单,结果最为直接,但是需要设计者在整个游戏数值架构内花更多的心思去搭建。这类公式最适合所有ATK与DEF的成长空间有限,并且ATK与DEF成长比例一定的情况下。当然不排除特殊处理过的情况,可能会带来意想不到的效果。


问题处理

  这类公式通常会遇到一个问题,就是当b*targetDEF > a*ATK时,所得伤害是负数,如果直接扣血会发现越扣血越多。此时我们需要在战斗逻辑中补一个漏洞。


如果(a*ATK – b*targetDEF)≤0,则DMG=1。


公式变式

  使用这种公式可能还会遇到一个问题。战斗双方如果实力差距较大时,会发生极端压制情况,既所谓的秒杀。这样,我们可以适当的构造一个减函数F(X),最终修正公式为

DMG=(a*ATK – b*targetDEF)*F(Diff(ATK,targetDEF))          (其中Diff为形容ATK与DEF差的函数)


DMG=a*ATK*F(targetDEF)类(俗称乘法公式,或者除法公式)

  如果把上一种公式形象描述为“抵消伤害”的话,那么这种公式可以形容为“折损伤害”。这种公式比较适合ATK与DEF的成长空间无限大(就是那种街头泛滥的网友,无限砸装备,无限成长的那种)。


问题处理

  这类公式需要注意F(X)的处理。通常F(x)都会构造出一个带有下界且下界大于0的函数,如图。


  或者构造一个关于ATK与DEF的函数F(ATK,DEF)并且也需同样造成上图的效果。


如何高效设计游戏——游戏伤害公式的量身定做 ...


其他类公式DMG=F(ATK,targetDEF)

  由于已经归类为其他,所以实在是太繁多了,所以不枚举了。在这里只是提一个常用的一种公式DMG=ATK^2/(ATK + targetDEF)。


如何高效设计游戏——游戏伤害公式的量身定做 ...


  如图所示,红线代表伤害关于攻击力的函数曲线,橙黄色代表伤害关于防御力的函数曲线。从这两个函数分析得出,当攻击方攻击力大于防御方防御力时,曲线接近直线既每点攻击力带来的伤害增益为1点。当防御方小于攻击方攻击力时,曲线接近直线既从普遍情况来看,每点防御力带来的伤害减少为0.5点。所以使用这种伤害公式,我们再设计角色属性以及属性的成长的时候,尽量控制ATK大于DEF的情况,这样结果看起来比较好看。



如何量身定做自己的伤害公式



  我们按照目标导向型思路来分析。


1.我们游戏需不需要伤害公式,能否直接扣除固定量的HP,或者ATK的值,通常这种设定适合休闲类游戏,或者塔防游戏。

2.游戏中参战角色的基本属性有哪些,这些属性是如何定义的?战斗时需要用到哪些属性?

3.有没有Critical%,有没有Dodge%,有没有Anti-Critical%,有没有Anti-Dodge%

4.伤害结果需不需要带有波动性?

5.属性的成长空间是否有限?决定选择哪种类型的公式。

6.战斗节奏的要求?调整ATK与DEF的系数,以及规划HP、ATK、DEF的成长。

7.公式初步选定之后。用控制变量法来观察ATK与DMG的关系以及DEF与DMG的关系,画出曲线图来分析是否达到需求。

8.有没有需要添加战斗逻辑来达到某种目的?

9.最后看运算效率如何。计算机执行幂函数的效率远远低于多项式函数。



总结



  其实本文所讲的战斗公式都是基础。如果想要达到特殊的目标或者更好的体验还需要在逻辑层面上下功夫。公式结合逻辑,可能会造就出无限多的优良战斗系统。


  本文一再强调目标导向型的设计思路,是希望设计者们掌握这一成熟的方法,从而达到以不变应万变。


  欢迎有想法的人提出意见,帮助改善。

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