确定性
为什么种子相同的关卡在每台设备上都一样,随机性是如何工作的,以及这能带给你什么
关卡是时间的函数
关卡建立在时间轴上。每个物体存在于一段帧上,并沿着关键帧运动
关卡不会读取你的操作。所以无论你是活着、死了、正在冲刺,还是由机器人游玩,第1200帧看起来都一样
影响是单向的。关卡可以改变化身的尺寸、让它变慢、收走它的操控或关闭它的碰撞。但化身没有任何反向影响关卡的途径
没有触发器。开发者正在讨论以后的版本是否加入,但还没有定论
关卡按真实时间运行。帧率只决定屏幕重绘的频率。同一局在每秒30帧和144帧下完全一样
种子
种子取自第一个设置了种子的地方:
- 关卡界面上的
玩家种子(随机化选择一个新的,清除将其移除) - 关卡作者设置的关卡自身的种子
- 为这一局新生成的种子
0表示“未设置”。所以普通关卡每次加载都会使用新的种子
结果窗口会显示一局的种子,纪录也会保存它。这样就可以重放一局好成绩
随机性如何工作
关卡中的随机值并不来自一个记住自身状态的生成器,而是根据它的地址计算出来的:
Hash(seed, keyframe frame, layer, start frame, track, channel)
同一个地址总是得到同一个数,在任何设备上、以任何计算顺序都是如此。地址的每个部分都是作者可以编辑的内容。所以同样的布局会重现同样的一局
这能带给你什么
- 机器人
Warm Bot v1:在开始之前算出通过整个关卡的路线。这之所以可行,是因为实际运行的关卡正是它规划时所用的那个 - 机器人
Reflex Bot v1:构建当前帧之后的若干帧,并据此操控 - 检查点倒回:重新构建目标帧,而不是撤销任何东西
- 编辑器:可以从零构建任意一帧,所以拖动播放头是即时的
- 纪录和统计:在每台设备上含义都相同
已知限制
关卡这一侧是确定性的。化身这一侧有一些开发者已经列出但尚未修复的缺陷:
- 两个危险物在同一帧碰到化身时,由哪一个决定击退方向,在不同的局之间可能不同
- 关卡开始时化身的时钟不会重置。根据关卡加载所用的时间,一次冲刺可能多持续或少持续一帧
在同一构建版本上重复同一局机器人游玩,测得的结果直到最后一位数字都相同。所以这些缺陷并不会在每个关卡上都出现。由于它们的存在,一局在实践中是可以重现的,但没有保证