IZE破除玄学2:灵车漂移?僵尸速度重置与冰车加速机制_全球聚焦
在自制IZ圈中,“冰车加速”的奇特现象广为人知,然而鲜有人知道其中的原理。不少玩家试图通过海量实验得到冰车加速的条件,但未见有人得到正确的结论,甚至成为千古谜案。
【资料图】
早在18年,琉璃就给出了一些测试结论。当时并未发现速度重置机制,又缺少反汇编证据支撑,结论自然是不够准确的。但下面这三条已经相当接近真实的情况了。
其实,冰车加速与IZE中早为人熟知的特性——僵尸速度重置密切相关。
前置知识
上图演示了僵尸的速度重置现象:若僵尸放下 500ms 内未受攻击,或是受到攻击后 525ms 内未受攻击,就会进入速度重置状态,每帧将速度重置为随机值(对于路障就是 0.23—0.37)。一旦受到攻击,立刻退出该状态(若接下来 525ms 未受攻击还会再次进入)。
速度重置在游戏内部通过僵尸的“发光倒计时”实现,此处不再介绍。(想知道的可以在评论区问。)
特性演示
根据我们的经验,冰车的速度应该越来越慢,而上图中冰车越过红线后突然加速,并不再恢复原速,好像“灵车漂移”一样。
先说结论,冰车开始加速的条件是 横坐标小于400(越过红线)且处于速度重置状态。一旦开始加速,即使脱离速度重置状态,也不会恢复原速。
下面介绍原理。
原理解释
首先要知道,冰车属于匀速僵尸,当速度的值固定时,会以匀速前进(即每帧横坐标变化量相等);路障等“步行”的僵尸不属于匀速僵尸,即使速度的值固定,也是“一步一步”走的,每帧横坐标的变化量呈现周期性变化。
正因为匀速僵尸与非匀速僵尸的前进方式不同,它们的速度值没有可比性。具体到本例,尽管冰车比路障移动得快,冰车在红线右侧的速度大约在 0.1—0.2 之间,而路障的速度范围是 0.23—0.37,在数值上远高于冰车的速度。因此,如果游戏“不小心”把冰车的速度也设置成 0.23—0.37 之间的某个值,实际效果就是冰车以很快的速度往前冲去。
那么游戏到底是如何“不小心”的呢?其实,(排除栈位的影响后)绝大部分的玄学问题都是更新顺序所致,本例也不例外。
在游戏的每一帧中,发生了如下更新:
将满足条件的僵尸速度重置;
计算冰车减速,即修改冰车速度;
僵尸移动,即根据速度修改横坐标的值(第1期所分析的就是这步)。
然而,由于IZ中本无冰车,宝开根本没有对冰车做任何特殊处理。在第1步中,冰车会像路障铁桶一样被速度重置成 0.23—0.37 的值!根据之前的分析,这时冰车的速度远高于正常值,这就解释了冰车在满足速度重置的条件下会加速。但为什么红线右边的冰车就不会加速呢?
这与第2步有关。由于冰车需要减速,游戏根据冰车当前的横坐标计算出一个速度,并修改冰车的速度值,以达到减速的效果。这样,新速度仅与冰车横坐标有关,与旧速度无关,旧速度被直接覆盖掉了。因此,第1步的错误修改被第2步的正确值覆盖掉,第3步冰车前进调用的是第2步的正确结果,没有造成任何异常。而当横坐标小于400后,冰车停止减速,即第2步不再执行,因此第1步的错误修改就会被第3步用来更新冰车前进,于是冰车就“加速”了。
最后,我们还可以解释为什么“加速状态中,被攻击则速度变化”。冰车开始加速时正处于速度重置状态,每一帧速度都会重置为 0.23—0.37 之间的随机值,宏观上表现为一个平均速度。若冰车受到攻击,速度重置立即停止,冰车的速度就固定在速度重置最后一帧随机到的值,这个值虽然在0.23—0.37 之间,但具体是多少、比“平均速度”大还是小是不确定的,因此表现为速度变化量不确定。
当然,由于冰车不可能倒着开,一旦越过红线,第2步就再也不会执行了。因此,冰车的速度不可能恢复之前的慢速。
真理往往是简单的。当你发现它后,会大呼宝开SB。 ——渐强
当然,这件事也不能怪宝开,毕竟谁能想到十年后还有一批闲的没事的玩家魔改一通自制IZ,改出速度重置的冰车来呢。