Dyson Sphere Program
Install with App

Details

Latest version
2.2.0
Last Updated
First Uploaded
Downloads
11
Likes
0
Size
550KB
Dependants

Categories

DSPDouDizhu —— 斗地主讨伐黑雾 🃏⚔️🛰️

模组作者:妙妙在路上 · 抖音@妙妙在路上

一个《戴森球计划》BepInEx 娱乐模组:把"清剿黑雾"变成一场斗地主对局。

English: A Dyson Sphere Program BepInEx mod — settle your war against the Dark Fog over a game of Dou Dizhu (Fight the Landlord). Press LeftAlt+P on any infested planet to play a best-of-three campaign: Round 1 win = all Dark Fog BUILDINGS wiped; Round 2 win = all ground UNITS wiped; Round 3 win = all RELAYS wiped — all with ZERO space threat gain. Lose any round = your Icarus is destroyed (buildings spared). Flip Table in any round = enrage all hives & ground bases to 100% threat (run!).


🎮 玩法说明

  1. 前提:战斗模式存档(有黑雾),且已降落到一个有黑雾的星球(或本星系蜂巢有中继站)。
  2. 按 左Alt+P 打开斗地主牌桌(不暂停游戏——黑雾仍会照常行动,打牌时留意别挨打)。
  3. 三局定胜负(每局都是一整局斗地主,模组会自动从第一个未完成的局开始):
    • 🏭 第 1 局:胜利 = 本星球黑雾建筑全清(基地/激光塔/等离子塔/护盾/连接轨道/复制器);失败 = 机甲死亡
    • 🪖 第 2 局:胜利 = 本星球黑雾小兵全灭;失败 = 机甲死亡
    • 🛰️ 第 3 局:胜利 = 本星系中继站全灭;失败 = 机甲死亡
    • 三局胜利全程太空威胁度 +0(威胁度快照守卫);任一局失败 → 机甲摧毁(任务失败),玩家建筑保留
    • 胜利一局后点【进入下一局】继续;顶栏显示当前局数与该局赌注
    • 第 2/3 局胜利后自动巡检清剿:先强制激活休眠/列阵中的小兵再补刀,持续巡检直到确认清零(面板会显示"巡检清剿残留中…")
  4. 标准斗地主规则:叫分定庄(1/2/3分)→ 54 张牌 → 地主拿 3 张底牌 → 先出完者胜。
    • 支持牌型:单张 / 对子 / 三张 / 三带一 / 三带二 / 顺子 / 连对 / 飞机(含带单翅、带对翅)/ 四带二单 / 四带二对 / 炸弹 / 王炸
    • 炸弹与王炸使倍数 ×2;春天 / 反春天再 ×2
  5. 与两名 AI(黑雾A / 黑雾B)对局。你的身份(地主/农民)由叫分决定:
    • 你是地主:你先出完 → 胜;任一农民先出完 → 败
    • 你是农民:你或队友先出完 → 胜;地主先出完 → 败

🃏 掀桌(任意一局都可用的同归于尽按钮)

牌桌顶栏中央有一个橙色【掀 桌】按钮,第 1 / 2 / 3 局的叫分与出牌阶段都能点:

掀桌按钮位置

点击后会弹出确认框 【确定掀桌?后果自负!】:

  • 确认【掀了!】→ 当前星球全部地面黑雾基地 + 全部太空黑雾巢穴的威胁度立刻拉满 100%,并进入集结状态
  • 后果:黑雾会以最高强度连续组织进攻波次(地面强袭 + 蜂巢派兵),打得过就打,打不过赶紧跑路
  • 这是玩家主动触发的同归于尽按钮,不受"威胁度守卫"保护——守卫只在胜利清建筑时保证太空威胁度 +0
  • 担心打不过?点【算了】冷静一下,牌还能接着打

⚖️ 赌注(三局制)

局 赌注对象 胜利奖励(走官方击杀路径:爆炸特效、掉落战利品) 失败惩罚
🏭 第 1 局 本星球黑雾建筑(基地/激光塔/等离子塔/护盾/连接轨道/复制器) 建筑全清 · 小兵保留 机甲死亡
🪖 第 2 局 本星球黑雾小兵 小兵全灭 · 建筑已清 机甲死亡
🛰️ 第 3 局 本星系中继站 中继站全灭 机甲死亡

三局胜利全程 太空威胁度 +0(威胁度快照守卫)。

🔒 太空威胁度保护(核心机制)

模组通过「威胁度快照守卫」保证胜利全灭后:

  • 全体黑雾蜂巢的 EvolveData(太空威胁度 threat / 进化经验 / 等级 / 波次计数)在执行前整结构体快照;
  • 当前星球全部黑雾地面基地的 EvolveData(地面威胁度)同样快照;
  • 全灭执行后立即回写,并在可配置窗口期(默认 25 秒)内每帧回写,压制官方击杀链路(含延迟执行的 ReclaimThreatCarry、ExecuteDeferredEnemyChange 等)可能产生的任何威胁/经验增长;
  • 蜂巢的 relayNeutralizedCounter 一并还原。

结果:黑雾建筑全灭,太空黑雾威胁度 +0,进化等级/经验不涨,不会因此招来更猛烈的全球报复。

⌨️ 快捷键与操作

操作 说明
左Alt+P 打开 / 关闭斗地主窗口(仅限附近有黑雾时:星球上有黑雾,或本星系蜂巢有中继站;否则弹出提示)
顶栏【掀桌】 弹出确认【确定掀桌?后果自负!】,确认后当前星球全部地面黑雾基地 + 全部太空黑雾巢穴威胁度立刻拉满 100% 并进入集结报复状态(警告:它们会疯狂进攻)
点击手牌 选牌 / 取消(可多选,亮起表示将打出)
💡 提示 自动选出一手能压住的最小组合(自由出牌时推荐较小组合)
不出 仅在跟牌时可用
出牌 打出选中的牌(牌型不合法或压不上会有提示)
  • 窗口打开期间不暂停游戏;模组已屏蔽点击穿透(Harmony 补丁强制 VFInput.onGUI/onGUIOperate/inputing,并插入全屏透明 UGUI 遮挡板拦截身后 HUD 点击)——点牌不会误触游戏世界与 HUD,WASD/滚轮/ESC 也不会穿透,关闭窗口即恢复。
  • 失败后会显示机甲解体倒计时(默认 5 秒),可点「立即受死」提前执行;到点自动关闭窗口并触发玩家死亡。

⚙️ 配置(BepInEx 配置文件 BepInEx/config/com.deepseekwork.dspdoudizhu.cfg)

配置项 默认 说明
General.AiThinkSeconds 0.9 AI 每步思考延迟(秒,0.1~3)
General.ThreatGuardSeconds 25 胜利后威胁度守卫持续秒数(5~120)
General.DeathCountdownSeconds 5 失败后死亡倒计时(秒,1~15)

📦 安装

方式 A(r2modman / Thunderstore):在管理器中搜索安装 DSPDouDizhu,或手动导入 dist/DSPDouDizhu-<版本>.zip。

方式 B(手动):

  1. 安装 BepInEx 5.4.x;
  2. 将 DSPDouDizhu.dll 放入 BepInEx/plugins/DouDizhuMod/;
  3. 启动游戏。

🔨 从源码构建

powershell -ExecutionPolicy Bypass -File build.ps1            # 编译 + 打包 dist zip
powershell -ExecutionPolicy Bypass -File build.ps1 -Deploy    # 另外部署到游戏 BepInEx\plugins\DouDizhuMod
  • 离线构建:直接引用本机游戏 DSPGAME_Data/Managed 的程序集与 BepInEx 核心,用 .NET SDK 自带 Roslyn csc 编译(-langversion:7.3),无需联网与 NuGet。
  • 斗地主引擎为纯 C#(无 Unity 依赖),位于 src/Engine/,可用 tests/EngineTest 单独自测:dotnet run --project tests/EngineTest -c Release。

🧩 实现说明

  • 地面黑雾识别:遍历 PlanetFactory.enemyPool(EnemyData.id == 索引 过滤有效项),统计与清除只针对当前星球的建筑类实体(跳过 dynamic/unitId>0 的地面小兵);太空蜂巢与航行中的中继站不受影响(掀桌功能除外,见下)。
  • 清除路径:PlanetFactory.KillEnemyFinally(id, ref CombatStat.empty) —— 与游戏内黑雾建筑被激光打爆完全相同的官方链路(爆炸特效、掉落、警告广播、引用清理、遗迹坑位处理)。清除顺序:非基地建筑 → 基地,规避连锁清理干扰。
  • 激活 + 巡检清剿(第 2/3 局):小兵有"列阵/休眠"状态(编成槽里的单位只有激活后才实体化),中继站也可能被蜂巢延迟派出。胜利后先对所有存活基地调用 ActiveAllUnit(gameTick) 强制激活,再按 0.7s/次持续巡检补刀,连续 3 次确认为 0 才结束,杜绝"休眠漏网"。
  • 掀桌:当前星球全部地面基地 + 全部太空蜂巢 EvolveData.threat/threatshr 直接拉满 maxThreat(100%)并触发 UnderAttack() 集结报复;玩家主动触发,不走威胁度守卫。
  • 无击杀者归因:传入空的 CombatStat,不计入机甲战斗统计,避免刷战斗经验。
  • 玩家死亡:Player.Kill() 官方完整流程(机甲爆炸音频、任务失败通知、重生流程);不修改 PlanetFactory,玩家建筑零影响。
  • 黑雾会重建:全灭只清除当前实体。黑雾势力后续仍可能重新扩张/降落新的基地(这是原版机制);届时可再开一局。

⚠️ 注意事项

  • 本模组为娱乐性质:全灭整颗星球黑雾的掉落物较多,注意垃圾清理系统负载。
  • 未针对 Nebula 多人联机测试;联机时请勿使用(状态为单端修改)。
  • 成就系统:模组操作可能使部分战斗相关成就无法在本次对局中正常解锁。

📜 更新日志

2.2.0

  • 第 2/3 局胜利后新增激活 + 巡检清剿:强制激活休眠/列阵中的黑雾小兵(ActiveAllUnit),并每 0.7s 巡检补刀,连续 3 次确认为 0 才结束,修复"小兵未全灭"的漏网问题;第 3 局(中继站)同样应用巡检。

2.1.0

  • 三局制玩法:第 1 局胜利=本星球黑雾建筑全清;第 2 局胜利=黑雾小兵全灭;第 3 局胜利=本星系中继站全灭;任一局失败=机甲死亡。
  • 自动从未完成的局继续;顶栏显示局数与各局赌注;第 3 局胜利显示"大获全胜"三局战果清单。
  • 开局门禁放宽:地面无黑雾但本星系蜂巢有中继站时也可开局(直接打第 3 局)。

2.0.x

  • 新增掀桌按钮:地面基地 + 太空巢穴威胁度拉满 100%(后果自负);任意一局可用。
  • 点击穿透屏蔽(VFInput Harmony 补丁 + 全屏透明 UGUI 遮挡板)与崩溃修复。
  • 打开面板不再暂停游戏;快捷键改为左Alt+P;手牌点击判定改为单张牌左半边。
  • 模组图标更换为 J♠ Q♥ K♠ 三张牌。

1.x

  • 初版:单局斗地主,胜利=黑雾建筑单位全灭(威胁度守卫保证太空威胁度 +0),失败=玩家死亡;仿欢乐斗地主界面(绿呢桌面/扑克牌绘制/药丸按钮);纯 C# 斗地主引擎与自测。

📜 许可

MIT

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