文/左左
1. 战斗力的作用
本文意在和大家聊聊战斗力的计算以及在实际工作中的应用。
战斗力,顾名思义,评判战斗能力的分值。
玩家面对战斗力会有两个理解:
1、根据战斗力预判这场战斗的胜负。不考虑操作等其他因素的影响,战斗力高者胜利。
2、通过养成提升的战斗力,评判系统价值。调平经济时,保证玩家投入和收益正比。
所以,只要保证相同战力不同职业互搏平衡。以及不同职业获得相同战力的养成代价相同,我们认为这一套战斗力的计算是无误的。
针对不同的游戏,不同的团队,计算战斗力会有不同的方法。这没有一定之规。本篇文章,也不过是将我之前工作时的一些小技巧分享给大家。
我习惯分模块地计算。并赋予不同模块不同的数值使命。就战斗力来讲,我会从以下两个方面展开,和大家一起探讨:
1、属性带来的战斗力:制作职业间的平衡;
2、技能带来的战斗力:区分职业间的不同。
2. 属性的战斗力
2.1. 战斗节奏
制作属性,我不自然就会想到标准人。一说到标准人,就会想到战斗节奏,或者说是标准战斗时间。
制作游戏数值,最关键就是把握时间。无论是制作战斗还是制作经济。这也将会是我们整套数值体系中,可以根据玩家体验主观设定的数值。体现在战斗中就叫做战斗节奏。
不同的战斗类型,标准不同。我们可以将游戏分为两种类型:
1、即时类:
游戏节奏以秒来体现。基础模型为互相攻击,同时死亡的时间。我们简称为互搏时间。
制作时,需要提前考虑到技能对攻击的放大效果,所以要多预留一些时间,不能把互搏时间做的太短。一般我们会预设一个2倍的效果提升。
还需要考虑重复操作导致无聊,时间也不能过长。主要参考的因素有技能的CD,攻击动作帧数。卡牌类游戏要考虑积攒能量的时间。一般2-3个技能循环为佳。
通过我们长时间对玩家体验的观察,战斗节奏往往设定在40-60秒之间。
2、回合类:
回合制自然是以多少个回合作为评判标准。
同上理论,观察玩家行为,游戏前期我们往往会把战斗节奏定在3-5回合。游戏版本迭代后,回合数会略有延长。
我,会把回合类游戏的战斗节奏定义在3.1回合。为什么?我把它称为:“3.1理论”。
道理很简单, 如一层窗户纸。在标准模式下,玩家互搏时间3.1个回合,在游戏中实际体验为4回合。假设玩家有能力突破3.1个回合,把0.1的份额去掉,那么就会在3回合中解决战斗。在对战中获得决定性胜利。那么,玩家如何能去掉0.1的份额?当然是通过充值,或惊喜类收益啦:)
所以很自信的跟大家分享3.2理论,正因为我们在制作战斗雏形的时候,就已经将经济,付费,惊喜等各种元素考虑在内。简单的几个字,就能体现出游戏的本源。
我们先假定经过团队讨论,将战斗节奏雏形定义在50秒。也为了下文计算方便。接下来开始制作最基本的模型,攻防血。
2.2. 一级属性
一级属性往往是指攻、防、血,也称三维。我们现在就简单的来一起模拟一套数值平衡。
2.2.1. 简单聊聊防御
已经有很多人对防御减伤做了好多讨论。这里简单论述,不是本文重点。比较流行的有以下做法。笔者在工作中都使用过:
1、减法:伤害=攻击-防御。
a) 优点:
i. 简单,玩家理解成本低。
ii. 战斗力计算一般为加减。所以防御在战斗力计算中更加准确。
iii. 可以做到不破防。注意:这真的是加减护甲公式的优点。这样我们可以更加轻松的制作等级压制,对玩家的攻击属性要求更高。更容易拉付费。
b) 缺点:
i. 当有暴击,技能等因素加入之后,导致计算成本提高。自己算一下就明白。一个公式有加减,又有乘除时,很难计算。
ii. 不能加入攻击速度。当游戏中有攻击频率差异时,导致很难计算。即便将护甲计算在攻击速度以内,很难让人理解。更适合回合制游戏。
2、除法:伤害=a*攻击^2/(攻击+防御)。
a) 优点:目前市场,养成较深,养成系统很多的情况下。只要保证攻击、生命、防御按照同比例成长,就可以保证战斗节奏稳定。这样可以在任何角度增加养成系统,而不破坏战斗节奏。
b) 缺点:
i. 战斗力是一个相对值,很难换算成具体战斗能力或者有效生命。计算困难。
ii. 攻防血某一项偏高高者偏低时,会严重破坏战斗节奏。
iii. 不同职业间,攻击和防御价值不匹配。最好能避免不同职业可以通用装备的系统。
3、乘法:战斗时间=生命/(攻击*(1-减伤))。减伤=护甲/(护甲+A)。A是这个阶段的成长标准。
a) 优点:
i. 非常好,非常合理的减伤方式。在同等级条件下,每获得1点护甲增加的有效生命的固定的。那么就能保证护甲、攻击和生命价值等价。
ii. 暴击等数据均为乘法方式,计算方便。
iii. A是唯一一个主观量。但计算平衡时,可以约掉。
iv. 战斗力计算方法显而易见,下文做简单推导。
我们可以把暴击等属性也乘在公式里,这个战斗力是实实在在的。
a) 缺点:减伤公式=护甲/(护甲+A)。其中A为成长曲线。成长曲线中,往往只会添加等级参数。不会把所有系统的标准值全部计算在内。在目前市场形势下,各种养成系统太多,数值膨胀较快,容易冲击成长曲线。系统扩展较难。
1、比例:目前有一些更加简单粗暴的方式——直接使用一个比例。例如:物理减伤10%。
a) 优点:简单粗暴。可极端的体现职业间差异。
b) 缺点:
i. 这个比例无法理性算入战斗力。
ii. 无法正常成长。
2、无甲:没有护甲这个属性。或者护甲全部为0,并且不显示。
护甲存在的意义是什么?不是单纯让玩家体验到有更多的花样。或者有职业间区分。如果你要做这个,不如把精力放在做技能和关卡上。
护甲实际上是让数值策划在另一个维度掌控游戏节奏。例如我们之前聊的不破防,例如可延长有效生命等。
但零护甲本身没有问题。很好算,玩家也不会因为没有护甲跟你较真。
以上几种减伤方式 ,笔者在实际工作中都遇到过。各有优劣。看项目,看团队,看我们对数值的把控能力。
目前除法公式比较流行,我们下文就拿它作为例子,继续探讨战斗力。
□ 职业平衡
我习惯从PVP入手计算战斗。制作标准人,制作职业平衡。
我们先预设标准人是一个均衡类职业。并且符合标准战斗时间50秒。减伤公式为:
表中,我们简单制定20个成长阶段。即在这个阶段,通过等级、强化、装备等等一系列养成后的属性。表格如下:
成长阶段 |
A生命
|
A攻击
|
A防御
|
AA互搏
|
1
|
2500
|
100
|
100
|
50
|
2
|
5000
|
200
|
200
|
50
|
3
|
7500
|
300
|
300
|
50
|
4
|
10000
|
400
|
400
|
50
|
5
|
12500
|
500
|
500
|
50
|
6
|
15000
|
600
|
600
|
50
|
7
|
17500
|
700
|
700
|
50
|
8
|
20000
|
800
|
800
|
50
|
9
|
22500
|
900
|
900
|
50
|
10
|
25000
|
1000
|
1000
|
50
|
11
|
27500
|
1100
|
1100
|
50
|
12
|
30000
|
1200
|
1200
|
50
|
13
|
32500
|
1300
|
1300
|
50
|
14
|
35000
|
1400
|
1400
|
50
|
15
|
37500
|
1500
|
1500
|
50
|
16
|
40000
|
1600
|
1600
|
50
|
17
|
42500
|
1700
|
1700
|
50
|
18
|
45000
|
1800
|
1800
|
50
|
19
|
47500
|
1900
|
1900
|
50
|
20
|
50000
|
2000
|
2000
|
50
|
我们设定生命,攻击,防御在战斗力中的占比相同。因为他们同为一级属性。那么:
1战斗力=1攻击=1防御=25生命。
下边我们增加一个职业,他是一个生存属性较高的职业:
成长阶段 |
A战斗力
|
A生命
|
A攻击
|
A防御
| AA互搏 |
AB互搏
|
BB互搏
| B生命 |
B攻击
|
B防御
|
B战斗力
|
1
|
300
|
2500
|
100
|
100
|
50
|
70.3125
|
100.49
|
3000
|
80
|
134.38
|
334.38
|
2
|
600
|
5000
|
200
|
200
|
50
|
70.3125
|
100.49
|
6000
|
160
|
268.75
|
668.75
|
3
|
900
|
7500
|
300
|
300
|
50
|
70.3125
|
100.49
|
9000
|
240
|
403.13
|
1003.13
|
4
|
1200
|
10000
|
400
|
400
|
50
|
70.3125
|
100.49
|
12000
|
320
|
537.5
|
1337.5
|
5
|
1500
|
12500
|
500
|
500
|
50
|
70.3125
|
100.49
|
15000
|
400
|
671.88
|
1671.88
|
6
|
1800
|
15000
|
600
|
600
|
50
|
70.3125
|
100.49
|
18000
|
480
|
806.25
|
2006.25
|
7
|
2100
|
17500
|
700
|
700
|
50
|
70.3125
|
100.49
|
21000
|
560
|
940.63
|
2340.63
|
8
|
2400
|
20000
|
800
|
800
|
50
|
70.3125
|
100.49
|
24000
|
640
|
1075
|
2675
|
9
|
2700
|
22500
|
900
|
900
|
50
|
70.3125
|
100.49
|
27000
|
720
|
1209.38
|
3009.38
|
10
|
3000
|
25000
|
1000
|
1000
|
50
|
70.3125
|
100.49
|
30000
|
800
|
1343.75
|
3343.75
|
11
|
3300
|
27500
|
1100
|
1100
|
50
|
70.3125
|
100.49
|
33000
|
880
|
1478.13
|
3678.13
|
12
|
3600
|
30000
|
1200
|
1200
|
50
|
70.3125
|
100.49
|
36000
|
960
|
1612.5
|
4012.5
|
13
|
3900
|
32500
|
1300
|
1300
|
50
|
70.3125
|
100.49
|
39000
|
1040
|
1746.88
|
4346.88
|
14
|
4200
|
35000
|
1400
|
1400
|
50
|
70.3125
|
100.49
|
42000
|
1120
|
1881.25
|
4681.25
|
15
|
4500
|
37500
|
1500
|
1500
|
50
|
70.3125
|
100.49
|
45000
|
1200
|
2015.63
|
5015.63
|
16
|
4800
|
40000
|
1600
|
1600
|
50
|
70.3125
|
100.49
|
48000
|
1280
|
2150
|
5350
|
17
|
5100
|
42500
|
1700
|
1700
|
50
|
70.3125
|
100.49
|
51000
|
1360
|
2284.38
|
5684.38
|
18
|
5400
|
45000
|
1800
|
1800
|
50
|
70.3125
|
100.49
|
54000
|
1440
|
2418.75
|
6018.75
|
19
|
5700
|
47500
|
1900
|
1900
|
50
|
70.3125
|
100.49
|
57000
|
1520
|
2553.13
|
6353.13
|
20
|
6000
|
50000
|
2000
|
2000
|
50
|
70.3125
|
100.49
|
60000
|
1600
|
2687.5
|
6687.5
|
首先,我们要保证A和B的互搏时间是相等的,才说明A、B互相平衡。但是,如果B的战斗力依然按照A战斗力公式推导,就会导致平衡的情况下,战斗力不相同。
很多人到此就要么这样,战斗力不相同就不相同吧。要么会调整B的属性,保证战斗力相同,但会导致职业间互搏不平衡。这二者都是不负责任的,不可取的。
玩家是通过战斗力来评定胜负的。所以我们最好能保证A、B互搏平衡的情况下,A、B的战斗力也是相同的。所以我会改B的战斗力计算公式:
1战斗力=0.8攻击=134.38防御=30生命。
△第三个职业
同理,我们可以加入第三个,第四个职业。但实际操作中,我们会发现,拍脑门定一个第三职业攻防血,并按着相同规律成长,导致AB互搏平衡,AC互搏平衡,CB互搏不平衡。如下表:
阶段 |
战斗力
|
A生命
|
A攻击
|
A防御
| AA互搏 |
AB互搏
|
AC互搏
|
B打C
|
C打B
|
BB互搏
|
B生命
| B攻击 |
B防御
|
CC互搏
|
C生命
|
C攻击
|
C防御
|
1
|
300
|
2500
|
100
|
100
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.49
|
3000
|
80
|
134.37
|
29.3
|
2000
|
120
|
90.95
|
2
|
600
|
5000
|
200
|
200
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
6000
|
160
|
268.73
|
29.3
|
4000
|
240
|
181.9
|
3
|
900
|
7500
|
300
|
300
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
9000
|
240
|
403.1
|
29.3
|
6000
|
360
|
272.85
|
4
|
1200
|
10000
|
400
|
400
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
12000
|
320
|
537.47
|
29.3
|
8000
|
480
|
363.8
|
5
|
1500
|
12500
|
500
|
500
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
15000
|
400
|
671.83
|
29.3
|
10000
|
600
|
454.75
|
6
|
1800
|
15000
|
600
|
600
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
18000
|
480
|
806.2
|
29.3
|
12000
|
720
|
545.7
|
7
|
2100
|
17500
|
700
|
700
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
21000
|
560
|
940.57
|
29.3
|
14000
|
840
|
636.65
|
8
|
2400
|
20000
|
800
|
800
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
24000
|
640
|
1074.93
|
29.3
|
16000
|
960
|
727.6
|
9
|
2700
|
22500
|
900
|
900
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
27000
|
720
|
1209.3
|
29.3
|
18000
|
1080
|
818.55
|
10
|
3000
|
25000
|
1000
|
1000
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
30000
|
800
|
1343.67
|
29.3
|
20000
|
1200
|
909.5
|
11
|
3300
|
27500
|
1100
|
1100
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
33000
|
880
|
1478.03
|
29.3
|
22000
|
1320
|
1000.45
|
12
|
3600
|
30000
|
1200
|
1200
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
36000
|
960
|
1612.4
|
29.3
|
24000
|
1440
|
1091.4
|
13
|
3900
|
32500
|
1300
|
1300
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
39000
|
1040
|
1746.77
|
29.3
|
26000
|
1560
|
1182.35
|
14
|
4200
|
35000
|
1400
|
1400
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
42000
|
1120
|
1881.13
|
29.3
|
28000
|
1680
|
1273.3
|
15
|
4500
|
37500
|
1500
|
1500
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
45000
|
1200
|
2015.5
|
29.3
|
30000
|
1800
|
1364.25
|
16
|
4800
|
40000
|
1600
|
1600
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
48000
|
1280
|
2149.87
|
29.3
|
32000
|
1920
|
1455.2
|
17
|
5100
|
42500
|
1700
|
1700
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
51000
|
1360
|
2284.23
|
29.3
|
34000
|
2040
|
1546.15
|
18
|
5400
|
45000
|
1800
|
1800
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
54000
|
1440
|
2418.6
|
29.3
|
36000
|
2160
|
1637.1
|
19
|
5700
|
47500
|
1900
|
1900
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
57000
|
1520
|
2552.97
|
29.3
|
38000
|
2280
|
1728.05
|
20
|
6000
|
50000
|
2000
|
2000
|
50
|
70.31
|
38.19
|
53.42
|
52.99
|
100.48
|
60000
|
1600
|
2687.33
|
29.3
|
40000
|
2400
|
1819
|
这导致B、C之间有误差。虽然误差很小,可以忽略,但是我们可以调整,达到一个更优值。因为我们有防御这个属性!我们可以通过这个维度调整C的生命与防御比例,尽量缩小误差。
我先用C攻击计算A、C互搏时间和B、C互搏时间。并把C生命和防御看做未知数带入这两个公式中计算。解一个二元方程即可得下表:
阶段 |
战斗力
|
A生命
|
A攻击
|
A防御
| AA互搏 |
AB互搏
|
AC互搏
|
B打C
|
C打B
|
BB互搏
|
B生命
| B攻击 |
B防御
|
CC互搏
|
C生命
|
C攻击
|
C防御
|
1
|
300
|
2500
|
100
|
100
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.49
|
3000
|
80
|
134.37
|
29.49
|
2138
|
120
|
78.62
|
2
|
600
|
5000
|
200
|
200
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
6000
|
160
|
268.73
|
29.49
|
4276
|
240
|
157.25
|
3
|
900
|
7500
|
300
|
300
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
9000
|
240
|
403.1
|
29.49
|
6414
|
360
|
235.87
|
4
|
1200
|
10000
|
400
|
400
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
12000
|
320
|
537.47
|
29.49
|
8552
|
480
|
314.5
|
5
|
1500
|
12500
|
500
|
500
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
15000
|
400
|
671.83
|
29.49
|
10690
|
600
|
393.12
|
6
|
1800
|
15000
|
600
|
600
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
18000
|
480
|
806.2
|
29.49
|
12828
|
720
|
471.75
|
7
|
2100
|
17500
|
700
|
700
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
21000
|
560
|
940.57
|
29.49
|
14966
|
840
|
550.37
|
8
|
2400
|
20000
|
800
|
800
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
24000
|
640
|
1074.93
|
29.49
|
17104
|
960
|
629
|
9
|
2700
|
22500
|
900
|
900
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
27000
|
720
|
1209.3
|
29.49
|
19242
|
1080
|
707.62
|
10
|
3000
|
25000
|
1000
|
1000
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
30000
|
800
|
1343.67
|
29.49
|
21380
|
1200
|
786.25
|
11
|
3300
|
27500
|
1100
|
1100
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
33000
|
880
|
1478.03
|
29.49
|
23518
|
1320
|
864.87
|
12
|
3600
|
30000
|
1200
|
1200
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
36000
|
960
|
1612.4
|
29.49
|
25656
|
1440
|
943.5
|
13
|
3900
|
32500
|
1300
|
1300
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
39000
|
1040
|
1746.77
|
29.49
|
27794
|
1560
|
1022.12
|
14
|
4200
|
35000
|
1400
|
1400
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
42000
|
1120
|
1881.13
|
29.49
|
29932
|
1680
|
1100.75
|
15
|
4500
|
37500
|
1500
|
1500
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
45000
|
1200
|
2015.5
|
29.49
|
32070
|
1800
|
1179.37
|
16
|
4800
|
40000
|
1600
|
1600
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
48000
|
1280
|
2149.87
|
29.49
|
34208
|
1920
|
1258
|
17
|
5100
|
42500
|
1700
|
1700
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
51000
|
1360
|
2284.23
|
29.49
|
36346
|
2040
|
1336.62
|
18
|
5400
|
45000
|
1800
|
1800
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
54000
|
1440
|
2418.6
|
29.49
|
38484
|
2160
|
1415.25
|
19
|
5700
|
47500
|
1900
|
1900
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
57000
|
1520
|
2552.97
|
29.49
|
40622
|
2280
|
1493.87
|
20
|
6000
|
50000
|
2000
|
2000
|
50
|
70.31
|
38.19
|
52.99
|
52.99
|
100.48
|
60000
|
1600
|
2687.33
|
29.49
|
42760
|
2400
|
1572.5
|
怎么样,护甲作为另一个维度,帮助了数值策划。同理计算C的战斗力公式,保证A、B、C战斗力相等的条件下,达到理论平衡。
□ 二级属性
我们常定义:命中、暴击、闪避等为二级属性。这些属性一般是以一个乘值的方式计算在公式中。所有二级属性皆通一理,下文只拿命中举例。
命中率判定,如果未命中,则造成0伤害。如果命中造成100%伤害。参与计算的平衡是防御减伤之后的数值。这样我们可以得到以下计算公式:
通过这个公式我们可以看出两个问题:
1、保证三维同比例成长,且命中率不成长的前提下,可以保证不破坏战斗节奏。
2、命中率价值会随着三维变化而变化。三维越高,命中率等同于的三维数值越大,同比战斗力价值越高。
那么,我们既要保证命中率可以成长,又要避免命中战斗力不稳,我会这样处理。
命中率在游戏中产出,就以一个百分比形式产出。同时给它制作一条反属性,例如:未命中率。
这两条属性同时产出,并且同时成长。同上文计算一样,将其计算到多职业中。如下表:
阶段 |
战斗力
|
A生命
|
A攻击
|
A防御
| A命中 |
A反命中
|
AVA真命中
|
AA互搏
|
AVB真命中
|
BVA真命中
|
AB互搏
| BB互搏 |
B生命
|
B攻击
|
B防御
|
B命中
|
B反命中
|
BVB真命中
|
1
|
300
|
2500
|
100
|
100
|
100%
|
5%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
3000
|
80
|
134.39
|
95%
|
10%
|
85%
|
2
|
600
|
5000
|
200
|
200
|
105%
|
10%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
6000
|
160
|
268.78
|
100%
|
15%
|
85%
|
3
|
900
|
7500
|
300
|
300
|
110%
|
15%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
9000
|
240
|
403.17
|
105%
|
20%
|
85%
|
4
|
1200
|
10000
|
400
|
400
|
115%
|
20%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
12000
|
320
|
537.56
|
110%
|
25%
|
85%
|
5
|
1500
|
12500
|
500
|
500
|
120%
|
25%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
15000
|
400
|
671.95
|
115%
|
30%
|
85%
|
6
|
1800
|
15000
|
600
|
600
|
125%
|
30%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
18000
|
480
|
806.34
|
120%
|
35%
|
85%
|
7
|
2100
|
17500
|
700
|
700
|
130%
|
35%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
21000
|
560
|
940.73
|
125%
|
40%
|
85%
|
8
|
2400
|
20000
|
800
|
800
|
135%
|
40%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
24000
|
640
|
1075.12
|
130%
|
45%
|
85%
|
9
|
2700
|
22500
|
900
|
900
|
140%
|
45%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
27000
|
720
|
1209.51
|
135%
|
50%
|
85%
|
10
|
3000
|
25000
|
1000
|
1000
|
145%
|
50%
|
95%
|
52.63
|
90%
|
90%
|
78.13
|
118.23
|
30000
|
800
|
1343.9
|
140%
|
55%
|
85%
|
11
|
3300
|
27500
|
1100
|
1100
|
150%
|
55%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
33000
|
880
|
1477.96
|
145%
|
60%
|
85%
|
12
|
3600
|
30000
|
1200
|
1200
|
155%
|
60%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
36000
|
960
|
1612.32
|
150%
|
65%
|
85%
|
13
|
3900
|
32500
|
1300
|
1300
|
160%
|
65%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
39000
|
1040
|
1746.68
|
155%
|
70%
|
85%
|
14
|
4200
|
35000
|
1400
|
1400
|
165%
|
70%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
42000
|
1120
|
1881.04
|
160%
|
75%
|
85%
|
15
|
4500
|
37500
|
1500
|
1500
|
170%
|
75%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
45000
|
1200
|
2015.4
|
165%
|
80%
|
85%
|
16
|
4800
|
40000
|
1600
|
1600
|
175%
|
80%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
48000
|
1280
|
2149.76
|
170%
|
85%
|
85%
|
17
|
5100
|
42500
|
1700
|
1700
|
180%
|
85%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
51000
|
1360
|
2284.12
|
175%
|
90%
|
85%
|
18
|
5400
|
45000
|
1800
|
1800
|
185%
|
90%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
54000
|
1440
|
2418.48
|
180%
|
95%
|
85%
|
19
|
5700
|
47500
|
1900
|
1900
|
190%
|
95%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
57000
|
1520
|
2552.84
|
185%
|
100%
|
85%
|
20
|
6000
|
50000
|
2000
|
2000
|
195%
|
100%
|
95%
|
52.63
|
90%
|
90%
|
78.12
|
118.21
|
60000
|
1600
|
2687.2
|
190%
|
105%
|
85%
|
我们同上文去定义不同职业,命中反馈在战斗力中的系数即可。
顺便提一句,我们完全可以制作一套命中等级数值。他和三维一样是一个绝对值数。通过复杂的公式换算成一个命中率。然后参与战斗计算。操作性很好,玩家也可以理解。计算方法同上:
1、制定各职业命中率;
2、根据各职业命中率确定命中等级换算命中率公式;
3、根据不同职业的命中等级换算命中等级战斗力公式。
方法大同小异,就不做表了。
□ 战斗力是加值
△加值的好处与问题
战斗力为什么是加值?即:
先说好处:非常容易理解。毕竟战斗力是给玩家参考的数值。越容易理解,玩家越容易接受。
例如:某个装备提供了各种属性。我们可以根据上文公式计算出这个件装备的战斗力。当我佩戴这件装备时,我的总战斗力提高的值等于装备战斗力。相反,其它公式会导致误差,增加玩家的理解成本。
说说问题:这个公式成立的条件是,战斗节奏不变的前提下。如果战斗节奏发生变化,这个公式将会崩溃。例如:A玩家将100的战斗力,全部投放在生命。B玩家将100的战斗力,全部投放在攻击。两个玩家收益是不等价的。
但是,我并不担心这个问题。就目前市场情况看,养成系统多而广。我们只需要准确的做属性投放,就可以完美规避这个问题。
所以,最后我还是选择了这个公式,并且把它推荐给大家。
△ WOW的战斗力
WOW没有战斗力。但是它计算战斗能力的方式反而是最准确的。我们还是简单推导一下:
他的诸多能力值都可以准确的反馈在公式中。推导过程上文已经聊过了,请见2.2.1简单聊聊防御相关内容。
但是它有一个致命缺点,战斗力反馈在UI上不好理解。因为需要综合角色全身属性才能得到真实战斗力,而单件装备上仅有的战斗力无法计算。这样在目前市场上,玩家需要利用战斗力评判装备好坏的作用就荡然无存了。
既然战斗力变的无效,那么何必还要计算。所以不推荐这样的算法。虽然我不得不承认它很精确。
□多职业困惑
在本章节的最后,我们讨论一下是否有必要在一款游戏中区分职业属性。
卡牌游戏应该是有这样的考虑的。但是我们没有必要那么复杂的去计算战斗平衡。目前来看,卡牌游戏中单职业平衡不存在。我们最多是可以以战斗力作为依据,计算经济方便。并且也没必要费尽心思去为每一张卡牌制作战斗力计算公式。
单职业养成就更加困惑了。我们虽然已经完美的制作了PVP的平衡。但是PVE上是不平衡的。因为单看属性,攻击是保证PVE速度的唯一标准。那么只要存在职业区分,就无法制作PVE平衡。
唯一的变通是可以让防高职业更多的使用群攻技能。或更加讲究多职业间的配合打怪。
2. 技能战斗力
2.1. 战斗力算法
最后,聊聊技能吧。技能要不要算入战斗力?
算是可以算的。我们可以根据技能CD,技能动作长度,以及普通攻击动作长度计算技能效率。然后把这个效率乘进战斗公式。或者将效率对攻击力提升的值,转换成攻击力的提升,加在战斗力中。
那么,我们是不是要考虑这个技能击中多少个目标?或者空放?或者被打断?冲锋类位移技能的价值怎么算?控制类技能的价值怎么算?最后我们只会得到一个非常不准确的值。
我的建议是技能不算入战斗力。或者,技能在属性战斗力之外,根据技能等级额外制定一套规则。并保证不同职业,对应等级的技能之间价值平衡。
2.2. 技能的作用
承上文,我们聊到要制作不同职业之间技能价值的平衡。先聊聊技能的作用。
没错,区分职业,区分玩法,丰富关卡性。回归游戏雏形可以没有技能这个东西。放眼现在的作品,技能就是战斗的玩点。利用此,给玩家带来选择性,差异性。
技能在数值策划手中,是干什么的呢?是最后一步,调平衡用的。
同样是分模块化研发,我们假定已经完成了属性计算。现在开始做技能。当我们发现某职业过强时,调整它的属性是一个非常庞大的工作量。并且会因此影响其他职业,养成平衡等等。那么,我们就来调它的技能,这样一个相对单纯的模块。
可以说,技能是我做平衡的保底。包括我们可以利用技能体系制作等级压制等效果。