Skip to content

Repository files navigation

STS2-ShunMod

杀戮尖塔 2 原生模组 Shun's Slay the Spire 2 Mod — Native

Version License Framework


模块说明

模块 文件夹 说明
ShunMod_Core Mods/ShunMod_Core/ 共享基础框架(必需)
ShunMod_Shun Mods/ShunMod_Shun/ 舜角色内容(卡牌/遗物/事件)
ShunMod_Tweaks Mods/ShunMod_Tweaks/ 数值/机制修改
ShunMod_Compat Mods/ShunMod_Compat/ 第三方模组兼容补丁

卡牌

名称 费用 稀有度 类型 效果
超级神化 2→1 稀有·无色 技能 升级战斗中所有卡牌,同时升级牌组中所有可升级卡牌。

遗物

名称 稀有度 效果
🏆 首领奖杯 稀有 击杀 Boss 后最大生命值 +25%。
🌿 丰饶叶 稀有 每个回合开始时,用随机药水填满所有空药水栏位。
💪 无限壶铃 稀有 在休息处可无限次锻炼,每次锻炼后战斗开始时多获得 1 点力量。
♾️ 生生不息 稀有 右键点击触发,消耗任意张手牌,每张生成随机升级卡(全职业)加入手牌且首次免费,回等量能量。

补丁

名称 模块 说明
♾️ 无限升级 Tweaks 卡牌可无限次升级。
🛠️ 硬化外壳修复 Tweaks 修正硬化外壳能力的减伤数值。
🛡️ 格挡保留 Tweaks 格挡永不归零。
💥 显示总伤害 Tweaks 多段卡/X卡在卡牌描述末尾显示总伤害(单段伤害 × 段数)。
⚔️ 锻造拉回 Tweaks 所有锻造行为自动将非手牌的君王之剑拉回手牌。
⚡ 能量保留 Tweaks 回合开始时能量不清零,剩余能量累积(冰激凌逻辑)。
🔓 附魔限制解除 Tweaks 运行时扫描所有附魔子类,自动解除 CanEnchant / CanEnchantCardType 限制,任意卡牌可接受任意附魔。
🖱️ 遗物右键交互 Shun 为 ShunMod 遗物添加右键点击支持(GuiInput 信号)。
✨ 休息处附魔 Shun 休息处增加「附魔」选项,随机选一种附魔施加到牌组中的一张牌上。

兼容性补丁

名称 模块 说明
🔮 影之诗进化不消耗+回合解除 Compat 进化不消耗进化点(TryUseEvolutionPoint 跳过原方法),初始 1 点启动。回合限制一并解除,每回合可多次进化。纯反射,无依赖。
🎨 影之诗皮肤限制解除 Compat 影之诗模组皮肤启用数从 14→无限,Patch SkinPackManager.SetEnabled。纯反射,无依赖。
🖼️ 影之诗背景包限制解除 Compat 影之诗模组背景包启用数从 7→无限,Patch BgPackManager。纯反射,无依赖。
📚 附魔叠加上限解除 Compat 解除 MoreEnchantmentsMod 单卡附魔叠加上限(CanApply 跳过上限检查)。
📚 附魔已满拦截解除 Compat 解除 MoreEnchantmentsMod 附魔界面 UI 层上限检查,上限后仍可继续附魔。
⏳ 凝固时间符文修改 Compat 海克斯模组 SolidTimeRune:打出能力卡时移除牌组中对应卡(取消 pile.Type == 6 限制),战斗开始时触发所有被移除牌效果。

事件

当前无自定义事件。后续添加事件只需继承 EventModel + 标记 [EventPool]


安装

下载 Release 中的 STS2_ShunMod.zip,解压到 Slay the Spire 2 的 Mods/ 目录,得到 4 个模块文件夹:

Mods/
├── ShunMod_Core/          # 必需
├── ShunMod_Shun/          # 舜角色内容
├── ShunMod_Tweaks/        # 数值修改(可选,部分功能依赖 Core)
└── ShunMod_Compat/        # 兼容补丁(可选,无 Shadowverse 模组不生效)

也可以单独下载各模块的独立 zip 按需部署。


项目结构

STS2-ShunMod/
├── STS2_ShunMod.sln                    # 4 项目 Solution
│
├── ShunMod.Core/                       # 共享基础框架
│   ├── ShunMod.Core.csproj             # AssemblyName: ShunMod_Core
│   ├── ShunMod_Core.json               # 独立模组清单
│   ├── ModEntry.cs                     # Harmony.PatchAll(保留入口)
│   └── Core/
│       ├── Base/
│       │   ├── ShunCard.cs             # 卡牌肖像工具(静态泛型 helper)
│       │   └── ShunRelic.cs            # 遗物路径工具(静态泛型 helper)
│       ├── Helpers/
│       │   ├── ShunModHelper.cs        # 资源路径工具
│       │   └── CreatureReflection.cs   # Creature 反射工具(Block/IsPlayer)
│       ├── Registry/
│       │   ├── ContentRegistry.cs      # 扫描 + 注册(回调解耦)
│       │   └── PoolAttribute.cs        # [CardPool]/[RelicPool] 特性
│       └── CompatibilityPatchUtil.cs   # 兼容补丁共享工具(类型查找/单例发现)
│
├── ShunMod.Shun/                       # 舜角色内容
│   ├── ShunMod.Shun.csproj             # AssemblyName: ShunMod_Shun → 引用 Core
│   ├── ShunMod_Shun.json               # 模组清单,依赖 ShunMod_Core
│   ├── ModEntry.cs                     # Harmony.PatchAll + ContentRegistry
│   ├── Cards/
│   │   ├── ShunModStokeModified.cs     # 添柴·改
│   │   └── ShunModSuperApotheosis.cs   # 超级神化
│   ├── Relics/
│   │   ├── ShunModBossTrophy.cs        # 首领奖杯
│   ├── ShunModBountifulFrond.cs    # 丰饶叶
│   ├── ShunModEndlessLife.cs       # 生生不息
│   └── ShunModInfiniteGirya.cs     # 无限壶铃
│   ├── RestSite/
│   │   ├── EnchantRestSiteOption.cs    # 休息处附魔选项
│   │   └── EnchantRestSitePatch.cs     # 注入 Generate 方法
│   └── Events/
│       └── (框架预留)
│
├── ShunMod.Tweaks/                     # 数值/机制修改
│   ├── ShunMod.Tweaks.csproj           # AssemblyName: ShunMod_Tweaks → 引用 Core
│   ├── ShunMod_Tweaks.json             # 模组清单,依赖 ShunMod_Core
│   ├── ModEntry.cs                     # Harmony.PatchAll
│   └── Patches/
│       ├── Combat/
│       │   ├── BlockRetentionPatch.cs      # 格挡保留
│       │   ├── EnergyRetentionPatch.cs     # 能量保留(冰激凌)
│       │   ├── ForgePullBladesToHandPatch.cs  # 锻造拉回君王之剑
│       │   ├── HardenedShellPatch.cs       # 硬化外壳修复
│       │   └── ShowTotalDamage.cs          # 显示总伤害
│       ├── Cards/
│       │   ├── EternalRemovalPatch.cs      # 永恒卡牌移除/变化限制解除
│       │   └── InfiniteUpgrade.cs          # 无限升级
│       └── Enchantments/
│           └── EnchantRestrictionRemover.cs  # 运行时扫描所有附魔子类,自动解除限制
│
├── ShunMod.Compat/                     # 兼容性补丁
│   ├── ShunMod.Compat.csproj           # AssemblyName: ShunMod_Compat → 引用 Core
│   ├── ShunMod_Compat.json             # 模组清单,依赖 ShunMod_Core
│   ├── ModEntry.cs                     # Harmony.PatchAll + CompatibilityPatches
│   └── Patches/Compatibility/
│       ├── CompatibilityPatches.cs         # 统一入口
│       ├── Shadowverse/
│       │   ├── ShadowverseEvolutionPointPatch.cs  # 影之诗进化点解除
│       │   ├── ShadowverseSkinLimitPatch.cs       # 影之诗皮肤限制解除
│       │   └── ShadowverseBgLimitPatch.cs         # 影之诗背景包限制解除
│       ├── MoreEnchantments/
│       │   ├── MoreEnchantStackPatch.cs           # 附魔叠加上限解除
│       │   └── MoreEnchantPayCheckPatch.cs        # 附魔已满拦截解除
│       └── Hextech/
│           └── SolidTimeRunePatch.cs              # 凝固时间符文 pile.Type == 6 限制解除
│
│   └── assets/                         # Godot 资源(图片/本地化)
│       ├── images/                     # 卡牌/遗物/事件美术
│       └── localization/               # 中英双语本地化
├── project.godot                       # Godot 4.5 项目
├── Sts2PathDiscovery.props             # 路径发现配置
└── .github/workflows/                  # CI/CD

开发

添加新卡牌

继承 CardModel,加 [CardPool] 特性即可自动注册:

[CardPool(typeof(ColorlessCardPool))]
public class MyCard : CardModel
{
    public MyCard()
        : base(1, CardType.Attack, CardRarity.Common, TargetType.Enemy)
    {
    }

    public override string PortraitPath => ShunCard.PortraitPath<MyCard>();

    protected override async Task OnPlay(PlayerChoiceContext choiceContext, CardPlay cardPlay)
    {
        // 卡牌效果
    }
}

ShunMod.Shun/ModEntry.cs 中的 ContentRegistry.RegisterAll() 在启动时扫描所有 [CardPool] / [RelicPool] 类并注册到对应池。

卡牌、遗物分别对应 [CardPool][RelicPool] 特性,路径工具类 ShunCard / ShunRelic 自动生成资源路径。

添加新补丁

写入对应模块的 Patches/ 目录即可:

namespace ShunMod.Tweaks.Combat;  // 或 ShunMod.Compat

[HarmonyPatch(typeof(TargetClass), nameof(TargetClass.MethodName))]
public static class MyPatch
{
    static void Postfix(ref int __result) => __result = 42;
}

各模块的 ModEntry.Initialize()_harmony.PatchAll() 自动应用。

添加新兼容补丁(ShunMod.Compat)

CompatibilityPatches.ApplyAll() 中追加调用:

internal static class CompatibilityPatches
{
    public static void ApplyAll(Harmony harmony)
    {
        // ── 在此追加新的兼容补丁 ──
        MyNewPatch.Apply(harmony);
    }
}

构建

环境要求

  • .NET 9.0 SDK
  • 已安装 Slay the Spire 2

本地构建

# 编辑 Sts2PathDiscovery.props,设置 Sts2Path 指向 STS2 安装目录
dotnet build STS2_ShunMod.sln

产物输出到 .godot/mono/temp/bin/Release/,每个模块独立 dll:

  • ShunMod_Core.dll
  • ShunMod_Shun.dll + ShunMod_Shun.pck(PckPacker 自动打包)
  • ShunMod_Tweaks.dll
  • ShunMod_Compat.dll

按需构建单个模块

dotnet build ShunMod.Shun/ShunMod.Shun.csproj -c Release

技术栈

  • 游戏引擎 Godot 4.5 (.NET)
  • 目标框架 .NET 9.0
  • Mod 框架 Harmony(运行时 IL 补丁)
  • 打包 BSchneppe.StS2.PckPacker(仅 Shun 模块)
  • CI/CD GitHub Actions

鸣谢


许可

MIT


作者

yehuoshun 和卷王龙虾,干就完了 🦞

About

我的杀戮尖塔2Mod

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages