Alt-F4 #28 - ROFL  2021-03-19

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

目录

在三月的这个美好的一周,首次撰稿人 Ph.X 讲述了他们利用独立的模块来布置基地,并通过物流列车网络将它们连接起来的分隔系统。Ph.X 从软件开发中获得灵感和经验,将模块化编程的概念运用到异星工厂之中。

另外,还有个新闻,我们现在提供了一个可以订阅的电子邮件列表!如果你不经常浏览 Reddit 或论坛,甚至不经常来我们的 Discord,我们现在提供了一个同样受欢迎的电子邮件列表的选项。只要在这里输入你的电子邮件地址,你就会在每周五最新一期发布时收到通知。当然,我们只会将此用于 Alt-F4 的更新,而不会给你发送垃圾邮件。

面向配方的异星工厂之道 Ph.X

异星工厂有一个复杂的生产线网络(即意大利面条),这使得游戏充满了乐趣和挑战。其作为一个复杂的工程问题存在着与软件工程类似的挑战,因此我认为可以用一些源自现实世界经验来改善游戏体验。

什么是“ROFL”

有编程经验的人应该听说过 面向对象编程 模块化编程,而这正是面向配方异星工厂之道(Recip-Oriented Factorio Life, ROFL)旨在模仿的理论。模块化编程,是强调将计算机程序的功能分离成独立的、可互换的“模块”的软件设计技术,它使得每个模块都包含着执行预期功能的一个唯一方面所必需的所有东西。在 ROFL 中,我们将整个工厂分离成独立的、可互换的“子工厂模块”,每个模块都包含了执行预期工厂的一个唯一配方必需的所有东西。

和大多数哲学一样,ROFL 试图找到一个永恒始基作为一切事物的来源;在我们这里,我们选择的始基是配方。集成电路可以由任何级别的组装机制作,它可能会受到不同插件的影响,所需的原材料可能来自传送带、物流箱,甚至是相邻的铜线组装机,但无论其他条件如何变化,配方本身一直是铜线、电路板与塑料合成集成电路。配方有点像异星工厂中的原子操作:一个不可分割的,无法进一步分解的,最小单位。

根据一个特定的配方,将专用于实现该配方的子工厂打包成模块。一个单独的物流系统作为模块对外交互的接口为其获取原料和供应产品。这样划分的目的是为了实现模块内部的高内聚和模块之间的低耦合。模块内部的高内聚指模块包含了制作配方所需的所有设施(组装机、机械臂、传送带、电线杆、插件效果分享塔等等),让模块可以独立工作。模块之间的低耦合性意味着模块之间通过预定义的接口(如电力和铁路网)进行交互,没有直接的依赖关系,使得模块之间可以互换。

为了更好地实现这个想法,下面的例子中使用了物流列车网络(LTN - Logistic Train Network)AAI 箱子和仓库(AAI Containers & Warehouses)迷你装卸机(Miniloader)Mod。以下所有例子的蓝图都可在这里下载。

接口设计

在实际建造任何子工厂模块之前,我们需要设计一个通用的物流网络作为模块之间的接口。虽然总线或物流机器人在一定程度上可以实现这样的物流系统,但街区式铁路网格在吞吐量、可重复使用性和纯粹的 炫酷程度 上都远超过其他方案。

在原版中,列车只能按照预定的时间表运行,这并不够灵活和“物流”。这种时候,物流 列车网络就派上用场了。有了 LTN,列车就像物流机器人停在机器人指令平台一样,停在车辆段。当发生物流需求时,系统会在车辆段寻找一辆合适的列车,并为其生成一个时刻表,让它在供应车站取走指定的物品,然后到请求车站卸货,再回到车辆段,这也类似于物流机器人的行为。但与物流机器人不同的是,列车不会自己装卸,所以需要在车站放置机械臂或装卸机。LTN 比物流机器人网络更强大,因为它具有巨大的货运量,更高的速度,且支持流体运输。

我的例子中选择的铁路网是双向靠左行驶,这样就可以将铁路信号灯放置于铁轨之间。为了节省空间,路口只允许直行和左转。大部分车站的车辆数限制为 2,以保证最多只能有一辆列车在站外等候。少数在站外等候的列车所占用的铁路区段可以通过完全互联的路网绕行。

铁路网
只有中心网格会包含一个制作模组。

模块之间保持一个网格的间隔,空置网格将用于列车交通管理、太阳能发电、机器人物流网络分割。机器人擅长短途物流,但在长途运输方面却表现糟糕。分割的物流网络可以避免机器人参与不必要的长途飞行,而将这部分工作留给列车。

车组选用最小的两节列车,一节内燃机车和一节货运/液罐车厢,这是为了减小体积并消除在车厢之间平衡装卸的烦恼。机车的燃料补充是在 LTN 车辆段进行的,列车每次完成运送后都会返回车辆段。

铁道场模块
内燃机车补给所使用的燃料也是通过 LTN 获得的。

模块设计

我们先来一个最简单的例子,铁齿轮;一个单一原料、单一产品的配方。底部的物流车站请求 8000 块铁板,顶部的物流车站从连接的仓库提供物品(即齿轮)。

齿轮模块
简单的齿轮模块。原料站位于底部,产品站位于顶部。

由于这个模块对外的输入输出都是由列车来完成的,所以我们对模块内生产线的修改和升级不会对其他模块产生任何影响。因此,我们可以在不改变工厂其他模块的情况下,将其改造成插件效果分享塔充分覆盖的齿轮厂。

另一种齿轮模块
带插件效果分享塔的齿轮模块。车站没变动,仅修改了车站间的生产线

接下来,我们来看一个集成电路模块,有三种原料。通过设置物流车站请求多种原料,我们就可以在一个车站卸下所有的原料。此时所有的原料都混在一个仓库里,我们使用筛选迷你装卸机(类似于筛选机械臂)将每种原料分离到一个单独的传送带上,以供应组装机。

集成电路模块
集成电路模块。使用单一车站获取所有原材料。

如果我们使用液罐车厢同样可以满足生产/消耗流体的配方。

炼油模块
炼油模块。请注意,通过 LTN 信号控制管道泵,可以在同一车站装卸不同种类的流体,而不发生混合。

还有一些非常规的配方,如科研、火力发电厂、火箭发射井等。

科研中心模块
研究中心模块,并不需要一个输出车站。

火力发电厂模块
火力发电厂,附带填海料以放置在水面上。或者你可以用自动填海(Landfill Everything)Mod 来准备厂址。

火箭发射井模组
火箭发射井模块。模块内采用独立的物流机器人网络。下面的车站用于获取制造火箭所需的材料,右边的车站则是火箭的载荷,通常是卫星。

ROFL 的优点和缺点

ROFL 针对的是有工程思维的人,让玩家可以轻松地将生产问题分而治之。当你需要实现某个配方时,只需在网格内设置与原料和产品类型相匹配的输入车站和输出车站,然后在车站之间设计生产线。当某一配方产量不足时,可以直接复制粘贴相应的工厂模块,自动整合到整个工厂的生产之中去,而无需接驳输入输出

ROFL 并非朝着完美生产的方向优化,它不是一个完美比例的生产线,经常有设施因为原材料不足或产品溢出而停止工作。每一件物品都要先装载到列车上,再卸载下来,产生了很多额外的输入输出的瓶颈,最典型的是铜线配方,其产品数量超过原材料数量,堆叠数量高,且需求量巨大。每个模块单元内都有非常大的库存,这无助于让你及时发现产量不足的物品(不过缺的肯定是铁矿石没跑)。用于模块间物流的铁路网建设成本很高,也带来了大量的交通事故隐患(赞美蜘蛛机甲)。

结论

ROFL 与其说是一本蓝图簿更像是一种试图简化复杂问题的思维方式。上面的例子只是使用 ROFL 作为指导的一种解决方案。用 LTN 构建铁路网可能会被一些人认为有点作弊,但这个思路也可以用于总线的玩法等等。异星工厂永远不会有一种“正确”的玩法,多样性才是它的伟大之处。

一张使用上述 ROFL 模式的太空探索 Mod 游戏地图

征稿

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