Skip to content

Switch 2 Cemuhook yaw sensitivity

This behavior is pinned to the operative Cemuhook serializer in Switch2Connect commit 61ac6642ce12fe7217e38a860b14863b18ca7e28, src/cemuhook_udp.py.

Projection contract

Switch2Connect exposes five sensitivity levels and applies

1 + (level - 1) / 12

only to the yaw value serialized into its DSU/Cemuhook packet. The exact level multipliers are 1, 13/12, 7/6, 5/4, and 4/3. Pitch and roll are unchanged.

DS4Windows applies the same multiplier after its existing optional DSU One-Euro smoothing and immediately before UdpServer.NewReportIncoming. Unlike the donor, it does not apply a separate Joy-Con or Pro raw-gyro scale: the canonical SixAxis state already contains degrees per second. Copying the donor's raw-family constants here would double-scale valid motion.

Scope and ownership

The captured physical-report owner must be a Switch2RuntimeInputDevice. Ordinary DS4, DualSense, and other DSU sources retain byte-for-byte prior yaw behavior. The existing exact legacy-slot report lease remains authoritative, and the captured device identity prevents a reused slot from changing the source family observed by an older callback.

Switch2CemuhookYawSensitivity is stored in the existing profile and appears as Cemuhook yaw sensitivity under Switch 2 Controls. Level 1 is the legacy default and returns the original double without multiplication. Invalid persisted levels normalize to 1. Non-finite input and finite overflow preserve the original value rather than synthesizing a different invalid sample.

This is presentation policy only. It does not alter physical parsing, calibration, canonical motion, gyro mouse/stick mapping, virtual-pad output, report timing, or the Xbox One path. The warmed arithmetic path allocates no managed memory.