You are viewing a potentially older version of this package. View all versions.
EdenGardener-ProjectEden-1.12.6 icon

ProjectEden

把戴森球计划的后期产线整体拉满:十六座巨型建筑、十二种新矿脉(含只在黑洞与中子星旁生成的两种)、裂变发电与黑洞反物质产线、随货物流动的物品品质、从煤和水通到有机化学与炼油的完整化工链、5000 层集装(带 preloader)、默认开启的 2 倍半径行星(面积 4 倍,会让老存档作废)。每个数值都是从真实化学与物理推出来的,全在 JSON 里可调。

Date uploaded 12 hours ago
Version 1.12.6
Download link EdenGardener-ProjectEden-1.12.6.zip
Downloads 22
Dependency string EdenGardener-ProjectEden-1.12.6

This mod requires the following mods to function

xiaoye97-BepInEx-5.4.17 icon
xiaoye97-BepInEx

BepInEx5.4.17 mod plugin framework, Mod框架

Preferred version: 5.4.17
xiaoye97-LDBTool-3.0.3 icon
xiaoye97-LDBTool

Library that allows mods to add and edit Proto data. Also allows you to see Proto data, config ID's of mod Protos and change localized strings

Preferred version: 3.0.3
CommonAPI-CommonAPI-1.6.7 icon
CommonAPI-CommonAPI

A modding library for Dyson Sphere Program. Currently is under development.

Preferred version: 1.6.7
CommonAPI-DSPModSave-1.2.2 icon
CommonAPI-DSPModSave

Library that allows to store mod save data separately from vanilla saves

Preferred version: 1.2.2
dsp_lxb007981-InstantDelivery-1.2.0 icon
dsp_lxb007981-InstantDelivery

Instantly delivery items from Remote Supply interstellar stations to Remote Demand interstellar stations./ 将货物从星际供应站瞬间传送到星际需求站

Preferred version: 1.2.0
starfi5h-ErrorAnalyzer-1.3.3 icon
starfi5h-ErrorAnalyzer

Add buttons to close or copy the error message. Enhance error message to helps identify possible problematic mod, or guide to corrupted machines. 错误分析:增加可以关闭或复制错误讯息的按钮。辅助找出可能报错的mod或建筑

Preferred version: 1.3.3
soarqin-UXAssist-1.5.8 icon
soarqin-UXAssist

Some functions and patches for better user experience / 一些提升用户体验的功能和补丁

Preferred version: 1.5.8
crecheng-CloseError-1.0.0 icon
crecheng-CloseError

error tip can close 允许关闭出错提示

Preferred version: 1.0.0

README

伊甸园计划 / Project Eden

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

十六座巨型建筑、满级采矿机与物流站、十二种新矿脉,一整条从煤和水通到有机化学的化工链 (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 带一个 preloaderBepInEx/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 左侧 SettingsImport 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.12.4 已加载
Cargo.inc / Cargo.stack 已加宽为 Int16(结构体 36 字节):…

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


改了什么

缺电会减速 巨型建筑的产能现在随供电率线性下降(50% 供电 = 一半产量),和原版 1 倍机器同一个口径。在这之前 10000 倍速对缺电几乎免疫——供电 11% 和 100% 产量完全一样,掉到 10% 以下才突然整台停摆
十六座巨型建筑 建造栏新增一页:天工装配厂、冶铸熔炉、燔石化工厂、锤锻精工厂、观微对撞机、生物温室、熔岩冷却厂、催化反应器、综合化学厂、氧化还原燃烧厂、同位提纯厂、奇点储能厂,外加反物质那四座(见下)。10000 倍速,12 个传送带口直连,自带行星内物流站;外形是代码生成的,十六座各不相同。实际产能由原版自己的产出闸封顶,按配方类型分三档——冶炼 216,000 次合成/分钟、组装 36,000、其余 72,000(分析面板的「参考速率」原本报的是一个引擎不允许的数,1.12.4 已夹回真实值)。其中几座各有一条额外规矩:生物温室整座受日照约束(满日照满产、背光面停工);催化反应器会记住床里那批催化剂还剩多少活性——跑约十分钟就结焦失活,整床吹进待生仓,等再生炉烧完碳送回来;氧化还原燃烧厂同时是一台发电机,见下;反物质那四座不是万倍速,见下
大型采矿机 / 抽水站 / 原油萃取站 速度拉满、矿脉不消耗、机内缓存 1000 万;部分矿石直接产出冶炼后的成品(铜→铜块、硅→高纯硅、钛→钛块、可燃冰→石墨烯、分形硅石→晶格硅、刺笋结晶→碳纳米管、金伯利→金刚石),铁/石/煤刻意保持原矿——它们的下游不止一条。只有大型采矿机换,普通采矿机和小型速采机照常出原矿。小型采矿机只放开机内缓存(50 → 10000,节流刻度同步放大),其余一律不动
小型速采机 开局那一台:无前置、1 铁块 + 1 铜块手搓,恒定 10000 矿/秒、固定 1 MW,自带物流站槽位。它不吃「矿物利用」科技加成、也不看脚下压着几条矿脉——和大型采矿机不是大小之分而是两条曲线:早期够用、后期一点也不会更快
巨型建筑的两个面板 点开巨型建筑会同时开出制造台和物流站两个面板(左选配方、右管 30 个储物格),原版这两个面板本来会互相顶掉。储物格的需求 / 仓储 / 供应现在可以自己改:自动布局只决定哪一格放哪种货,方向只在指派时写一次、之后归你——想走传送带喂料就把原料格改成「仓储」,运输机和虚拟物流都会绕开它
换配方不丢东西也不变质 换配方时机器里的三处存货(储物格、已喂进去的原料、还没排出的产物)全部还给你;机甲装不下的掉在脚下,按堆叠分堆、不会过期。绝不会出现「100 个电路板换个配方就变成 100 个齿轮」
物流 物流站 30 格 × 1000 万,三种物流站统一 5 GW 充能 / 150 GJ 储能,运载与集装拉满。单格容量是默认值不是锁死值——面板上每格都能自己调,本 mod 只在新建时给默认、老存档抬一次。30 格全都能用传送带喂料(原版只有前 5 格能);传送带白名单是原版的硬限制、只有 6 个位子,想要货的格子更多时按秒轮换,每格都轮得到
行星内运输机一帧多架 原版一个物流站一帧最多派出一架运输机——它的派机循环本来就会走遍整个供需配对环,只是一有收获就跳出去了。本 mod 把那三处「跳出」改成「还有额度就接着扫」,默认 每站每帧最多 10 架stations.jsonlocalDispatchPerTick,填 1 即回到原版)。原版的派机判断一条都没有重写,「电不够」的两处退出也原样保留;护栏(还有没有闲置运输机、电够不够)是逐字抄原版循环外那两道闸的
星际运输船一次多艘 原版一个星际物流站一次派船评估最多放出一艘船——和上面那条同一个形状:它的配对扫描本来就会走遍整段配对环,只是定下一对就跳出去了。本 mod 把那三处「跳出」改成「还有额度就接着扫」,默认 一次评估最多 10 艘stations.jsonremoteShipsPerDispatch,填 1 即回到原版,上限 64 = 一个站点至多只可能有 64 艘闲置船)。同一条运输线也能连发,默认最多 4 艘(remoteSameRouteMax)——只放开前者实测只有 2.28 倍、额度一次都没用满,因为放完一艘就往下一对走了。原版的派船判断一条都没有重写,「电力不足」那处退出也原样保留;同一条线能不能再来一艘由原版自己的记账收敛(每次派船当场扣两端,扣光了它自己换对)。
另一半在评估频率上,而那一半不用改配置:默认优先级的站点原版一秒才被评估一次,把取货那一端的站点设成「优先」直接 6 倍,两者相乘
背包每格 10000 所有物品的堆叠上限统一抬到 每格 10000(原版固体 100 / 流体 20),stations.jsoninventoryStackSize 可调、填 0 回原版。源头只有 ItemProto.StackSize 一个,所以背包、储物箱、物流背包、机甲的弹药与燃料格一起变——做不到只改背包。老存档自动跟上:读档时游戏自己会按物品重写每一格的上限,所以调大调小都即时生效、不丢东西。这和传送带集装(5000 层)、物流站格容量(1000 万)是三套互不相干的东西
矩阵研究站 只改生产侧(造矩阵),科研速度没动;与物流站双向直通,不用铺传送带;七种矩阵配方统一 1 秒(这改的是手搓时间——研究站受每帧一周期的引擎上限约束,产能本来就已经顶到每秒 60 个)
电力 卫星配电站全球覆盖(26.5 → 2000 米,一座管一颗星);电力感应塔覆盖 10.5 → 30 米、连接 22.5 → 60 米——这一项是为行星放大配的,4 倍表面积下原版那点覆盖要铺 4 倍数量。两者逐项可调(power.jsonnodes),已建成的塔在读档时自动重建、用电建筑重新接入。新增 1000 倍风力发电机集群。它和可燃性液体发电厂都能进制造台量产,不再只能手搓(手搓仍然保留)——只有开局那台小型速采机是刻意保持手搓的
九种新矿脉 钴、铝、石膏、锂、锰、铬、钒、钨——素材全部复用铁矿脉运行时改色;另加一种外星矿脉「莫桑石」,只长在母星系之外,而且挖它要消耗钻头
C1 化工链 煤 + 水 → 合成气 → 甲醇 → 甲醛 / 乙烯 / 丙烯,另有费托合成产精炼油
综合化学厂 第一台能跑不止一种配方类型的机器:化学、精炼、电化学、氧化还原四类全接,仍是 10000 倍速。原版「一台机器一种类型」是硬的,突破它改了八处闸门;而它要吃 1000 台燔石化工厂,所以那一座是它的前置,不是它的牺牲品。精炼是后补的:石脑油 · 常减压蒸馏 是石脑油和蜡油唯一的来源,却是精炼类,等于把整条有机化学链的入口钉在 1 倍速的原版精炼厂上
有机化学 三条主线都从 C1 链接出去:尿素与乌洛托品(给甲醛和二氧化碳找到去处,乌洛托品还是固体燃料);丙烯腈 → 聚丙烯腈 → 碳纳米管(氮在这条线上全额循环);苯 → 异丙苯 → 苯酚 + 丙酮(异丙苯法,单进双出)。两条不同前置的树脂路线各自通向原版塑料:脲醛要氨(上游是气巨的氮气),酚醛要苯(煤和水就够)
炼油:一桶原油切四段 常减压蒸馏把原油分成石脑油 / 精炼油 / 蜡油 / 钒渣油,四段各有各的下游:蒸汽裂解与催化重整吃石脑油、催化裂化吃蜡油、提钒与加氢脱硫吃渣油。加氢裂化把重的变成轻的,和催化重整构成氢的闭环
氮链 / 钨链 哈伯法制氨 → 奥斯特瓦尔德法制硝酸;白钨矿 → 三氧化钨 → 钨块 → 碳化钨
九种合金 + 四维属性 每种金属多四行属性(硬度/韧性/耐蚀/导电);硬质合金的 WC:Co 配比逐台建筑用滑动条调,落到产量与制造时间上
五阶合金弹药 伤害与产量由喂进去的那两种合金决定,共用一条配方
岩浆与熔岩冷却厂 普通抽水站架到熔岩星上就能抽岩浆;熔岩冷却厂按三个真实的堆晶层位把它结晶回铬/钒/钴矿——同一套地质,正是当初把这三种矿放到熔岩与火山灰星球上的那一套
碳化硅电力电子 莫桑石的下游:籽晶升华长晶圆 → 氮化铝基板 → 功率模块 → 碳化硅能量枢纽,服务同一批锂电池蓄电器,吞吐 5 倍
生物与活性材料 生物温室的三条链(零原料光合育林 → 藻菌共培养 → 提油);菌丝基体把金属长成活性复合材(四档);第七种研究矩阵「生物矩阵」是养出来的不是合成的,也是宇宙矩阵的第七味原料;原版之上再加两档增产剂,且分「浓缩」与「广延」两种性格
活性透镜 一枚活的引力透镜,进的还是原版射线接收站:它在射线里愈合,在黑暗里老去——满照下寿命是引力透镜的 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)。直转卖的不是「多发电」,是「少浪费」;代价在燃料侧——薄膜每件只有棒的一半,因为燃料必须摊成几微米厚
黑洞矿 吸积熔晶(黑洞 + 中子星)和视界凝核(仅黑洞)。分布差别不是平衡旋钮:前者是吸积盘抛出来的,后者是视界附近的致密物质,只有黑洞才有视界。它们按星体类型投放而不是按星球主题——原版的单极磁石也是这么放的,那件事根本不写在主题表里。插进生成流程时自带随机数,一次都不消耗原版的抽取序列,否则会悄悄换掉一整张矿图。装了银河尺度则整条不生效(它换掉了整个矿脉生成),启动时会明说
更大的行星(默认开) 半径 200 → 400,可建造面积 4 倍,每格的物理尺寸不变。开关在 planet.json1.12.1 起默认开,而且只能在全新存档上用——建筑坐标存的是行星局部坐标、模长约等于半径,所以改这个数等于重开档。能便宜做成是因为原版的建造网格本来就是从半径推出来的(segment = (int)(radius/4+0.1)*4),格位数正比于半径的平方;地形精度和分块跟着一起动,所以山的大小、地基的格子都和原版一模一样,只是"同样大小的地貌更多"。半径上限 600(3 倍 / 面积 9 倍),但实测过、也推荐的只有 2 倍:真正先撑不住的不是代码,是内存(每颗星 19 MB)和"一颗星球就是一个工作项"的单线程逻辑帧。装了银河尺度则自动失效并在日志里说明
高密度储能 电浆蓄能柜 179.8 GJ(原版满蓄电器的 333 倍)、过载蓄能柜 359.6 GJ,外加第十二座巨型建筑奇点储能厂(60 GW 充放,一块 3 秒)。它不增加总发电量——放 60 GW 之前得有人充 60 GW 进去;价值是让跨星系送电可行(原版一块 540 MJ 太碎)。整条线一个热值都没有,能量由枢纽从电网抽走,和原版蓄电器完全一样。一座建筑服务两档,窗口下方一行 ◀ 服务:… ▶ 切换,选择由原版自己存档。传送带接哪个口都行,同时工作四条(1.12.5 之前接在第五个口以后的带子会被原版静默丢弃,表现为「柜子送进去了就是不充电」)。满柜故意不是机甲燃料:容量放大 333 倍还兼机甲燃料就是无限续航
反物质产线 四座新巨型建筑把黑洞矿变成原版反物质视界蒸发炉(把一整柜电压进针尖大的地方,接住蒸发出来的霍金辐射和硬 γ)→ 磁分离塔(把正反粒子掰成两股,反质子进阱、氢进管线)+ 对产生室(硬 γ 打钨靶,凭空造出正电子)→ 彭宁阱复合室(两者复合成反物质)。这四座不是万倍速:它们每 70 tick 才结算一次,折算下来是 30× / 8.6× / 6.9× / 6.9×,而耗电是 3000 / 480 / 360 / 300 MW——这条线卖的是电,不是速度。反物质容器要吸气剂(活性复合材 I 电解造孔),吸满了加热再生,是条闭环。建在黑洞星系的这四座快一倍:结算周期减半。刻意不挂恒星质量——默认 64 星的一局只有一个黑洞,挂上去玩家不是在做决策,是在抽种子
改动的原版配方 氢燃料棒的氢从 ×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 覆盖,不用重新编译
成就与元数据 装了内容 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.jsonbatchSettle 可以关掉它。

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

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

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.jsonstackedRenderLimit 调大或留空

兼容性

  • 创世之书(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 就大声失败」的办法一个都用不上。

CHANGELOG

更新日志

1.12.8

大型采矿机的产量上限,现在和轨道采集器一样了:600,000,000/秒。

起因是「气态行星采集器有多快,采矿机能不能跟它一致」。查下来两个数差了 3600 倍, 而差距的成因不在开采速度上——开采速度早就顶满了,一点余量都没有

原版的产出是一句整除:件数 = time / period。每 tick 往 time 上累加 速度 × 采矿倍率 × 矿脉数,而 time 是 32 位整数,所以累加量必须留在 20 亿以内:

每 tick 产量 = 累加量 ÷ period ≤ 20 亿 ÷ period

分子这个 mod 早就顶满了(「按满级科技工作」做的就是这件事)。日志里的实测数字把话说死了:

抽水站产量:period=720000,当前约 166,667/秒;该建筑的理论上限约 178,957/秒——受 time 为 Int32 约束
行星 Delta Delphini II号星 气体采集速率:600000000/秒 / 69495750/秒 / 600000000/秒

只剩 7% 余量,所以再怎么调速度都动不了。剩下唯一能动的是分母。

现在 period 从采集器那个数倒推。采集器的速率被夹在「一 tick 填满一个储物格」 (stations.jsoncollectorMaxPerTick,没配就退回 slotCapacity),也就是 1000 万/tick; period = 20 亿 ÷ 1000 万 = 200,采矿机于是也落在 1000 万/tick。 两边不是各填一个凑出来的数,而是共用同一个锚、按构造相等。 抽水站和原油萃取站跟着各自的 boostWaterPumps / boostOilExtractors 一起走。

这个数在两边都是「产量不再是瓶颈」的意思,不是真的每秒搬六亿件。 一 tick 就把机内缓存 和物流站槽位填满,之后卡在网络取货的速度上——采集器今天就是这样。想退回原版刻度, 把 advancedminer.jsonminerPeriod 改成 0

动之前核对过的三件事

  • period 全程只有三处写——ImportSetEmptyNewMinerComponent(后者取自 PrefabDesc.minerPeriod)。没有任何 UI 能写它,所以运行时可以双向对齐, 而不是「配置值只是默认值」那一类。
  • 它进存档,而且 Import 不从 proto 重新推导,所以已建成的采矿机必须在运行时补齐。
  • 另外 13 处读它的全是显示与统计(参考速率、理论产能、星球/恒星面板、采矿机面板、 两个采集器面板),period 在它们的算式里同样位于分母,所以面板会跟着一起变大—— 那是对齐,不是被改坏。

物流:配送运输机运载量 5000,两种飞机的基础速度各 ×10

stations.json 新增三个旋钮。

courierCarries: 5000 —— 配送运输机(从配送器/综合物流枢纽飞出来、把货送到机甲手上那种) 的单次运载量,原版基础值 5。它和 droneCarries两种飞机:后者管的是物流站之间搬货的 行星内物流运输机(配置里一直是 10000),这一项以前根本没人管。 性质相同——存在 GameHistoryData 里、由科技累加、进存档——所以同样双向对齐,调低也生效。 CourierData.itemCount 是 Int32,5000 没有宽度问题(这一条是查过的,不是想当然)。

droneSpeedMultiplier: 10 / courierSpeedMultiplier: 10 —— 两架飞机的基础速度,各自 ×10(运输机 8 → 80,配送机 10 → 100)。

最终速度 = 基础 × 科技倍率。两架飞机结构完全一样,所以代码里是同一个函数—— 同一段推理抄两遍,早晚有一份跟不上另一份。两边的写入点都枚举过:

基础值 谁写 科技写哪个
logisticDroneSpeed 只有 SetForNewGame / Import logisticDroneSpeedScale(@0345)
logisticCourierSpeed 只有 SetForNewGame / Import logisticCourierSpeedScale(@0512)

也就是说科技从不碰基础值,所以改基础值和科技不打架。 代价说清楚:往后每一级速度科技的收益也跟着放大了,因为它加成的基数变大了。

实现上是「原版基础 × 倍率」算绝对值,绝不在现值上乘。 这个字段进存档 (Export @0345 / Import @074F),在现值上乘的话第二局就是 100 倍、第三局 1000 倍, 而且一个字都不报。原版基础值(运输机 8 / 配送机 10)是活取 Configs.freeMode——SetForNewGame 自己就是从那儿取的;写死数字会在游戏更新改了它之后静默失准。

开机汇总行现在把三种运载量和两种实际速度(基础 × 科技)一起打出来, 两条「基础速度改了」的日志各有各的标志位——共用一个的话先跑的会把后跑的那行吃掉, 而「另一架改了没有」恰恰是要看的。

修复:蓝图复制了几座重叠建筑,粘贴就建几座

报障:「建筑可以堆叠,蓝图框选也框得到,但一粘贴就只建出来一座」。

蓝图数据是全的,被关掉的是粘贴预览。 BuildTool_BlueprintPaste.ArrangeOverlapBP 专门找同一位置的多个预览(判据是 (a.pos − b.pos).sqrMagnitude < 0.25f,即 0.5 米), 命中之后成对写两个字段,四处形状一致(@0244 / @025F / @037C / @0397):

V_8.bpgpuiModelId = -1;                                 ← 真正拦住建造的是这个
V_8.condition     = EBuildCondition.BlueprintBPOverlap; // 51

CreatePrebuilds第一道闸就是它,排在 condition 检查之前

0030: if (bp.bpgpuiModelId <= 0) continue;
003B: if (bp.condition != Ok && bp.condition != NotEnoughItem) continue;

所以只清 condition 一点用都没有——已有的「建造条件放行」作弊清的正是 condition, 这就是为什么那个开关开着也照样只建一座。现在两个一起还原。

还原成什么值是快照来的,不是猜的bpgpuiModelId 除了 ArrangeOverlapBP, 只有 .ctor / ResetAll(都写 −1)、Clone(原样复制)和蓝图复制建预览时会写, 所以正确的原值就是「ArrangeOverlapBP 跑之前的那个」——前置拍快照,后置按快照还原。

而第三个字段 coverbp 必须留着不动,这一条是反直觉的。 「成对写的要成对还原」会让人想把三个字段全清掉,那样反而会坏: CheckBuildConditions @256D–2584 拿 coverbp豁免—— if (a.coverbp == b) goto skip; 的意思是「这两个是已知的重叠对,互相不判碰撞」。 清掉它,刚还原的那个会立刻被重新判成重叠打回去。它是通行证,不是标记。

开关跟着「是什么让建筑能堆起来」走:cheats.json 的无碰撞,或 advancedminer.jsonallowMinerOverlap。两个都没开时不动原版——那时候重叠建筑本来就摆不下去, 放行只会粘出一片建不成的预览。

巨型建筑提速:组装类 ×6、其余 ×3

问的是「万倍速的巨型建筑还能不能再快」。量下来结论是:能,但现有两个旋钮一个都不是杠杆。

  • assemblerSpeed 是 1e8,早就比任何配方的 timeSpend 高一两个数量级,一次调用必定填满,再高无效。
  • cyclesPerTick 配的是 60,而十六座里只有冶铸熔炉一座够得着

卡住其余十五座的是原版自己的产出闸,写在 AssemblerComponent.InternalUpdate @0138–0184, 按 recipeType 分三档:冶炼 已产出 + 每次产量 <= 100、组装 已产出 <= 每次产量 × 9(上限 10)、 其余 × 19(上限 20)。现在那两档乘法闸对巨型建筑抬到 cyclesPerTick

配方类型 原来 现在 提速
组装(天工装配厂、锤锻精工厂) 36,000/分钟 216,000/分钟 6 倍
其余全部(化工、精炼、本 mod 新增的全部类型) 72,000/分钟 216,000/分钟 3 倍
冶炼(冶铸熔炉) 216,000/分钟 不变 ——

冶炼那一档故意没动:它的闸是加法形状,上限 100 ÷ 每次产量,单次产量 1 时是 100, 本来就高过 60——它从来不是被闸卡住的,改了没有收益,却要多算一层乘法。

判定用「速度 ≥ 巨型阈值」,和 MegaTick 认巨型建筑是同一个判据,所以存档里每一台普通装配机 一个字节都不受影响——这很重要,因为这个方法服务着全存档的装配机。

匹配点是先数后写的。 全方法里 9 / 19 / 100 一共出现 9 次,按指令形状 (ldelem.i4 ; ldc ; mul ; ble)分类正好是 7 处乘法闸 + 2 处冶炼加法闸 + 0 处其他用途; 转译器断言 7,对不上一处都不改。这份枚举留成了 tools/check_output_gate.ps1, 游戏更新之后离线跑一次就能重新确认,不用进游戏。

代价是背压,要知道它会挪到哪。 这道闸同时是产出缓冲的背压——「闸 20」就是产物攒到 20 倍单次产量停手。抬到 60 意味着缓冲深三倍,而下游是物流站槽位和取货速度。 所以抬开的是「机器算得慢」,接下来先顶上来的会是「货运不走」。

顺带修好一个一直在报大的诊断:本星球普查那行原本拿 cyclesPerTick 直接乘台数当「等效普通装配机」, 完全不知道产出闸的存在,于是报大了 3 到 6 倍。现在逐台按各自配方类型算, 而且读的是转译器用的同一个函数,所以诊断和行为不会各说各话。

修复:本 mod 的建筑在电力统计里没有自己的分项

电力统计的分项不是按建筑现算的,而是查一张表:

ProductionStatistics.RefreshPowerConsumptionDemandsWithFactory @0054–006D
    conDemands[ powerConId2Index[protoId] ] += requiredEnergy

ItemProto.InitPowerFacilityIndices 是这两张表唯一的构建者,调用点也只有一处—— VFPreload/<PreloadThread>d__51::MoveNext @08D8,而 LDBTool 挂的 InvokeOnLoadWorkEnded同一个方法的 @0E11。所以表建好时 LDB 里一个 mod 的 proto 都还没有; LDBTool 的 post-patch 清单里没有它,CommonAPI 没有,profile 里其他插件也都没有(逐个 DLL 搜过)。 这是 InitFluids / InitTurretNeeds / itemStackCount 那一族的第四张表。

它不崩,只是记错账。 两张表都是定长 new int[12000],而本 mod 的物品号在 6500 多、落在界内, 于是读到的是数组默认值 0——而下标 0 是构建者开头 Add(0) 预留的占位行(查不到任何 proto)。 结果是本 mod 每一座耗电/发电建筑的功率全被汇进那一行无名无图标的占位行。

总量一直是对的totalConDemand 在查表之外无条件累加,所以总发电/总耗电和曲线都准, 错的只有「按建筑分项」那张列表。

修法和同族前三张一样:在 PostAddDataAction 上把原版自己的构建器再跑一遍(它整表重建,幂等)。

时机是这件事里唯一需要想的部分,而且不能往后挪。 ProductionStatistics.Init @0084/@0089 用这两张表的长度给 genCapacities / conDemands / genCount / conCount 定容,而它来自 GameStatData.Init / Import——每次开局或读档,排在 PostAddDataAction 之后。 挂在这里,表先变长、统计数组随后按新长度分配;挂到 GameData.Import 那种更晚的位置, 就会拿新下标去写老长度的数组,直接 IndexOutOfRangeException

核对的是末态:凡是打了 isPowerGen / isPowerConsumer 的 proto 都必须映射到非 0 下标 (真实建筑永远从 1 起,0 被占位行占掉了),有一个落在 0 就报名字出来。

一处连带修复

原版往传送带吐货的堆叠层数是 (36000000 / period × 采矿倍率) / 1800 + 1period 也在分母上。 周期调小之后这个值会算到两万多,而 Cargo.stack 加宽后的上限是 8191。 所以它从「只抬高」改成了「抬高并封顶」——不封的话 Int16 回绕成负数, 就是本仓库记过的「自动集装机吃货、面板显示负数」那一类,而且一个字都不报。

顺带:产量上限那行日志原本整局只打一次,于是三种设备(采矿机 / 抽水站 / 原油萃取站) 里只有最先 tick 的那一种留下记录——而「另外两种是多少」恰恰是这次最需要看的数。 改成按建筑种类各报一次。

⚠️ 行星放大仍然默认开着(1.12.1 起),所以在 1.12.0 或更早版本下存的档, 用这一版打开就废了。要继续用老存档,在 profile 里新建 BepInEx\config\ProjectEden\planet.json{ "enabled": false },重开游戏即可。

已知缺口(同上一版)

按半径 200 写死的常量很可能还有。到目前为止修掉的五处都是被具体症状逼出来的, 不是系统排查出来的。最可疑的是 GameCamera.Logic碰到「放大之后某个东西行为怪异」请直接报


这个文件只写当前版本。往期更新日志在仓库的 ProjectEden/CHANGELOG-history.mdhttps://github.com/RobertWangWang/dysonsphereprogram-ProjectEden/blob/main/ProjectEden/CHANGELOG-history.md