作为策划,很高兴可以在这里和大家一起交流如何去反推一个游戏的战斗公式。
通常来讲,游戏的数据表现形式,绝大多数都是黑箱式的,即可直观见到游戏事件的发生和结果,但控制游戏事件进行的系统不公开,因此不可见,甚至难于理解。
除去获得官方公开的数据;通过适当或者不太适当的途径获得游戏内部数据,源码或者策划案之外;大多数时候,也只能依靠反推这个方案了——显而易见的这是一种相对而言最为可行的探求黑箱内部的方案。
如果要通过事件发生和结果的数据,进行反推,我们认为其可行的评估通常基于:
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 一位牛头人萨满,自己琢磨啊计算啊,得到了一个公式,并发布在了BLZ的WOW官方论坛上:
方程
下面是经过对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人野团的时候,这玩意能一下判断出整个团队的硬件状况;第三个则是省了你琢磨换还是不换的问题。
第三个故事:OT到底该怨谁,神秘的仇恨系统(Threat)——这曾经是最让每一个Raid Leader头痛的问题,到底仇恨是个什么机制,为什么有时候风平浪静,有时候OT一波接一波。
相对于前几个问题,你至少还能看到黑箱输入的所有数据和输出数据;而仇恨值我们即无法直观看到输入数据,更无法看到输出数据,准确地说,只能看到现象,也就是:OT还是没有OT。
因此,试图反推的难度要高太多了,直到整个60年代即将结束的时候,Kenco's research on threat这篇帖子的发布,才宣告仇恨系统的面纱已经被完全揭下。
作者Kenco和几个朋友,建立了一个简单的设想,即普通的平砍伤害=仇恨增加,在这个基础上,测出了 的0.5(治疗有效值的0.5倍相当于产生仇恨),1.1/1.3等几个极为关键的数值(当某个单位的仇恨值超过当前目标,近战为1.1,远程为1.3倍时,则发生OT),嘲讽的工作原理(瞬间获得相同于 仇恨目标的等量仇恨,并强制目标转向)等等,加上对极为含糊的仇恨数据描述(产生”大量“”额外的“”较低的“仇恨)作出了数据测评,使得玩家头一次有一种拨云见日的感觉。
在那之后的一段时间内,各种Tank职业对于如何制造仇恨的技巧大幅增加,而DPS们也在如何不OT的情况下旧能增加输出有了良好的理解。
这一直接影响就是到70年代开荒卡拉赞时代,仇恨插件就已经普及,控制仇恨的难度对于Raid leader就是件直观明白的工作了:”那个暗牧少用震爆,马上OT了!“。
(图应为Omen,不是最早但是普及最广的仇恨插件之一)
仇恨系统是WOW从Ever Quest借鉴并沿袭最为理想的设定之一,其黑箱程度如上所述,在各个系统中也是 ,但仍然被破解了。
在整个WOW的游戏历程当中,类似的情况非常多,例如护甲的加值和减伤效果的推演,怪物和玩家之间的Arrgo关系的等等。
既然题主还问了“其他公式”,我们就再讲两个WOW以外的故事。
第四个故事:谁有利,谁不利——格斗游戏发展到现在阶段,最大的问题不是反应够快不够快,连招练得是不是熟,而是对策是否丰富,而对策是否丰富完全依赖于你对每个角色的数据掌握是怎样的——
不,不是这些,和三围年龄爱吃什么没关系,是你需要牢记一大张数据表,我们称之为Frame Data帧数数据,这个数据中最重要的数据是——有利和不利。
而(硬直差)有利不利翻译过来就是"在你打了我一下,我防住了/我挨打了”的情况发生后,谁可以先动的数据,这个数据决定了先发制人还是后发被人制,可以说了解硬直差的人在实战中将有巨大的优势,压制,强择,确反都靠它了!
我们强调一下:这个数据表只有一个角色全表的1/3长,每个角色的数据条数在70-120不等,每条至少记下来发生,硬直,命中硬直差和防御硬直差和伤害值吧5条吧,这样每个角色只需要大概其记400-600个数据,某些不常用可能不用特别记,平均算200个吧,街霸4这样40来个角色的,需要记的总数据可能也就一万不到,全数据则在两万条上下。
而在早年,官方没有提供这种数据的时候,怎办呢……我们的玩家以有些老土的方式,完成了人肉测量:选择两个(起跳速度)相同的角色,你踢我一下,我防住了,然后大家都拉住上,这样大家都会在硬直结束的时候跳起来,然后把这段情况录下来,用视频工具逐帧播放。
根据两个人的跳跃高度差,就可以反推出帧数差了,这就是人肉frame data的来历。
你也知道需要多少数据量,所以请想想看这个工作是如何完成的,那就是不可思议的顽强毅力。
最后一个故事:我一个没怎么玩过梦幻西游的人如何反推乱敏现象的机制——这个是我的一个答案
很多回合制游戏都有乱敏现象,请问该设定的初衷和原理是什么? - 网络游戏
基于两个道理——如果一个数值会造成不平衡,如何平衡;所有能够达到平衡的手段中最简方案是什么;建立一套更复杂的模型来实现同样的效果这种蠢事,聪明的游戏开发不会做的。
投稿邮箱:chuanbeiol@163.com 详情请访问川北在线:http://www.guangyuanol.cn/