暴雪已经发布了魔兽世界怀旧服萨菲隆的深入研究资料,解释了为什么他们选择每2秒而不是1秒造成一次冰霜伤害。过去,萨菲隆通常每2秒造成一次伤害,但有时tick更快,并且光环称其每秒tick。 但是,在魔兽世界怀旧服PTR上,光环每一秒都在tick,这对玩家来说是相当惊喜!


最初仍在暴雪工作的萨菲隆设计师声称,他希望萨菲隆每秒造成一次伤害...但是在原始版本中,由于老游戏代码的某些怪癖,最终以每2秒为单位。因此,暴雪每2秒就会进行一次tick,这与香草期间的行为体验最为一致。 你同意这个决定吗?


Blizzard LogoBlizzard

蓝帖:

大家好! 我们最近完成了在PTR上对Naxx的测试。非常感谢所有帮助我们在发布前发现可能修复的错误或BUG的人。我们经常会遇到有关如何确定哪些错误以及应该更改的问题,因此,我认为您可能会更深入地了解我们对萨菲隆的冰环光环的调查。

TLDR适用于只想知道结论的人:我们将法术更改为每2秒持续tick一声。 当萨菲隆参与战斗时,整个团队会受到一个冰霜光环的影响,上面写着:“每秒造成冰霜伤害”,但是许多玩家报告应该每2秒一次。我们的第一个想法是“那是巫妖王之怒”,但是我们知道,在像《魔兽世界》这样复杂的游戏中,可能会有令人惊讶和意想不到的互动,并且在过去15年中发生了很多变化。

注释:TLDR这个网路缩写非常有意思,它代表的其实是 “too long; didn’t read” ,翻成中文就是「太长了,没看」。


当当前行为与玩家或开发人员的记忆不符时,它总是会让我们有些怀疑。有时候,事实证明我们的记忆是错误的,但是我们也已经看到它导致发现意外的互动,因此通常值得一看,在这里确实是如此。 我们查看了许多旧视频,尽管其中一些来自错误的扩展,但我们能够找到显示原始战斗的视频。这些视频实际上具有在同一战斗中两个tick率的证据。冰霜光环似乎大部分每2秒tick一次,但偶尔每秒tick一次,然后再每2秒回复一次tick。我们还检查了参考服务器,其行为与视频中所看到的相同:主要是2秒tick,但偶尔会出现1秒tick的短暂连胜,然后返回2秒tick。 也许最有用的线索是来自《魔兽世界》游戏设计师Daelo在2009年发表的这篇文章,他在其中描述了如何修复萨菲隆的冰霜光环,使其确实“造成3.0.8补丁之前的损害”: “我们只是对萨菲隆的冰霜光环进行了修复,因此无论副本的大小或服务器的性能如何,它都应该造成3.0.8补丁之前所看到的损害。在正常情况下,这应该是每2秒1200,在每2秒中1600在Heroic中,您会注意到自己的冰霜光环debuff不再具有刷新的持续时间。工具提示还错误地列出了每秒发生的损坏。


下次我们提供客户端补丁时,该工具提示错误将得到修复。 ” 这肯定表明它在3.0.8补丁之前每2秒造成一次损坏,但这是对巫妖王之怒纳克萨玛斯的修复程序。我们已经发现Naxx的巫妖王之怒的原始版本和愤怒之间存在其他差异,因此尽管这篇文章很有帮助,但仅靠我们自己还不够。它包含了有关减益持续时间刷新的重要线索,这使我们怀疑DoT刷新可能会减少损害刻度。在魔兽世界怀旧服中,当您刷新DoT时,它将重置计时器的周期性伤害,并可能导致您错过跳动,并且由于冰霜光环的持续时间为5秒,因此在整个战斗中都会重置。可以肯定的是,损坏计时器也会重置。


当然,我们已经在魔兽世界中重现了这种行为,因此仍然无法解释两者之间的差异。 那时,我们进一步研究了游戏代码,发现萨菲隆重新应用光环的方式有所不同。在参考和魔兽世界怀旧服中,光环的重新应用都是作为动作触发器的一部分进行的,该触发器每2秒触发一次。但是,在原始代码中,动作触发器与具有周期性拼写tick的计时器共享一个计时器,并且动作触发器总是首先处理。在现代代码中,它们在独立的计时器上运行,因此长时间运行的动作脚本不会延迟拼写检查。 这意味着当萨菲隆重新引用冰霜光环时,可以保证剪辑掉即将发生的伤害tick,从而导致其他所有tick都被跳过。在现代代码中,损坏tick和重新应用程序都被安排为同时发生,但是由两个单独的计时器控制,因此任何一个都可能首先发生。


碰巧的是,在这种战斗中,重新申请通常发生在DoT tick在同一秒之后,因此玩家在每个tick而不是其他每个tick中都受到了全部伤害。 但是,这个谜团尚未解决。我们在原始视频和参考服务器中偶尔看到的那一秒钟的tick呢?它们很少见,但是如果保证参考代码在损坏tick之前进行刷新,那么它们又是如何每秒tick呢?事实证明,冰霜光环应用程序并非总能成功,如果失败,现有的DoT会每秒高兴地剔除一次损坏,直到2秒后进行下一次刷新,如下所示:

由于萨菲隆比玩家高3个等级,法术失误的几率只有1%,但这就是我们在视频中看到的偶尔的1秒tick的原因。我们还联系了仍在暴雪工作的原设计师,他在另一个游戏团队工作。在我们描述了我们的发现之后,他同意这种行为是为了每一秒的伤害,并且事实上光环的再次应用是为了修剪一个点的tick,这是一个直到《巫妖王之怒》才注意到或修复的错误。

那么我们该怎么办呢?

我们经常必须仔细考虑原始意图和原始行为之间的冲突。没有一个正确的答案在所有的情况下,但是对于这种情况,原始的行为是正确的决定,我们计划以与Daelo在《巫妖王之怒》中所做的相同的方式来解决此问题。在现代的代码中,我们有一种方法,只要boss还活着,我们就可以可靠地应用一种每2秒造成伤害的光环,我们将重写这种能力来使用这种方法,就像Daelo在巫妖王之怒中所做的那样。

虽然导致它最初每2秒而不是每1秒发生的行为是一个错误,但它足够一致,与光环描述中的文本错误难以区分。选择按照最初的意图去做将会导致玩家在2006年所经历的两倍的伤害,所以最终这使得这个决定变得非常明确。


我希望你喜欢我们的开发过程。在艾泽拉斯见!