Post

#009 职业属性和战斗公式(数值)

1. 职业基础属性设计

1.1. 基础属性

  • 一级属性:一般情况下是不直接参与战斗的人物属性。一级属性在游戏中可以通过升级或加点的方式获得
  • 二级属性:一般情况下自身无法成长,需要依附一级属性成长或是装备及其他系统加成的属性

随着游戏设计发展,其中界定逐渐模糊,一般都是根据项目具体情况来决定自己的属性层级和数量

例: 常规MMORPG的一级属性:

  • 力量:能够增加角色的物理攻击力、物理防御力、生命值
  • 智力:能够增加角色的魔法攻击力、魔法防御力、魔法值
  • 敏捷:能够增加角色的命中、闪避
  • 精神:能够增加角色的暴击、抗暴击
  • 体质:能够增加角色的生命值、物理防御力、魔法防御力

常规MMORPG的二级属性:

  • 生命值:衡量角色目前健康情况的数值,生命值的当前值小于等于0后玩家会死亡
  • 魔法值:角色释放技能的消耗数值,魔法值的当前值小于技能消耗数值则不能释放技能
  • 物攻:攻击结算的一种类型,对应物防来结算
  • 物防:防御结算的一种类型,对应物攻来结算
  • 魔攻:攻击结算的一种类型,对应魔防来结算
  • 魔防:防御结算的一种类型,对应魔攻来结算
  • 命中:衡量玩家击中目标的判断数值,对应闪避来结算
  • 闪避:衡量玩家躲避攻击的判断数值,对应命中来结算
  • 暴击:衡量玩家攻击产生暴击情况的判断数值,对应抗暴击来结算
  • 抗暴击:衡量玩家抵抗暴击情况的判断数值,对应暴击来结算

一级属性和二级属性的转换系数表:

属性生命值魔法值物攻物防魔攻魔防命中闪避暴击抗暴击
力量2 10.4      
智力 1  1.10.45    
敏捷      0.020.02  
精神        0.020.02
体质16  0.6 0.6    

如果想让游戏各属性对职业的价值是不同的,那么这个系数表就要根据不同职业来填写多张

1.2. 标准人和职业定位

在设计属性之前,先要有一个标准人的属性,然后对比这个标准人的属性成长来设计各个职业的属性,例如:

等级生命值攻击值
1100050
2120060
3140070
4160080
5180090
62000100
72200110
82400120
92600130
102800140

应当在这个基础上来设计职业,比如战士应该血高防厚,法师应该攻高血少。而职业的设计不单单只体现在属性上,还有技能等其他方向,这时候就需要一个职业定位的表格来衡量职业间的能力差异,例如:

职业\能力生命值攻击力输出能力回复能力控制能力辅助能力综合评分
战士AABCCC650
法师CAACAB670
刺客BBACAB670
牧师CCCABA650
评级分值
A120
B110
C100

通过对职业的打分,我们对属性投放就有了一定的倾向性,先对生命值来制定具体的系数。比如战士的生命值为标准人的120%、刺客为105%、法师为98%、牧师为95%,然后可以得出各职业的生命值数据

其他的属性也是用相同的原理来设计的,然后通过调整系数来控制各个职业间的平衡

1.3. DPS、有效生命和角色强度

  • DPS:Damage Per Second,每秒输出伤害

在设计的时候可以用它来衡量职业的输出能力。在面对不同目标的时候,由于防御值的不同,DPS有所波动。这时还是用标准人的概念来设计,这样防御会相对稳定,而为了更好地衡量玩家的输出能力,标准人也会根据装备强度和设计需求有几个版本

决定角色的DPS的主因来自于两方面:

  1. 普通攻击的数值
  2. 普通攻击的攻击速度
  • 有效生命值:指防御方在衡量了防御、闪避、暴击等所有战斗因素后,得到的防御方在上述条件下的最终生命数值

例:

  • A职业:生命值:200、伤害减免率:50%、闪避率:50%
  • B职业:攻击值:20

B攻击A,在不计算闪避的情况下,A在减免50%的攻击后所受伤害为10,A共可以抵挡20次伤害,B实际输出为400,此时400即为A的有效生命值

在计算闪避的情况下,B需要攻击40次,所以A的有效生命值应为800

得出公式: 有效生命EHP = 生命值 / ((1 - 伤害减免率) * (1 - 闪避率))

2. 战斗公式设计

2.1. 战斗流程解析

以即时制MMORPG的攻击流为背景

对数值来说,战斗由两大模块组成,一个是战斗公式生效前的战斗攻击流程,一个是战斗公式与自身流程

  1. 近战模式
    • 前摇 -> 结算(瞬间) -> 后摇
    • 一般来说,在进行下一次攻击循环之前,我们还有一段时间,那就是冷却时间(CD)
    • 需要关注的一个重要问题是:CD的计算方式(假设前摇时间为0.5s,后摇时间为0.5)
  2. 远程模式
    • 前摇 -> 后摇与飞行时间(不可控) -> 结算(瞬间)
  3. 公共攻击冷却时间
    • 设计原因:限制角色在单位时间内的指令量和输出量,相当于给所有技能加入一段固有的冷却时间,这样可以更好地控制技能的输出量,不会让秒伤达到难以控制的地步
  4. 攻速
    • a. 一般在即时游戏中用来衡量攻击的快慢,而在回合制游戏中攻速(也叫先手值或敏捷)往往是用来决定出手的先后次序
    • b. 用整个攻击环节所需时间换算而成的,一秒完成一次攻击则攻速就是:1次/秒
    • c. 大部分即时游戏会将攻击速度和武器挂钩,也有游戏用敏捷来衡量攻速
结算时间单位CD时间每分钟攻击次数
前摇前= 0.5 + 0.5 + 1= 60 / 2 = 30
前摇后= 0.5 + 1= 60 / 1.5 = 40
后摇后= 1= 60 / 1 = 60

2.2. 战斗公式流程

注重于解决“确定攻击类型之后,本次攻击会产生哪种结果?暴击、未命中、普通攻击、神圣一击(一种特殊结算,类似暴击)、格挡、抵抗等”的问题

2.2.1. 逐步判断

1
2
3
4
5
6
7
8
9
10
11
12
13
物理攻击() {
  if(攻击命中) {
    if(暴击) {
      暴击伤害计算();
    }
    else {
      普通伤害计算();
    }
  } 
  else {
    //无伤害,本次攻击未命中
  }
}

当战斗可产生的结果类型没那么多的时候,这种流程是一种非常好的选择。而一旦判断结果类型多了以后,想要控制数值就比“圆桌理论”更为艰难了

2.2.2. 圆桌理论

“圆桌理论”来源于“一个圆桌的面积是固定的,如果几件物品已经占据了圆桌的所有面积,其他物品将无法再被摆上圆桌”

是否命中 -> 是否躲闪 -> 是否招架 -> 是否偏斜 -> 是否格挡 -> 是否被怪物碾压 ->暴击判断 -> 普通攻击

如果未命中、躲闪、招架、格挡概率的和达到100%或更高,攻击的结果不仅不会出现普通攻击,还不会出现暴击和碾压

也就是说,如果优先级高的各结果的和超过100%,会把优先级低的各种结果挤出桌面——即为“圆桌理论”

2.2.3. 对比

逐步判断

假设: 未命中:30%(命中率70%) 暴击率:10%

结果:

  1. 未命中:30%
  2. 命中且暴击:(1 - 30%) * 10% = 7%
  3. 命中但未暴击(普通攻击):(1 - 30%) * (1 - 10%) = 63%

当未命中率上调为80%(命中率20%)时的结果:

  1. 未命中:80%
  2. 命中且暴击:(1 - 80%) * 10% = 2%
  3. 命中但未暴击(普通攻击):(1 - 80%) * (1 - 10%) = 18%

从等比稀释角度来讲,逐步判断公式能将各种可能性维持在一个稳定的比例,这是它的优势所在

圆桌理论

假设: 未命中:30%(命中率70%) 暴击率:10% (普通攻击率:1 - 30% - 10% = 60%)

结果:

  1. 未命中:30%
  2. 命中且暴击:10%
  3. 命中但未暴击(普通攻击):1 - 30% - 10% = 60%

圆桌理论”在某一属性极端增大的情况下,会出现不均衡情况:

当未命中率上调为80%(命中率20%)时的结果:

  1. 未命中:80%
  2. 命中且暴击:10%
  3. 命中但未暴击(普通攻击):1 - 80% - 10% = 10%

圆桌理论的优势在于所有除普通攻击之外的出现概率在普通攻击被挤出“圆桌”之前都是不会互相影响的。几乎所有被考虑的情况都能够直接在大量的攻击中表现出原始的概率,不存在优先级造成的衰减因子,而作为唯一的牺牲品,普通攻击的出现概率完全依附于其他的情况

总结
  1. 圆桌理论在底层情况被挤出“圆桌”前,各高优先级可能性之间不会产生关联影响,概率相对更为合理。可一旦出现“圆桌”不够用的情况后,被挤出去的情况会受异常大的影响
  2. 逐步判断则是优先级高的情况会严重影响优先级低的情况,而且逐级影响,层级越多情况越复杂。但这个情况都是按比例稀释的,不会出现非常极端的情况

2.3. 一级属性和二级属性

目前对一级属性和二级属性已经没有严格区分,一切都是以设计目的为导向的

一般来说,如果游戏有加点或洗点系统(装备有很大属性差异选择也算),我们需要有一级属性。如果没有加点或洗点系统,一级属性有无影响不大

但一切最终以设计目的为主

2.4. 属性计算的次序

在计算某一属性总值的时候要严格定义计算的次序,在公式中的不同位置产生的效果是有差异的

公式参数的位置将会表现设计目的

2.5. 闪避公式

这里将使用逐步判断中单独判断闪避的公式

游戏公式都是关乎攻方和守方两者,所以公式有最核心的两个属性,攻属性和防属性。在闪避公式中,攻属性是命中,而防属性是闪避,其他参数和属性都是围绕和补充它们展开的

闪避公式有两种思路方向:

  • 命中先减去闪避,由差距的大小来决定命中的概率有多大。这种做法相对较少
  • 命中和闪避进行除法公式计算,最终决定概率有多大

第一种设计:

情况有如下细分:

  1. 闪避大于等于命中时,命中率等于保底命中下限30%(我们定的一个系数,具体值可以根据游戏改变)。由于闪避投放会远小于命中,所以我们会尽量避免这种情况发生
  2. 命中大于闪避时,计算命中差值并换算出最终命中。我们的思路是命中大于闪避之后会获得60%的基础命中率,之后差值增加1点,命中率增加0.5%,最大值到95%

命中率曲线呈现为一条直线

问题:

  1. 命中差值大于130以后,再增加会毫无作用。
  2. 1点差值带来的收益永远恒定为0.5%,对游戏后期投放不是十分有利

第二种设计:

除法公式:命中率 = 命中 /(命中 + 闪避)

当闪避不变,作为攻击方不断提升命中并趋于无穷大时,命中率无限接近于1(闪避等于0时,命中率等于1)。反之当命中不变,闪避趋于无穷大时,命中率无限接近于1/闪避

接下来研究命中和闪避的每一点增量会带来的影响:

闪避

  1. 把闪避设置为1,然后命中从1增长到100:
    • 命中率飞快地增长到了90%,然后缓慢增加
  2. 闪避值为10的情况下:
    • 不变的是最开始的命中带来的收益最高,之后逐步递减。变化的是曲线成长的趋势没有那么陡,平缓了一些
  3. 闪避值为100的情况下:
    • 到收益的趋势和之前还是一样的,但命中率曲线已经变得趋近于一条直线

结论:

  1. 命中属性带来的收益会逐步递减
  2. 当闪避逐步变大时,命中属性带来的收益被逐步稀释。换句话说,我们兑换同样的命中率的时候,花费的命中比之前变多了

命中: 曲线变化趋势与闪避几乎相同

最终结论

  1. 命中和闪避在前期的加点效果非常明显,玩家很容易从数值提升感受到战斗效果提升,从而对属性的需求变得强烈
  2. 命中和闪避在达到一定数值时,开始产生边际效应,但也不会完全无效,玩家依然有提升意义

2.6. 暴击公式

暴击公式有两种设计:

  1. 暴击减去抗暴击(如果没有防属性,那就直接算暴击),然后差值换算为暴击率。
  2. 暴击和抗暴击进行除法,计算出暴击率

第一种设计:

暴击率 = 职业基础暴击率 + 暴击值转换暴击率

暴击值转换暴击率: 暴击率 = K1 * (暴击等级 / (暴击等级 + K2 * 人物等级 + K3)),其中K1代表最终暴击率理论极限值

前期加暴击的效果非常明显

第二种设计:

与闪避类似

2.7. 圆桌理论的闪避公式和暴击公式

“圆桌理论”的闪避公式和暴击公式其实和逐步判断是一样的。只是在最终计算的时候有一定的差异

从战斗流程来说,逐步判断会先计算闪避公式,如果未命中,那就不会去计算暴击公式,因为直接返回结果为未命中了。而“圆桌理论”不是的,它会计算所有情况所占有的那块“桌子”

2.8. 伤害计算公式(减法)!!!

  • 伤害 = 攻击 - 防御
  • Dam = Atk - Def

在减法公式体系中,攻防并不是看上去的那么等价。特别是对于防御属性,一旦发生防御大于等于攻击的情况,攻击几乎毫无作用

目前一般的解决方案是这样的:先判断防御是否大于攻击的1%~10%(数值视情况而定)。如果大于则在攻击的1%~10%的范围内浮动。如果小于则按减法公式计算。这样就可以保证哪怕是不破防,依然可以发挥攻击的1%~10%的效果

减法公式的一个好处就是数值敏感。玩家每增加1点攻击,在不会出现不破防的情况下,伤害也会加1点,玩家会有所得即所见的感觉

这也是很多策略游戏更倾向减法公式的原因,攻击次数的缩减会导致策略和操作的大幅改变

总结:减法公式的优点在于数值敏感性高、反馈明显,缺点在于不破防情况下的处理和如何投放攻击和防御属性

2.9. 伤害计算公式(乘除法)!!!

乘除法的伤害公式主要分两种,第一种是通过护甲计算出减免系数,第二种是通过攻击和防御一起计算出伤害

乘法公式:

  • 伤害 = 攻击 * (1 - 伤害减免百分比)
  • 伤害减免百分比 = 护甲 / (护甲 + 人物等级 * K1 + K2)

护甲值非常大的时候,伤害减免百分比趋近于100%,但是永远不能到达100%。当护甲等于0时,伤害减免百分比等于0

当伤害减免百分比为负数的时候,是可以反向来加强攻击者的攻击的(负数护甲肯定是敌方给了DEBUFF)

人物等级 * K1其实是加入了一个随着等级成长对护甲转换伤害减免百分比的变相削弱(变相地让玩家追求更高等级的装备),而K2的作用在于控制防御转换成伤害减免百分比的一个密度分布

这个公式的模型就像一个浓度公式一样。如果没有任何影响,浓度是100%,一旦在分母中加入数字,将不会维持浓度100%。人物等级 * K1就像每次升级都往里面注水一样,你要通过更多的护甲来把伤害减免百分比维持在原来的数值。而你需要什么样的稀释比例是通过系数K2去调节的

采用这样公式的游戏中等级和装备是最关键的人物战斗能力提升点。设计人员不想让游戏中出现超级玩家,他们希望玩家之间的属性相对公平,不会有非常大的差距

除法公式:

  • 伤害 = 攻击 * 攻击 / (攻击 + 防御) 目前比较流行的版本如下:
  • 伤害 = (攻击 * 参数1 + 参数2) / (攻击 + 防御 * 参数3 + 参数4)

如果说减法公式是强调了防御的价值,那么这个公式则是强调了攻击的价值

总结:

除法公式的两种思路终其根本反映了两个方向的设计。第一种是将防御换算为固定减免率,这样衡量属性价值会更容易计算。第二种则是强调游戏攻击属性的重要程度

2.10. 三种伤害公式总结!!!

减法公式

Dam = Atk - Def

  1. 存在不破防的情况
  2. 防御价值在和攻击相同数量级时远大于攻击(多人PVP时需注意),但在游戏体验过程中,玩家对攻击和防御的选择其实是根据当前的杀怪效率来决定的
  3. 减法公式的攻防属性对成长体验敏感,但不易控制,对数值策划产出投放的控制要求更高
  4. 非传递性的战力,便于设计循环克制关系
  5. 不管是攻击还是防御都会让伤害本身有较大幅度的动荡

乘法公式

伤害 = 攻击 * (1 - 伤害减免百分比)

  1. 不会出现极端的不破防情况,防御值的实际价值相对稳定
  2. 攻击和防御在初期可能表现并不是十分敏感,但反过来看,成长会给人感觉有价值,哪怕对战高属性的玩家
  3. 整体平稳,攻击和防御相对变化区间较小,这种设计对属性的价值也更容易衡量

除法公式

伤害 = 攻击 * 攻击 / (攻击 + 防御)

  1. 不会出现不破防的情况
  2. 攻击属性价值在后期大于防御
  3. 数值变化不敏感,伤害变动幅度介于减法公式和乘法公式之间

2.11. 暴击伤害计算公式

暴击伤害 = 普通伤害* (1 + 伤害暴击系数 + 特殊效果系数) + 暴击后附加伤害

伤害暴击系数是常规参数,早些年的游戏中,这个系数等于1,这样暴击产生的是2倍伤害。近些年的游戏则慢慢演变为了0.5,这样暴击产生的是1.5倍伤害

特殊效果系数这里泛指技能、装备以及其他可能影响暴击伤害倍率的系数

暴击后附加伤害是暴击之后直接附加的伤害,这是无视防御的。如果你想计算防御,那就把这个影响加在之前计算伤害的公式中并额外说明

2.12. 其他公式

除了上述介绍的公式之外,还有一些独特的计算公式,比如格挡、招架、抵抗等。其实设计的原理都是相同的,可以用设计闪避和暴击的思路去思考

除此之外,还有一些特殊技能带来的自己独特的计算方式,比如:

  1. 伤害= (我方智力 - 敌方智力) * K(根据技能等级有所提升)
    • 这就形成了一种独特的策略,低智力英雄面对这个英雄的技能有被秒杀的风险,所以一定要视情况增加智力
  2. 伤害 = 175 + int(对方英雄总生命值 / 3.5生命值)
    • 非常独特的公式,这无疑增加了这个技能的斩杀威力,非常克制低生命高属性的英雄
  3. 最终伤害 = 伤害 * (1 + 伤害加成系数) * (1 - 最终伤害减免系数)

2.13. 属性价值

人物会有不同的属性,玩家在游戏过程中也会根据自己的喜好来追求属性。这就带来了一个问题,如何平衡选择不同属性带来的差异?

数值策划希望各个属性像不同国家货币一样,只要找到中间的汇率,这样就可以统一价值

攻击属性以提升了多少输出能力作为依据,防御属性以提升了多少生存能力作为依据,输出能力是看属性可以提升多少每秒输出(DPS),生存能力则是看属性可以提升多少有效生命值(EHP),最终输出和生命的平衡看我们预期的战斗时长或回合次数

由于人物随着等级成长,属性的基数是不一样的,所以属性之间的“汇率”也是跟着等级而变化的

影响输出和生存的属性是非常多的,只有把数值固定在特定条件下才可以确定属性价值。大部分游戏都是通过标准人的设计来衡量属性的价值的

This post is licensed under CC BY 4.0 by the author.