Quick answer: Older XInput controllers reporting drift even at rest, leaking into gameplay? Default deadzone constants are a starting point — ship user-configurable deadzone for aging hardware.

An older Xbox controller has worn stick hardware; in-game character drifts left. The default deadzone isn’t enough.

Default Constants

XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE = 7849 (~24% of full range). Reasonable for fresh hardware; aged controllers may drift past this.

Player Settings Slider

Expose a Deadzone slider in settings (0 - 30%). Players with drift can crank it up; tight-control players keep it low.

Radial Deadzone

float magnitude = std::sqrt(x*x + y*y);
if (magnitude < deadzone) magnitude = 0;

Radial (circular) deadzone feels more natural than axis-aligned. Beyond deadzone, rescale magnitude to 0..1.

Calibration Helper

Auto-detect drift on game start: sample stick values for 1 second at rest, set deadzone slightly above max observed. Players don’t need to think about it.

Verifying

Aged controllers feel responsive without drift in gameplay. Sensitivity-tuned for player preference via settings.

“Default deadzone fails aged hardware. Ship user-adjustable + auto-detection.”

Add deadzone calibration to the controller-onboarding flow — one quick wiggle and the game auto-tunes for that player’s hardware.