a34989c49e
Controls now tracks whether the player's last deliberate press was a gamepad button/stick or a keyboard key/mouse click (ignoring plain mouse motion, since the mouse still drives the camera regardless of which device moves the bull). The HUD's ability-bar keycaps read from that: keyboard letters normally, Xbox-style face-button glyphs while a gamepad is in use, swapping live the moment the player switches devices. Godot's joypad button indices are already Xbox-position-normalized (by SDL natively, by the browser's Standard Gamepad Mapping on web), so the glyph mapping (button 0/1/2/3 -> A/B/X/Y) reads correctly for any controller brand with no per-device special-casing. Verified headlessly: labels start as the bound keyboard letters (F/G/H/J), switch to X/A/B/Y on a synthetic joypad button press (matching project.godot's kick/dash/slam/roll bindings), and switch back on a keyboard press. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MXBNaEBmrYDSMcv4NgUWtV