Live Transmog - 运行时护甲外观切换 (BETA)

Live Transmog - 运行时护甲外观切换 (BETA)

这个MOD可以让你实时改变已装备盔甲的外观,而不会影响属性。通过游戏内的GUI浏览完整的物品目录,选择你想看到的盔甲,然后应用——无需重启游戏,无需编辑文件

视觉效果

该MOD尚处于测试阶段 - 可能存在边缘情况。请自行承担风险使用。如发现问题请报告!
支持 Kliff、Damiane 和 Oongka。 预设按角色存储,游戏内切换控制角色时,活动预设会自动替换。

[视频:B4x3XkgXhs]


主要特点

  • 内置覆盖层 - 无需外部工具。按下 Home 键可切换覆盖层
  • 游戏内物品浏览器 - 按部位自动分类的可搜索下拉菜单(头盔、胸甲、披风、手套、靴子、项链、灯笼、眼镜、面具、背包)
  • 身体网格预制体选择器 - 对于希望混合搭配单个网格变体(超出物品选择器所提供内容)的用户,可选的每槽位预制体替换功能
  • 预设系统 - 为每个角色保存、加载、重命名并切换多个幻化预设
  • 多角色支持 - 为 Kliff、Damiane 和 Oongka 提供独立的预设列表。每位可见主角的预设会在进入世界时自动应用(并会在游戏中召唤追随者时立即生效),活跃预设会跟随你当前控制的角色
  • 体型过滤器 - 隐藏体型(男性/女性)与当前角色不符的物品,使破碎的网格不会出现在选择器中。为身体交换模组用户提供了每个角色的覆盖选项,可在覆盖层中进行设置
  • NPC及受损变体 - NPC 护甲变体与受损变体通过自动载具交换进行渲染
  • 安全过滤器 - 非玩家装备(马具、宠物铠甲)及错槽位物品默认被过滤
  • 每槽位控制 - 独立启用/禁用每个装备槽位的幻化
  • 可选快捷键 - 默认全部禁用;如果你更喜欢键盘快捷键,可通过 INI 文件绑定任何操作
  • 开源且完全透明

要求

  • 绯红沙漠(Steam 版本)
  • ASI 加载器(推荐使用 Ultimate ASI 加载器
  • ReShade 是 可选的。如果安装了,幻化界面会注册为一个 ReShade 附加标签页。如果没有安装,该模组会提供自己的独立覆盖窗口。

请勿通过模组管理器安装。 如果你想这样操作也可以,但如果出现问题,请不要在此提交错误报告
模组管理器通常会将 .asi 文件放入其子文件夹中。终极 ASI 加载器会递归扫描子目录,因此即使管理器报告该模组已"禁用"或"卸载",.asi 仍会继续加载。常见现象:当你以为模组已移除后,幻化效果依然生效。
手动安装请遵循下方的安装步骤。**要卸载,**直接从 bin64 目录删除 CrimsonDesertLiveTransmog.asiCrimsonDesertLiveTransmog.ini 文件(不要通过管理器操作)。如果管理器已将文件移入 bin64/plugins/bin64/backup/ 等子文件夹,请同时从该子文件夹中删除这些文件。


安装

步骤 1 - 安装 ASI 加载器

你需要一个 ASI 加载器来加载 .asi 模组。如果你已经有一个(例如来自其他模组),请跳到第 2 步。
下载 x64 版本的 Ultimate ASI Loader,然后将以下 DLL 文件之一放入你的 bin64 文件夹中:

  • winmm.dll - 推荐,适用于大多数配置
  • version.dll - 如果 winmm.dll 冲突时的替代方案
  • dinput8.dll - 另一种替代方案

验证方法: 完成步骤 2 后,启动游戏一次。如果在 bin64 文件夹中没有出现 CrimsonDesertLiveTransmog.log 文件,则 ASI 加载器未生效。请尝试将 DLL 重命名为上述其他变体名称。
注意: 如果你使用的是较新版本的 Ultimate ASI Loader 并且日志文件未生成,请尝试使用 v9.1.0win64 (x64) 版本。

步骤 2 - 安装模组

  1. 从文件标签页下载最新版本
  2. 将以下 所有 内容解压到您的 bin64 文件夹中:
    • CrimsonDesertLiveTransmog.asi - 模组二进制文件
    • CrimsonDesertLiveTransmog.ini - 配置文件
    • CrimsonDesertLiveTransmog_display_names.tsv - 选择器中物品的人类可读名称

重要提示:****.tsv 文件必须与 .asi 文件位于 同一文件夹 中——具体是哪个文件夹不重要,只需放在一起即可。该文件将内部物品 ID 映射到叠加层选取器中显示的显示名称。如果没有它,选取器将仅显示原始 ID。

步骤 3 - 启动并游玩

启动游戏。按下 Home 键打开幻化覆盖界面,开始浏览护甲。

文件放置

<Crimson Desert>/bin64/
├── CrimsonDesert.exe                            (游戏可执行文件)
├── winmm.dll                                    (ASI加载器)
├── CrimsonDesertLiveTransmog.asi                (本模组)
├── CrimsonDesertLiveTransmog.ini                (配置文件)
├── CrimsonDesertLiveTransmog_display_names.tsv  (物品显示名称,必需)
├── CrimsonDesertLiveTransmog_presets.json       (自动生成的预设文件)
└── ...

使用 ReShade

如果已安装 [ReShade](https://reshade.me/),该模组会自动注册为 ReShade 附加组件。打开 ReShade 菜单(按 **Home** 键),找到 **幻化** 标签页。无需额外设置。 如果您更喜欢独立的覆盖窗口而不是 ReShade 标签页,请在 INI 文件中将 **ForceStandaloneOverlay = true** 设置为 true。该模组将完全跳过 ReShade 注册并打开自己的窗口。

与 OptiScaler 一同使用

如果你使用 [OptiScaler](https://github.com/cdozdil/OptiScaler) 来生成帧或进行升频:
  1. 删除 bin64 目录下的 winmm.dll(或你放置的其他 ASI 加载器 DLL)。OptiScaler 将代替处理模组加载
  2. 打开 OptiScaler.ini,找到 [Plugins] 部分,并将 LoadAsiPlugins = true 设置为真
  3. bin64 文件夹内创建一个 plugins 文件夹
  4. CrimsonDesertLiveTransmog.asiCrimsonDesertLiveTransmog.ini 移动到 plugins 文件夹中
<猩红沙漠>/bin64/
├── CrimsonDesert.exe
├── OptiScaler.ini                               (LoadAsiPlugins = true)
├── dxgi.dll                                     (OptiScaler)
├── plugins/
│  ├── CrimsonDesertLiveTransmog.asi
│  ├── CrimsonDesertLiveTransmog.ini
│  ├── CrimsonDesertLiveTransmog_display_names.tsv (必需,与 .asi 文件保持在同一文件夹)
│  └── ...                                       (其他 ASI 模组也放在这里)
└── ...

如果遇到问题,请查阅 OptiScaler 文档,了解 DLL 命名及兼容性选项。
注意: 这适用于任何 ASI 模组,而不仅仅是这一个。如果你有其他 .asi 模组,也请将它们移动到 plugins 文件夹中。

同时使用 OptiScaler 和 ReShade(一种设置方法)

OptiScaler 和 ReShade 都默认使用 **dxgi.dll** 插槽,因此其中一个必须使用不同的名称。最简单的解决方法是将 OptiScaler 重命名为另一个受支持的代理名称,并让 ReShade 保留 **dxgi.dll**。这是设置它们的 **一种方法**——详情请参见 OptiScaler 维基的 [与其他模组的兼容性(ReShade, SpecialK)](https://github.com/optiscaler/OptiScaler/wiki/Compatibility-with-other-mods-(Reshade,-SpecialK)) 页面,了解完整细节和其他配置方案。 这假设 OptiScaler 已经按照上一节所述的设置完成(已安装为 **dxgi.dll**,且模组位于 **plugins** 文件夹内)。

第一步:备份:在进行任何更改之前,请将你的 bin64 文件夹压缩成 zip 或 rar 格式。如果出现问题,你可以恢复原状。

  1. bin64 中,将 OptiScaler 的 dxgi.dll 重命名为 d3d12.dll(或 winmm.dll)。这样可以为 ReShade 释放 dxgi.dll 插槽,同时确保下一步的 ReShade 安装程序不会覆盖 OptiScaler。
  2. 安装 ReShade(带完整附加组件支持的版本即可)。将安装程序指向游戏的 CrimsonDesert.exe 并让其安装为 dxgi.dll。如需加载着色器预设 .ini 文件——其他着色器模组通常会附带 .ini 文件供你使用
  3. 打开 OptiScaler.ini,找到 [Plugins] 部分,并将 LoadAsiPlugins = true 设置好。这能让 OptiScaler 从 plugins 文件夹加载此模组的 .asi 文件——没有它,幻化模组将无法加载
  4. 启动游戏。如果成功,你会在启动时看到 ReShade 启动通知(并且当预设激活时,会看到通常的炫酷着色器颜色效果)
<猩红沙漠>/bin64/
├── CrimsonDesert.exe
├── OptiScaler.ini                               (LoadAsiPlugins = true)
├── d3d12.dll                                    (OptiScaler, 由 dxgi.dll 重命名而来)
├── dxgi.dll                                     (ReShade)
├── plugins/
│  ├── CrimsonDesertLiveTransmog.asi
│  ├── CrimsonDesertLiveTransmog.ini
│  ├── CrimsonDesertLiveTransmog_display_names.tsv (必需,与 .asi 文件放在同一文件夹内)
│  └── ...                                       (其他 ASI 模组也放在这里)
└── ...
```</details>

---

## 使用方法

### 游戏内覆盖层

1. 按 **Home** 键打开幻化覆盖层
2. 在 **插槽详情** 中,点击插槽(如头盔)旁的选取按钮以浏览可用的护甲
3. 使用搜索框按名称筛选物品 - 物品会自动归类到正确的栏位
4. 选择一个物品 - 更改将保持 **待定** 状态,直到您点击 **全部应用**
5. 点击 **全部应用** 一次提交所有插槽更改
6. 在“预设”部分使用 **追加** 来创建一个全新的预设,勾选五个护甲槽位(头盔/胸甲/斗篷/手套/靴子)并将其设为(无)——这是一个隐藏护甲的起点,你可以从选择器中填入内容。其他槽位保持未勾选状态,以免意外隐藏工作中的物品(如提灯)
7. 使用 **复制** 功能将当前预设的已保存状态克隆到新槽位中。未保存的选取器编辑将被丢弃,这样你就能从一个干净的起点开始调整,而不影响原始内容
8. 使用 **另存为新预设** 将当前未保存的临时状态(未保存的选择器编辑、染色、颜色覆盖)打包成一个全新的预设。当前预设的已保存行不受影响,这是当你开始修改现有预设并希望将新外观作为独立条目保留时的安全路径。
9. **保存** 将未保存的拾取器编辑内容提交回当前活跃预设中。当您的编辑与存储的预设不一致时,按钮会变为橙色并带有 ***** 标记,标题栏中会出现 **[未保存 -- 点击保存]** 横幅提示
10. 使用 **上一步** / **下一步** 浏览已保存的预设
11. 再次按下 **Home** 键关闭覆盖层

**提示:** 在覆盖层中启用 **即时应用** 功能,即可在悬停时预览物品,无需点击“全部应用”。

### 物品目录

不确定哪个预制件对应哪件护甲?浏览当前游戏版本的完整 [物品目录](https://tkhquang.github.io/CrimsonDesertTools/live-transmog/catalog) —— 一个可搜索、可排序的表格,包含每个物品 ID、槽位类别、变体/安全标志及显示名称。  
**命名规则:** 物品名称带有性别标记—— **_**w_** 代表女性变体,而 **_**m_** 代表男性变体(大多数情况下)。

---

## 配置

编辑 **CrimsonDesertLiveTransmog.ini** 以进行全局设置和可选热键绑定。

[常规] LogLevel = Info 启用 = 真 ; 即使安装了ReShade,也以独立覆盖层方式启动 ForceStandaloneOverlay = false ; 切换覆盖界面GUI。默认键位:Home OverlayToggleHotkey = Home ; 默认情况下禁用所有其他热键 - 如有需要,通过INI文件设置 ToggleHotkey = ApplyHotkey = ClearHotkey = CaptureHotkey = [预设] AppendHotkey = ReplaceHotkey = RemoveHotkey = NextHotkey = PrevHotkey = [实验性] ; --- 颜色覆盖 --- ; 在每槽弹出的窗口中添加一个"颜色覆盖"选项卡,供你选择 ; 幻化装备上每个可见材质区域的定制颜色 ; 物品,包括游戏中染色商通常拒绝的服装。 ; 高度试验性功能——默认关闭。切换更改将生效 ; 影响下一次游戏启动的效果。 ColorOverride = false ; --- 取消头盔声音遮蔽 --- ; 移除主角身上的板甲/重头盔语音闷音效果。NPC ; 声音保留原版的低沉感。默认关闭;设置为true以移除 ; 音量调节。切换更改将在下次启动游戏时生效。 UnmuffleHelmVoice = false


### 热键格式

- 命名键:**T**、**F3**、**Numpad1**、**Mouse4**、**Gamepad_A** 等。
- 修饰键:**Ctrl**、**Shift**、**Alt**(或 LCtrl、RCtrl 等)
- 多重连击:**T,Gamepad_LB+Gamepad_Y**(单独按 T 或按住 LB 再按 Y)
- Empty value = disabled

完整列表请参见 [支持输入名称](https://github.com/tkhquang/DetourModKit?tab=readme-ov-file#supported-input-names) 参考。

---

## 已知限制

- **[实验性] 颜色覆盖**默认关闭。在 **[实验性]** INI 部分中设置 **ColorOverride = true** 以启用按区域颜色选择器,它可为幻化物品上色(包括游戏内染料商拒绝的服装)。变化将在下次游戏启动时生效。可能存在不完善之处。
- **[实验性] 染料支持作为初步的概念验证/最小可行产品发布**,目前请暂时忍受用户体验。请注意,并非所有物品都可染色;对不可染色的槽位应用颜色不会产生视觉变化。
- **头盔:视野覆盖与声音阻隔** - 当 LT 激活时,游戏内头盔视野设置将被覆盖(解决方法:将 LT 选择器中头盔栏设为 **(无)** 以隐藏头盔)。全封闭头盔还会抑制主角的声音;启用实验性 **头盔声音未屏蔽** 选项(**UnmuffleHelmVoice = true**)可移除该效果 - NPC 声音保持原版抑制效果。变更将在下次启动游戏时生效。
- **银狼皮甲**及其他部分铠甲似乎与斗篷等槽位合并了。如果装备后立即消失,请尝试将斗篷槽及其他相关槽位设为无,保存后重新装备该护甲。
- **NPC 护甲变体与损坏变体通过载体渲染** - 选取器中标记为 **(载体)** 的物品使用自动载体交换及角色职业忽略。大多数有效;少数物品可能因内部骨骼绑定导致仍出现空槽位。
- **非人形物品崩溃** - 马具、宠物护甲及马车装备会导致网格绑定器崩溃。"仅安全"筛选器默认隐藏这些物品。
- **错误槽位或非装备物品会导致游戏崩溃** - 将胸甲放入头盔槽位,或选择非护甲物品(狗盔甲、配方、种子等)会导致游戏崩溃。安全过滤器默认会阻止此类操作 - 除非你清楚后果,**否则不要禁用它们**。
- **特效装甲可能出现视觉瑕疵** — 带有粒子或发光效果(例如马尼激光头盔)的装甲可能无法正确渲染这些效果。头发可能会穿过某些头盔。
- 大型游戏更新可能导致模组失效,直至新版本发布。
- 仅在 Steam 版本上测试过。

---

## 故障排除

如果您遇到问题:

- 在 INI 文件中设置 **日志级别 = 调试**
- 请检查游戏目录中的日志文件(**CrimsonDesertLiveTransmog.log**)
- 对于内存模式错误,该模组需要更新以适应当前游戏版本
- 如果更新到新版 Ultimate ASI Loader 后未生成日志文件,请尝试改用 [Ultimate ASI Loader v9.1.0](https://github.com/ThirteenAG/Ultimate-ASI-Loader/releases/tag/v9.1.0) 中的 **win64**(x64)版本

**重要提示:移除或禁用 ASI 模组。** Ultimate ASI 加载器会递归扫描子目录。将 **.asi** 文件移入子文件夹(如 **plugins/backup/**)并 **不能** 阻止其加载。要完全禁用某个 ASI 模组,请将其 **完全移出游戏根目录**,或修改文件扩展名(例如改为 **.asi.bak**)。

---

## 鸣谢与源代码

使用 [DetourModKit](https://github.com/tkhquang/DetourModKit) 构建核心功能(AOB 扫描、钩子管理、日志记录、输入)。

**鸣谢与致谢:**

- [Frans 'Otis_Inf' Bouma](https://github.com/FransBouma) - v1.05.00 AOB 偏移诊断,以及模组修改方向与指导
- [SoraSkySun](https://www.nexusmods.com/profile/SoraSkySun) - [红色沙漠存档编辑器 + 游戏文件解析器 / 物品数据转储](https://github.com/NattKh/CRIMSON-DESERT-SAVE-EDITOR-AND-GAME-MODS)
- [Slinky](https://www.nexusmods.com/profile/IamSlinky) - 染料信息数据导出
- [hzeemr](https://www.nexusmods.com/profile/hz33m) - [crimsonforge](https://github.com/hzeemr/crimsonforge) 游戏文件导出工具
- Pearl Abyss - 红色沙漠

**第三方库:**

- [终极 ASI 加载器](https://github.com/ThirteenAG/Ultimate-ASI-Loader) 由 ThirteenAG 制作 - ASI 加载层
- [SafetyHook](https://github.com/cursey/safetyhook) by cursey - 内联/中函数挂钩
- [Zydis](https://github.com/zyantific/zydis) / [Zycore](https://github.com/zyantific/zycore-c) 由 Florian Bernd 和 Joel Höner 编写 - x86/x64 反汇编(由 SafetyHook 使用)
- [SimpleIni](https://github.com/brofield/simpleini) 由 Brodie Thiesfield 编写 - INI 配置解析器
- [nlohmann/json](https://github.com/nlohmann/json) 作者:Niels Lohmann - 预设 JSON 序列化
- [Dear ImGui](https://github.com/ocornut/imgui) 作者:Omar Cornut - 覆盖层图形用户界面
- [DirectXMath](https://github.com/microsoft/DirectXMath) 由微软提供 - 数学基元
- [ReShade](https://reshade.me/) 作者:crosire——可选附加组件宿主

请参阅随下载文件附带的 **CrimsonDesertLiveTransmog_Acknowledgements.txt**,以获取完整的许可证文本。

该系列的所有《红色沙漠》模组和工具均可在 [CrimsonDesertTools GitHub 仓库](https://github.com/tkhquang/CrimsonDesertTools) 中找到。欢迎贡献或提出改进建议!