Repository navigation
Releases
RenHDrum v0.3.0
RenHDrum 0.3.0
RenHDrum 0.3.0 introduces calibrated Switch 2 HD Rumble presets based on 25 retail in-game trace sessions, a 5.3 ms slot peak-hold for DualSense, default Bluetooth Level 2 with drift protection for Switch Pro Controller 1, emulator integration patches, and a generic C bridge kit for static recompilation projects.
What's New in RenHDrum 0.3.0
- Switch 2 Vibration Calibration (Command 214 Mode 2):
- Empirically mapped across 25 in-game trace sessions in retail Switch 2 titles.
- 100% of measured guest samples use Command 214 Mode 2. Raw game amplitudes frequently fall below
0.046(below the Switch Pro Controller 1 LRA motor response threshold). - Piecewise amplitude translation curves replace uniform gain scaling, calibrating low and mid frequencies to match actual hardware physics.
- Controller-Specific Presets:
- Preset
[3]for Sony DualSense: Calibrated curve with a 5.3 ms slot peak-hold that catches 100% of brief menu ticks and micro-vibrations without altering classic Switch 1 playback. Supported over wired USB (4-channel 48 kHz voice-coil haptics) and Bluetooth (report0x32). - Preset
[4]for Nintendo Switch Pro Controller 1: Calibrated curve with a 25 ms transient boost (1.2×) for frequencies below 150 Hz to punch through the0.04deadzone. Bluetooth defaults to Level 2 (45 ms spacing) for optimal packet stability without input latency. Includes a fix dropping stale calibration offsets (|offset| > 0.5f) that caused upward right-stick drift.
- Preset
- Accurate Vibration & Filter Bypass Warning:
- Standard Switch emulator frontends use a 15 ms rate-limiting filter when
enable_accurate_vibrations = false. In Switch 2 games, this filter silently swallows between 50.0% and 76.3% of rumble samples. - RenHDrum companion builds automatically enable
enable_accurate_vibrations = trueand bypass this frontend choke whenever HD Rumble is active.
- Standard Switch emulator frontends use a 15 ms rate-limiting filter when
- Generic Recomp C Kit (
integrations/recomp-c/):- Clean C bridge (
renhdrum_recomp_bridge.c/renhdrum_recomp_bridge.h) with zero-configuration runtime loading (renhdrum.dll), dedicated 1 ms tick worker thread, 250 ms silence watchdog, and safe gamepad exit hooks. - Reference testbed on Hookshot v2.0.6 (static recompilation) verified on real hardware with Pro Controller and DualSense.
- Clean C bridge (
- Research Documentation & Updates:
- Monograph 11 (
docs/research/11-switch2-hd-rumble.md): comprehensive 25-trace study, "The Bell vs. The Speaker" physical actuator model, and quantitative findings. - Integration Guides:
docs/integration/switch2-games.mdanddocs/integration/recomp-games.md.
- Monograph 11 (
Companion Reference Builds
Two reference emulator builds powered by RenHDrum 0.3.0 with Profile-Guided Optimization (PGO) are available on their dedicated project pages (including setup guides, SHA-256 checksums, and GPL source archives):
| Reference Build | Version | Base Emulator / Implementation | Focus | Web Page & Download |
|---|---|---|---|---|
| Brontide-NS2 | 1.1.0 | PokeDinner 2.5.0 by Franseven | General Switch 2 games HD Rumble validation | Download & Notes → |
| Brontide-oot | 1.0.0 | Fritchii v5.3 by Frizti, Lichii by zortos293, Dynamic FPS by Dark | Switch 2 DLSS, graphics enhancements & HD Rumble | Download & Notes → |
Bring your own legally dumped games and keys. For project details, technical articles, and setup instructions, visit ryuhdr.threedola.workers.dev.
Acknowledgments & Credits
I would like to express my gratitude to the following researchers, developers, and projects whose work and insights made this release possible:
- samaBR85: for sharing empirical Switch 2 in-game vibration traces (Issue #2) and diagnosing the
joystick_map_mutexdeadlock in Greenhat-Lichii#20. - Frizti: for Fritchii v5.3 and targeted visual and performance enhancements.
- zortos293: for the Lichii emulator baseline and optimizations.
- Dark: for Dynamic FPS timing and frame pacing research.
- NotRexed & the Hookshot Team: for the Hookshot static recompilation project.
- Franseven: for PokeDinner 2.5.0.
- néo Luigi: for early Command 214 dispatcher implementation in Eglantine PR #155.
RenHDrum v0.2.1
Added
- Switch 2 HD Rumble Research & Integration Docs: Monograph 11 (
docs/research/11-switch2-hd-rumble.md) analyzing Switch 2 guest IPC vibration commands (nn::hid::IHidServer213, 214, 220), signal routing across DualSense, Switch Pro Controller 1, and Xbox One, root cause of the 2000 ms hanging rumble defect, and early hardware limits. - Switch 2 Games Integration Guide: Integration manual (
docs/integration/switch2-games.md) detailing command 214 dispatching (credited to neo Luigi / Eglantine PR #155) and routing through RenHDrum's public_half_C ABI endpoints. - Brontide-NS2 Reference Testbed: Documented reference test build (0.1.0 beta) based on PokeDinner 2.5.0 by Franseven, validating HD Rumble playback in retail Switch 2 titles.
Integrations
- Brontide hook series extended (
integrations/brontide/): 11 more patches (0008-0018) on top of 0007: DualSense voice-coil haptics over Bluetooth, Xbox One S rumble wiring, releasing a wired Pro Controller back to the OS on close, the per-controller HD Rumble dialog hooks, and the main on/off switch. Patches 0008, 0009, 0010 and 0018 are nameduibut only contain theirinput_commonpart; the dialog itself is instudio/. All apply cleanly in order on Eden989768aa46. - HD Rumble Studio reference code (
integrations/brontide/studio/): the Qt dialog, widgets, thunder effect andrenhdrum_pads.h, as reference code (not a patch). - Brontide-NS2 patch series (
integrations/brontide-ns2/): command 214 dispatcher (credit: neo Luigi, Eglantine PR #155) plus the RenHDrum thin hook, 4 patches on commit216b5034c6, GPL.
Changed
RENHDRUM_VERSIONis now0x000201.- Documentation: the "known limitation" notes about the settings resolver no longer promise a version.
Downloads
renhdrum.dll (Windows x64), renhdrum.h, SHA256SUMS.txt.
RenHDrum v0.2.0
Added
- Xbox One Rumble: translates Switch HD Rumble into the four motors of a Microsoft Xbox One controller (left grip, right grip, left trigger, right trigger). Eight kinds of rumble, a rotor model with overdrive, a trigger gate, and a melody that travels left to right. New C ABI:
renhdrum_xbox_rumble_create,_destroy,_push_half_sample,_tick,_resend(src/xbox/). Report:docs/research/10-xbox-one-rumble.md; guide:docs/integration/xbox.md. First shipped in Brontide 1.2.0.
Changed
RENHDRUM_VERSIONis now0x000200.
RenHDrum v0.1.1
Added
- DualSense Bluetooth haptics (HID output report
0x32):renhdrum_dualsense_dsp_build_bt_reportpacks the 48 kHz DSP output into 32 stereo frames of signed 8-bit PCM at 3 kHz, with sequence counter and CRC32 (seed0xA2), one report every 10.667 ms. Zero heap allocation. Report layout learned from SAxense by egormanga (MPL-2.0); implementation written from scratch. First shipped in Brontide 1.1.0. dualsense_bt_crisp_notesinRenHdcConfig: crisp notes over Bluetooth, separate from USB and off by default. Appended at the end of the struct;sizeof(RenHdcConfig)is unchanged (48 bytes), so hosts built against 0.1.0 keep working.
Changed
RENHDRUM_VERSIONis now0x000101.
Full notes: CHANGELOG.md
RenHDrum v0.1.0
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog,
and this project adheres to Semantic Versioning.
[0.1.0] - 2026-10-25
Added
- Multi-sample 5 ms AM/FM Envelope & Crisp Notes: Real-time tactile synthesis supporting
FormatThree(3x5-bit),FormatThree7bit(3x7-bit), andFormatTwo14bit(2x14-bit) within 15 ms HID transmission frames, plus crisp attack accentuation (+3 dB / -3 dB) and subtle sub-5-bit low-amplitude floor fallback. - Congestion-Free Bluetooth Pacing: Zero-lag pacing with 150 ms idle refresh, Write-After-Input gating, and a 3-tier Token Bucket scheduler (
HD_BT_LEVELS: Stable 60 ms, Balanced 45 ms, Quality 35 ms) mitigating half-duplex Bluetooth saturation. - DualSense 4-Channel 48 kHz Audio Haptics DSP: Real-time VCM coil haptics synthesis over USB (channels 3 & 4), 4 ms sliding low-pass frequency filter, non-linear power curve, 0.70 power ceiling, and fixed 256-frame crisp chunk processing.
- Zero-Allocation C ABI: Compact C header
include/renhdrum.hproviding stateless encoders, statefulRenHdcEngine, andRenHdcDualSenseDspwith strictly zero dynamic heap allocations in inner tick and push loops. - Upstream SDL3 Integration Patches: Patch set for
libsdl-org/SDL(release-3.4.8) adding non-blocking idle-gated rumble writes (SDL_HDRumbleSetNoQueue,SDL_HDRumbleSetNoQueueBluetooth,SDL_HDRumbleSetBluetoothAfterInput). - Brontide Reference Integration Patches: Reference thin-hook patch series integrating
renhdrum.dllinto C++ SDL3 emulator runtimes. - Technical Documentation & Examples: Comprehensive integration guides, research monographs, and minimal C / C# host examples.
Known Limitations
- In
0.1.0,renhdrum_settings_resolveandrenhdrum_dualsense_dsp_createprioritize reading local override flag files adjacent to the host executable and IPC shared memory / configuration files managed byBrontide-App(Local\RenHDrum_SharedState_v1and%APPDATA%\RenHDrum\renhdrum-settings.txt). A fully pure C ABI configuration injection path (bypassing IPC and local disk files) is planned for0.2.0.