写在前面
刚才手滑导致文章不小心被删除了,本来只是想进行修改的。这里只好重新发一次了。
首先就是我在文章最后也提到了这篇文章参考了《平衡掌控者——游戏数值战斗设计》这本书,并结合我自己实际的工作经历和理解而写成的。这里希望小伙伴们不要误会。也推荐对战斗数值感兴趣的同学购买此书。可以看出这本书的作者数值经验十分丰富,但文字组织能力欠佳。
讨论数值策划相关内容的文章,明显小伙伴们会更活跃一些,这也让我很兴奋。所以我打算再接再厉,继续讲关于属性的话题。了解了属性的基本设计选择,接下来便是属性的投放问题了。但是在考虑投放问题前。我们首先要考虑属性的价值问题。只有知道了不同属性之间的价值关系。清楚了属性价值体系。才能进行各成长模块的属性投放设计。
这里我不想直接将做法罗列出来。我一惯的做法是讲述整个思考过程。只要大家跟着我的思路很容易理解我究竟在讲些什么。因为相信小伙伴们已经不止一次听过减法公式、乘除法公式之类的名词了。也都或多或少知道“减法公式重视防御,乘除法公式重视攻击”这样的结论。但我要和大家分享的是造成这种结果的原因。
伤害公式对于数值策划来说,一如编程语言对于程序员是一样的道理。初级程序员才会纠结于语言的优劣,中级以上程序员能知道语言之间的差异,各自的优劣。以及为了实现需求应该使用怎样的语言。
伤害公式的选择
这里讲的伤害公式,是和战斗公式存在一点差异的。战斗公式应该包含了造成伤害前的很多判断。
伤害公式通常可分为减法公式和乘除法公式两大类。这里我们详细的讨论这两类公式的特点。然后在之后的工作过程中,根据需求选择最合适的战斗公式即可。
减法公式
伤害 = 攻击 -防御
减法公式是那么的清晰易懂。这里我们假设防御为10,看下伤害随攻击的变化。
但存在一个大问题:当防御>攻击时,攻击毫无意义,极端情况下伤害变为0。这种设计会导致玩家过分堆积防御属性。也就是说防御属性和攻击属性严重的不等价。
早期游戏的解决方法简单粗暴,伤害最小值为1。想象一个场面,多名非R玩家围攻一个超R玩家时,不断产生的1的伤害飘字。不过如果你设计的就是一个以养鲸鱼用户为目的的游戏时未尝不是一种方式。这也是为什么国产页游多采取这种方式的原因。笑~
上面这部分有很多小伙伴表示看不懂,这里我们以《梦幻西游》的物理伤害计算公式为例来解释。需要注意的是,实际《梦幻西游》的伤害公式还要考虑
修炼等级
等一些其他的浮动参数。但这里为了方便理解无视了这些参数:
实际伤害 = 攻击力 - 防御力 + (攻击力*K1)
这里的参数K1作为1个调整系数,实际上就是给与攻击力一个保底值,假设这个参数是0.1,就表示在不破防的情况下依然可以打出10%攻击力的伤害。这在一定程度上保证了攻击力的效用。而K1可以在测试中根据实际情况进行调整。
可以看出减法公式改进的方向都是针对于不破防的情况。
但是这里不要误会减法公式一无是处。减法公式实际上是我最喜欢的公式,因为数值敏感。设想一下你每增加1点攻击力,(在不会出现不破防前提下)伤害也会随之增加1点。这就是我在前文中说的属性的设计是明显的。
数值敏感性高,反馈明显,这也是很多策略游戏倾向减法公式的原因。
乘法公式
乘数法的公式有几种变种,这里我们主要解释两种。第一种是通过护甲计算出减免系数,第二种是通过攻击和防御一起计算出伤害。我们首先看一下第一种公式:
伤害 = 攻击 * (1-伤害减免百分比)
伤害减免百分比 = 防御/ (防御+人物等级* K1 + K2)
其中K1和K2是调整系数。这里我们按照K1=50,K2 = 200来查看伤害曲线如下图所示:
怎么理解这个曲线?随着防御力等比例提升,收益逐渐放缓。伤害减免百分比是无限接近于100%的。这就是为什么应用减法公式的游戏,玩家通常更关注防御力。而应用乘除法公式的游戏,玩家的注意力更多在攻击力上。
那么怎么理解K1和K2这两个参数?如果这两个参数均为0,那么伤害减免百分比就是100%。人物等级*K1实际上是使得人物等级(或者说角色成长)参与到计算公式中来,这实际上是对防御力转化为伤害减免百分比的变相削弱;而K2的作用则在于控制防御转换为伤害减免百分比的一个密度分布,这种在公式中留有控制参数的做法在数值设计工作中很常见。
这套伤害公式的应用以《魔兽世界》为代表。分析这款游戏为何使用这样的伤害公式,结合我们说的伤害公式的特点分析:魔兽世界中并没有非常多的人物战斗能力提升点(就是我们通常说的成长系统),等级和装备是最关键的战斗能力提升点。设计人员不希望游戏中出现所谓的"超级玩家"。魔兽世界希望玩家之间的属性相对公平,不会产生大差距。这里也再次说明了我的观点:采用什么样的伤害公式,要看游戏整体是怎样设计的,想要达到怎样的设计目的。
除法公式
除法公式是在乘法公式的基础上进化得来的。
伤害 = 攻击 * 攻击/(攻击 + 防御)
这里我们依然看一下这个公式的伤害曲线,假设防御力是100保持不变。伤害随着攻击的提升:
有意思的是,当我们将其和减法公式对比时发现。此公式很好的解决了减法公式很头疼的防御>攻击的情况,并且在攻击力提高时逐渐趋近于减法公式的效果。不过这个公式还是有改良的地方,正如我们上文中所说,我们可以通过加入参数的方式来让这个攻势更灵活。这里就不多说了,读者朋友们可以根据业务需求自行改进。
属性价值
各种属性就好像各国货币一般,要衡量货币的价值,就要找到货币之间的“汇率”。
攻击能力可以抽象为每秒钟造成的伤害数值,简称秒伤DPS;
生存能力则可以抽象成提供多少有效生命值EHP(这里要注意有效生命值和我们通常所说的生命值是有区别的。)
而攻击能力和生存能力的平衡,就是通过我们预期的战斗时长(回合制游戏中的回合次数)T:
EHP = DPS * T
但随着游戏时间推移,属性也在不停成长。但战斗时长实际上是不会发生改变的(或者说不会有大的改变,不会出现1级时打怪需要10秒,60级时打怪需要10分钟的情况)因此,在任何一个时期,都可以说EHP和DPS的对应关系时保持不变的。这是属性价值评定的基础。
属性的效用是建立于公式体系上,没有公式,属性价值无从说起。公式体系定义了各种属性的效用,也是通过公式体系,将所有的属性链接起来。这方面推荐大家观看这篇文章:
属性数值设定过程(二)——属性价值模型
已经有很详细的分析,这里就不多谈了。
后记
如果游戏中角色的属性没有变化,相信属性的设计到这里也就结束了。可惜的是,属性成长几乎是rpg游戏最核心的诉求之一,因此在完成以上内容之后,我们还需要考虑属性的成长。
下一期中,我们就来聊聊属性成长相关的话题吧。
参考文献
《平衡掌控者——游戏数值战斗设计》