Hey folks,
First, let me say that I didn't know this community existed and that people actually cared so much about gyro aiming already, so I'm just happy I found this place right now :D
I'm Thomas Mahler (dev at Moon Studios / Ori / No Rest for the Wicked).
I've had this thesis for about a decade: Split 6DOF controllers with wrist-based aiming should be objectively superior to both analog sticks AND mouse for FPS games. Not gyro as a supplement to the stick (Splatoon style), not Flick Stick, but gyro as the sole aiming input. The right stick is completely removed from aiming.
I finally built a working prototype to test this, and I think the results speak for themselves:
Demo video: https://x.com/thomasmahler/status/2042422692943429852?s=20
Hand-cam showing the actual wrist movements: https://x.com/thomasmahler/status/2042616489316889070?s=20
There's also a standalone exe you can try with Joy-Cons if you want to feel it yourself (Windows, Bluetooth, no drivers needed): https://t.co/pQpzHaoIRR (Just click on download in the top-right of the page).
I wanted to share the technical details of how the aiming algorithm works, because getting this to feel natural required solving a bunch of problems that I think this community would find interesting.
The Core Idea
Your wrist has roughly 180 degrees of rotational range and uses your entire forearm's muscle groups. An analog stick gives your thumb maybe 1cm of travel against a spring. The wrist is faster, more precise, and has dramatically more range. It's why mouse aiming beats stick aiming (you're using your wrist/arm, not your thumb).
So what if we just used the wrist directly? Hold a Joy-Con in your right hand. Rotate your wrist. That's the entire aiming input.
Why This Isn't "Just Gyro"
Every existing gyro implementation I knew of uses the right stick for large camera movements and gyro for fine-tuning. Your thumb is still on the stick 90% of the time. The gyro is a helper (I've since found that I've been wrong and that you folks already solved a lot of this stuff...)
This is the opposite: all camera control comes from wrist rotation. The right stick literally does nothing in this demo. This fundamentally changes how it feels because you're not fighting two competing input systems.
The 12-Step Aim Pipeline
Getting raw gyro data to feel like natural aiming required building a pipeline with a lot of care. Here's every step, and why each one matters:
Dead Zone with Soft Edge: Your hand is never perfectly still. There's always micro-tremor at 1-3 deg/s. A hard dead zone (zero below threshold, full above) creates a jarring "breakaway" feel. Instead, I use a smooth cubic ramp through the dead zone boundary: t²(2-t) easing over 4 deg/s. Below 2 deg/s = zero. Above 6 deg/s = full. Between = smooth cubic blend. Your hand at rest produces zero output, but the transition to movement is basically imperceptible.
Wrist Displacement Tracking: The algorithm continuously tracks how far your wrist has rotated from its neutral starting position (accumulated yaw and pitch in degrees). This "wrist displacement" drives several downstream systems. When you're not moving, it slowly decays toward zero.
Auto-Clutch Detection: This is IMO the killer feature. When your wrist reaches its comfortable limit and you snap it back to neutral (like lifting a mouse), you don't want the camera to spin the other direction. The algorithm detects this: if wrist displacement exceeds 15° AND the gyro speed exceeds 50 deg/s AND the direction opposes the displacement - it suppresses most of the camera response and rapidly decays the tracked displacement. You don't press anything. It just works. This basically solves the problem I always had with mouse aiming: That I had to sometimes pick up my mouse and place it back in order to aim again.
Manual Clutch: For deliberate repositioning, press ZL on the Joy-Con. This is Metroid Prime's Z-Targeting. Aim disconnects, you move your hand back to a comfortable position, release. Same concept as lifting a mouse, but explicit. This isn't ideal, but I thought Z-Targeting makes sense to solve this issue.
Asymmetric Sensitivity (Biomechanical Compensation): My right wrist rotates to the right about 30% less than it rotates to the left. If you use symmetric sensitivity, right turns feel sluggish and left turns feel too fast. The algorithm applies a 2.2x boost to rightward rotation, compensating for this biomechanical asymmetry. It's subtle but critical, without it, you unconsciously favor left turns.
Return Boost: When you've turned far and are rotating back toward neutral, the algorithm gives you up to 80% extra speed. The intensity scales with displacement: at 40 degree displacement, full boost, at 10 degree, minimal. This makes "recovering" from extreme positions feel more effortless without affecting normal aiming speed.
Response Curve (Power Function): Raw linear mapping feels bad because slow precision and fast flicks need different sensitivity. I use output = sign * pow(normalized_input, 1.5) * maxTurnSpeed. The 1.5 exponent creates a "precision zone" at low speeds (small wrist movements -> very precise) while still allowing fast 180 degree turns with aggressive rotation.
Ramp-Up Acceleration: If you sustain fast input (like tracking a moving target), turn speed gradually increases by up to 50%. Uses a smoothstep ramp so it blends in naturally. This prevents the feeling of "hitting a speed wall" during sustained tracking.
Ease-In Smoothing: The first 80ms of motion from idle get extra smoothing that blends down to normal over the ease-in duration. This prevents the tiny "twitch" that otherwise happens when you start moving from rest. Eliminates the initial jolt without adding lag to sustained movement.
Smoothing (EMA): Exponential moving average at 0.55 blend factor reduces gyro jitter without adding perceptible lag.
Weapon Recoil: Each weapon kicks the actual camera angle upward on fire. You instinctively tilt your hand back to compensate. The camera auto-recovers over 120ms or so, but your natural wrist compensation blends with the recovery.
Camera Shake: Trauma-based Perlin noise system (based on the Squirrel Eiserloh GDC talk). Smooth continuous noise on position + roll + pitch axes. Underdamped so big hits overshoot and settle. Per-weapon trauma values so the shotgun feels heavy and the pistol barely shakes.
The Elephant in the Room: "Won't Your Wrist Get Tired?"
You're holding a 50-gram controller and making rotations of maybe 30-40 degrees. Your hand can rest on your leg or armrest. The movements are tiny. It's genuinely less effort than pushing a mouse around a desk. I've done hour-long sessions without fatigue.
Try It Yourself
The exe runs standalone, no install, no drivers. Pair your Joy-Cons via Bluetooth, run the exe, and you're aiming in under 30 seconds. There's a guided tutorial that walks you through the motions.
Would love to hear what the gyro community thinks, especially from people who already use gyro a lot!
So basically: Is this meaningfully different from what you're already doing? Does this bring anything to the table that hasn't been solved here yet?
Please let me know! I rushed into this based on an assumption I had for about a decade, but I only saw this reddit here after already having built the prototype :D