欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

MMORPG战斗系统设计(2)伤害

程序员文章站 2022-06-07 17:17:59
...

原文:http://blog.sina.com.cn/s/blog_574bf3ac0100e2v5.html 本文是MMORPG战斗系统详解一文的第二章,欢迎大家参与研讨。 第2章 伤害 既然大多数战斗系统以属性做为其核心要素,那么我们为何要从伤害设计讲起呢?这是因为与战斗系统相关的属性最终要应用于

原文:http://blog.sina.com.cn/s/blog_574bf3ac0100e2v5.html

本文是MMORPG战斗系统详解一文的第二章,欢迎大家参与研讨。

第2章 伤害

既然大多数战斗系统以属性做为其核心要素,那么我们为何要从伤害设计讲起呢?这是因为与战斗系统相关的属性最终要应用于攻击者发动攻击和被攻击者受到伤害的过程,而不同类型的攻击形式和不同类型的的伤害形式都有着各自的数学模型。只有在研究清楚不同形式的攻击过程和不同形式的伤害过程之中我们才能了解其中是哪些属性在发挥着作用。而本文的最终目的是为了从理论上研究如何构建中国式DND系统框架,而构建这个框架的过程必须是从游戏核心规则开始的。因此我们首先将对与伤害相关的内容做出讲解。在结合下一章的攻击形式之后,我们将在第四章对整个战斗流程进行详细说明。了解了整个战斗流程之后,我们再开始介绍具体的与战斗系统相关的属性设计,从而为构建我们自己的DND系统铺好基石。


2.1 伤害的定义
在mmorpg中,通过攻击使对方的属性降低或使对方的状态有所改变,都被看作是一种伤害。这里所说的攻击可以是任意形式的攻击,这里所说的“使对方的属性降低”,有可能是生命值的降低、魔法值的降低、速度的降低、战斗或防御能力的降低等等,这里所说的“使对方的状态有所改变”指的是眩晕、石化、昏睡、硬直、浮空、倒地等角色状态。
有些攻击形式会对一个敌人造成伤害,有些攻击形式会对多个敌人造成伤害,而本章中分析伤害形式都是在分析被攻击者,也就是说是在分析一个敌人所受到的伤害过程。

2.2 伤害类型
一般在游戏中的伤害分为三大类,他们是按照伤害的持续时间进行划分的,每类都可以设计多种伤害类型:

2.2.1 瞬间伤害:
能在伤害发生的瞬间(在伤害发生的时间点上)造成对方生命值或魔法值的减少。是伤害敌人的主要手段。这种伤害不会造成任何其它或后续的影响。
例如:物理伤害、穿刺伤害、冰冷伤害、火焰伤害、闪电伤害、瞬间毒素伤害、活力伤害、神圣伤害、暗影伤害、额外伤害、附加伤害对AA(只对某个种族有效的伤害)、百分比减血伤害、粉碎伤害、削减法力伤害、百分比减魔伤害。
界面描述形式:XX某某伤害、XX%某某伤害、某某伤害
有些特殊的瞬间伤害改变的并不是敌方的生命值或魔法值,例如改变敌方的当前坐标或者永久降低敌方的某种属性。

2.2.2 持续伤害:
在伤害发生后的一段时间内(在伤害发生的下一个时间点开始的连续的多个时间点上)造成对方生命值或魔法值的持续降低。这种伤害不会造成任何其它影响。
例如:冰冻伤害、燃烧伤害、电击伤害、持续毒素伤害、流血伤害、持续减魔伤害
界面描述形式:XX某某伤害在Y.Y秒内、某某伤害在Y.Y秒内、某某伤害
持续伤害本质上是一连串瞬间伤害的过程。由于其在伤害发生的时间点上并没有伤害产生,因此他可以和瞬间伤害组合成从伤害发生的时间点就开始作用的伤害类型组合,见在后面第2.4节。

2.2.3 暂时伤害
暂时伤害是一种持续一段时间的伤害,这种持续是一个完全连续的过程,而非像持续伤害那样的在多个时间点上的持续。根据伤害对象的属性暂时伤害又可以分为暂时属性降低伤害和暂时状态改变伤害。
1) 暂时属性降低伤害:
在伤害发生后的一段时间内,造成对方某些属性(例如速度、抗性等)的暂时降低,又称debuffer。对于本次攻击中所包含的其它伤害,它不会产生任何影响。
例如:减慢攻击、减慢移动、减慢全部速度、降低抗性、降低力量、降低敏捷、降低智力、降低攻击强度、降低防御强度、降低物理伤害、降低全部抗性、百分比降低全部抗性、降低护甲、百分比降低攻击准确率、百分比降低投射准确率
界面描述形式:XX% 降低某某持续 Y.Y 秒,XX降低某某持续Y.Y秒,降低某某持续Y.Y秒,降低某某
2) 暂时状态改变伤害:
在伤害发生后的一段时间内,使对方进入某种基本状态或特殊状态。
a)基本状态:移动层:停止、向前移动、向后移动、向左移动、向右移动
姿势层:站立、坐下、步行、跑步、骑马
行动层:空闲状态、战斗状态、施法状态、制造状态、做手势状态、出生状态、死亡状态等等
b)特殊状态:戒备、硬直、浮空、击倒、击退、眩晕、石化、冰封、吹起、睡眠、混乱、恐惧、意识控制、被嘲讽、被禁魔等等
c)死亡动画形式:击飞、冻碎、炸碎、倒地、烧亡等等

2.3 伤害类型的主伤害数值和次伤害数值
任何类型的伤害都有一个主伤害数值,它代表了伤害的强弱。某些类型的伤害还有一个次伤害数值,用来表明持续时间或某些附加效果的强弱。最终的伤害效果——即对方属性降低的程度或状态持续的时间,则由伤害数值和对方的当前属性所共同决定。许多伤害的数值都非常简单,例如“30 火焰伤害”的主伤害数值就是30,“2.0 秒眩晕”的主伤害数值是2.0,而“25 降低战斗能力 持续 3.0 秒”的主伤害数值是25,次伤害数值是3.0。持续伤害的主伤害数值是每秒伤害值,例如,“60 冰冻伤害在3.0秒内”的主伤害数值为20,次伤害数值是3.0。对于一些带有百分比的伤害类型,例如“30% 减少敌人生命值”,其主伤害数值就是那个百分比:30%,同样,“20% 降低抗性 持续 4.0 秒”的主伤害数值是20%。
有些类型的伤害的主伤害数值或次伤害数值需要在战斗时通过攻防双方的属性计算得出。例如D2中的撕裂伤口,其主伤害数值是通过攻防双方的等级计算出来的,并会根据被攻击方的单位类型做出修正,其次伤害数值固定为8秒。

2.4 伤害类型的组合
有些伤害类型会与其他类型的伤害搭配出现,我们称之为伤害类型组合。例如冰冻伤害(瞬间伤害)可能经常会搭配冰冻减速伤害(暂时属性伤害),瞬间毒素伤害可能会搭配持续毒素伤害和毒减速伤害,物理伤害(瞬间伤害)则可能会搭配附加伤害(瞬间伤害)。
伤害类型组合中的每种伤害类型的基础伤害都是独立运作的,他们的触发是由同一次攻击触发的。而后面要讲的“伤害触发效果”则有所不同。

2.5 伤害类型的转换
有的时候伤害类型会根据需要在伤害实施前转换为其他类型的伤害,通常在某些特定的武器和技能中会有如此设定。
例如在TQ(泰坦之旅)中,穿刺比这个比例值可以将物理伤害中的一部分转换为转换穿刺伤害。
例如在D2中,冰箭这个技能将武器的物理伤害转换为了冰冷伤害。

2.6 伤害触发效果

2.6.1 在伤害发生的同时对自己触发增强己方的特殊效果
举例说明:
a)XX%伤害转化生命:对敌方造成的伤害乘以XX%比例后转化为自己的生命,例如:
life leach偷血技能:在给对方造成物理伤害的瞬间附加XX%伤害转化生命。
life drain吸血技能:在对敌人持续施放技能的时间里敌人每间隔0.1秒都会受到一次活力伤害(活力伤害属于瞬间伤害)并附加伤害转化生命(每隔0.1秒发动一次)。
super life drain 超级吸血技能:在对对方施放技能后敌方中了活力流失伤害(活力流失伤害属于持续伤害)并附加伤害转化生命(在活力流失伤害持续作用的时间里,持续的转化生命到自己身上)。
b)每杀死一个敌人 xx点生命获得:在我方将对方击杀的时间点上附加伤害转化生命。
c)XX%伤害转化魔法:同伤害转化生命类似。
d)伤害转化其他属性:例如敌方受到属性伤害的同时我方属性暂时增强。
事实上这些特殊效果正是战斗中与伤害敌人针锋相对的增强己方,我们不将其单列一章,而将它放到攻击形式的技能一节进行讲解,这是因为此类技能在战斗中主要是辅助作用。

2.6.2 在伤害发生的同时对敌人触发另一种伤害
举例说明:
a)冰冻伤害触发冰封伤害:当瞬间冰冻伤害大于敌人生命值的1/8时则触发冰封伤害(状态伤害)4秒。
b)法力燃烧mana burn技能:在瞬间法力伤害(瞬间伤害)发生且敌方法力值有损失时,立即按法力伤害的伤害结果触发百分比附加伤害。
c)瞬间物理伤害触发瞬间法力伤害:在受的物理伤害的同时魔法值也被按照某比例降低
d)伤害触发硬直:设定在一个时间点上受到的全部伤害大于敌人生命值的1/16则在当前时间点之后硬直0.2秒
e)伤害触发倒地:设定某种怪物在8秒内累计受到的伤害大于生命值的1/4且则在当前时间点之后倒地3秒。

2.6.3 在伤害发生的同时触发各种死亡形式
举例说明:
a)伤害触发倒地:正常死亡倒地。
b)伤害触发击飞:瞬间物理伤害大于敌人生命值的1/6且小于敌人生命值的1/2并致使敌人死亡则将敌人击飞。
c)伤害触发冻碎:伤害致使正处于冰封状态的敌人死亡将敌人冻碎。
d)伤害触发炸碎:瞬间物理伤害大于敌人生命值的1/2致使敌人死亡且将敌人炸碎。
e)伤害触发烧亡:火焰伤害或燃烧伤害致使敌人死亡触发烧亡。
死亡时角色尸体的移动方向与死亡形式的方向都与碰撞方向有关,关于碰撞方向在第3章中有所说明。

2.6.4 伤害触发效果的威力和发生几率
触发伤害的威力可以与原基础伤害相关也可以与原基础伤害无关,发生几率也是可以通过公式来设定的。例如对于冰冻伤害触发冰冻减速伤害的几率我们可以将其设定为与攻守双方等级相关的函数。硬直的发生几率则可能设定为与双方的攻击强度和防御强度有关。

2.7 基础伤害与伤害加成
基础伤害是伤害类型的实例(对象)。基础伤害必然属于某种伤害类型,基础伤害必然有主伤害数值。基础伤害确定了伤害的基本值,比如武器上的“15 ~ 25 伤害”指的就是该武器在攻击时能造成15点到25点之间的基础物理伤害。基础伤害并不仅仅存在于武器之上,还可以来源于其它装备、神器、镶嵌物(符咒或遗物)以及技能。
基础伤害在最终进行伤害输出之前,还需要经过伤害加成的增幅。每一种伤害类型都可以对应一种伤害加成类型。一般来说,加成总是百分比形式的。在不考虑其它因素影响的情况下,最终的伤害输出等于基础伤害的值乘以(1 + 相应伤害加成%)。例如20基础物理伤害再加上50%的物理加成之后就是30。对于有次要伤害数值的伤害类型一般来说,该伤害加成类型还可以设定为: +XX% 某某伤害 增加 +YY% 的持续时间

2.8 抗性与伤害免疫
作为被攻击方,对于各种不同的伤害类型,也有相应的降低伤害的手段,就是抗性。抗性的作用基本上都是以百分比的方式降低自己所承受的伤害,例如,假若对方输出的物理伤害是80点,而自己有30%的物理抗性的话,则只会受到80 * (1 - 30%) = 56点物理伤害。
如果某种抗性达到100%的话,就会对相应的伤害种类完全免疫。不过,在游戏设计中,抗性有时会被设置了上限。比如在pve中PC抗性被设置了80%的上限,就是说,假若你的抗性已经超过了80%,那么在实际计算你所受到的伤害的时候,将按照抗性只有80%来计算。而怪物也许没有这个限制,因此某些怪物会被设定为完全免疫某类伤害。
有些伤害类型是可以在一段时间内降低对方的抗性的,另外某些技能也可以降低对方的抗性。即使某种抗性原本超过100%,也可以通过降抗的手段使之降低到100%以下,从而不再对相应伤害免疫。另外,玩家的抗性如果超过了80%,比如达到了120%,此时即使被对方降低了30%的抗性,仍会有90%,而不是50%。当然,如果游戏设计者希望某种怪物完全对某类攻击免疫且不希望抗性被降低到100%以下,那么他可以将该怪物的抗性设定为300%。
玩家的抗性在界面中直接显示为“当前值/上限值”,比如“物理抗性:120%/80%”
假若抗性被降到负值,那么自身所受的伤害将比对方的伤害输出还高。例如,在上个例子中,假若物理抗性是-30%的话,那么所受的伤害是80 * (1 - (-30%)) = 80 * (1 + 30%) = 104。

2.9 持续时间降低
对于带有持续时间的伤害,还有一种降低伤害的手段,就是降低伤害的持续时间。持续时间降低的作用都是以百分比的形式进行的,即:将某种伤害的持续时间降低XX%。降低持续时间不会影响每秒伤害值。

2.10 基础伤害、伤害加成、抗性的发生几率
有些时候,某个基础伤害、伤害加成、抗性并不见得一定会发生或生效,这可能存在两种情况:
第一种情况:“X.X% 机率发动:”(X.X% Chance of:)在这一行下面会跟着一行或几行基础伤害、伤害加成、抗性的描述。这种情况下后续的描述要么全发动,要么全不发动,并且全发动的可能性是X.X%;
第二种情况:“X.X% 机率发动下列之一:”(X.X% Chance for one of the following:)。在这一行下面会跟着一行或几行基础伤害、伤害加成、抗性的描述。这种情况下后续的描述要么发动其中一个,要么全不发动,并且发动的可能性是X.X%(就是说有(100 - X.X)%的可能性全都不发动)。至于假若发动的话,这几个里面发动的几率一般设定为平均。

2.11 如何具体设计伤害形式

2.11.1 关于伤害类型的多少
一般在游戏系统中会设计很多种伤害类型和伤害触发特效,配合下一章讲的多种攻击形式,游戏的战斗系统设计的空间很大。但并不是每种伤害类型和特效都会频繁的在游戏中出现。设计者一般会把物理伤害和几种元素伤害作为游戏中最常见的伤害类型,配以与之相关的加成和抗性,并会根据需要设定是否做较多的伤害触发特效。这样的好处是让玩家一上来就感觉游戏很简单容易上手,但当他们深入玩下去的时候,他们会发现游戏有很多隐藏的有特色的伤害机制。
目前的国内MMORPG游戏伤害类型的设计问题之一就是伤害类型数量太少,使玩家感觉战斗的趣味性差。反面例子则是国外的一些*的ARPG设计者会设计一大堆伤害类型让初级玩家无所适从。正如前文所述,合理的伤害类型设计既要照顾到初级玩家让主要伤害类型突出,又要照顾到高级玩家让伤害机制丰富且有特色。

2.11.2 关于伤害加成、抗性、持续时间降低的数值设定
伤害加成、抗性、持续时间降低为何不以加值或减值的形式而是以百分比的形式设计呢?这与人物的级别设计和属性成长率相关,在MMORPG中人物实力成长率通常以等比数列为基准(为什么这样设计会在数值设定和数值平衡中讲到)。因此在级别差较大的MMORPG中伤害加减值在高等级人物身上的作用如果想要发挥就要设定的比低等级相差很多,同按比例加成削弱相比加值与等级的相关度就更高,设计复杂度也就更大,而两种方法实现的效果却是一样的。所以我们通常用百分比这种方式去对伤害数值进行修正。
如果设计加值与百分比加成双重增幅则对数值平衡的要求更大,比如D2,这里暂时先不做讲述,对于公式设计感兴趣的朋友可以参看第6章战斗系统的数值公式设计。

2.11.3 伤害公式的设计
通过对前面内容的掌握,我们已经可以设计出具体的伤害公式了,例如:
a)物理伤害的伤害公式:
A = 基础物理伤害 * (1 + 物理加成% + 所有伤害加成%) * (1 + 力量 / 500)
B = A * (1 + 特定种族伤害加成%) * (1 - 百分比降低全部伤害%) - 降低物理伤害 - 降低全部伤害
最终对造成的伤害 = B *(1 - 物理伤害抗性% - 全部伤害抗性%)
上述公式中的基础物理伤害基、物理加成、所有伤害加成,力量、特定种族伤害加成都是PC自身的当前属性。百分比降低全部伤害、降低物理伤害、降低全部伤害是当前敌方对PC使用生效的debuffer。物理伤害抗性%、全部伤害抗性是敌方当前的属性。其中除了力量我们没有在之前的内容中详细讲解,其他的与伤害相关的属性我们都已经了解了。
b)百分比减血伤害的伤害公式:
A = XX% * (1 + 特定种族伤害加成%) * (1 - 百分比降低全部伤害%) - 降低全部伤害
最终对造成的伤害 = A * (1 - 全部伤害抗性%) * 敌方当前生命值
上述公式中,我们并没有为它设定直接与之相关的伤害加成和抗性,但特定种族伤害加成依然生效,百分比降低全部伤害%和降低全部伤害的debuffer依然生效,全部伤害抗性也依然生效。并且在最后我们还要将这个伤害的百分比数值乘以敌方当前生命值,才是伤害的最终效果。
力量这类人物内在属性设计我们会在第五章进行详细讲述,它对伤害公式的影响在目前的MMORPG中通常较小,一是为了降低系统的复杂度,二也是因为目前我们所接触的MMORPG主要源于西方的DND系统,他们更重视武器装备和魔法技能本身的伤害能力而非人物的内在因素。中国自己的武侠MMORPG的数学模型是可以以此为突破的,我们的武侠文化更注重个人修为,法术威力、武功威力和武器装备的威力都要受到个人修为的极大影响。在第五章中我们会对此进行更深一步的分析。

至此,我们已经分析了与伤害相关的问题,在下一章中我们将讲解伤害的来源——攻击。