github shanytc/snes9x 1.63.7

latest releases: 1.63.19, 1.63.18, 1.63.17...
one month ago

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

Don't miss a new snes9x release

NewReleases is sending notifications on new releases.