mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
dde268dc0f
The default controller map folds the left stick onto the D-pad bits (up=dpup,lefty- … right=dpright,leftx+) so the stick acts as a D-pad for digital-only games. In ANALOG pad mode that fold is wrong: the stick already drives the analog axes, and on a real DualShock the stick and D-pad are independent. A dual-analog title that uses the D-pad as its own control therefore saw phantom D-pad presses from every stick movement — and constant presses from stick centre drift. Ape Escape is the concrete victim: it is locked to analog, its D-pad left/right rotates the camera, so walking with the left stick (or a drifting Series-X stick at rest, past the 12%/4000 deadzone) spun the camera with no D-pad input. Reported by VGEsoterica. Fix in the framework (class fix, all analog titles inherit): resolve the effective pad type before building the button word, and when the pad presents as analog this frame, suppress the LEFTX/LEFTY/RIGHTX/ RIGHTY axis sources as button contributors. Trigger axes (L2/R2) and button sources are unaffected; digital mode keeps the stick->D-pad fold (its only outlet there). The physical D-pad still drives the D-pad bits, so Ape's camera rotate works from the D-pad as intended. Stick/axis output is byte-for-byte unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>