本文是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的数学模型是可以以此为突破的,我们的武侠文化更注重个人修为,法术威力、武功威力和武器装备的威力都要受到个人修为的极大影响。在第五章中我们会对此进行更深一步的分析。
至此,我们已经分析了与伤害相关的问题,在下一章中我们将讲解伤害的来源——攻击。
第3章 攻击
前一章详细讲述了伤害形式和伤害的过程,攻击是用来造成伤害的必要条件,在本章中我们来详细分析攻击的发动形式和发动过程。
3.1 攻击的定义
战斗中进攻主体通过进攻媒介对客体造成伤害的过程称为攻击。
3.2 攻击主体、攻击客体和攻击媒介
在任何攻击行为中,必然存在攻击主体、攻击媒介和攻击客体对象。攻击主体可以为角色单位,也可以是建筑(例如一个炮塔),甚至是可破坏物(例如一个会爆炸的油桶)。攻击客体同样可以是不同类型的对象。
而从攻击到伤害的动画过程和属性变化过程可以是完全由函数控制的,即动画生成的时间、效果、属性变化的时间完全由攻击的方法产生的返回值决定。这时攻击媒介仅仅是一个虚拟的概念,不需要设计攻击媒介类。
对于复杂攻击行为,也可以将攻击主体生成的对攻击客体进行攻击媒介设定为攻击媒介类。这个攻击媒介可以是攻击主体身上的一部分(但不是子类的概念),也可以是攻击主体手持的武器,或者是攻击主体发射出的投射物。例如在下面的武器动作分类表格中,攻击媒介可以是角色单位的拳头,可以是角色单位手中的剑,或者是角色单位射出的箭,还可以是角色单位发出的火球。
3.3 按所使用的武器和攻击动作对攻击进行分类
为了方便描述攻击过程,本节先将攻击按照所使用的武器和攻击动作进行分类
表3.1 按照武器和攻击动作对攻击进行分类
注意:
a)上图是一个常见游戏装备的复杂的集合,只是作为具体游戏设计的参考。
b)对于某些双手武器,可以设定为在力量达到的情况下允许单手使用
c)对于某些远程武器,可以设定在近战时使用近战攻击方式
d)对于某些单手武器,可以设定为允许某些职业双持,例如刺客使用两个爪,战士使用两把剑。
e)盾通常是用来防御的,但对于某些职业盾也可以进行攻击,例如战士
f)是否设定双武器要看游戏需求。
3.4 攻击过程中的物理碰撞检测
3.4.1 碰撞体和碰撞检测的定义
在游戏中攻击主体、攻击客体和攻击媒介都有着各自不同的3D模型,但是对于这些3D模型交叉时进行计算的过程太复杂,所以在实际的游戏设计中通常用简单几何体来代替这些模型进行计算。这些简单几何体可以是长方体、圆柱体、球体、胶囊体等三维几何体,也可以是点、线段、长方形面、圆形面等一维或二位的几何体,我们称之为游戏中对象的碰撞体。对于游戏中这些碰撞体之间进行交叉时需要进行的计算过程,我们称之为物理碰撞检测。
如何判定一个攻击客体受到了有效的攻击呢?通常情况下我们认为当攻击媒介和攻击客体的碰撞体发生了物理碰撞时,或者是通过攻击函数得到函数的返回值,我们才认为客体受到了有效的攻击。
3.4.2 攻击媒介的碰撞体的形状、形状变化、移动方向和轨迹
对于不同的游戏,碰撞体的设定会千差万别。当攻击主体和攻击客体为类人型对象时,我们通常将碰撞体设定为一个圆柱体。下面我们根据不同的攻击形式对攻击媒介的碰撞体做一些举例。
a)某个剑客持剑普通挥砍攻击,我们可以将剑的碰撞体设定为空间中的一个固定的点或线段,也可以设定为一条沿着某个轨迹移动的点或线段。
b)某个法师的火墙技能,我们可以设定为空间中的一个固定位置的长方形面,也可以设定为长方体。
c)某个侠客的回旋镖,我们可以设定为空间中的一个发射出去又飞回来的点。
d)某个法师的大火球,我们可以设定为空间中的一个移动的球体。
在上述的四例中,攻击媒介的碰撞体要和攻击客体的碰撞体进行碰撞检测后,才能确定攻击客体是否收到了有效的攻击。
为了节约系统资源,我们经常会将碰撞体进行最简化处理,例如某个范围攻击魔法我们可能会简化该攻击媒介的碰撞体为地面高度上的一个圆形的面,而角色的碰撞体有时会在攻击碰撞检定时简化为圆柱体在地面高度上的投影的中心坐标(就是角色当前坐标)。甚至有很多情况下我们根本就不将碰撞体作为单独的类,直接用攻击主体和攻击客体的坐标计算距离,然后做出命中检定。对于投射物可以直接计算投射物与攻击客体的坐标距离。对于范围攻击则可以计算范围的中心坐标到攻击客体的坐标距离。这样的方式可以大量节省系统开销,也就是前面所说的常见的不设置攻击媒介类而直接将攻击设定为函数的方式。而对于复杂的攻击设定还是要使用攻击媒介碰撞体的。
碰撞体的形状可能会发生变化,例如一条不断延长的线段或者一个逐渐变大的圆形。
碰撞体的移动方向和移动轨迹也可以有多种多样的设定,例如一条处于旋转状态的线段、一个飞去又飞回的点。
3.4.3 攻击媒介的碰撞体的生成与消失
在上一节的例子中,我们描述了攻击媒介的碰撞体,而攻击的过程既然要处于时间轴和空间中,那么必然涉及到攻击媒介的碰撞体的生成位置、生成时间、消失位置和消失时间。这些都与不同攻击技能的攻击媒介以及攻击动画的设定相关。
例如弓箭的发射,箭和箭的碰撞体同时生成,在箭飞行的过程中遇到障碍即发生碰撞检测。与此不同的是对于抛物线投射攻击,攻击媒介的生成可能会早于碰撞体的生成,投射物在空中飞行的过程仅仅是一个动画过程而不会进行碰撞检测,当他到达了攻击目的地时才生成碰撞体并进行碰撞检测(如果不设定攻击媒介类,这里根本也不需要进行碰撞检测,只需通过攻击函数获取返回值即可)。
对于某些技能而言,攻击媒介的生成位置直接就是由攻击客体的位置决定的,例如当某个攻击主体锁定了某个攻击客体为目标后施放了作用于攻击客体的瞬间攻击技能或者从攻击客体头顶砸下的一个火球。而对于大多数攻击技能而言,攻击媒介的生成位置通常是由攻击主体的坐标和方向决定的,例如角色的持剑攻击或用标枪的投掷攻击。
攻击媒介的消失同样可以有很多种变化。
3.4.4 攻击制导和碰撞缓冲
对于远程攻击而言,由于攻击媒介会飞行一段时间,而在这段时间里攻击客体的坐标可能已经发生了变化。在一些游戏中会有攻击制导的设定,即攻击媒介会在飞行过程中每隔一段时间就修正一次攻击方向。也有些攻击并不设定为制导攻击,但这类攻击太容易通过玩家的操作避开。为了避免玩家能够轻易地通过移动躲避攻击,有些游戏会有碰撞缓冲的设定。例如在war3中,单位攻击移动中的其他单位,因为发动攻击需要时间,目标可能跑出了碰撞距离以外,于是引入碰撞缓冲值表示允许的缓冲范围,只要目标没跑出该范围(攻击距离+碰撞缓冲范围)则仍会受到伤害。对于此时的碰撞检测就不仅仅是检测碰撞体之间的碰撞,而是检测碰撞体之间的最短距离。
3.4.5 多重攻击、范围攻击、穿透攻击、弹射攻击等等
多重攻击的本质是一次攻击本身就生成了多个碰撞体或者是生成了一个范围较大的碰撞体。
范围攻击的本质就是攻击媒介的碰撞体较大,例如某个炸弹的溅射伤害。
穿透攻击的本质是攻击媒介的碰撞体在发生一次碰撞后并不消失。
弹射攻击的本质是碰撞体在一次碰撞后继续飞向附近目标进行二次碰撞检测。
还有些技能会在攻击发生之后会触发新的攻击,例如当PC的箭射中了怪物之后天上砸下一个火球,这些在本质上都是一次攻击生成了多个碰撞体,只是生成、消失的位置和时间不同而已。
3.5 攻击过程中的动画描述
在上一节中我们对攻击过程从碰撞检测的角度对其描述,本节中我们将从动画的角度对其描述。下面两图分别描述了有无技能动画表现过程的攻击动画过程。
3.5.1 无技能动画表现过程的攻击动画过程:
图表3.2 无技能动画表现过程的攻击动画过程
3.5.2 有技能动画表现过程的攻击动画过程:
图表3.3 有技能动画表现过程的攻击动画过程
3.5.3 对攻击动画过程的说明
a)伤害触发点就是开始判定是否击中敌人的时刻。
b)对于不同类型媒介攻击,其伤害触发点与有无技能动画表现过程是密切相关的。
c)在攻击发动过程中攻击可能会被玩家取消,也可能被敌人某些攻击打断(在动作类MMORPG中可能会如此设计),此时攻击无法到达触发点。一旦到达了攻击触发点,武器攻击、拳脚攻击和技能攻击都必然被触发。
d)在攻击收招过程中PC即使被敌人攻击,也不会影响到刚才已经触发了的攻击。
e)从攻击启动点到CD结束点的全部时间是发动一次技能攻击所需的标准时间。
f)从攻击启动点到攻击结束点的全部时间是发动一次普通攻击所需的标准时间。
g)从攻击启动点到攻击触发点的全部时间是发动一次攻击所需的最短时间。
h)在计算某个基础伤害的DPS时应根据其标准时间而非最短时间。
i)对于不同攻击技能的设计是可以省略或者延长其中的某些过程的,例如法术攻击的攻击发动过程可能会很长,而攻击收招过程时间可能会很短甚至为零。
3.6 按照攻击的触发方式对攻击进行分类
3.6.1 主动攻击
主动攻击指的是由玩家操作对敌方进行的攻击,主动攻击所造成的伤害与角色属性、装备、技能等因素相关。除了常态下发动的主动攻击外还有些特殊的需要发动条件的主动攻击,例如接续攻击、必杀和主动反击等等。
a) 接续攻击
在成功发动某种技能攻击后的一段时间内可以发动的攻击技能。例如Aion、真三国无双中的接续攻击。
b) 必杀攻击
在某种属性符合条件下允许发动的特殊攻击。
c)主动反击
这个设定来源于格斗游戏,既然加入更多的格斗要素是MMORPG的战斗系统的一个发展方向,那么在这里我们做一些说明。
主动反击的伤害类型,伤害加成、受抗性和持续时间降低影响、发生几率、攻击动画过程也可以和主动攻击设定完全相同。主动反击的操作发动需要玩家把握时机,在玩家角色受到攻击之后及时发动,这点玩过格斗游戏的朋友们一定了解。
例如我们可以做以下四种设定:
*在敌人进入攻击收招阶段时,玩家可以发动主动反击。
*在敌人的攻击被玩家成功格挡后的一段时间内,玩家可以发动主动反击。
*在敌人将玩家举起后的一段时间内,玩家可以发动优先级高于举起技能的主动反击技能。
*在敌人使用摔击技能的攻击发动过程的一段时间内,玩家可以发动优先级高于摔击技能的主动反击技能。
主动反击设定极大的加强了游戏的可玩性,配合前面讲的自动反击的话完全可以设计出以反击为主要攻击方式的职业,但在目前的DND战斗系统中反击只是偶尔出现在一些技能中,主动反击则几乎没有。
注:当MMORPG中的战斗同时存在DND要素和格斗要素的时候,攻击优先级、角色状态(比如格挡、硬直、浮空、击倒、举起、被举起、石化、冰封、昏睡)这些设定都比单纯的DND式战斗系统或格斗式战斗系统要复杂,而本文之所以要将二者结合起来讲解,就是因为我个人希望可以将本文写成中式DND规则的设计理论基础,为设计我们真正的自己的MMORPG做点事。
3.6.2 被动攻击
被动攻击在且只在对方成功发动攻击的时候才会发动。被动攻击不会降低自身所受伤害。被动攻击不会再次引发对方的被动攻击。被动攻击包括两种类型:
a) 反弹攻击:
反弹攻击中攻击主体没有攻击动画过程(可以有附加在攻击主体身上的动画效果),但他同主动攻击一样存在攻击媒介。它将对方发动的近战武器攻击和拳脚攻击中除状态伤害之外的所有伤害类型的基础伤害的主伤害数值做出某种修正后(例如乘以一定比例),再返回给对方。反弹后伤害类型不变,反弹所返回的是伤害数值,而不是伤害效果。例如百分比损血伤害被反弹回来的是那个百分比,而不是对方由于该伤害所损失的生命值。反弹的伤害不会被自己的伤害加成所加成。反弹也会被对方的抗性和持续时间降低所削弱。并且反弹也可以设定发生几率。
反弹没有攻击动画过程,所以在技术上实现比较容易实现并且增加了游戏的可玩性。
b) 自动反击:
在对方成功发动攻击的时候,根据自己身上所拥有的自动反击技能(该自动反击技能可以是由技能或是由装备提供)对敌人实行普通攻击反击或技能攻击反击。自动反击可以完全和主动攻击一样有相同的设定(包括伤害类型,伤害加成、受抗性和持续时间降低影响、发生几率、攻击动画过程等等)。
给自动反击加入攻击动画需要做好操作设定,如果不允许玩家在自动反击时对PC操作,那么这会使玩家感觉在自动反击发动的过程中失去了控制,而且这次自动反击造成的伤害不一定比玩家自己操作执行主动攻击高。如果允许玩家在自动反击时对PC操作,又可能因为玩家的快速操作使自动反击永远无法成功发动。
还可以给自动反击的攻击动画进行简化甚至完全取消反击发动过程和反击收招过程,受到攻击的一刻立刻执行反击触发。不过我个人认为反击动画尽量不要彻底取消,因为那样会降低游戏的游戏性和视觉效果。
3.7 按照攻击的持续时间对攻击进行分类
从持续时间上来划分,攻击分为瞬间攻击、持续攻击和暂时属性攻击。
3.7.1 瞬间攻击
瞬间攻击仅在攻击施展的瞬间直接对敌方进行攻击。例如持剑的普通攻击,法师投射出火球,也可以是范围攻击,例如一次瞬间爆炸的技能。还有一些特殊的投射攻击,例如“连锁闪电”。
通过武器来进行的攻击通常都是瞬间攻击例如“普通攻击”、“致死打击”、“三重打击”等。这类技能在使用时会用武器发动一次或者多次攻击。同时,这种攻击本身也可以附带武器之外的基础伤害和伤害加成,但不会附带对使用者本身的属性强化,因为这种技能是瞬间的,其所附带的基础伤害和伤害加成也仅在本次攻击时有效。
一次瞬间攻击的本质就是攻击媒介和攻击客体的碰撞体发生了一次碰撞。
3.7.2 持续攻击:
持续攻击在攻击启动后的一段持续时间及一个范围内不断地发动攻击。所谓的不断发动,也是基于时间轴的,例如每隔1秒发动一次或每隔0.2秒发动一次,也就是说每隔一段时间就进行一次碰撞检测。例如“火山爆发”,只要对方没走出这个范围,每间隔一段时间都会受一次伤害。
持续攻击无非等同于每隔一段时间发动一次瞬间攻击而已,并不真正持续,因此也不可能附带对使用者本身的属性强化,同时其所附带的基础伤害和伤害加成也仅在该技能攻击时有效。
注意这里说的持续时间是指技能本身的持续时间,而不是所发动的伤害的持续时间。
3.7.3 暂时属性攻击
暂时属性攻击是对敌方的属性进行暂时削弱的攻击技能,他是真正的持续的攻击。暂时属性攻击通常有一定的持续时间和控制距离,时间一到或敌人走出控制距离后攻击自动消失。范围版就是影响敌人的“负面光环”。
短时属性攻击的本质是攻击媒介和攻击客体的碰撞体相交了一段时间,在这段时间内敌方的属性可能受到暂时的影响。
前一章中暂时属性降低伤害也同样能在一段时间内降低敌方的属性,但二者对敌方的属性降低的作用方式不同:
a)持续时间不同。
伤害方式的降低敌方属性,持续时间由伤害本身决定;而暂时属性攻击的方式则由技能的持续时间决定。例如某种持续攻击包含了暂时降低敌方属性的伤害(比如20% 减慢攻击 持续10秒),那么当技能的持续时间到了以后,20%的减慢攻击状态在敌方身上至少会再持续9秒,因为在持续时间结束前一段时间内一定发动过一次攻击,这最后的一次攻击的效果同样要持续10秒。而暂时属性攻击的方式进行的属性降低,则在攻击技能持续时间一结束(或者对方一走出一定范围),作用就会立刻消失。
b)涉及到的因素不同。
如果是伤害方式的减低敌方属性,则首先要保证本次攻击确实伤害到了对方才会生效,如果被对方闪避、格挡,则将没有效果。另外,伤害还要受对方抗性的影响,比如,假若对方的缓慢抗性是100%的话,任何降低对方速度的伤害都会完全无效。而暂时属性攻击的方式却不同,他不受任何其他因素干扰。
判定某种技能中的降低敌方属性究竟是暂时属性伤害还是暂时属性攻击,有一个很简单的办法:所有降低敌方属性的伤害均有一定的持续时间,而暂时属性攻击技能中的降低属性则没有,因为它什么时候失效是依赖于技能本身的持续时间、或者敌方是否进入一定范围。
3.7.4 三种攻击形式的叠加
三种攻击形式是可以互相叠加的,这种叠加的本质就是多个攻击媒介的碰撞体与一个攻击客体发生了碰撞。在攻击生效的瞬间暂时属性攻击的部分将首先生效,然后才是其他形式的攻击生效,这样是为了让短时属性攻击所造成的敌方属性降低先发挥其作用。
本节描述的三种攻击形式是针对攻击的发动而言,也就是对攻击媒介的碰撞检测过程而言。而上一章中伤害的三种形式是针对伤害的作用而言,也就是伤害作用在攻击客体身上的过程。虽然我们都是从持续时间的角度对这二者进行描述,但我们描述的过程和对象不同,这点大家可以慢慢体会。
3.8 非攻击性技能及其分类
技能不仅可以对敌人进行攻击并造成伤害,也可以对自己进行增强,或者实现某些特殊功能,对于非攻击性技能,我们做出如下分类:
3.8.1 强化己方
对自身或者盟友进行属性加强的技能,与攻击技能的持续时间相同,这类技能也可以按持续时间分为瞬间强化、持续强化、短时属性强化。有些技能有一定的持续时间,例如“快速格档”,时间一到就自动消失。而另一些则可以一直持续,直到手工取消为止(纯粹的被动技能则无法取消,比如“剑掌握”)。这类技能与攻击技能一样也可以附加基础伤害(例如“命令光环”),但只有当发动攻击时才会生效。
3.8.2 召唤
召唤一个宠物或骑宠。不仅仅是能移动的才是宠物,战斗军旗、陷阱这些有攻击能力的或者有辅助能力的都可以称为宠物。
3.8.3 其他非攻击技能
例如回城、瞬间移动、表情、采集、挖掘等等这些改变了角色当前某种属性的技能我们都归类为其他非攻击技能。
3.9 不同的攻击形式所发动的基础伤害
攻击形式不同,有哪些基础伤害被发动也是不一样的:
3.9.1 近战武器的攻击
在这种攻击方式下,下列基础伤害将被发动:
a)用来攻击的武器上附带的伤害;
b)所有非武器类的装备上附带的伤害;
c)当前生效的强化己方技能中附带的伤害;
实际上,在这种攻击方式下,只有一种伤害不会被发动,那就是在本次攻击中,未被用来攻击的武器(如果持两把武器的话)上所附带的基础伤害。注意,盾同样是一种武器,只不过是一种能够用来格挡的武器。因此,只要没有使用盾进行攻击,那么盾上面所附带的基础伤害都不可能生效。
注意:
所谓“武器上附带”,包括武器本身附带、由武器上的词缀所附带、武器上的镶嵌物或者其合成奖励所附带。
3.9.2 远战武器的攻击或施法武器的攻击
投射类武器攻击的伤害与投射工具的属性、投射物的属性和投射者的属性都相关,所以在不同的游戏中往往设定差别会很大,例如有些游戏有弹药数量的设定,有些则没有。但远程武器攻击设计的主要原则是“投掷”技能本身的基础伤害、非武器装备上的基础伤害和强化技能中所带的基础伤害都将被发动,与本次攻击相关的武器上的基础伤害也会被发动(例如枪和子弹上面的基础伤害)。
3.9.3 非武器攻击
当使用借助身体部位的攻击或其他攻击形式时,只有发动攻击的技能本身所附带的主动型基础伤害被发动,其它基础伤害均不会被发动。
3.9.4 反弹
反弹仅依赖于对方发动的攻击的基础伤害,与自身装备或技能上附带的基础伤害无关。
3.10攻击技能的设计方法
(未完成)
本章中我们讲述了攻击的过程和攻击形式分类,以及攻击技能的设计方法。在下一章中我们将把攻击、防御和伤害结合起来,研讨从攻击到伤害在MMORPG中实现的完整流程。