ProjectEden
把戴森球计划的后期产线整体拉满:七座万倍速巨型建筑、九种新矿脉与完整化工链(含一种只在外星系、挖它要烧钻头的)、九种合金与四维属性、看天吃饭的生物温室、烧什么决定效率的液体发电厂、超出原版两档的增产剂、碳化硅功率半导体、长在生物温室里的第七种科研矩阵、从熔岩星抽岩浆并把它结晶回矿石、5000 层集装(带 preloader)。每个数值都是推出来的,而且全在 JSON 里可调。
| Date uploaded | a week ago |
| Version | 1.4.0 |
| Download link | EdenGardener-ProjectEden-1.4.0.zip |
| Downloads | 12 |
| Dependency string | EdenGardener-ProjectEden-1.4.0 |
This mod requires the following mods to function
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.3CommonAPI-CommonAPI
A modding library for Dyson Sphere Program. Currently is under development.
Preferred version: 1.6.7CommonAPI-DSPModSave
Library that allows to store mod save data separately from vanilla saves
Preferred version: 1.2.2dsp_lxb007981-InstantDelivery
Instantly delivery items from Remote Supply interstellar stations to Remote Demand interstellar stations./ 将货物从星际供应站瞬间传送到星际需求站
Preferred version: 1.2.0starfi5h-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.3soarqin-UXAssist
Some functions and patches for better user experience / 一些提升用户体验的功能和补丁
Preferred version: 1.5.8README
伊甸园计划 / Project Eden
把《戴森球计划》的后期产线整体拉满的 BepInEx mod。
六座万倍速巨型建筑、满级采矿机与物流站、八种新矿脉与一整条从煤到合金的化工链、 逐台建筑可调的合金配比、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.
⚠️ 先看这里:存档兼容性
装了这个 mod 之后存的档,卸载后就打不开了。 不是「缺物品图标」那种降级,是真的读不出来。
本 mod 带一个 preloader(BepInEx/patchers/ 里那个 DLL),它在游戏程序集装载前把传送带货物的
两个字段加宽了——这是「高层集装 + 满级增产剂同时成立」的前提——货物块的存档格式因此从版本 2 升到 3。
- 装 mod 之前存的老档仍然能开(会自动按老格式读),反过来不行
- 除此之外还会往存档写新物品、新配方、新矿脉类型,以及一个独立的
.moddsv伴生文件 - 没有干净的退回原版的路。要退就回备份。
强烈建议开新档,或者动手前把 %USERPROFILE%\Documents\Dyson Sphere Program\Save 整个复制一份。
安装
1. 先装四个前置,都在 Thunderstore 上,装进同一个 profile:
| 前置 | 版本 |
|---|---|
| BepInEx | 5.4.17 |
| LDBTool | 3.0.3 |
| CommonAPI | 1.6.7 |
| DSPModSave | 1.2.2 |
缺任意一个,游戏启动即报错。
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.1.1 已加载
Cargo.inc / Cargo.stack 已加宽为 Int16(结构体 36 字节):…
第二行是判断 preloader 有没有生效的唯一依据。完整说明见 部署.md。
改了什么
| 六座巨型建筑 | 建造栏新增一页:天工装配厂、冶铸熔炉、燔石化工厂、锤锻精工厂、观微对撞机、生物温室。10000 倍速,12 个传送带口直连,自带行星内物流站;外形是代码生成的,六座各不相同。生物温室还多一条规矩:整座建筑受日照约束,满日照满产、背光面停工 |
| 大型采矿机 / 抽水站 / 原油萃取站 | 速度拉满、矿脉不消耗、机内缓存 1000 万;部分矿石直接产出冶炼后的锭 |
| 物流 | 物流站 30 格 × 1000 万,星际站充能 30 GW,运载与集装拉满 |
| 矩阵研究站 | 只改生产侧(造矩阵),科研速度没动;与物流站双向直通,不用铺传送带 |
| 电力 | 卫星配电站全球覆盖;新增 1000 倍风力发电机集群 |
| 八种新矿脉 | 钴、铝、石膏、锂、锰、铬、钒、钨——素材全部复用铁矿脉运行时改色 |
| C1 化工链 | 煤 + 水 → 合成气 → 甲醇 → 甲醛 / 乙烯,另有费托合成产精炼油 |
| 氮链 / 钨链 | 哈伯法制氨 → 奥斯特瓦尔德法制硝酸;白钨矿 → 三氧化钨 → 钨块 → 碳化钨 |
| 九种合金 + 四维属性 | 每种金属多四行属性(硬度/韧性/耐蚀/导电);硬质合金的 WC:Co 配比逐台建筑用滑动条调,落到产量与制造时间上 |
| 五阶合金弹药 | 伤害与产量由喂进去的那两种合金决定,共用一条配方 |
| 传送带与集装 | 三档速度提到原版 4 倍;集装层数 5000(靠 preloader 加宽字段实现) |
| 界面 | 物品选取窗口加搜索框;合成面板、配方选取、建造栏加横向翻页;制造台与制造树支持两个以上产物 |
| 作弊开关 | 六个,默认全关:建造秒完成/无条件建造/无碰撞/穿墙/发电无间距/平地抽水 |
| 英文本地化 | 新增内容全部配了英文,游戏里切语言即可 |
内容是按真实化学与物理推的
这不是风味文案,是每个数值的来源。新物品的属性全部推导而来,不是挑出来的:
- 配方配比来自配平的化学方程式 ——
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)。
已知取舍
不是 bug,是上面那些改动的必然副作用:
- 采矿机可以叠放,代价是它也能叠进别的建筑里,而且不能再原地重建/替换
- 普通采矿机也能采原油(放行的两处代码指令特征完全相同,没法只放开一处)
- 原版化工厂也能做新增的「原油X射线裂解」(配方按类型生效,不按建筑)
- 传送带直连喂不满巨型建筑 —— 请用它自带的物流站喂料
- 巨型建筑的 30 个储物格看不到也调不了(点开是配方面板,两个面板会互相顶掉)——格位按当前配方自动铺,本来也不用手动配
- 分拣器摆臂速度没有改,改的是集装层数和传送带速度
- 掉落过滤与信号选取窗口画不出第 14 列以后的物品(物品选取窗口有搜索框,不受影响)
兼容性
- 创世之书(GenesisBook):检测到就自动停用本 mod 的巨型建筑相关功能,避免同一台建筑被两套逻辑重复驱动
- 银河尺度(GalacticScale):新矿脉通过兼容层工作;另外顺手修了 GS2 一个会让存档读不出来的问题
- 其余 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/ 下的全部 41 张图标(均由 tools/make_icons.py 生成),
以及运行时程序化生成的建筑几何与贴图(ProjectEden/src/Model/),授权范围是:
可以自由用在任何《戴森球计划》的 mod 里,包括修改与再分发。 不授权用于本游戏之外的任何用途。
⚠️ 这条限制和 GPL-3.0 是有张力的,下游需要知道。 GPL 要求整体可被任何人自由再分发和修改、不附加额外限制; 「仅限某个游戏的 mod」是一条额外限制。两者可以并存——代码归代码、美术归美术—— 但这意味着打包后的整体不是纯 GPL,在 FSF 的口径下属于非自由软件。 引用本项目时请分别标注,不要笼统写成「GPL 项目」。
全部美术均为自绘
assets/icons/ 下的 41 张图标全部由 tools/make_icons.py 生成(矢量源码在仓库里),
建筑的外形与贴图由 ProjectEden/src/Model/ 在运行时程序化生成。
本仓库不含任何第三方美术资源。
六座巨型建筑的图标刻意做成和它们的 3D 模型同一个轮廓—— 建造栏里认出来的,就是地上那一座。
关于创世之书
本项目是在《创世之书》(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 自己加了一道防撞检查。
参与开发
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.10.7
星际物流运输船:一次派船评估可以放出多艘,而且同一条运输线也能连发多艘。
两个配置都在 stations.json:remoteShipsPerDispatch(每次评估的总额度,默认 10)和
remoteSameRouteMax(同一条线最多连发几艘,默认 4)。两个都填 1 就是原版行为。
玩家看到的「每 1 秒只出一艘船」是三件事乘在一起,这次修了前两件:
| 是什么 | 这次 | |
|---|---|---|
| 一次评估放几艘 | DetermineDispatch 定下一对配对就跳出扫描环 |
改了,remoteShipsPerDispatch,上限 64 |
| 同一条线放几艘 | 放完一艘就往下一对走,同一条线一次只出一艘 | 改了,remoteSameRouteMax |
| 多久评估一次 | 默认优先级的站点,原版一秒才被评估一次 | 不动,但日志会报出来,玩家一键可改 |
一次评估放几艘
StationComponent.DetermineDispatch 的扫描循环本来就会走遍整段配对环
(0109 是环头、0D0C 是回跳),只是一旦定下一对就立刻跳出去——
IL 0494 / 0B6C / 0BD6 三处跳到出口 0D11。
本 mod 把那三处改成「先问一句还有没有额度」,额度没用完就跳到原版自己的续扫路径 0CD8。
vanilla 的派船判断一条都没有被重写。 续扫口和出口做的事一模一样(游标 +1 带回绕), 差别只有那句回跳测试,而回跳测试原封不动——所以一次评估仍然最多走一圈环, 连发的最坏情况等于原版的最坏情况。「电力比例 ≤ 0.1」那处跳出(
brfalse)也保持原样。
上限 64 是推出来的,不是挑的:
idleShipIndices是UInt64,按1L << (index & 63)索引,所以一个站点至多只可能有 64 艘闲置船,额度再大也没有船可放。
护栏抄的是原版自己的判据:
idleShipCount > 0和energy > 6000000, 逐字抄环体内 IL03F5/07F9那两道。这里它们不是防越界用的——原版在环体内 以及DispatchSupplyShip/DispatchDemandShip开头各复查一次, 而QueryIdleShip扫的位图和idleShipCount是同步维护的, 所以「有闲置船」和「有空的workShipDatas槽位」是同一件事——它们是为了没船时早点停。
同一条线连发几艘
只改上面那一条,进游戏实测是 2.28 倍,而且每次评估的 10 艘额度一次都没用满 (被额度打断 0 次)。原因很直接:放完一艘就往下一对走,所以一次评估的上限变成了 「这一圈里有几对有活儿」——实测 7 对里只有 2.3 对有。瓶颈已经不在额度上, 而在「同一条线一次只出一艘」。
所以放完一艘之后多了第三个去处:跳回扫描环的环头,但不动游标,把同一对再看一遍。
重试为什么不会出事,是量出来的,不是设计出来的。 每一次派船当场就把两端扣掉——
DispatchSupplyShip把供给端的count直接减掉 (@034A),同时需求端remoteOrder加上;DispatchDemandShip派的是空船去取, 不动count,改为两端remoteOrder一加一减。而remoteDemandCount = max − (count + remoteOrder),所以同一对再看一次读到的是已经扣过的数; 扣光了就走@0351/@0359那两道门,跳到0499 → 04A9 br → 0CD8, 原版自己把游标推到下一对。而且它不会空转:
DispatchSupplyShip/DispatchDemandShip各自只有一条return false, 而且只被开头那句QueryIdleShip(...) < 0跳到(全方法再无第二个来源)—— 「没有闲置船」是它唯一的失败原因,而护栏第二条查的正是这个。
remoteSameRouteMax管的是公平性,不是安全。 安全由上面那套记账保证。 但本 mod 把物流站格容量抬到了 1000 万,所以「需求扣光」在这种存档里基本不会发生, 一条线能把整次评估的额度吃干净,后面的配对这一轮一艘都轮不上。 默认 4 配额度 10,保证一次评估至少照顾到 3 条不同的线。 跨评估的轮转不受影响——额度用尽时走的是出口,而出口照样游标 +1。
多久评估一次(没动,但日志会告诉你)
原版把配对分成六段轮转:DetermineFramingDispatchTime(tick, t),
t=1 → tick%10(6 次/秒)、t=2,3 → tick%30、其余 → tick%60(1 次/秒)。
而 routePriority 的默认值是**「忽略」**,走的正是 tick%60 那一段——
这就是「每 1 秒」里的那个 1 秒。
把取货那一端的站点在面板上设成「优先」,它的配对就挪进 6 次/秒那一段, 不用改任何配置、不用重新编译。两根杠杆是乘起来的:优先 × 本额度。
日志里搜「星际连发派船」:每 60 秒报一次实测倍率、这些船里有几艘是同一条线接着再来的、 几次是撞到每对上限被迫换下一对,以及全星系站点的优先级分布—— 好让「连发没生效」「生效了但同线不连发」「都生效了只是评估频率还是一秒一次」这三种情况分得开。
顺带纠正 CLAUDE.md 里两条没量过的说法
开发文档那一节写着 DetermineDispatch「是没有回跳的直线代码」「一次调用至多放出一艘船」,
并据此给出的杠杆是「用可重入保护的后置把它多调 N−1 次」。对着发行版程序集实测(1250 条 IL):
- 有回跳,两条:
0D0C → 0109(外层配对环)和0B65 → 0873(需求侧内层环); - 方法体里一条
idleShipCount/workShipCount的stfld都没有——放船在Dispatch*Ship里做。
「至多一艘」这个效果是对的,机制不是。而那条错误前提把杠杆也带偏了:
同一节还写着「这一招不能移植到行星内那边」,那个对比本身成立,方向却反了——
最后两边用的是同一招(改分支,不是重复调用)。
同一节的「优先级提速 12 倍」也一并改正为 6 倍(tick%10 一秒触发 6 次,不是 12 次)。
这个文件只写当前版本。往期更新日志在仓库的 ProjectEden/CHANGELOG-history.md:
https://github.com/RobertWangWang/dysonsphereprogram-ProjectEden/blob/main/ProjectEden/CHANGELOG-history.md