Dyson Sphere Program
Install with App

Details

Latest version
1.13.8
Last Updated
First Uploaded
Downloads
2.6K
Likes
1
Size
1.7MB
Dependants

伊甸园计划 / Project Eden

修复巨型建筑自身物流槽向生产缓冲投料时漏搬增产点的问题:按实际取走的件数转移喷涂点,并从来源扣除,部分取料保留余数。三级增产剂全原料投料后,原版面板应显示额外产出 +25% 或生产加速 +100%;先前积存的未喷涂生产原料需要消耗并补充后才会更新,不直接伪造面板或补发增产点。

巨型建筑喷涂修复:周期预算现在计入当前原料的加速倍率,增产进度按实际配方周期积累;分频暂停不再反复扣减增产计时器,并自动清理旧存档中的负增产进度。内部备料和产物缓冲同时扩容,包含冶炼路径。使用三级增产剂、所有必需原料均达到四点喷涂等级,且供料供电充足、出货畅通时,支持增产的配方在额外产出模式下长期约产出125%,加速模式下约为200%,加速会同步增加原料消耗。禁止增产的配方仍只加速。保留批量结算与普通建筑行为;实机效果待重启验证。

1.13.8 发布状态:修复巨型建筑增产点搬运与周期计时,加入共享物流候选索引、数学批量结算和生产槽位直接索引;保留低争用探针,撤回白名单来源映射缓存。系统探针新装默认关闭,生产统计批量合并默认开启,其余可选并行/候选索引开关默认关闭;已有profile覆盖不变。2026-10-01本机最近两窗FPS 10.3~10.4、UPS 21.1,需求刷新约5.07~5.14ms/tick线程累计;非严格A/B,不代表固定收益。

2026-10-01 发布:1.13.8安装包探针默认关闭;本机性能与蓝图探针覆盖也已关闭,生产和物流优化开关保持不变。需重启游戏生效。

蓝图条件检查优化:无条件建造开启时,普通制造建筑跳过碰撞检查;传送带、分拣器、堆叠建筑、采矿机和附加设备保留连接/参数相关检查。一次蓝图检查共用碰撞体反向索引,替代 FindColliderId 每次遍历附近碰撞体表;检查结束释放,已知碰撞体表变更入口会使索引失效。保留专项探针,实际加速待实机日志验证。

新增建造结算细分探针:跟随 blueprintprobe.enabled,在 BuildFinally 范围内记录地形平整、实体池登记、连接迁移、逻辑/显示组件创建、预建物移除、传送带/分拣器连接及建造事件等17项。按专项报告间隔输出 [建造结算细分],含总耗时、单次均值/最慢、异常数与各项排他耗时。仅诊断,不更改建造逻辑或开启分帧预算。

秒建电力显示刷新合并:本mod同一秒建批次内,逻辑组件创建末尾的电力显示刷新只标记待更新,批次结束、批量回调之前统一刷新一次;异常退出也尝试刷新并清理上下文。真实组件、供电连接和库存仍逐座处理,普通单座建造及其他入口的刷新保持即时。不启用时间分帧。蓝图专项探针新增 [批量电力显示刷新],报告请求数、实际刷新数和批次收尾刷新耗时。

蓝图落地优化:取消原版 CreatePrebuilds 末尾每次强制执行的全堆 GC.Collect(),由运行时正常自动回收。减少点击放下蓝图时的一个停顿来源,不改变预建体创建、物品扣除、连接和事件通知;不保证消除大量建筑创建本身的耗时。内存可能暂时保留到下一次自动回收。

蓝图性能:秒建时间预算按用户要求已关闭(instantBuildFrameBudgetMs=0),恢复原每批100座上限;不再按4毫秒切分。可选时间预算仍保留,同帧多个逻辑tick共享已用时间。单座建造和批次收尾不可中断,仍可能超过预算;0可关闭时间预算(cheats.json 的 instantBuildFrameBudgetMs)。蓝图专项探针开启时,新增 [蓝图条件细分]:按循环区域排他计时,输出最慢12项,不重复累计子循环;耗时包含探针开销,实际改善待实机验证。

开发查询:DSP 代码知识库 —— 全部 95 个托管程序集的本机 C# / IL 导出与检索,另有研究站、生产、物流、能源、星系、矿脉、建造、蓝图、机甲等已核验机制说明。全量导出与人工分析范围分别记录。

把《戴森球计划》的后期产线整体拉满的 BepInEx mod。

量子芯片与引力透镜的基础配方时间均为 1 秒(原 6 秒)。量子芯片每批产出 5 个,原料种类和数量不变;引力透镜每批产出不变。

十七座巨型建筑、满级采矿机与物流站、十四种新矿脉,一整条从煤和水通到有机化学的化工链 (C1 → 烯烃 → 芳烃 → 高分子,外加把一桶原油切成四个馏分的炼油线), 逐台建筑可调的合金配比、随货物流动的物品品质、5000 层传送带集装——所有数值都写在 JSON 里,装完就能改。

开发与测试基于游戏版本 0.10.34.28529 / BepInEx 5.4.17

💬 交流群(QQ):789720138 —— 报 bug、提需求、聊平衡都在这里。

完整特性说明 —— 每一样新物品、新配方、新建筑,以及每个数值是怎么推出来的:

本项目在很大程度上借助 AI 完成。文中描述的引擎行为都在游戏内验证过;欢迎提 bug。

Written with heavy AI assistance. All engine behaviour described here was verified in-game; bug reports welcome.


⚠️ 先看这里:存档兼容性

1.12.1 起:行星放大默认开着,老存档会作废

半径从 200 变成 400,而建筑坐标存的是行星局部坐标、模长约等于半径—— 所以在 1.12.0 或更早版本下存的档,用这一版打开,每一座建筑都会在地下 200 格。 没有回头路。

要继续用老存档:在 profile 里新建 BepInEx\config\ProjectEden\planet.json,写

{ "enabled": false }

重开游戏即可,不用重新编译。开机日志会明确报出当前是开还是关。

要用这个功能:开一局新档,之后不要再改那个倍率——改倍率同样等于重开档。

下面这条对所有版本都成立

装了这个 mod 之后存的档,卸载后就打不开了。 不是「缺物品图标」那种降级,是真的读不出来。

本 mod 带一个 preloader(BepInEx/patchers/ 里那个 DLL),它在游戏程序集装载前把传送带货物的 两个字段加宽了——这是「高层集装 + 满级增产剂同时成立」的前提——货物块的存档格式因此从版本 2 升到 3。

  • 装 mod 之前存的老档仍然能开(会自动按老格式读),反过来不行
  • 除此之外还会往存档写新物品、新配方、新矿脉类型、每格货物的品质点数,以及一个独立的 .moddsv 伴生文件
  • 没有干净的退回原版的路。要退就回备份。

强烈建议开新档,或者动手前把 %USERPROFILE%\Documents\Dyson Sphere Program\Save 整个复制一份。


安装

1. 先装八个前置,都在 Thunderstore 上,装进同一个 profile:

前置 版本 作用
BepInEx 5.4.17 mod 框架
LDBTool 3.0.3 注册新物品 / 配方 / 矿脉
CommonAPI 1.6.7 合成面板的自有分页
DSPModSave 1.2.2 本 mod 自己那块存档数据
InstantDelivery 1.2.0 物流即时送达
ErrorAnalyzer 1.3.3 报错时直接给出可读的堆栈
UXAssist 1.5.8 一批操作体验改进
CloseError 1.0.0 关掉挡住画面的报错弹窗

前四个缺任意一个,游戏启动即报错——它们是真正的代码依赖。 后四个不是本 mod 跑起来所必需的,列进依赖是为了让所有人的环境和这边一致: 这个 mod 的每一次验证都是在装齐这八个的 profile 里做的, 日志、行为、兼容性的结论全部来自那个组合。

2. 导入本体:r2modman 左侧 Settings → Import local mod → 选发布包的 zip, 然后从 r2modman 点 Start modded 启动(直接开 Steam 不会加载 mod)。

手动安装的话,包里的 plugins/ 和 patchers/ 要分别落到 profile 的两个目录下:

plugins/ProjectEden.dll          →  BepInEx/plugins/ProjectEden/ProjectEden.dll
plugins/Newtonsoft.Json.dll      →  BepInEx/plugins/ProjectEden/Newtonsoft.Json.dll
patchers/ProjectEden.Preloader.dll  →  BepInEx/patchers/ProjectEden/ProjectEden.Preloader.dll

⚠️ patchers/ 里那个不能漏,也不能放进 plugins/。 放错位置不会报错: BepInEx 不去 plugins/ 里找 patcher,插件启动后发现字段没被加宽,就按降级模式继续跑 (集装退回 255、超过 63 层的增产剂被夹断),日志里写一行就过去了。

3. 确认装对了:BepInEx/LogOutput.log 里应该有这两行——

Project Eden v1.13.8 已加载
Cargo.inc / Cargo.stack 已加宽为 Int16(结构体 36 字节):…

第二行是判断 preloader 有没有生效的唯一依据。完整说明见 部署.md。


改了什么

缺电会减速 巨型建筑的产能现在随供电率线性下降(50% 供电 = 一半产量),和原版 1 倍机器同一个口径。在这之前 10000 倍速对缺电几乎免疫——供电 11% 和 100% 产量完全一样,掉到 10% 以下才突然整台停摆
十七座巨型建筑 建造栏新增一页:天工装配厂、冶铸熔炉、燔石化工厂、锤锻精工厂、观微对撞机、生物温室、熔岩冷却厂、催化反应器、综合化学厂、氧化还原燃烧厂、同位提纯厂、奇点储能厂、巨型聚变发电站,外加反物质那四座(见下)。10000 倍速,12 个传送带口直连,自带行星内物流站;外形是代码生成的,十七座各不相同,碰撞体也按模型的实际高度压过(1.12.12 起)——在那之前它们继承的是被克隆的物流运输站那座细高塔的碰撞体,低空飞过去会撞上一堵看不见的墙,而「无碰撞」作弊开关关的是另一套系统、挡不住它。实际产能原本被原版自己的产出闸按配方类型分三档封顶(冶炼 216,000 次合成/分钟、组装 36,000、其余 72,000),1.12.8 起那道闸对巨型建筑抬到了统一的 216,000/分钟——组装类 ×6、其余 ×3,普通装配机不受影响(分析面板的「参考速率」原本报的是一个引擎不允许的数,1.12.4 已夹回真实值)。产物出不去时它会真的停下来:1.12.17 之前,物流槽位和传送带都满了的巨型建筑虽然一件产物也不出,却仍在以每秒约 29 份的速度白吃原料,而且一个字都不报——原因是原版的产出闸拒绝结算时会先抹掉「在制」标记再判闸,而本 mod 的分频为了压住原版那次调用把计时器写成了负数,正好绕开了原版靠「计时器没扣过」自洽的那层保护。现在闸拒绝过的那一 tick 一个字都不碰,让原版自己照原样再拒一次,把产物取走就自己恢复。其中几座各有一条额外规矩:生物温室整座受日照约束(满日照满产、背光面停工);催化反应器会记住床里那批催化剂还剩多少活性——跑约十分钟就结焦失活,整床吹进待生仓,等再生炉烧完碳送回来;氧化还原燃烧厂同时是一台发电机,见下;反物质四座同样使用全局万倍速,见下
大型采矿机 / 抽水站 / 原油萃取站 速度拉满、矿脉不消耗、机内缓存 1000 万;产量上限已跟轨道采集器看齐(6 亿/秒)——瓶颈原本不在开采速度而在「采矿周期」那个除数,现在按采集器的每 tick 上限倒推,两边共用同一个锚;部分矿石直接产出冶炼后的成品(铜→铜块、硅→高纯硅、钛→钛块、可燃冰→石墨烯、分形硅石→晶格硅、刺笋结晶→碳纳米管、金伯利→金刚石),铁/石/煤刻意保持原矿——它们的下游不止一条。只有大型采矿机换,普通采矿机和小型速采机照常出原矿。小型采矿机只放开机内缓存(50 → 10000,节流刻度同步放大),其余一律不动
小型速采机 开局那一台:无前置、1 铁块 + 1 铜块手搓,恒定 10000 矿/秒、固定 1 MW,自带物流站槽位。它不吃「矿物利用」科技加成、也不看脚下压着几条矿脉——和大型采矿机不是大小之分而是两条曲线:早期够用、后期一点也不会更快
巨型建筑的两个面板 点开巨型建筑会同时开出制造台和物流站两个面板(左选配方、右管 30 个储物格),原版这两个面板本来会互相顶掉。储物格的需求 / 仓储 / 供应现在可以自己改:自动布局只决定哪一格放哪种货,方向只在指派时写一次、之后归你——想走传送带喂料就把原料格改成「仓储」,运输机和虚拟物流都会绕开它
换配方不丢东西也不变质 换配方时机器里的三处存货(储物格、已喂进去的原料、还没排出的产物)全部还给你;机甲装不下的掉在脚下,按堆叠分堆、不会过期。绝不会出现「100 个电路板换个配方就变成 100 个齿轮」
物流 物流站 30 格 × 3 亿(1.12.12 由 1000 万抬上来,只有行星内 / 星际 / 综合物流枢纽这三座;巨型建筑、垃圾箱、气体采集器仍是 1000 万,stations.json 的 stationSlotCapacity 逐站点可调)。3 亿不是随便挑的:真正的天花板不在容量上而在增产点数上——整格的 inc 也是 Int32、随件数成正比长且没有任何夹子,所以安全上限是 21.47 亿 ÷ 每件喷涂点数(原版 Mk.III 每件 4 点 → 5.37 亿,本 mod 最高档每件 6 点 → 3.58 亿);越界会让喷涂等级变成负下标,直接抛异常。3 亿在最严的那条线之下,满档喷涂时还有 16% 余量,喷不喷都安全。三种物流站统一 20 GW 充能(面板可拖到 100 GW)/ 1000 GJ 储能,运载与集装拉满:运输机 1 万 / 运输船 100 万 / 配送机 5000(原版 5),运输机与配送机的基础速度各 ×10(乘的是基础值那一层,科技倍率照常叠加)。综合物流枢纽的星际运输船泊位 64 → 256(1.12.14):原版那 64 是 UInt64 位图推出来的类型上限,本 mod 把八个翻位小方法整体换成旁挂位图解掉了它——不占存档、老档照常开,已建好的站也会自动补齐泊位,不用拆了重建。单格容量是默认值不是锁死值——面板上每格都能自己调,本 mod 只在新建时给默认、老存档抬一次。30 格全都能用传送带喂料(原版只有前 5 格能);传送带白名单是原版的硬限制、只有 6 个位子,想要货的格子更多时按秒轮换,每格都轮得到
物流站停 1500 架运输机 行星内物流运输机的停放上限从原版的 50 架(星际站 100)提到 1500(stations.json 的 stationDrones)——50 架/帧 × 30 帧的采样窗口,正好填满一轮连发。是停放位不是白送的飞机,还得自己塞或开自动补充。老站点读档自动跟上(原版 PlanetTransport.Import 会调 PatchDroneArray,双向对齐);站里停着飞机时不要调小,那个方法不动 idleDroneCount,会越界。每个泊位预分配 84 字节,1500 架 = 每座站 123 KB(这一项随真物流站的数量长,巨型建筑不在此列)
行星内运输机一帧多架 原版一个物流站一帧最多派出一架运输机——它的派机循环本来就会走遍整个供需配对环,只是一有收获就跳出去了。本 mod 把那三处「跳出」改成「还有额度就接着扫」,默认 每站每帧最多 50 架(stations.json 的 localDispatchPerTick,填 1 即回到原版)。原版的派机判断一条都没有重写,「电不够」的两处退出也原样保留;护栏(还有没有闲置运输机、电够不够)是逐字抄原版循环外那两道闸的
星际运输船一次多艘 原版一个星际物流站一次派船评估最多放出一艘船——和上面那条同一个形状:它的配对扫描本来就会走遍整段配对环,只是定下一对就跳出去了。本 mod 把那三处「跳出」改成「还有额度就接着扫」,默认 一次评估最多 256 艘(stations.json 的 remoteShipsPerDispatch,填 1 即回到原版;1.12.14 由 30 抬上来对齐泊位数,按实测今天多半碰不到——抬到 30 那一版「被额度打断」就已经是 0%,这是给机队长大留的头寸)。同一条运输线也能连发,默认不设单线限制(remoteSameRouteMax = 256,等于总额度)——只放开前者实测只有 2.28 倍、额度一次都没用满,因为放完一艘就往下一对走了。原版的派船判断一条都没有重写,「电力不足」那处退出也原样保留;同一条线能不能再来一艘由原版自己的记账收敛(每次派船当场扣两端,扣光了它自己换对)。
另一半在评估频率上,而那一半不用改配置:默认优先级的站点原版一秒才被评估一次,把取货那一端的站点设成「优先」直接 6 倍,两者相乘
资源搜索窗(Ctrl + F) 输入矿石或气体的名字,直接列出哪些星球有、各有多少矿脉和储量,点一行就开星图、切到那个星系、把镜头飞到那颗行星(右上角有 ×,Esc 也能关)。中英文都能搜(「铁」和 iron 都出铁矿石),显示跟着游戏语言走,每种资源的星球列表按矿脉数从多到少排。排序按的是匹配质量不是稀有度(完全相同 > 开头命中 > 中间命中)。数据来自游戏自己的扫描线程,和飞过去看到的逐字一致——不自己摇随机数,因为模拟一旦错开一次抽签不会报错、只会理直气壮地报出错误的星球
垃圾箱 一座只进不出的行星内物流站,把不再需要的产物收进来直接销毁。配置方式和普通物流站一模一样:挑一格选上那种货、设成本地需求,行星内物流运输机就会把全行星的这种货送过来销毁;传送带也照常进货——区别只是进来的东西不会再出去。它不产出任何东西(给产物就等于开了一条「废料 → 资源」的通路,而 10000 倍速下废料是无限的)。销毁量记进生产面板的消耗栏,所以扔掉了什么、扔了多少一目了然。外形和图标都是自绘的:上宽下窄的翻斗加一块掀开的盖,斗口里一道向下的箭头。只在本行星内收货——废料本来就是就地产生的,要在别的星球扔就在那边再放一座
背包每格 10000 所有物品的堆叠上限统一抬到 每格 10000(原版固体 100 / 流体 20),stations.json 的 inventoryStackSize 可调、填 0 回原版。源头只有 ItemProto.StackSize 一个,所以背包、储物箱、物流背包、机甲的弹药与燃料格一起变——做不到只改背包。老存档自动跟上:读档时游戏自己会按物品重写每一格的上限,所以调大调小都即时生效、不丢东西。这和传送带集装(5000 层)、物流站格容量(1000 万)是三套互不相干的东西
行星喷涂中枢 一座 30 格的行星内物流站,第一格放增产剂,这颗星球上新上带的每件货自动带上增产点数,不用再逐条带铺喷涂机。其余 29 格是普通物流站格位。放哪一档增产剂由你自己在面板上设——本 mod 不写那一格,只在容量超限时夹一下(本地需求格会按容量向物流网要货,照抄物流站那个三亿会把全网增产剂吸干)。本 mod 那四档活性增产剂(4/5/5/6 级)直接可用,判据读的是喷涂机自己的白名单(PrefabDesc.incItemId),不是靠猜。用的是原版喷涂机那套数(等级 / 一份喷几次 / 写入 = 层数 × 等级),只换了触发点:挂在货物诞生那一刻(CargoContainer.AddCargo,18 个调用点枚举过,带内的带到带传递不走那里),所以是 O(1)、没有每 tick 遍历传送带这回事。代价不大因为一次喷涂覆盖整个堆——5000 层集装下一份增产剂能覆盖几十万件。和你自己铺的喷涂机共存、只抬不降。注意等级和集装互相挤:6 级最多喷满 5461 层,而现在是 5000 层
矩阵研究站 只改生产侧(造矩阵),科研速度没动;同星球研究站直接互供矩阵,生产配方优先、科研随后,仍遵守出货保留量;与物流站双向直通,不用铺传送带;七种矩阵配方统一 1 秒(这改的是手搓时间——研究站受每帧一周期的引擎上限约束,产能本来就已经顶到每秒 60 个)。机内存量是按引擎上限推出来的、刻意不大:进料 / 产物各 600 个(= 一秒的满速进料 / 5 秒的产量),研究模式每种矩阵 100 个(原版 10)。1.12.17 把这几个数从「一千万 / 25 万」砍到这里,同时修掉了堆叠时科研矩阵全跑到最上层——那不是容量问题,是「每帧搬多少」这个速率被错当成了容量上限,速率追平容量就等于一帧搬空、下面每层永远只剩 2 个
电力 卫星配电站全球覆盖(26.5 → 2000 米,一座管一颗星),连接距离也是 2000——这一条修的是正确性:覆盖不等于连通,DSP 里两个节点同属一张网靠的是连线而不是覆盖圈重叠,所以连接距离留原版时一颗星上的两座配电站会变成两张互不相通的电网,表现为「明明都覆盖了,电却不通」;电力感应塔覆盖 10.5 → 30 米、连接 22.5 → 60 米——这一项是为行星放大配的,4 倍表面积下原版那点覆盖要铺 4 倍数量。两者逐项可调(power.json 的 nodes),已建成的塔在读档时自动重建、用电建筑重新接入。新增 1000 倍风力发电机集群。它和可燃性液体发电厂都能进制造台量产,不再只能手搓(手搓仍然保留)——只有开局那台小型速采机是刻意保持手搓的
十四种新矿脉 钴、铝、石膏、锂、锰、铬、钒、钨、铀、三氧化硫(只在火山灰/灰烬冻土/黑石盐滩,兑水 0.5 秒直接出硫酸——SO₃ + H₂O → H₂SO₄ 就是接触法的最后一步;熔点 16.9 ℃ 又遇水即反应,所以它只能存在于又冷又干的地方,熔岩主题故意排除),以及只在黑洞与中子星旁生成的吸积玻璃与视界核心——素材全部复用铁矿脉运行时改色;另加一种外星矿脉「莫桑石」,只长在母星系之外,而且挖它要消耗钻头。还有一种冰矿脉(1.12.12):只长在极寒星球(冰原冻土 / 极寒冻土),三种采矿机挖出来直接就是水——不做「冰矿石」也不配「冰 → 水」的配方,那条除了多占一个格位什么也不提供。它的图标是自画的 480px 矿簇图,不是铁矿脉改色
C1 化工链 煤 + 水 → 合成气 → 甲醇 → 甲醛 / 乙烯 / 丙烯,另有费托合成产精炼油
综合化学厂 第一台能跑不止一种配方类型的机器:化学、精炼、电化学、氧化还原四类全接,仍是 10000 倍速。原版「一台机器一种类型」是硬的,突破它改了八处闸门;而它要吃 1000 台燔石化工厂,所以那一座是它的前置,不是它的牺牲品。精炼是后补的:石脑油 · 常减压蒸馏 是石脑油和蜡油唯一的来源,却是精炼类,等于把整条有机化学链的入口钉在 1 倍速的原版精炼厂上
有机化学 三条主线都从 C1 链接出去:尿素与乌洛托品(给甲醛和二氧化碳找到去处,乌洛托品还是固体燃料);丙烯腈 → 聚丙烯腈 → 碳纳米管(氮在这条线上全额循环);苯 → 异丙苯 → 苯酚 + 丙酮(异丙苯法,单进双出)。两条不同前置的树脂路线各自通向原版塑料:脲醛要氨(上游是气巨的氮气),酚醛要苯(煤和水就够)
炼油:一桶原油切四段 常减压蒸馏把原油分成石脑油 / 精炼油 / 蜡油 / 钒渣油,四段各有各的下游:蒸汽裂解与催化重整吃石脑油、催化裂化吃蜡油、提钒与加氢脱硫吃渣油。加氢裂化把重的变成轻的,和催化重整构成氢的闭环
氮链 / 钨链 哈伯法制氨 → 奥斯特瓦尔德法制硝酸;白钨矿 → 三氧化钨 → 钨块 → 碳化钨
九种合金 + 四维属性 每种金属多四行属性(硬度/韧性/耐蚀/导电);硬质合金的 WC:Co 配比逐台建筑用滑动条调,落到产量与制造时间上。原版钛合金另给一条 Ti-6Al-4V 真空重熔:钛 + 铝 + 钒,不吃硫酸(真空熔炼本来就不需要酸洗),代价是它比原版便宜,门槛在钒
五阶合金弹药 伤害与产量由喂进去的那两种合金决定,共用一条配方
岩浆与熔岩冷却厂 普通抽水站架到熔岩星上就能抽岩浆;熔岩冷却厂按三个真实的堆晶层位把它结晶回铬/钒/钴矿——同一套地质,正是当初把这三种矿放到熔岩与火山灰星球上的那一套
碳化硅电力电子 莫桑石的下游:籽晶升华长晶圆 → 氮化铝基板 → 功率模块 → 碳化硅能量枢纽,服务同一批锂电池蓄电器,吞吐 5 倍
生物与活性材料 生物温室的三条链(零原料光合育林 → 藻菌共培养 → 提油);菌丝基体把金属长成活性复合材(四档);第七种研究矩阵「生物矩阵」是养出来的不是合成的,每批以菌丝基体×2+菌落×2产出100个,也是宇宙矩阵的第七味原料;原版之上再加两档增产剂,且分「浓缩」与「广延」两种性格
活性透镜 一枚活的引力透镜,进的还是原版射线接收站:它在射线里愈合,在黑暗里老去——满照下寿命是引力透镜的 2.5 倍,晒不到的地方照样十分钟烧完。发电 ×5、临界光子 ×3(两个倍率互相独立,都在 lens.json 里可调)。它在生物温室里长出来,要卡西米尔晶体、活性复合材、以及碳化硅——也就是说要先飞出母星系找到莫桑石。没找到也不要紧,原版那条引力透镜的路完好无损
氧化还原燃烧厂 唯一一台既是组装机又是发电机的建筑:把还原剂和氧化剂压成药柱,再把刚压出来的药柱当场烧掉发电,药柱全程不上传送带——所以它烧得掉金属粉和稠得挂壁的重馏分。面板上两行选料、一行配氧比滑条:氧化剂投少了烧不完、投多了是死重,而往上推能把药柱顶进更高一档。6 种还原剂 × 2 种氧化剂,输出 30 GW
物品品质 同一种金属现在可以更纯,而纯度是一格货的属性,不是另一个物品——DSP 没有逐件元数据可挂,所以它做成了可加的点数,和增产点数同构:合并相加、拆分按件数带走,加权平均自动成立。唯一来源是同位提纯厂(它的配方手搓不了,没有旁路),采出来的矿品质恒为 0。三条配方各是一道真实工艺(电解精炼 / 区域熔炼 / 羰基提纯),收率 80% → 40% → 15%,收率就是成本。三级全部万用:提哪一种金属由每台建筑自己在面板上选,候选清单是从矿脉和原版配方推导出来的,加新矿会自己长。整条链现在是通的:提纯 → 传送带 → 分拣器 → 机器 → 产物 → 箱子,每一段都带着品质走。合成的规则是按件数加权平均——产物的每件分数等于投入的每件分数加权平均,所以掺进普通料就往下拉,而产物永远不会比最好的那种料更好,合成只传递品质、从不创造。喂料四条路(分拣器、Shift 塞料、面板投料框来回)和出货四条路(分拣器取货、拆除退料、面板取出、巨型建筑自己的带子与槽位)都接上了。效果层开了第一刀:用带品质的材料造出来的建筑更省电(顶尖 −30%,按品质线性插值,只在建造那一刻写一次),拆掉时那份品质跟着建筑退回背包。⚠️ 本职轴(制造速度、采矿速度、炮塔伤害……)还没做
可燃液体发电 13 种液体和 1 根固体燃料棒各有工作温度,决定一份燃料里有多少真的变成电——脏的能量密、干净的能量稀——藻油 2.6 MJ / 250 ℃ 到氨 2.6 MJ / 2000 ℃ 之间隔着十二档。(同一桶原油的四个切段则是一条纯温度梯子:热值全部相同,只有允许的工作温度从 500 ℃ 排到 900 ℃——每件含碳量一样,燃烧焓就一样)。原油本身也能直接烧,但它是最差的一档(400 ℃):未脱盐的整桶,钒、硫、盐、水俱全。直接烧 10 桶得 15.8 MJ 电,先蒸馏再各自烧得 21.5 MJ——精炼一遍多 36%,所以它是「能烧但划不来」的粗放燃料,没有废掉炼油线。表里还有一根固体:精炼油燃料棒(270 MJ/根),把 60 桶油凝胶化封进钛壳,填的是原版氢燃料棒 54 MJ 到氘核燃料棒 600 MJ 之间那 11 倍的空档——能量升一级、机甲功率降一级(×2 对氢燃料棒的 ×3),两条轴互不压倒。它严格守恒,所以固定发电永远不如直接烧油,卖的是单件密度和续航
裂变 原版没有铀,这条线从矿脉开始:铀矿脉 → 浓缩铀 → 铀燃料棒 / 薄膜裂变燃料,热值是一条严格守恒的链(矿石 5 MJ ─×6→ 浓缩铀 30 ─×5→ 燃料棒 150),浓缩比 6 就是天然铀 0.7% 富集到 4.2%。两座电厂卖的是同一份能量的两种取法:裂变发电站烧水(21.6 MW,η 0.35——压水堆的真实热效率)和碎片直转堆不要汽轮机(13 MW,η 0.60 = 带电碎片占比 0.80 × 静电收集 0.75)。直转卖的不是「多发电」,是「少浪费」;代价在燃料侧——薄膜每件只有棒的一半,因为燃料必须摊成几微米厚
黑洞矿 吸积熔晶(黑洞 + 中子星)和视界凝核(仅黑洞)。分布差别不是平衡旋钮:前者是吸积盘抛出来的,后者是视界附近的致密物质,只有黑洞才有视界。它们按星体类型投放而不是按星球主题——原版的单极磁石也是这么放的,那件事根本不写在主题表里。插进生成流程时自带随机数,一次都不消耗原版的抽取序列,否则会悄悄换掉一整张矿图。下游除了蓄能柜那条线,1.12.16 起还能在粒子对撞机里做原版的超级磁场环(单极磁石 ×4 + 吸积熔晶 ×2 + 视界凝核 ×1 → ×10):磁单极当场源(不需要电流,所以没有欧姆上限)、凝核扛磁压(B²/2μ₀ 在 1000 T 就是 400 GPa,超过任何已知材料)、熔晶当不导电基体(否则涡流把场耗掉)。它和反物质线抢同一批矿,尤其是最稀的视界凝核——这是个真取舍,不是白送的捷径。装了银河尺度则整条不生效(它换掉了整个矿脉生成),启动时会明说
更大的行星(默认开) 半径 200 → 400,可建造面积 4 倍,每格的物理尺寸不变。开关在 planet.json,1.12.1 起默认开,而且只能在全新存档上用——建筑坐标存的是行星局部坐标、模长约等于半径,所以改这个数等于重开档。能便宜做成是因为原版的建造网格本来就是从半径推出来的(segment = (int)(radius/4+0.1)*4),格位数正比于半径的平方;地形精度和分块跟着一起动,所以山的大小、地基的格子都和原版一模一样,只是"同样大小的地貌更多"。矿脉也跟着面积一起放大(veinScaling,默认开):实测 GenerateVeins 读了六次 radius 却一次都没进矿脉数量,所以放大之后密度会悄悄掉到四分之一——数量 ×面积、种类按种–面积关系 S∝A^0.25(+41%,一个有 6 种矿的主题多出 2 种)、稀有矿概率按泊松 p = 1−(1−p₀)^k(钴 0.25 → 0.68)。三条都是推出来的,不是挑的;只影响还没生成的星球。半径上限 600(3 倍 / 面积 9 倍),但实测过、也推荐的只有 2 倍:真正先撑不住的不是代码,是内存(每颗星 19 MB)和"一颗星球就是一个工作项"的单线程逻辑帧。装了银河尺度则自动失效并在日志里说明
高密度储能 电浆蓄能柜 179.8 GJ(原版满蓄电器的 333 倍)、过载蓄能柜 359.6 GJ,外加第十二座巨型建筑奇点储能厂(额定充放电 36 TW;原版每 tick 最多换一个柜子,两档最多 3600 块/分,电浆柜/过载柜持续功率上限分别为 10.7892/21.5784 TW,还受电网和传送带限制)。它不增加总发电量,能量必须先由电网充入;价值是让跨星系送电可行。整条线一个热值都没有,能量由枢纽从电网抽走,和原版蓄电器完全一样。一座建筑服务两档,窗口下方一行 ◀ 服务:… ▶ 切换,选择由原版自己存档。传送带接哪个口都行,同时工作四条(1.12.5 之前接在第五个口以后的带子会被原版静默丢弃,表现为「柜子送进去了就是不充电」)。满柜故意不是机甲燃料:容量放大 333 倍还兼机甲燃料就是无限续航
反物质产线 视界蒸发炉 → 磁分离塔+对产生室 → 彭宁阱复合室,按 1:1:1:1 配平。四座与其他巨型建筑共用万倍速及全局周期配置,不再有独立分频或黑洞加成。满供电、原料充足、无增产时,一组理论产 10,800,000 个反物质/分钟,所有星系一致。吸气剂使用活性复合材 I 制备,饱和后有损再生
聚变发电 第十七座巨型建筑巨型聚变发电站,200 GW。三步:10 重氢 →(粒子对撞机) 5 氚 + 5 氢,重氢×20 + 氚×20 + 钨块×2 → 氘氚燃料棒,燃料棒进电站。第一步是真实反应的真实分支(D + D → T + p,D-D 的两支之一);氕不另开物品——它就是原版的氢(¹H),再造一个一模一样的东西按本 mod 自己的规则就是死内容。配比也是推的:D-T 等摩尔所以 20:20,钨是包壳(现实里面向等离子体那一层就是钨)。效率 η 0.40 推自「八成能量在 14.1 MeV 中子上、走蒸汽循环」。那条对撞机配方跑起来功耗 ×100(45 MW → 4.5 GW)——这不是装饰,是整条线的能量闸:氚只能从那一条来,聚变的净产出要先还掉这笔电。这座和氧化还原燃烧厂一样又造又烧,自己压棒自己烧、不上传送带
科技级联买断 用元数据买断科技时,会按拓扑序先把没解锁的前置逐级买断再买目标(tech.json,默认开)。省的是点击次数,不是代价——每一级都照常付元数据,原版那条能白送整条链的 UnlockTechUnlimitedWithAllPre 刻意没用。前置同时算 PreTechs 和 PreTechsImplicit(照抄原版 HasPreTechUnlocked 的判据,只走前者会漏掉隐式前置而且不报错)。付不起就停在那一级,已经买到的保留、不回滚——中途停下不浪费任何元数据
改动的原版配方 氢燃料棒的氢从 ×10 改成 ×56——这一条不是平衡改动,是补本 mod 自己捅的洞:原版那条是 90 MJ 进 / 108 MJ 出(无伤大雅),但本 mod 为堵蒸汽重整把氢压到 1.96 MJ 之后,同一条没被碰过的原版配方变成 19.6 进 / 108 出、凭空放大 5.5 倍,而万倍速制造台跑得了它。代价是氢耗涨 5.6 倍
传送带与集装 三档速度提到原版 4 倍;集装层数 5000(靠 preloader 加宽字段实现)
界面 物品选取窗口加搜索框;合成面板、配方选取、建造栏加横向翻页;制造台与制造树支持两个以上产物
作弊开关 六个,默认全开:建造秒完成/无条件建造/无碰撞/穿墙/发电无间距/平地抽水。要关的话在 profile 里新建 BepInEx\config\ProjectEden\cheats.json 覆盖,不用重新编译。开着「无碰撞」时蓝图粘贴还多两件事:重叠的建筑照数粘出来(原版只建一座),压在已有传送带上的带子也不再凭空消失(1.12.13 起——原版要下游那段也压着东西、且自己建得了才肯重建,链一断那段就被静默丢掉,于是堆叠粘贴会「有的带子建得出来、有的建不出来」)
成就与元数据 装了内容 mod,原版必定判你「数据异常」并把成就和元数据一起关掉——ABN_ProtoData 比的是物品/配方/矿脉三张表的签名,我们加了东西签名就不可能对上,和作弊无关,作弊全关照样响。abnormality.json 一个开关默认开着把它屏蔽掉,存档里已有的记录一个字节不动,关掉开关就全都回来。⚠️ 开着它成就会真的进 Steam
英文本地化 新增内容全部配了英文,游戏里切语言即可

内容是按真实化学与物理推的

这不是风味文案,是每个数值的来源。新物品的属性全部推导而来,不是挑出来的:

  • 配方配比来自配平的化学方程式 —— 2 Al₂O₃ + 3 C → 4 Al + 3 CO₂ 就是矿 ×2 + 煤 ×3 → 铝块 ×4 + CO₂ ×3
  • isFluid 看常温常压下的相态;fuelType 看它现实中到底烧不烧
  • 热值按燃烧焓换算,全表锚在原版煤一个点上(2.7 MJ ↔ 393.5 kJ/mol)
  • 用哪台机器看反应类别,不看方便:MTO 是脱水不是氧化还原,所以它留在原版化工厂

哪种还原剂能炼哪种矿,是按 Ellingham 图判的,不是按平衡感: 一氧化碳还原不了氧化铝,乙烯可以——判据是裂解后给不给得出单质碳。

每条配方的化学依据都逐条写在特性文档里(中文 / English)。


大工厂的逻辑帧

堆满巨型建筑的星球会卡逻辑帧,而这是 CPU 的事、和显卡无关。1.10.0 把一颗 1078 台巨型建筑 + 894 台采矿机 + 1975 个物流站的星球从 25.2 ms 降到 6.7 ms, 最高逻辑帧率 40 → 142 ups。三条优化,没有一条改变产能:巨型建筑不再空转结算、 没接输出带的物流站跳过出货扫描、巨型建筑批量结算(覆盖 98.9%,「生产设施」12.3 → 1.6 ms)。

批量结算带一个常设自检:定期把一台建筑的状态复制一份、在副本上跑真正的原版结算, 对不上就自动退回逐次并报错——最坏情况是「没变快」,不是「数不对」。 megabuildings.json 的 batchSettle 可以关掉它。 新增均匀增产批量路径:普通配方支持固定点数原料的增产/加速结算,保留逐步计时和满仓边界,并以完整状态回放校验;不改变生产倍率。

实验性储能柜索引并行:perfprobe.parallelExchangerIndex 内嵌默认false,当前测试profile开启。站点范围至少2048且CPU至少4逻辑核心时,由调用线程和2个常驻辅助线程按原轮转offset分三段读取候选槽,按段顺序合并,再由调用线程填写字典;柜体搬运仍串行,锁内实时复核物品、模式、库存、订单及增产点。全局仅一轮借用辅助线程,争用时立即走原串行;小规模、关闭或本局故障后同样回退。辅助线程不访问Unity对象/API、不查询游戏原型、不写库存;每站仍取库存锁,Wanted集合在整轮等待完成前只读。异常等待所有扫描结束后原样上抛,并禁用本局后续并行,清除后台站点引用。新增 [储能柜索引并行] 报告轮次、候选数、争用回退、含派发/等待/列表合并的墙钟;最终字典填充包含在 [供需索引分段] 中。100组大世界×3轮与冻结串行实现逐字段对照通过,另验三线程参与、精确候选顺序、换槽、订单/品质、争用、门槛、开关及异常回退。实际加速待游戏日志;设false并重启恢复串行,其余探针与调度开关保持原设置。

实验性巨型物流候选索引:perfprobe.indexedMegaLogistics 复用按物品、供需方向维护的站点/格位候选,六阶段只查询相关候选,保留原站序、轮转、同站供需和实时库存/增产/品质结算。每轮只检查站点/储物数组身份与巨型分类;复用共享布局版本,已知变更下轮复核,未知Mod直接改槽按60逻辑tick错峰复查(到期后下一次物流轮次发现)。仅变化站点进入提交队列;按物品缓存有序候选,多物品查询用最小堆归并去重,保持原站序与轮转。库存数量变化不会重建布局或候选视图。仍保留逐站身份扫描,尚非完全事件驱动。parallelMegaIndex 在至少2048站位、CPU至少4逻辑核心时,用调用线程加2个常驻辅助线程分段校验及构建变化快照,等待完成后统一提交映射;实际搬运串行。辅助线程只读托管字段,逐站取库存锁,不访问Unity API或游戏原型。全局辅助池忙时串行准备;关闭并行仍保留候选索引,关闭索引恢复原扫描。构建异常等待辅助线程结束后上抛,本局后续回退原扫描。索引随PlanetTransport生命周期回收,拆除/重建/换槽及游标收缩会清理旧映射。两个开关内嵌默认false,当前测试profile开启并保留探针;修改配置后重启生效。[巨型物流候选索引] 报告轮次、并行轮次、身份检查/更新站位、实际布局复核、比较/构建格位、有序视图重建、查询/提交耗时、六阶段候选累计及准备耗时(含等待/提交,不含候选查询和搬运);实际帧率收益待游戏日志验证。测试包含2000组小世界×3轮及24组2053站世界×3轮与冻结原算法逐字段对照,另验缓存复用、直接改槽、拆除重建、游标伸缩、候选顺序、争用、关闭及故障回退。

新增 [供需索引分段],为后续并行化提供测量依据:分别包围聚变燃料与储能柜物流的Supply和BuildIndex,在整轮结束时一次提交总耗时、建索引次数/耗时/占比、其余逻辑耗时及异常轮次。全量统计,轮次包含无需补给的早退;其余项包含搬运、设备遍历、配置检查及计时边界,不等于纯搬运。含库存锁等待与补丁耗时,属于已有物流总项的子集,不能相加或当作帧时。由现有探针开关控制,不增加辅助线程,不改变库存或搬运顺序。真实Harmony完成32000轮并发、早退、多次建索引、异常传播/恢复、嵌套和关闭测试;待日志确认建索引占比后再决定分段并行。

新增实验性生产任务均衡 perfprobe.balanceProductionWorkers,内嵌默认false,当前测试profile设true。仅在原版组装机调度至少4线程、任务范围至少4096且入口仍为原版参数时,将批大小从24+线程数改为16、接手剩余任务的尝试上限从2改为8,保留保护范围3。复用游戏线程、原版Redispatch及阶段屏障,不改变生产顺序规则、配方或产量;其他生产类型的调度不变。新增 [生产任务均衡] 记录调度调用、接手尝试/成功、异常及线程调用均值(含调度/等待,不能当作帧时)。实际Harmony参数注入与原版反编译调度器测试通过:18组并发负载、3工厂范围、任务恰好执行一次、实际接手、门槛/关闭及异常清理。测试生产体为调度模拟,游戏收益和兼容性待探针复测;更细批次可能增加调度成本,设false并重启即可恢复原版参数。保留需求并行及全部已开启探针。

生产设施传送带槽位优化:每次更新先用一遍扫描识别已连接的输入/输出槽并清理无方向的残留引用,随后仅按原槽位顺序处理有效连接,仍先输出后输入。没有输出连接时不读取集装科技,没有对应连接时跳过该I/O入口。最多32格使用临时位掩码,更长的旧档/第三方数组保留线性选择;不跨tick缓存连接,因此接带、拆带和反向连接即时生效。实际搬运、品质、增产、堆叠、图标及产物回流代码不变。net472下100000组并发布局与原双循环选择/清理结果对照通过,另核对I/O方法体仅改变遍历入口;游戏收益待传送带槽位探针复测,全部探针保持开启。

生产设施储物格同步优化:非催化反应器若已按配方顺序排列原料/产物、物品互不重复、容量为正且其余格位没有物品标签,则在同一库存锁内实时确认布局并直接按位置搬运,省去重复认领和逐物品查找。不缓存库存、不降低搬运频率;玩家设置的物流方向保留。换配方、残留货物、同物进出、重复物品、容量异常及催化剂布局继续执行原路径。布局与搬运统一在库存锁内,配对表通知在锁外;首次接管日志已报告的类型改为只读查询,避免每tick尝试写入并发字典。net472离线测试以冻结旧实现对照10000组并发世界×12轮,逐字段核验库存、品质、机器缓冲和配对刷新次数;稳定布局微基准约减半,仅代表离线同步方法,实际Unity帧率待探针复测。产能、配方和探针开关不变。

星际运输空转优化:InternalTickRemote 在曲速器补充结束后,若 workShipCount == 0,直接进入原有泊位对账/渲染与优先级锁更新尾部,跳过飞行参数计算和空的在途船循环。保留曲速器库存及增产点扣减、泊位位图维护、优先级倒计时和其他方法补丁;有在途船时执行原路径。采用调用边界校验,结构不匹配则保留原方法。真实Harmony用例覆盖0/1/16/256艘、补充/满曲速器、库存品质、引用参数、尾部异常及回退;另对本机实际游戏程序集完成转译与动态方法编译。保留现有探针和需求并行,实际帧率收益待重启后测量。

新增 [物流站循环细分]:随机抽取约1/64个物流轮次,记录本地运输(含充能和方法补丁)、星际运输(含方法补丁)、气态采集、矿物采集、耗电状态设置的调用次数、累计/平均/最大ns及循环占比,并列出遍历、参数读取、动画、统计及计时边界的剩余耗时。充能属于本地运输,耗电状态设置不等于充能结算。仅报告实际样本,不乘64外推、不与全量分段相加;ns为换算单位,不代表纳秒精度,计时包含探针开销。未抽中轮次仍有标志检查成本;线程私有采样、每轮合并,支持嵌套和异常收尾,游戏调用结构不匹配则关闭本探针。保留需求并行和已开启的探针,暂不改动运输调度或蓝图逻辑。真实Harmony完成8万轮并发分类守恒、嵌套、异常恢复及开关/形状回退测试;重启游戏后采集新日志以确定后续优化方向。

新增实验性运输阶段需求并行:perfprobe.parallelStationNeeds 默认false;本次测试配置单独设为true,探针保持开启。站点池范围达到2048时,以256站为批次,由调用线程和最多3个常驻辅助线程共同处理;全局只允许一个轮次使用辅助池,其他星球立即走原串行路径。全部批次结束后才返回,库存锁、原UpdateNeeds补丁、实体需求挂接均保留;不改变原版入库阶段已有的逐站并行。线程继承本轮时钟/世界上下文;异常等待所有任务结束、原样上抛并禁用本局后续并行,不重跑已处理站点。新增 [需求并行] 报告批次、站数、争用回退、平均墙钟(含调度/等待)和工作线程累计耗时;[需求刷新细分] 的抽样单元在并行时改为至多256站批次,不能与旧整轮样本数直接比较。实际Harmony测试完成20轮×4097站逐项串并行对照及竞争/异常回退;游戏收益待日志验证。要做串行对照,将parallelStationNeeds设false并重启,其他探针开关不变。

物流热路径继续优化:每个 PlanetTransport.GameTick 轮次只读取一次游戏时钟和世界引用,需求相位及布局缓存复用线程上下文,避免每站反复进入含Unity对象检查的属性;异常退出与嵌套调用恢复上下文。巨型建筑、研究站、聚变燃料三条补给共用已配置格位索引,锁内实时复核物品、供需模式和库存,不缓存可取数量;维持原轮转和格位顺序。巨型建筑与研究站在本轮缺口/搬运池/回扣账耗尽后停止继续找站;聚变燃料索引对同种物品(含非燃料)每轮只查询一次原型。保留全部探针,新增 [补给格位遍历],报告候选格位与原全扫格位数(不含布局复查成本,不能当作耗时降幅)。巨型物流与研究站各2000组世界×3轮、聚变1000组世界×3轮对照通过;原型查询规模测试上一版30100次降至101次。稀疏格位索引仍按现有失效/60tick复查规则工作,第三方绕过入口新增槽位可能最多延迟60逻辑tick被发现;游戏性能收益待复测。

需求刷新现在缓存已配置物品的格位:最多32格且配置格位不超过一半的站点,只检查这些格位的实时库存和容量;稠密布局继续线性扫描,更大数组保留原路径。原版设置/清空、巨型建筑配方布局和钻头槽新增会使缓存失效;数组替换自动重建,线程查找表在换档后清空。按站号错峰、至多每60逻辑tick复查布局,兼容第三方绕过入口直接写入(新增格位最多延迟60逻辑tick被发现)。不缓存库存数量、容量或需求结果,保持刷新频率、曲速器及轮换规则。[需求刷新细分] 新增实际扫描格位/布局重建计数,实际扫描数包含复查成本。离线动态对照与真实Harmony设置入口测试通过,实际收益以游戏日志为准。

新增 [需求刷新细分] 探针:由 perfprobe.enabled 控制,按工作线程随机抽取约1/64个星球需求刷新轮次,拆分库存锁获取(含等待)、库存扫描及曲速器准备、白名单轮换/填充及解锁、站点其余(普通站与其他补丁)、遍历及实体需求挂接。日志报告样本轮次、站数、格位数、异常数和各段累计ns/占比;仅样本实测,不乘64外推,不与全量物流分段相加。计时含探针开销,ns为换算单位,不代表纳秒精度。线程私有汇总,每个采样轮次结束统一提交,异常路径也清理状态;未改变刷新频率和需求结果。

物流需求刷新:最多32格的扩容站使用位掩码记录候选格位,减少临时数组读写;更大数组保留原路径。每tick刷新、曲速器补给与白名单轮换规则不变。

30格物流站的传送带需求白名单改为单次扫描并复用线程缓冲,保留满仓判断、曲速器槽和轮换规则;一次性提示打印后跳过共享原子写,减少大量站点并行更新时的竞争。

聚变燃料虚空物流每轮共用供应槽索引,减少缺料电站逐台扫描全部物流站的开销,保留补给间隔、容量和选站顺序。物流探针按实际逻辑 tick 换算,便于低 UPS 时对比优化效果。

组装机与矩阵研究站并行生产改用线程私有统计增量,工作方法返回前统一合并,减少大量建筑对同一星球统计数组的锁竞争;配方和产量不变。perfprobe.json 的 batchProductionStatistics 默认为 true,设为 false 并重启可做对照,实际帧率收益以同存档日志为准。

顺带一条实测出来的事实:游戏的并行调度按星球分,一个工作项就是一整颗星球, 所以单颗星球的逻辑帧加 CPU 核心不会变快——能动的只有「这颗星球上的东西更少」 和「把工厂摊到更多星球」。想自己看:统计面板 → 性能测试。

1.12.9 又把这条线往前推了一大步。 工厂长到一颗星球 9,326 台巨型建筑之后 逻辑帧回到了 213 ms,而里面藏着一个存档里的残值:上面那条批量结算整局一次都没 生效过,每台每 tick 把原版结算真调了 47 次——产量一件不差,只是慢十一倍, 除了帧时间没有任何地方报错。修好之后再加上新的全局分频 (megabuildings.json 的 globalTickDivider,默认 2,吞吐不受影响), 213 ms → 11.5 ms。中招的存档打开就自动恢复,不用重建任何东西。

1.10.1 补上了建造时那一半。原版每放下一座建筑就把整颗星球的物流供需配对立刻重算一遍, 而那个算法是 O(站点数²);本 mod 让每台巨型建筑同时是物流站,于是一颗成熟星球上 一次重算要 81 毫秒,建造时吃掉两成 CPU。改成最多每 2 秒合并算一次之后, 每放一座建筑的开销从 102 毫秒降到 0.63 毫秒。代价写在「已知取舍」里。

1.12.9 又把那「一次」本身解决了。 工厂长到 8,467 个物流站、304 万条配对之后, 合并后的那一次重算本身就要 40~60 毫秒。现在改成增量维护——只重算变更的那几座站点, 1.14 毫秒。换数据结构是没用的:这类「按物品配对」的全量求值有个理论下界 (至少要把每条输入看一遍、每条结果写一遍),而输出就是那 304 万条;唯一的出路是 别每次都重写一遍。正确性靠每 200 次增量插一次全量对账,对不上就只关增量、保留全量版。

1.10.2 换掉了那个算法本身。配对的判据只有「物品相同 + 方向互补」,是一次等值连接, 所以可以按物品建索引——两千多个站点的星球上一次重建从 8900 万次比对降到约 64 万次, 81 毫秒 → 6.7 毫秒。它会定期跑一遍原版算法逐条比对,对不上就退回原版并报错: 最坏情况是「没变快」,不是「配对错了」。

已知取舍

不是 bug,是上面那些改动的必然副作用:

  • 物流供需配对最多晚 2 秒重建:改完一格物品、新放一座站之后,无人机还会按旧配对飞两秒。拆站不在此列——拆除会立刻重建(1.10.6 起),延迟它会留下悬空引用而不是「晚两秒」,那正是 1.10.1~1.10.5 里那个会崩游戏的 bug
  • 综合物流枢纽不会替你往伊卡洛斯的配送清单里加东西,清单空着配送运输机就不动(autoDeliveryList 可改回自动)
  • 采矿机可以叠放,代价是它也能叠进别的建筑里,而且不能再原地重建/替换(叠放的建筑用蓝图复制后会照数粘出来——原版粘贴时只会建其中一座)
  • 普通采矿机也能采原油(放行的两处代码指令特征完全相同,没法只放开一处)
  • 原版化工厂也能做新增的「原油X射线裂解」(配方按类型生效,不按建筑)
  • 巨型建筑的运输机数量、运送量、储能和格子容量仍由 mod 自动拉满,手动改了会被写回去(储物格的需求/仓储/供应不在此列,那个归你)
  • 分拣器摆臂速度没有改,改的是集装层数和传送带速度
  • 星际运输船一次多艘只管「一次评估放几艘」,管不了「多久评估一次」——默认优先级的站点原版一秒才评估一次,那一半要靠把站点设成「优先」,日志里每 60 秒会报一次全星系的优先级分布
  • 行星内运输机一帧多架是拿 CPU 换吞吐:多派的每一架都多走一次配对扫描(最坏情况仍不超过原版——原版那个循环本来就以整个配对环为界)。逻辑帧变差就把 localDispatchPerTick 调小,日志里每 60 秒会报一次实际倍率
  • 掉落过滤与信号选取窗口画不出第 14 列以后的物品(物品选取窗口有搜索框,不受影响)
  • 叠在一处的同种建筑默认只画一台(1.9.4 起)。几百台共位时,半透明层会逐层混合、加法层会逐份累加,画面会白得刺眼,而这不是把材质调暗能解决的——每一份压得再小,乘上台数都会累回来。逻辑一个字不动(采矿、耗电、点击、拆除、碰撞、小地图全照旧),只是显卡少画几份;拆掉看得见的那台会自动顶一台上来。想看见整摞就把 advancedminer.json 的 stackedRenderLimit 调大或留空

兼容性

  • 创世之书(GenesisBook):检测到就自动停用本 mod 的巨型建筑相关功能,避免同一台建筑被两套逻辑重复驱动
  • 银河尺度(GalacticScale):新矿脉通过兼容层工作;另外顺手修了 GS2 一个会让存档读不出来的问题
  • UXAssist:两个功能和本 mod 冲突,其余全部正常 —— 详见下面一节
  • 其余 mod 未系统测试

UXAssist 的两个功能

本 mod 的 preloader 把传送带 API 的 byte 参数加宽成了 Int16(那是 5000 层集装的前提), 而 UXAssist 是按原版签名编译的。实测受影响的只有这两处,其余功能一概正常:

功能 状态 说明
传送带信号购买 用不了 从外部修不了也关不掉
矿脉保护 请关掉 和本 mod 的采矿机改造互斥,而本 mod 已提供同样效果

传送带信号购买:它调的那个签名已经不存在了。而且这个没法从外部绕过 —— Harmony 打任何补丁(哪怕只是加一个前置把它整个停掉)都必须把原方法体重新发射一遍, 而方法体里那条引用解析不出来,写回必然失败。要用它就只能卸掉本 mod 的 preloader, 代价是集装层数从 5000 退回 63。

矿脉保护:它的实现是一个返回 false 的前置,整个跳过原版的采矿逻辑。 而本 mod 的矿石→锭替换、机内缓存上限、钻头消耗、小型采矿机节流全都写在那段被跳过的代码里 —— 一开它,这些会静默失效(不报错,只是不再生效)。

关掉它不损失任何东西:本 mod 自己就让矿脉完全不消耗 —— 大型采矿机 / 抽水站 / 采油站由 forceMiningCostRate 覆盖,小型采矿机由 protectSmallMinerVeins 覆盖。 如果你忘了关,本 mod 会在采矿时检测到并在日志里提醒。

配置

配置是 JSON 嵌入在 DLL 里的,装完的包里看不到单独的文件。两种改法:

  • 不用编译:在 profile 里新建 BepInEx\config\ProjectEden\<同名>.json,它会盖掉内嵌的那份,重开游戏生效
  • 改源码重新编译:内容类配置(矿种、配方、数值)本来就跟着版本走,一般走这条

用了覆盖文件的话,日志里每次都会打一条 WARNING 把路径写出来—— 一份忘了删的覆盖文件会让之后所有对内嵌 JSON 的修改看起来「没生效」。

出问题了

BepInEx/LogOutput.log 里搜 ProjectEden。

本 mod 的每一处改动都会打一行确认;匹配失败会打 ERROR 而不是静默失效, 所以那份日志基本能直接指出是哪一块没生效——反馈问题时请带上它,比截图有用得多。


许可

这个仓库不是单一许可的,代码和美术分开。

版权

Copyright (C) 2026 RobertWangWang and Project Eden contributors
Copyright (C) 2022-2026 Awbugl and ProjectGenesis contributors

本项目基于创世之书(ProjectGenesis)开发,代码部分经其作者授权使用。 按 GPL 的要求,上游的版权声明完整保留;哪些文件属于其衍生作品、 哪些只是借鉴思路,逐文件列在 NOTICE 里,相关文件头也各自写明。

代码:GPL-3.0

ProjectEden/src/、ProjectEden.Preloader/、tools/ 下的全部源码,以及 ProjectEden/data/ 下的 JSON 配置,采用 GNU GPL v3.0。

美术:仅授权用于《戴森球计划》的 mod

ProjectEden/assets/icons/ 下的全部 77 张图标(均由 tools/make_icons.py 生成), 以及运行时程序化生成的建筑几何与贴图(ProjectEden/src/Model/),授权范围是:

可以自由用在任何《戴森球计划》的 mod 里,包括修改与再分发。 不授权用于本游戏之外的任何用途。

⚠️ 这条限制和 GPL-3.0 是有张力的,下游需要知道。 GPL 要求整体可被任何人自由再分发和修改、不附加额外限制; 「仅限某个游戏的 mod」是一条额外限制。两者可以并存——代码归代码、美术归美术—— 但这意味着打包后的整体不是纯 GPL,在 FSF 的口径下属于非自由软件。 引用本项目时请分别标注,不要笼统写成「GPL 项目」。

全部美术均为自绘

assets/icons/ 下的 77 张图标全部由 tools/make_icons.py 生成(矢量源码在仓库里), 建筑的外形与贴图由 ProjectEden/src/Model/ 在运行时程序化生成。

本仓库不含任何第三方美术资源。

十七座巨型建筑的图标刻意做成和它们的 3D 模型同一个轮廓—— 建造栏里认出来的,就是地上那一座。

分子画结构式、芳环画成六边形加内圈、笼形分子和馏分照实物画—— 每一处取舍的理由都写在 tools/make_icons.py 的函数注释里。

关于创世之书

本项目是在《创世之书》(GenesisBook)的基础上做起来的。 这里的大部分非平凡机制都参考了它的实现, 遇到问题时第一件事就是去看它当初怎么解决同一个问题的。

  • 代码部分已获得创世之书作者授权。 在此致谢。
  • 美术资源未获授权,也没有使用——本仓库的图标与模型全部自绘,见上一节。

反过来也一样:创世之书,以及任何其他《戴森球计划》的 mod,都可以自由 fork 本仓库。 代码遵循 GPL-3.0 的条款;自绘美术按上面那条授权,用在 DSP mod 里不需要另行取得许可。

致谢

  • 创世之书 / GenesisBook(作者 Awbugl)—— 本项目的起点。

  • CheatEnabler / UXAssist(作者 Soar Qin,MIT) —— 作弊开关的设计参考了 CheatEnabler;英文本地化的做法参考了 UXAssist.Common.I18N (往 Localization 的字符串表里注册键,并在语言加载后补写)。

    是参考不是照搬,两处实现都走了另一条路,理由写在特性文档里: 「无间距」CheatEnabler 是把判定里的常量全局换掉,而本作版本里那个常量有三处是炮塔间距, 一律替换会把炮塔规则一起废掉,所以本 mod 改成事后擦除建造预览的拒绝条件; 本地化则没有用 CommonAPI 的 RegisterString,因为它对已存在的键照写不误, 会覆盖掉原版的翻译,本 mod 自己加了一道防撞检查。


参与开发

  • 部署.md —— 装给别人用怎么装、发新版怎么打包(含 preloader 的离线校验流程)
  • CLAUDE.md —— 架构说明与踩过的坑。读 IL 胜过猜,这份文档里的每一条机制都是这么来的
dotnet build                                   # 编译并部署插件到 profile
dotnet build ProjectEden.Preloader/ProjectEden.Preloader.csproj -c Release
powershell -ExecutionPolicy Bypass -File tools\verify_preloader.ps1 -Config Release
python tools\pack_release.py                   # 打发布包

preloader 改动后必须跑 verify_preloader.ps1。 它在游戏程序集交给 CLR 之前重写它, 写错的表现是游戏启动失败、报一个不指向本仓库任何代码的 CLR 类型加载错误—— 到那一步,平时那套「读 IL、报匹配数、匹配为 0 就大声失败」的办法一个都用不上。

稳态增产数学结算:普通配方(原版类型1–5)在均匀喷涂、无品质、主进度每次恰好补回一周期且额外进度有界时,使用64位整数计算主/额外产出和计时余量。产物容量充足时一次求解,受限时二分最大安全周期数,避免规划阶段逐周期循环;保留原版先结算后推进顺序。其他状态仍走原有逐周期规划或真实InternalUpdate,不改变配方、产量、逻辑频率或线程数。原运行时完整状态回放自检继续生效,日志增加“数学合并”累计周期。离线验证通过;实际游戏耗时收益待同存档验证。

共享物流索引补全(性能优化v1):研究站取料/出货复用巨型物流候选索引,仅在实际存在缺口或产物时准备,两个方向共用一次准备;按物品筛选站点和供需格位,仍按原顺序轮转并实时读库存。每星球最多缓存8个查询结果,正缺口物品集合不变时复用归并结果,数量变化不失效;布局变更使查询缓存失效。一次至少256站且达到已分配站位25%变化时顺序重建映射;首次、时钟倒退和每600逻辑tick到期后的准备轮次全量复核布局及双向映射,对账不一致时在查询前重建。保留60tick错峰兼容复查和逐站身份扫描。仅开CPU分项探针也会输出候选索引报表,增加查询缓存命中、审计、修复和重建计数。

共享候选索引局部更新:布局变化只增删实际改变的物品供需成员;查询按候选站成员变化精确失效。无关物品变化、同物品移槽、并集成员不变,以及不影响查询分组的巨型分类变化,均保留缓存与排序结果。整表重建仍清空全部查询。巨型建筑有补跑活动时,已有每分钟报表在其他性能探针关闭时输出索引摘要,复用已有计数,不开启全引擎采样。

稠密候选位图合并:查询缓存未命中时,多物品候选累计数量达到位图字数两倍即使用复用的32位位图去重,按站号升序输出;稀疏与单物品查询保留堆路径。只改变候选生成,不缓存库存、不改变供货轮转。每星球位图约为站位数/8字节,随索引生命周期释放。分钟摘要新增查询总数、位图合并和堆合并次数;阈值是初始工程选择,实际收益待实机日志验证。

候选轮转枚举:共享站点枚举器只在初始化时归一化起点,遍历时递增并在末尾回绕,去掉每次Current的取模。索引路径和关闭索引后的全扫路径保持相同站序;无跨tick缓存。空集合、单站、32位字边界、2053站及所有/超范围起点对照通过。日志中的候选累计为集合大小之和,搬运可能提前结束,不能当作实际访问次数。

候选索引连续条目:Entry改为值类型数组,按站号连续保存当前/待提交快照引用,省去每站独立Entry对象及对应间接访问。扫描和提交通过ref修改原条目;稳定扫描不再反复写Pending=null。仅改变辅助数据布局,站点身份检查、60tick复查、600tick审计和实际库存结算保持原样。数组扩容、拆除复用、并行扫描、异常回退及巨型/研究站完整末态对照通过;尚无本改动的实机耗时收益数据。

索引并行动态分批:候选布局扫描从固定三等分改为调用线程加2个辅助线程动态领取512站批次。每批站号互斥,全部线程结束后统一提交,实际搬运仍串行且候选保持原顺序;不增加线程数或改变复查频率。全局辅助池争用仍串行回退,异常等待所有已启动线程结束后传播。新增动态批次数日志。既有随机全状态、尾批次计数、数组扩容、争用和故障回退测试通过;未证明当前存档存在负载不均,调度收益与额外原子领取成本须实机对照。

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.