荒野 DualSense 蓝牙震动

荒野 DualSense 蓝牙震动

在蓝牙连接下,使用游戏本身的振动数据,恢复《怪物猎人:荒野》中DualSense控制器的震动功能。

描述

Wilds 通过其“高级”触觉路径驱动 DualSense,该路径仅在通过 USB 有线连接时,以音频流的形式经由手柄暴露的 USB 端点传输到手柄。在蓝牙模式下该端点不存在,而 Wilds 也没有普通的振动回退方案,因此无线游玩时完全没有振动。本模组会读取 Capcom 已经制作好的马达波形——强度、持续时间、哪个马达、是否淡出——并直接通过蓝牙写入手柄。这不是近似模拟:每一把武器、每一种情况都使用游戏自带的振动数据,由游戏自身的事件触发。本模组只观察游戏,不改变任何行为,也不覆盖任何数值。

安装说明

解压到你的 Monster Hunter Wilds 文件夹中,最终结构如下:

MonsterHunterWilds/
└─ reframework/
   ├─ autorun/
   │  └─ WildsDualSenseBTRumble.lua
   └─ plugins/
      └─ WildsDualSenseBTRumble.dll

需要 REFramework 以及通过蓝牙连接的 DualSense。无需运行任何程序,无需安装运行时——两个文件会在游戏启动时自动加载。

工作原理

分为两部分:lua/WildsDualSenseBTRumble.lua 挂钩 ace.PadVibrationManager<app.cADVibration>.tryADVibration,在游戏自身的 cMotorVibration 预设(持续时间、马达、功率、淡出标志)进入 DualSense 触觉路径之前读取它们,并按自己的时钟回放。plugin/plugin.cpp 在游戏进程内运行,直接将 DualSense 蓝牙输出报告(报告 ID 0x31,CRC32 种子为 0xA2)写入控制器,因为 REFramework 的 lua 沙箱无法访问 HID 设备。Steam Input 会向游戏进程隐藏手柄的 HID 能力查询,因此该插件通过 cfgmgr32 进行枚举,并依据接口路径而非 VID/PID 来识别手柄。设置位于 REFramework 菜单(Insert 键)中的 Wilds DualSense BT Rumble 下:振动强度(默认 50%),以及在高级设置下的对比度/伽马、门限,以及独立的 LOW/HIGH 马达级别。

需求

REFramework(https://github.com/praydog/REFramework)。通过蓝牙连接的 DualSense(PS5)控制器。使用 USB 线连接时,本模组保持休眠,因为游戏的真实触觉在那里可以正常工作,且比普通振动更好。自适应扳机在蓝牙下仍无法工作——那需要同样的 USB 音频端点,无法从这里修复。只会查找 DualSense;其他控制器会被忽略。

致谢

协议细节参考了 Linux hid-playstation 驱动(torvalds/linux,drivers/hid/hid-playstation.c)。插件头文件来自 REFramework(praydog/REFramework)。 GitHub 发布页:https://github.com/Mino7406/WildsDualSenseBTRumble


[한글 설명]

설명

Wilds는 듀얼센스에 "고급 햅틱" 경로로 진동을 보내는데, 이 진동은 패드를 USB로 연결했을 때만 있는 오디오 엔드포인트를 통해서만 전달됩니다. 블루투스에는 그 엔드포인트가 없고 일반 진동으로 대체하는 경로도 없어서, 무선으로 연결하면 진동이 아예 나오지 않습니다. 이 모드는 캡콤이 이미 만들어둔 모터 파형(세기, 지속시간, 어느 모터인지, 페이드아웃 여부)을 그대로 읽어서 블루투스로 직접 패드에 전송합니다. 비슷하게 흉내 낸 게 아니라 게임 자체의 진동 데이터를 게임 자체의 이벤트에 맞춰 그대로 재생하는 것이며, 게임 동작은 전혀 바꾸지 않습니다.

설치 방법

몬스터 헌터 와일즈 폴더에 압축을 풀어 아래 경로가 되도록 넣어주세요:

MonsterHunterWilds/
└─ reframework/
   ├─ autorun/
   │  └─ WildsDualSenseBTRumble.lua
   └─ plugins/
      └─ WildsDualSenseBTRumble.dll

REFramework와 블루투스로 연결된 듀얼센스가 필요합니다. 따로 실행할 것도 설치할 런타임도 없고, 게임 실행 시 자동으로 로드됩니다.

작동 원리

lua 스크립트가 게임의 진동 프리셋을 후킹해서 읽고, 플러그인이 게임 프로세스 안에서 듀얼센스 블루투스 출력 리포트를 직접 작성합니다. Steam Input이 컨트롤러를 숨기는 문제도 우회해서 처리합니다. REFramework 메뉴(Insert 키)에서 세기, 강약 대비(감마), 약한 진동 차단(게이트) 등을 조절할 수 있습니다.

요구 사항

REFramework, 블루투스로 연결된 듀얼센스(PS5) 컨트롤러가 필요합니다. USB로 연결하면 모드는 동작하지 않습니다(게임 자체 햅틱이 더 낫기 때문). 어댑티브 트리거는 블루투스에서 원래 지원되지 않습니다.

크레딧

프로토콜 정보는 리눅스 hid-playstation 드라이버를 참고했고, 플러그인 헤더는 REFramework에서 가져왔습니다. 깃허브 릴리즈: https://github.com/Mino7406/WildsDualSenseBTRumble