HD Rumble for Switch 2 games
Switch 2 games can be played on PC, but their native rumble signals sound almost like a whisper on legacy hardware. Based on 25 empirical in-game trace sessions, RenHDrum 0.3.0 calibrates tailored curves for each controller, delivered through Brontide-NS2 and Brontide-oot.
The problem: why Switch 2 games stayed silent or flat
When Switch 2 game rumble commands were first captured, they felt either virtually silent or completely flat on PC controllers.
In plain words
Games designed for next-gen motors send tiny amplitudes. On a Switch Pro Controller 1, gentle footsteps and sword swings fell below the physical motor threshold and went totally silent. Meanwhile on a DualSense, the gap between soft wind and heavy ground pounds was compressed flat, and quick menu ticks were occasionally swallowed.
The technical findings (from 25 CSV trace sessions)
- 100% of rumble samples across Donkey Kong Bananza, Mario Kart World, and Ocarina of Time arrive via IPC Command 214 (SendVibrationValuesInMode) with Mode = 2. Neither Command 213 nor 220 is called by retail games.
- Native amplitudes are extremely low: 95% of Ocarina of Time samples stay below 0.046 (median when vibrating is only 0.009). On Switch Pro 1, this falls below the 0.04 multi-sample floor, muting over 80% of micro-vibrations.
- The frontend 15 ms rate filter (when Accurate Vibration is off) silently discarded 50.0% of samples in Ocarina of Time and 76.3% of samples in Mario Kart World before they could reach RenHDrum.
- On DualSense, a slight rhythm mismatch between the 5 ms game packet interval and the 5.33 ms DSP audio slot caused single-packet 5 ms menu ticks to occasionally get overwritten by the following zero packet.
What Switch 2 games actually send
Looking past marketing promises: IPC command 214 and the parametric signal path.
Parametric 2-Band Rumble
Commercial games (Donkey Kong Bananza, Mario Kart World, Ocarina of Time) dispatch vibration via IPC Command 214 (Mode = 2) with a 16-byte struct: low and high band amplitude and frequency per handle. Because the signal is dispatched in parametric form rather than simple on/off rumble, an emulator captures the complete tactile intent of sound designers.
Why No PCM Sound Commands Exist Yet
Published patents (US 20260295388-91) describe advanced modes including continuous 8 kHz PCM streaming and autonomous playback. However, through OS version 23.0.1, no public IPC command exists for streaming PCM to gamepads. All retail games rely strictly on parametric Command 214.
How RenHDrum 0.3.0 solves it
Understanding the physics: "The Bell vs. The Speaker", per-controller curves, and zero packet loss.
The path of one Switch 2 rumble packet
01 DualSense: Preset [3] & 5.3 ms Peak-Hold
DualSense voice coils behave like wideband speakers with built-in perceptual compression. RenHDrum 0.3.0 applies Preset [3] to deliver a rich 20–43× dynamic contrast without ceiling clipping, while 5.3 ms slot peak-hold preserves 100% of menu ticks.
02 Pro Controller 1: Preset [4] & 25 ms Boost
The Pro Controller 1 LRA motor behaves like a resonant bell with a 0.04 multi-sample threshold. Preset [4] lifts 100% of micro-vibrations above 0.04 and adds a 1.2× transient boost for 25 ms below 150 Hz to give crisp snap to attacks and footsteps.
03 Accurate Vibration Auto-Enabled
Turning on HD Rumble automatically enables Accurate Vibration and bypasses the 15 ms frontend filter, ensuring zero packet drops.
04 Bluetooth Level 2 & Pro Reliability Fixes
Switch Pro Bluetooth defaults to Level 2 (45 ms pacing) to avoid radio congestion. Right stick upward drift is eliminated by filtering stale calibration offsets (|offset| > 0.5f), and wired USB handles clean exit via ClearUSB.
When integrating RenHDrum into custom builds, you must set enable_accurate_vibrations = true or bypass the 15 ms filter in emulated_controller.cpp. Otherwise, the frontend filter silently drops 50% to 76.3% of rumble commands before they reach the core.
A bell needs a strike, a speaker needs audio
The mechanical contrast between LRA and VCM, and how Nintendo patents guided the solution.
Switch Pro 1: The Resonant Bell
The Pro Controller 1 uses Alps LRA motors with narrow resonance peaks at 160 Hz and 320 Hz. Its protocol enforces an absolute cutoff below 0.008 and a multi-sample floor at 0.04. Because Switch 2 games output quiet whisper signals (< 0.04 over 80% of the time), a raw signal leaves the bell silent.
DualSense: The Acoustic Speaker
The DualSense uses wideband voice-coil motors driven by continuous audio-rate waveforms. However, RenHDrum's internal DSP includes a square-root compression curve (x^0.5) tuned for Switch 1. Multiplying raw Switch 2 values causes severe ceiling clipping (17.6% of DK Bananza samples) and flattens dynamic range.
The Patent Rescue: 4-Point Piecewise Mapping (JP 2026015701)
Published Nintendo patents describe how Switch 2 firmware handles legacy controllers: piecewise linear curves (Ln1-Ln4), zeroing values below threshold, and applying a 1.2x transient boost for 25 ms below 150 Hz to kick-start slow LRAs. RenHDrum 0.3.0 implements this patent-inspired model with Preset [4] for Pro 1 (0% dropped below 0.04 floor) and Preset [3] for DualSense (retaining a 20-43x dynamic spread).
Preserving Menu Ticks: 5.3 ms Slot Peak-Hold
Switch 2 games dispatch vibration packets at 5 ms (200 Hz), but the DualSense audio mixer processes 256 frames at 48 kHz (~5.33 ms slots, 187.5 Hz). Due to phase drift every ~80 ms, single-packet menu ticks were frequently overwritten by following zero packets. RenHDrum's 5.3 ms peak-hold ensures 100% of short menu ticks are felt.
Before and after (empirical measurements)
Comparing initial uncalibrated translation against the RenHDrum 0.3.0 ecosystem.
| Metric | 0.1.0 beta (Raw / Filter active) | RenHDrum 0.3.0 + Brontide-NS2 / oot |
|---|---|---|
| Packet arrival rate | 50.0% to 76.3% dropped by 15 ms filter | 100% delivered (Accurate Vibration auto-enabled) |
| DualSense: Ocarina of Time | Raw p95 at 0.046; barely perceptible | Preset [3]: rated 4/5 (score 84/100), median 0.044, 29× contrast |
| DualSense: Mario Kart World | Faint rumble, occasional missed menu ticks | Preset [3] + peak-hold: rated 5/5, 100% menu ticks, 20× contrast |
| DualSense: Donkey Kong Bananza | Ceiling clipping and compressed dynamics | Preset [3]: rated 4–5/5, subtle wind and heavy pounds, 43× contrast |
| Pro Controller 1: Ocarina & MKW | >80% samples under 0.04 floor (muted) | Preset [4] + 25 ms boost: rated 4/5, crisp stairs, 0% dropped below floor |
| Pro Controller 1: DK Bananza | Soft landing impacts lacked punch | Preset [4]: rated 3/5, median 0.068, 4× contrast (LRA hardware limits) |
| Execution optimization | Standard release build | Profile-Guided Optimization (PGO) on both emulators |
The controller paradox: Pro 1 on real hardware, DualSense on PC
Why classic controllers work on Switch 2, and why DualSense delivers the ultimate PC haptics.
Why Pro 1 Still Rumbles on a Real Switch 2
The Pro Controller 1 firmware has not changed, so a Switch 2 console cannot send it modern 16-byte wideband packets. Instead, the console falls back to the classic 8-byte HD Rumble packet—precisely the packet format generated by RenHDrum's encoder.
The PC DualSense Paradox
A real Switch 2 console has zero official support for Sony controllers. Yet on PC emulators, a wired DualSense is currently the most expressive and nuanced device for Switch 2 games, driving voice coils directly with continuous acoustic audio waves.
Xbox One S (In Research)
While Switch 1 titles enjoy full 4-motor translation in Brontide 1.2.1, Switch 2 Mode 2 signals require tailored baseline filters and trigger pacing. Xbox One S is actively in research for Switch 2 games.
Choose your Switch 2 build by game
Both builds include RenHDrum 0.3.0, the HD Rumble Studio dialog, and Profile-Guided Optimization.
Brontide-NS2 (1.1.0)
Based on PokeDinner 2.5.0 by Franseven. Tuned for Donkey Kong Bananza, Mario Kart World, and general Switch 2 titles.
Brontide-oot (1.0.0)
Based on Fritchii v5.3 by Frizti and Lichii. Tuned specifically for The Legend of Zelda: Ocarina of Time (Switch 2 Edition) with DLSS and visual fixes.
Static Recompilation: Hookshot v2.0.6
Static recompilation translates Switch 2 machine code straight into native Windows instructions with zero emulation overhead. The Generic Recomp C Bridge automatically enables authentic HD Rumble on Hookshot v2.0.6 (Zelda OoT Switch 2 Recomp) with zero configuration.
Zero-Configuration Auto-Detection
Place renhdrum.dll beside hookshot.exe and authentic HD Rumble activates automatically. Both Nintendo Switch Pro Controller (Bluetooth & wired USB) and Sony DualSense (4-channel 48 kHz USB haptics & Bluetooth report 0x32) are fully supported without manual mapping.
Hardware-Calibrated Dynamics
Hookshot calls renhdrum_set_nx2_mode(2) upon load, automatically applying tailored curves: lifting micro-vibrations above the Alps LRA floor on Pro 1 and preserving the 5.3 ms slot peak on DualSense to hear and feel every Ocarina pitch.
Generic Recomp C Kit for Developers
RenHDrum provides a modular, drop-in C bridge (renhdrum_recomp_bridge.c/.h) compatible with SDL2 and SDL3 for any recompilation project, accompanied by a reference patch for Hookshot v2.0.6 on GitHub.
Credits & Acknowledgments
Research and implementations built on open contributions from the community.
- Franseven (PokeDinner 2.5.0): foundational Switch 2 emulation for Brontide-NS2 (GPL-3.0-or-later).
- Frizti (Fritchii v5.3), zortos293 (Lichii), Dark (Dynamic FPS): foundational work for Brontide-oot.
- néo Luigi (Eglantine pull request #155): initial real Command 214 implementation.
- samaBR85 (renhdrum-eden): independent Switch 2 trace verification, Eglantine/Lichii ports, and Raw Input deadlock insights.
- Switchbrew Wiki & Nintendo Patents: Command 213/214/220 documentation and 4-point translation model.
- NotRexed & Hookshot team: The Legend of Zelda: Ocarina of Time Switch 2 Recompiler (GPL-3.0), reference testbed for static recompilation.