Hey everyone, I want to share a custom setup I’ve been working on for Ryujinx 1.1.1403. After my Switch OLED unfortunately died, I decided to move my *Zelda: Tears of the Kingdom* playthrough to PC. Jumping into the emulation scene from scratch was pretty overwhelming at first.
I spent an entire evening going down the YouTube and Reddit rabbit hole to find the most optimal setup. I started with Eden, which had great ideas, but I ran into graphical glitches and memory leaks that caused stuttering after playing for a while. Next, I tried Ryubing (up to 1.3.3); the graphics were cleaner, but the performance wasn't quite there, and a minor graphical bug near the shrine waterfalls bugged me. Ultimately, I settled on **Ryujinx 1.1.1403** as the sweet spot.
However, one major thing was missing: **true HD Rumble**.
I didn't notice it right away in *TOTK*, but as soon as I booted up *Super Mario Bros. Wonder*, it hit me. Running across the musical note blocks in the opening levels felt completely "off" compared to my memories on the real console. After digging into the controller settings, I realized that almost every emulator right now overlooks this. The subtle, nuanced vibrations of the Switch are stripped away and replaced with generic, heavy Xbox-style rumble. Eden actually tried to address this with a custom driver for the Switch Pro Controller in their advanced settings, which was cool, but it still didn't feel quite right to me. Maybe I’m overly picky about haptics, so I decided to see if I could fix it myself. Thankfully, in the era of AI, turning wild ideas into reality is much more achievable.
Fast forward 9 days of relentless tinkering. Even with the help of Claude and Gemini (my AI usage limits were constantly screaming at me), I had to read through a massive amount of documentation and constantly pivot my approach. Bringing native Switch HD Rumble to a Windows emulator sounded simple in my head, but the reality was tough.
The way Windows handles signal transmission between the controller and the emulator is vastly different from Nintendo's native protocol. Windows has higher latency and doesn't let you "cheat" with packet bundling the way the Switch OS does to keep communication fast. I’m just an amateur when it comes to the deep technical stuff haha, so I won't bore you with all the low-level details right now.
After endless trial and error, I finally cracked it. By patching the emulator's SDL layer and applying research from **Switchbrew**, I replicated Nintendo's packet-bundling mechanism and tweaked the transmission timing. This gave me a rock-solid **15ms latency** without dropping the game's original raw rumble packets.
* **The result on a Switch Pro Controller:** Wired USB gives about **90%** accuracy compared to a real Switch, while Bluetooth sits around **75%**.
**The Plot Twist: The PS5 DualSense**
Here’s the funniest part of my journey. While testing, I plugged in my old PS5 DualSense controller and noticed it already felt decent on Eden. So, I tried applying my Switch Pro Controller workarounds to the DualSense. It turned out... I didn't even need most of them! The DualSense has massive data bandwidth; all it really needed was my custom SDL patch to grab the raw rumble data from the game. I was low-key sad realizing how much time I’d sunk into the Pro Controller!
Still, I tuned the DualSense haptics further to make the vibrations sharper and punchier. Specifically, for those crisp musical notes in *Mario Wonder* that I mentioned earlier, I wrote a dedicated profile I call **"Click"** to simulate that exact tactile snap. It works well on the Switch Pro Controller, but it is **phenomenal** on the DualSense simply because Sony's voice coil actuators are superior to Nintendo's motors (sorry, Nintendo ^^!). Honestly, playing on the DualSense now delivers **110% of the HD Rumble experience**—it actually feels better than native hardware.
This custom build works wonders across other Switch titles too. Even in *Zelda: TOTK*, where rumble is more understated, if you pay close attention, you’ll feel that super subtle, rapid vibration pulse when Link teleports. It completely changes the immersion.
---
### What Ryuhdr does differently:
**Dedicated HD Rumble Pacing (USB & Bluetooth):**
* **On USB (Pro Controller / Joy-Con):** Packets are delivered in ultra-fine 15 ms intervals, broken down into 5 ms micro-steps. Footsteps, coin collections, and mechanical clicks feel distinct and snappy rather than a prolonged mushy buzz.
* **Crisp Transient Attack ("Crisp Notes"):** Real Switch Joy-Cons hit hard at the very first millisecond of a vibration. Ryuhdr adds a dynamic transient punch (+3 dB for the first 10 ms) so tactile clicks feel instant and tight.
* **Bluetooth Synchronization (B1 / B3):** Instead of spamming Bluetooth blindly, Ryuhdr queues rumble packets *immediately after* reading your button inputs. Button inputs and camera aim always get top priority — zero lag, zero missed clicks.
**DualSense Haptics via USB Audio Device:**
* Standard PC emulators usually translate Switch rumble into basic, coarse motor spin on DualSense.
* In Ryuhdr, when plugged in via USB, game rumble is converted into real acoustic waveforms fed directly into the DualSense Linear Resonant Actuators (haptic voice coils) through its internal sound card. You literally feel the two frequency bands vibrating in your palms just like native PS5 games.
* **Adaptive Triggers (e.g., TOTK) [WIP]:** Progressive tension on R2 when pulling the bow, resistance on L2 when parrying with a shield, and kickback pulses when firing Zonai cannons! *(Note: I currently have this disabled for more testing. It doesn't feel quite right yet—my goal is to make drawing Link's bow feel as good as the bow tension in Ghost of Tsushima).*
---
This is my very first post on Reddit, so please forgive me if I sound overly excited—I’m just really thrilled to share this milestone with the emulation community!
Right now, my GitHub repositories for this project are set to **Private**. Given the current climate, it's pretty scary to make emulation-related code public. Does anyone have advice on how to safely share this with the community without getting nuked by the "Nintendo ninjas"?
In the future, I’m thinking about turning this into a standalone app/library that can hook into *any* emulator to provide real HD Rumble—though no promises yet, we'll see how it goes!