混合输入修复

混合输入修复

修复了2.11+版本中的混合输入冻结/崩溃及按钮提示闪烁问题(Steam手柄/Deck、陀螺仪瞄准、触控板+鼠标、模拟键盘)。将UI锁定到您选择的设备上。无需脚本,无需压缩包——一个RED4ext插件即可。

此模组修复的 Bug

自补丁 2.11 起,使用混合操控游玩《赛博朋克 2077》——即同时发送手柄和鼠标/键盘输入的任何方式——会导致:

  • 按键输入提示不断在键盘和手柄样式之间闪烁,
  • 并且在游玩 20 至 60 分钟后,出现硬冻结(画面冻结,音频仍在播放),随后触发看门狗(watchdog)崩溃。你玩得越激烈,崩溃来得越快。

受影响的设置包括:

  • Steam 手柄 / Steam Deck,且触摸板或陀螺仪映射为鼠标
  • DualShock/DualSense(或任何手柄)开启陀螺仪转鼠标功能
  • 一只手握手柄,另一只手握鼠标
  • 模拟键盘(例如 Wooting)将移动键映射为虚拟摇杆
  • 任何类似的 Steam 输入 / JoyShockMapper / reWASD 设置

这是一个游戏本身的 Bug,在 GOG/Steam/Epic 所有商店版本以及 Windows 和 Linux/Steam Deck 上均存在。它已附上完整的复现步骤报告给 CDPR;他们拒绝修复,称其为“不支持的配置”。完整故事、调查过程和其他玩家的报告:Reddit 帖子

模组功能

游戏会不断用最后发送输入事件的设备来覆写其“当前输入设备”状态;使用混合操控时,这意味着每次游戏会话中会发生数千次切换,每次切换都会重新解析所有可见的 UI 提示。闪烁是可见的症状;累积的 UI 变动最终导致游戏冻结(已复现并测量——原版行为在约 25 分钟高强度游玩后冻结;使用此修复后,相同强度可持续运行数小时无问题)。

MixedInputFix 将该状态固定为你实际使用的设备:

  • 手柄模式(默认):当你首次使用手柄时,UI 立即锁定到手柄。在此之前,游戏行为与原版完全一致。适用于手柄为主的设置(Steam 手柄/Deck、陀螺仪瞄准)。
  • 键鼠模式:UI 从启动起就锁定为键盘/鼠标。适用于键鼠为主且使用辅助模拟输入(例如摇杆控制移动或驾驶)的设置。

原始输入层不受影响:鼠标、光标以及所有输入都保持原有功能。只有游戏“认为你在使用哪个设备”的概念被稳定了。

它不仅限于视觉效果。 游戏在许多地方检查“最后使用的设备”:提示图标和布局、弹出布局、CrystalCoat 载具颜色编辑器、手机 HUD、设置中的 DualSense 检测——以及游戏性分支,如蹲伏/闪避处理和搬运尸体交互。在原版混合输入下,所有这些实际上都是随机的(每次检查都读取恰好发送了最后一个事件的设备)。此模组使它们变得确定,并与你选择的模式保持一致——整个游戏都遵循你所思所想的设备范式。

可选:键盘菜单键

固定到手柄的一个副作用是:键盘菜单键停止响应。按住 M 仍可打开地图,但轻按无反应,而 J / P / K / I 键则完全失效。这是因为游戏将这些键切换到了手柄的“按住”逻辑,而只有地图才有此逻辑。

如果这让你困扰,请下载下方可选的 MixedInputMenuKeys 文件——它能让这些键恢复功能,同时不改变手柄的 Start 键行为(轻按 = 菜单,按住 = 地图)。它需要 redscript,并且仅在 UI 固定到手柄时生效,因此随时安装都是安全的。

前置要求

已在游戏版本 2.31 (GOG) 上构建并测试。预计可在相同补丁的 Steam 和 Epic 版本上运行(所有代码地址均通过游戏官方的地址库在运行时解析)。若未来补丁不兼容,插件会在启动时以 RED4ext 错误明确报错,而非静默出错。

安装

将压缩包解压到游戏主目录(使文件位于 游戏目录\red4ext\plugins\MixedInputFix\),或使用你的模组管理器安装。删除该文件夹即可卸载。

配置(可选)

MixedInputFix.ini 位于 DLL 旁边(缺失文件 = 默认设置):

  • enabled(默认 true)- 设为 false 可完全停用插件(关闭开关;游戏将原版运行)。
  • mode(默认 controller)- controllerkbm,见上文。
  • verbose(默认 false)- 为调试记录每个事件的详细日志。

验证是否生效

检查 游戏目录\red4ext\logs\mixedinputfix-*.log:你应该会看到启动横幅(MixedInputFix 1.0.0 active (mode:controller ...)),在首次手柄输入时看到 gamepad detected 行,并在退出时看到 session summary。在游戏中:按键提示将停止闪烁,并保持为你所用设备的样式。

兼容性

  • 纯原生 RED4ext 插件:不涉及 redscript、不涉及归档文件、不涉及 TweakDB 更改、不会影响存档。(只有上面提到的可选 MixedInputMenuKeys 文件是 redscript——插件本身永远不需要它。)
  • 没有已知冲突;可与基于 Codeware/ArchiveXL/TweakXL/CET 的模组共存。
  • 如果未来游戏补丁破坏了它,游戏会在启动时显示明确的 RED4ext 错误——在更新前,可移除该插件或设置 enabled = false。移植过程在源代码仓库中有完整文档记录,因此更新不依赖于任何单一个人。

报告问题

请附上问题会话中的 red4ext\logs\mixedinputfix-*.log 文件。如果在正常游戏过程中看到 [fallback:...] 警告,即使看起来一切正常,也请报告——那意味着游戏补丁更改了模组本应知晓的内容。

AI 声明

此插件及其大部分仓库——代码、逆向工程、工具和文档——均由 Anthropic 的 Claude (Fable 5) 在我指导下 AI 生成,每个构建都由我亲自在游戏内测试。我希望对此坦诚相告。完整的逆向工程笔记以及每个决策背后的证据已发布在源代码仓库中,以便你自行判断这项工作。

源代码

源代码、逆向工程笔记和分析工具:https://github.com/Havner/cp2077-mixed-input-fix(MIT 许可证)。

鸣谢

  • WopsS - RED4ext 和 RED4ext.SDK
  • Anthropic 的 Claude (Fable 5) - 逆向工程和实现
  • Reddit 帖子中所有报告并确认此 Bug 的人