以《魔兽世界》为例,教你如何反推战斗公式(一)
通常来讲,游戏的数据表现形式,绝大多数都是黑箱式的,除去获得官方公开的数据,通过适当或者不太适当的途径获得源码或者策划案之外,大多数时候,也只能依靠反推这个方案了——反推的可行性评估通常基于:
A,大多数战斗系统或者其他系统,通常都依靠具体的算法和公式为核心
B,公式和算法通常不会特别复杂,在网络游戏时代,计算战斗过程和结果通常放在服务器端进行,为了应付海量战斗造成的负担上升,算法势必以简单高效为要求
C,在一个游戏的生命周期内,其底层系统的核心公式通常不会大幅变动(通常可能发生变动的时间是大幅度的更新如游戏资料片,或出现某些不可调和的问题或 bug 时)
而反推方案的可执行,对执行者的素质要求是:
1,对输出输出端的所有数据,结果,一般现象和特殊现象有足够的认知和了解
2,能够构思,建立,验证简单数学模型的能力
3,能够在游戏中建立测试环境,对模型进行反复的评估和验证的条件,或者有方法获得用于验证的大量数据样本
4,最好拥有相关游戏开发的经验或游戏系统的深入了解
好,下面是具体的例子了:我首先会想起的正是《魔兽世界》(以下简称为 WOW),而且是 60 级年代的,最有趣的那个 WOW。
那个时候,整个艾泽拉斯大陆的玩家还沉浸在“我操这个游戏好屌”的情绪中,开发方也极少透露出和游戏相关的各种数据,但是仍然有大量的玩家在探求数据系统的奥秘,试图探求黑盒的内部,并且取得了辉煌的结果,更棒的是,他们的结果都后来直接或间接地被证明是正确的。
第一个故事:
骰子和百分比之桌(Attack table)——这个问题争论之久涵盖了整个 60 时代,焦点是说,一次普通的攻击可能造成命中,暴击,闪避,招架,格挡,碾压,偏斜还有未命中等等不同的结果——魔兽世界为了凸显即时战斗的多样话和不可预知结果的特性,在一个平砍上就做了这么多的文章。这些数据各自被命中率,暴击率,闪避率,招架率,格挡率(均为百分比数据)和等级差影响,那么这一大堆数字应该看哪个,数学预期到底是怎样的呢?
艾泽拉斯的民科数学家们,已经因为分成了两个阵营分明的派系,各自有不同的说法:
多次骰子派认为,每个百分比都是一个独立的 100% 中的占比;结果的出现是先用随机数决定是否命中,再用随机数决定是否招架,再用一次随机数决定是否暴击……
单次骰子派即认为,所有百分比都是同一个 100% 中的占比,一次骰子决定结果
但是后者比较容易遭受质疑的是,显然某些极端情况下,这些百分比的数值之和已经远大于 100 了,因此看起来这个算法就不能成立了
直到官方蓝色帖子发布:
Info on crit and hit chances | 2006-08-25 09:54 | Aeus
The way WoW calculates crit rate is over ALL attacks. Crit rate is not based on hits only. In other words, if you have a 5% crit rate, that 5% chance includes misses。
单 Roll 派才恍然大悟,提出了 Table 制算法——也就是当各种攻防双方各种非命中数据上升时,就好像向一个桌子上摆入更多的杯子,当杯子多到装不下的时候,名叫普通命中的那种被率先挤出去。
接下来的一大串巨量 combat log 袭来,大量数据证明了这个算法是符合实际情况的,这就很好的解释了大部分现象;其次,部分实验者又用用等级差和装备差,以及利用各种技能产生的极端数据,又一一验证了这个桌上被挤出去的优先顺序列。
而 elitistjerks 的 Vulajin,一位深思熟虑的盗贼,对于这一结果在物理伤害技能在 PVP 方面的表现存疑,通过超过 50 天,数万次的背刺试验,得到了技能伤害是独立于平砍的计算方式,是两次骰子的形式来决定结果的结论:Backstab: Two Rolls?
到了 70 年代,elitistjerks 的 Lactose,一个疑心病很重的猎人,对于猎人的远程物理攻击是否遵循 Attack Table 的一次骰子方式进行了验证,用豪华装备加上极端测试环境,积攒了数千行有效 combat log,统计并再次验证了远程攻击也完全遵循 Attack table 的结果。
到此,这个复杂的问题得到了圆满的解决,而之后的 WOW 版本中,更通过减少了碾压和偏斜的发生,进一步简化了平砍的 Table 相关算法:显然从开发者的角度评估,如果能够实现相似的结果,显然一次骰子的算法,要高效于多次骰子,但如果没有确实的公式,算法和规律加以验证,那么终究难以具有足够的说服力。
第二个故事:
道具(装备)哪家强?(Item level)——这个问题更是伴随了 WOW 多半游戏历程,直到”装等“概念已经深入人心,成为普及观念,也成为衡量一个玩家价值的直接标准(从某种意义上讲我并不喜欢这点)的时候,”两件不同的装备,究竟哪一件更好“这个问题,才基本上不再有人争论。
但在游戏的早期,大家对装备的概念只有紫的比蓝的好,蓝的比绿的好;到了 60 级中后期,Raid 开始普及紫装的时候,问题就出来了,同样是“60 级”的紫装,到底哪个会更好呢?或者“抢了人女朋友还要不要抢龙人盾呢?”
在 Addon(各种插件)开放的同时,WOW 也提供了大量的 API 给开发者调用,其中关于道具,可以取得一个叫做 Item level,也就是物品等级的值,但是这个值,普通玩家不能看到(Patch 3.2 之前),只能通过“物品使用等级”来判断,但是问题如上,到了满级就看不出哪个更屌了——从 60-95 的史诗装备,都标注为“最低使用等级:60”。
对应的译文在这里:[翻译]物品等级机制
Hyzenthlei 一位牛头人萨满,自己琢磨啊计算啊,得到了一个公式
方程
下面是经过对 WOW 物品生成的规则进行了很多方程的尝试后得出的结论:
ItemValue = [(StatValueX*StatModX)^1.5+(StatValueY*StatModY)^1.5+ …]^(2/3)/100 (X,Y 代表属性的数值,^是指数)
在这个方程里你要注意到:
1)它很简单(我害怕那些复杂到搞笑的东西),但并非象所有属性相加那么简单。这意味着物品平衡并非要用一些乱七八糟极为复杂的东西,一些简单的数值就能描绘出这种平衡的方法。
2)每个属性在公式中的表现都是他本身的 1.5 次方。这样它不会增长得太快,但又可以更好地平衡超高的单独属性。举个例子,一件物品可以有 +29 力量或者 +18/19 力量 / 耐力,这两种情况下物品的 ItemValue 大致上相等(数值足够相近到同等 ilvl 的程度)。
3)把这些属性的 1.5 次方加起来以后得出的值再化为它本身的 2/3 次方,这能使 ItemValue 不会螺旋型上升。经过这些改变之后,物品的 ItemValue 将基于 ilvl 线性上升。
严格来说我看到“螺旋形上升”就已经想不明白是怎么个意思了,但是,这一条 Item Value(简写为 IV 清晰的解释了道具等级,道具带来的属性提升,属性的价值,这就意味着,除了极少数明显数值错误的道具之外,对于”我应该如何选择道具,能够使自己的数值成长更多“这个问题的答案已经非常清晰了:获得 ILV,并计算出他的价值就是了。
我在 60 年代末期,大家还不知道 ILV 是什么概念的时候,就做了一个 addon,核心公式和界面都是抄的,但是增加了几个实用方便的功能:
1,自动观察每一个视野内的玩家,记录他们的 IV 总值,并存在本地,查询的时候可以进行排名
2,自动观察队友,一键生成一个 IV 总值列表合计
3,在装备对比的时候直接显示 IV 和 IV 差值
其中 1 只要把号在主城挂几个小时,基本就能掌握服务器平均 raid 进度,而第二个功能,在 60 级末期刚刚开始有 20 人野团的时候,这玩意能一下判断出整个团队的硬件状况;第三个则是省了你琢磨换还是不换的问题。
看了上面的文章 热爱游戏创作的你是不是已经开始热血沸腾了呢?是不是迫不及待的想加入游戏团队成为里面的一员呢?
福利来啦~赶快加入腾讯GAD交流群,人满封群!每天分享游戏开发内部干货、教学视频、福利活动、和有相同梦想的人在一起,更有腾讯游戏专家手把手教你做游戏!