几周前,庆典女皇艾尼维亚将狂欢带进了峡谷。一时间尽是华服和庆祝——直到我们收到冰鸟的bug反馈。拳头的质量保证团队迅速确认了她的大招未能正确触发寒霜刺骨的双倍伤害。在修复解决之前,这是个足以让艾尼维亚被禁用的bug了,而这个修复补丁必须先由质检团队连夜测试才能安装到运行服务器上去。如果想要解禁艾尼维亚,那就得等到周五下午了,这还是最快的情况下…但是除非游戏有着异常严重的问题,我们一般不会在周五放出补丁:意外搅乱周末游戏高峰期的风险实在是太高了。
所以,狂欢才刚开始就被叫停了,艾尼维亚得等到周一才能解禁。但是别急——这个周末艾尼维亚并没有被禁用。
是什么拯救了冰晶凤凰的悲惨命运?要回答这个问题,先得进入魅力四射的游戏服务器、客户端、重新部署以及微补丁世界。
上(一丁点)干货
游戏数据放在两个地方:客户端和服务器。客户端数据在大家的电脑上,需要下载补丁才能改动。客户端包含了很多视觉和听觉的内容,像是峡谷的外观,英雄的模型以及配音。
游戏服务器则是你在选定英雄之后连接的东西了,就像是一个运行着你5v5 (3v3或者1v9)游戏的小宇宙。我们对服务器做出改动时,没有下载时间也没有任何下载内容。服务器包含着如英雄属性以及控制技能运作的脚本的数值信息(但不一定包含技能外观)。
很长一段时间以来,改动客户端或者服务器唯一的途径都只有以补丁(部署)或者修复程序(重新部署)的形式发送全新的信息。重新部署最常针对服务器数据,是我们过去修复重要运行问题(严重影响平衡的问题,英雄bug等等)的主要手段。
重新部署具有风险,而且需要质检团队连夜测试,哪怕有很多都只是些稍微改动一点数据行了的小问题。但是我们没法只重新部署一个数据——我们只能重新部署全部的数据。工程建筑师Brian “Riot Penrif” Bossé说“发动大型重度的质检流程进行小型的改动不单止浪费,有时风险比保障更甚。”
而且即便经过了彻夜的测试,除非异常紧急(像是排位挂了或者只能选提莫)我们还是不会在周五重新部署。英雄联盟有些结构是很久以前搭建的了,久到我们都没意识到已经在这个基础上走了多远,而有些结构则不如我们所预期的那么结实。
有一次,重新部署完客户端数据后,所有人的游戏执行文件都被删除了——这就表示没人有办法打开游戏。发布总监Donna “Riot Feithen” Mason说“理想状况下,我们期待按一个键它就能按章工作,但有些时候没办法如愿以偿。”
我们仍然在努力改进英雄联盟一些过时的基础设计,但同时,这偶尔会让重新部署无法预测。我们倾向小心行事,尤其快到周末时,因为无论改动多小,重新部署都逼着我们重新发送全部信息。
我们知道一定有更好的办法可以修复造成大问题的小问题。
微补丁,不起眼的超级英雄
大概1年前,一种名为微补丁的新技术改变了一切。和重新部署不一样,微补丁能够对玩法数据做出有针对性,特定的改动。如果把游戏服务器看做一个公告板,那微补丁就像是板上的便利贴。重新部署像是为了修改一个错词而换掉整个破板子。有了微补丁,旧的游戏服务器仍然在那,但一旦游戏启动后,它就会自动寻找便利贴并且只会做出指定的改动。
“我们在2分钟内就能全球范围发布一个微补丁。”
这也让微补丁相比重新部署具有更小的风险和更快的速度。其一,微补丁建立在既有服务器数据的基础上,不用重新部署所有的东西,所以我们改动的东西会更集中。其二,微补丁的植入既简单又容易撤销。我们在2分钟内就能全球范围发布一个微补丁——撤销的速度也一样。
曾经有一段时间,微补丁只能用于改动数值数据——差不多是这个意思,它们的作用就是强调需要迅速注意的平衡问题。那时候,还没有办法对控制英雄技能运行的脚本,做出有针对性的改动,所以臃肿的重新部署仍是解决(绝大部分)会导致禁用bug的唯一办法。
就在艾尼维亚禁用bug出现的几周前,拯救英雄的科技终于完成了:我们现在可以利用微补丁对技能脚本进行针对性的改动。
寒霜涅槃的艾尼维亚
就在庆典女皇艾尼维亚皮肤的首发日,我们了解到她所有皮肤使用大招时都会出现bug。质检队员介入,想要找到问题的根源所在。助理游戏设计师Matthew “PhRoXzOn” Leung-Harrison,曾负责6.23版本艾尼维亚的改动,他说到“一看到这个bug,我就知道问题出在哪了。”
英雄联盟的每位英雄都有一个逻辑文件,里面包含了控制他们技能的脚本。这个文件里不一定保存着技能外观和伤害的信息。而是,控制技能正常的运行——就像一个连接了所有信息并且合成后显示至你的电脑屏幕上的主板。
我们错把一个有问题的艾尼维亚逻辑文件发到了运行服务器上。结果就是,她的大招看起来像是在运行——你按下“R”时炫酷的粒子效果确实启动了——但是技能并未正确运行。冰川风暴应该要施加一个二秒的debuff,以便寒霜刺骨能造成双倍伤害,但实际上只施加了一个0.5秒的debuff。用质检总监Brian “Aotus” Brause的话说就是:“一顿秀得飞起的操作…但零伤害。”
确定问题之后,我们更新了她的逻辑脚本并测试了一段时间。改动修复了这个新bug,但是一轮更透彻的检测揭露了一个自6.23版本就存在的问题。幸运的是,微补丁的质检流程很快,因为我们只需要针对一个特定问题进行检测。接着我们进行了一轮二次修复,这一次奏效了:全部问题都已解决并已通过微补丁发送给了玩家们。
周末禁用?不存在的——仅耗时4小时,艾尼维亚就又(完好地)回归峡谷继续参加庆典了。
微补丁是万能钥匙吗?
在利用微补丁修补平衡的进程里,这是我们第一次对逻辑脚本作出改动,并帮助英雄躲过被禁用的命运。这项技术并非万能——你没法看到我们利用微补丁为艾尼维亚加上一对新的翅膀或是加入额外的冰霜特效——但他们是快速,低风险解决某些运行问题的方案。
我们正致力找到就微补丁内容更新与玩家更好地进行交流的办法。目前它们位于补丁更新说明的最顶端,但话又说回来,谁会在补丁发布很久之后再去看补丁说明的?我们考虑过在客户端里进行公告,像是加强了谁削弱了谁这种,但是这实际上只是告诉你有东西出问题或是不稳定而已。我们希望新版客户端能对微补丁改动说明提供更好的支持。
与此同时,Riot Penrif开玩笑说到“如果你碰到的某个问题突然之间就被修复了,那我只能说这姑且算做微补丁的功劳吧。”