1.63.7
SDL3 Gamepad Support
- Replaced the legacy WinMM joystick API with SDL3 for gamepad input
- Added SDL3 as a statically linked library — no SDL3.dll needed at runtime
Input Configuration Dialog
- Added Auto-Assign button that maps gamepad buttons automatically via SDL3's gamepad database
- Fixed Auto-Assign button and device name label overlapping help text
- Added hot-plug detection timer — device name and bindings refresh when controllers are connected/disconnected
- Auto-assign preserves existing keyboard bindings as extras when in multi-bind mode
- Joystick bindings are cleaned up automatically when a controller is disconnected
Multi-Bind Smart Edit Mode (Input + Hotkey dialogs)
- Smart add mode: left-clicking a field with existing bindings preserves them and allows adding more (shows Left, J,
... in green) instead of clearing everything - Right-click context menu with:
- Reset — clears all bindings and enters fresh capture mode
- Remove — submenu listing each bound key individually for targeted removal
- Green highlight stays visible during the context menu and persists after pressing keys or removing bindings, so
users know the control still accepts input - Green highlight on one field is properly deactivated when right-clicking a different field
Bug Fixes
- Joystick input race condition: funky global was being overwritten by re-entrant messages during SDL_PollEvent — now
only set by the active control right before polling - keyPressLock blocking joystick: after one controller button press, all subsequent presses were ignored because only
keyboard WM_KEYDOWN could reset the lock — joystick input now bypasses it (edge detection already prevents repeats) - keyPressLock not resetting on focus: entering capture mode now resets the lock so controller input works reliably
after Reset/Remove - selectedItem clobbered after Reset: unconditional selectedItem = NULL at the end of the context menu handler was
overwriting the Reset branch's assignment, breaking joystick polling