- IP属地
- 英国
- 2018/12/23
- 69
- 64
- · 发布于未知
为照顾大多数读者的阅读体验,本帖仅对TR中的部分液体机制进行简明的概述,完全详细的液体机制放在电路文档附录中。
数据结构
TR的地图中每个图格都存储了液体信息,包括液体量(整数,0到255)和液体类型。处理液体流动时,游戏使用的是一个长为5000的活跃液体数组和长为10000的缓冲区存储有潜在流动可能性的图格。当游戏猜测某格液体可能会发生变化时,就会将这一格液体加入活跃液体数组(活跃液体数组已满则加入缓冲区)。当游戏猜测某格液体已经稳定下来,不会继续流动时,就会将这格液体从活跃数组中删除。
两个液体数组处理插入和删除元素的方式会导致其中元素顺序随时会发生变化,加之液体数组规模极大,导致了即使液体机制可以被研究透彻,实际应用中模型也会因为过于复杂而不可预测。
刷新方式
每次游戏刷新时,会对两个液体数组进行刷新。刷新分为三种模式:恐慌模式、快速模式和正常模式。当两个液体数组中液体总量极大时会触发恐慌模式,此时游戏简单地对部分液体进行快速安置,然后将两个液体数组清空,不处理其余液体。当活跃液体较少时执行正常模式,活跃液体较多时执行快速模式。快速模式与正常模式的主要区别是,快速模式中熔岩和蜂蜜没有粘性,而正常模式中熔岩和蜂蜜有粘性。
单格液体刷新时,会处理液体反应、上下的流动和左右的流动。液体反应和上下流动过程中,遇到极端情况(液体量接近0或接近255)时会直接变成0或255,导致液体量变化。左右流动过程中,将本格液体和附近的液体取平均值并四舍五入,导致液体量变化。
水的流动在每次正常模式刷新中都会执行,熔岩的流动每5次正常模式刷新会执行一次,蜂蜜的流动每10次正常模式刷新会执行一次。
如果液体数组中的液体量长时间维持在某个值附近,游戏会猜测进入了死循环,进入阻塞模式,强制删除液体数组中的所有液体。
刷新后如果活跃液体数组有空间,会将缓冲区中液体移入活跃液体数组。
液体反应
反应优先级熔岩>蜂蜜>水。不同液体反应时,如果优先级低的液体在下,会先进行是否可反应的判定(生成的反应物是否被物块阻挡),然后再决定是否反应。否则会先将优先级低的液体删除,然后再进行判定。这个机制导致可以做出简单的吸收蜂蜜和水的装置,而很难做出吸收熔岩的装置。
数据结构
TR的地图中每个图格都存储了液体信息,包括液体量(整数,0到255)和液体类型。处理液体流动时,游戏使用的是一个长为5000的活跃液体数组和长为10000的缓冲区存储有潜在流动可能性的图格。当游戏猜测某格液体可能会发生变化时,就会将这一格液体加入活跃液体数组(活跃液体数组已满则加入缓冲区)。当游戏猜测某格液体已经稳定下来,不会继续流动时,就会将这格液体从活跃数组中删除。
两个液体数组处理插入和删除元素的方式会导致其中元素顺序随时会发生变化,加之液体数组规模极大,导致了即使液体机制可以被研究透彻,实际应用中模型也会因为过于复杂而不可预测。
刷新方式
每次游戏刷新时,会对两个液体数组进行刷新。刷新分为三种模式:恐慌模式、快速模式和正常模式。当两个液体数组中液体总量极大时会触发恐慌模式,此时游戏简单地对部分液体进行快速安置,然后将两个液体数组清空,不处理其余液体。当活跃液体较少时执行正常模式,活跃液体较多时执行快速模式。快速模式与正常模式的主要区别是,快速模式中熔岩和蜂蜜没有粘性,而正常模式中熔岩和蜂蜜有粘性。
单格液体刷新时,会处理液体反应、上下的流动和左右的流动。液体反应和上下流动过程中,遇到极端情况(液体量接近0或接近255)时会直接变成0或255,导致液体量变化。左右流动过程中,将本格液体和附近的液体取平均值并四舍五入,导致液体量变化。
水的流动在每次正常模式刷新中都会执行,熔岩的流动每5次正常模式刷新会执行一次,蜂蜜的流动每10次正常模式刷新会执行一次。
如果液体数组中的液体量长时间维持在某个值附近,游戏会猜测进入了死循环,进入阻塞模式,强制删除液体数组中的所有液体。
刷新后如果活跃液体数组有空间,会将缓冲区中液体移入活跃液体数组。
液体反应
反应优先级熔岩>蜂蜜>水。不同液体反应时,如果优先级低的液体在下,会先进行是否可反应的判定(生成的反应物是否被物块阻挡),然后再决定是否反应。否则会先将优先级低的液体删除,然后再进行判定。这个机制导致可以做出简单的吸收蜂蜜和水的装置,而很难做出吸收熔岩的装置。