Alt-F4 #51 - 流体电力实验  2021-11-05

作者 stringweasel, 编辑 Nanogamer7, Conor_, Therenas, Firerazer,
翻译 Ph.X

目录

在第 51 期的 Alt-F4 的中,优秀的长期供稿人兼编辑 stringweasel 带我们深入 Mod 开发史,那些试图让异星工厂的电网管理更加贴近现实的 Mod 历史。这些 Mod 都有他们自己的问题和权衡,这也正是他在这个古老的问题上提出了自己的看法的原因,效果拔群!

流体电力实验 stringweasel

自从我接受电子工程教育以来,我在任何地方都能看到电的流动。在我眼里,在塞车时车辆前进组成的反向波动就是电子的运动。更有趣的是,电的流动与液体的流动是如此的相似。当我冲马桶时,它产生了一个漩涡,我看到一个电感正在由一个电容充电。当我突然关闭水龙头,听到水管中的水锤声时,我看到一个电感的电压峰值,这一特性被用于升压变换器。若能在异星工厂中拥有这种真实的电力行为不会很酷么?

为什么难以实现?

首先,在原版的异星工厂中,电的行为是理想化的——意思是电线中没有电阻。你的电网可以在无限的距离上传输无限地电力。这几乎就像他们把低温超导体架在廉价的木杆上。对于游戏的目标和限制来说这个设计非常有效,适合大多数游戏风格。然而,总是有一些玩家在寻找更多的挑战,想知道是否可以将电力变得更真实。玩家们希望必须使用变压器来避免长距离输电的电压下降。

然而,重建更真实的电力行为(可以说)超出了原版异星工厂的范围,并且可能永远不会发生——所以该由 Mod 来填补这个略带虐待的小众需求。在异星工厂中,Mod 只能修改游戏的预定方面,而可用于电力的选项非常有限。因此 Mod 作者们想出了一些有趣的变通办法。其中一个主要问题是,一旦电线杆由铜线连接起来后,游戏就会自动在其内部传输电力,这一点无法被 Mod 所操纵。唯一真正进入电力网络的方法是使用电能接口(以下简称为 EEI)人为地供应或消耗电力,但这并不会改变电力传输的 方式

另一个问题是手动移除电线杆上的铜线以管理电力流动,但这也总会移除电缆连接的画面效果,让电网看起来很奇怪。这也会迫使你自己在 Mod 代码中计算电力的传输,并手动地管理电网,就像正常游戏在后台做的那样。问题是,由 Mod 完成的计算总是比游戏引擎做同样的事情要慢好几个数量级。这就是为什么异星工厂的开发者 Rseding91 在几年前有人要求用 Mod 来实现电压下降时,有如下的说法。

做个这样的 Mod 的话除了电压会降下来之外,你的 UPS 也会跟着一起降下来 :P

[Voltage is] not the only thing you’re going to be worrying about dropping. Your UPS will TANK once you build more than a few of anything if you used such a mod :P

Rseding91,异星工厂开发者

当然,这并非意味着不可能实现,即使它的性能没有原版异星工厂那么好。Mod 中曾找到了绕过诸多障碍的奇思妙法,包括此类限制,并创造了各种曾被认为是不现实的伟大游戏机制。

电力大改简史

最早的电力大改 Mod 之一可能是流量网络——制作于在异星工厂 0.13 期间。简而言之,它在每根电线杆下都放置了一个自定义的隐形蓄能器,形成一个复合实体,这是 Mod 中常用的一个技巧。然后,铜线被移除,用红色的电路线代替,以停止原版的电力传输,但仍然可以看到连接。然后用一个自定义脚本在这些隐藏的蓄能器之间手动分配能量。不幸的是,如前所述,这非常慢,因为 所有 电力计算都是在 Mod 中完成的,而非异星工厂本身处理。然而,它的优点是高度可定制。

流量网络的配电实例显示了一个电线杆的电压,流经该电线杆的电流,以及该电线杆的压降。
流量网络的配电实例显示了一个电线杆的电压,流经该电线杆的电流,以及该电线杆的压降。

在异星工厂 0.15 期间中出现了另一次尝试,一个叫做高压的 Mod。这个 Mod 相当有趣,有很多可动部件。电力在高压或低压下分配,其中变压器和其他设备是蓄电器或 EEI。高压电力分配是用自定义公式手动计算的——与流量网络的做法非常相似。这使得作者能够引入有趣的机制,如变压器需要时间来“启动”。另一方面,普通电压只是为你的机器供电,并使用铜线配电,就像在原版中一样,这意味着不需要修改计算。然而,作者确实引入了一种随距离变化的压降,这只需要在放置电线杆时进行计算。如果放置的电线杆离变压器太远,那么它将无法为任何机器供电。实际情况是该电线杆被偷偷地替换成供电距离为零的电线杆,这意味着该电线杆仍将连接到电力,但它不能将该电力传输给任何机器。这是一个相当出色的解决方案。

高压配电展示,电线杆会在离变压器太远时被禁用。在选择电线杆时,它还显示了一个叠加图(蓝线和红线)——与流量网络非常相似。
高压配电展示,电线杆会在离变压器太远时被禁用。在选择电线杆时,它还显示了一个叠加图(蓝线和红线)——与流量网络非常相似。

这两个 Mod 的性能消耗都很高,而且很可能无法在大规模工厂中使用——并且它们也从未更新到新版本的异星工厂。在我看来,最好的现代解决方案可能是 Xorimuth 的电力过载。这个 Mod 的目标是用变压器将电网分割成独立的子网络。通过变压器的电力没有真正的变化,通过它的电力转移是由 Mod 本身计算的。如果一个给定的子网络有一个电线杆吸取的功率超过了它能承受的范围,它就有机率爆炸!这个 Mod 最人惊讶的是它看起来和感觉都很整洁,所有的铜线连接都在显示。这是因为作者所要求的大部分所需组件,如 EEI,都位于一个完全不同的表面上——所有的连接都是由跨表面的铜线来完成的!

电力过载通过一个看起来像电源开关的变压器进行配电。
电力过载通过一个看起来像电源开关的变压器进行配电。

最后值得一提的是电力变压器,这是我在流体电力发布后一个月左右偶然发现的。它用了一个类似于电力过载的方法,但没有爆炸的电线杆,这意味着它不会惩罚 使用变压器的人。然而,它确实找到了一种有趣的方法来建造变压器,其中不需要 Mod 进行电力计算。每个变压器都是一个复合实体,它有一个锅炉,可以用电力中产生流体,然后有一个发电机,可以将其转变成电力。这意味着电力网络是断开的,但网络之间的计算仍由(性能更强的)游戏引擎完成。

电力变压器通过一个看起来很酷的变压器进行电力分配。
电力变压器通过一个看起来很酷的变压器进行电力分配。

这些 Mod 都有自己的精彩之处,可以创造出令人惊叹的游戏效果。然而,我在想,还能更逼真一点么?能不能更紧密地模仿流体?最重要的是——我们能不能创造一些机制,通过限制吞吐量来固有地惩罚某些电网,从而鼓励使用变压器?

我做了什么不一样的事?

幸运的是,异星工厂确实有内置的流体模拟,它被很好地优化并在游戏引擎上运行。这种模拟可以管理储油罐中的石油和核电站中的蒸汽。它并不完美,可能会导致一些头痛的问题,但至少足够好。这种流体模拟正是模拟像流体一样流动的电力所需要的——所以我开始尝试实现它。

在异星工厂的数据阶段中捣鼓了数个小时,在流体盒与复合实体中挣扎了太长时间,我终于偶然发现了一个可行的解决方案。我成功地将电力转化为流体——我称之为电力流体——并从本质上将所有电线杆变成了管道。下面是一个使用流体电力蒸汽机为电炉供电的例子,显示了你在使用该 Mod 时将看到的内容(左)和幕后实际发生的情况(右)。

从左到右,设置显示了发电、升压、降压和用电情况。

电力流体将像流体一样流向其他电线杆,就像水或其他流体一样,并从那里为你的实体提供动力。这种电力流体的单位是焦耳(例如“10kJ”),这意味着它是通过电线杆分配的 能量。这个单位本可以是伏特,甚至是库仑(参见电荷),但是使用能量便于跟异星工厂现有的机制相结合。

然而,这种实现方式确实需要两种类型的电线杆,即普通电线杆和源电线杆。源电线杆被放置在你的发电装置旁边,它们创造了电力流体。这是通过在杆子下面放置一个微型组装机来实现的,该组装机根据具体的功率消耗以正确的速度创造流体。为了给你的机器提供电力,你需要正常的电线杆,它下面有微型发电机(像蒸汽机),可以将流体转变回电力。这也允许电力流体通过多个电线杆流向需要的地方,就像你可以把蒸汽机连在一起一样。这也意味着我可以限制每一个电线杆可以向它周围的机器输送多少电力!

下面是确保电线杆具有正确特性的伪代码。

// 电力生产决定了源电线杆的组装机功耗
power_production = (fluid_fuel_value * units_per_craft) / crafting_time

// 功率消耗决定了普通电线杆发电机的流体使用率
power_consumption = fluid_fuel_value * fluid_usage_per_tick * 60

接下来是变压器,它在此类 Mod 中起着至关重要的作用,因为我们都知道,液体在高吞吐量下不会走得很远。在现实世界中,变压器会提高电压,以便更有效地(读作容易)分配电力。电力流体没有电压可以提升,但所需的吞吐量可以通过简单地将流体能量转换为一个更大的单位来减少。例如,“高电压”可以通过电力流体的单位是 1MJ 而非 1kJ 来模拟。这意味着,对于相同数量的流体流动,对应更多的能量流动。我真正喜欢这个实现的地方是这些变压器是多么的简单。我提到的所有 Mod 都必须手动计算变压器上的电力传输,或者创建复杂的复合实体,而我只需要创建一个具有特定配方的组装机。这个配方并不改变能量的总量,而是将其转换为或多或少的密集形式。这个配方的制作时间,或者转化多少流体单位,可以用来决定变压器的输入/输出比例。

// 变压器升压配方示例
1000 units of 1kJ fluid --> 1 unit of 1MJ fluid

// 变压器额定功率
power_rating = fluid_output_amount * fluid_output_unit / time_per_craft

经过这一番摆弄得到了了一种直观而有趣的游戏方式。它的设计是这样的:只有最低的电压可以为你的机器供电或接受发电机产生的电力。然后,一旦电压被提高以帮助分配,高压流体 只能 通过远程输电塔传输。这些大电线杆也是受限的,不能为任何机器供电或接受产生的电力。这可能是我实现的最喜欢的部分。这意味着有一种内在的激励机制,可以在整个基地建立一个高压干线,而在你想实际使用电力的任何地方都需要使用变压器。

高压干线的例子(游戏中的实线覆盖),变压器将电压降到机器上(游戏中的虚线覆盖)。这实现了简单的电力分配。
高压干线的例子(游戏中的实线覆盖),变压器将电压降到机器上(游戏中的虚线覆盖)。这实现了简单的电力分配。

最后,将电力模拟成一种流体,改变了蓄电器的设计。它不再是一个只接受剩余电力的智能实体,只在需要时才释放所有的能量。相反,它是一个简单的储存罐,就像一个巨大而愚蠢的电容器。它只接受低压电力,这意味着你的电池组需要大量的变压器。确实可以通过有趣的电路创造出与普通蓄能器相同的行为,但在没有电路的情况下,它们的功能仍足够好,尽管效率有点低。

结论

总的来说,最我感到惊讶和兴奋的是找到了一个能实现我大部分目标的工具,并在本质上创造了我所设想的挑战和障碍。同时我不必为玩家创造许多人为的限制,这是一个很大优势。我只创造了基本的系统,而且它能自我调节!我滥用了一些机制,这确实引入了一些奇怪的问题,如意外地混合不同的电压或不显示物理铜线连接,但玩起来实际上真的很有趣。

然而,真正问题反而是:这个 Mod 的性能玩起来如何?这个 Mod 需要比原版游戏更多的流体计算,并且滥用了其他一些机制。高度优化的异星工厂引擎能跟上吗,尽管有人预测过此类 Mod 会让你的 UPS 出问题?我将在下周对这个问题进行更详细的介绍。以一个悬念来结束,我发现的东西可能会让你吃惊。治沙它让我吃惊了。

第二章链接

征稿

一如既往的,我们正在召集任何想要为 Alt-F4 做出贡献的人,无论是提交文章还是帮助翻译都可以。如果您有些有趣的想法,并乐于与社区分享,这里就是一个好地方。如果您没有太大把握,我们会很乐意帮助您讨论内容创意和结构问题。如果您有意参与,从加入 Discord 开始吧!