snes9xrd changelog
===================
This file tracks changes specific to the snes9xrd fork, on top of upstream
Snes9x (see changes.txt for the upstream changelog).

snes9xrd v0.6
RetroAchievements:
- Added RetroAchievements integration: login, achievement/leaderboard
  tracking, and notifications (dialogs + panel).
- Achievement unlock sound, embedded and played on unlock.
- RA login now persists across restarts (encrypted session token, auto
  re-login, auto re-attach to an already loaded ROM).
- Added Hardcore Mode enforcement: blocks rewind/cheats/load-state/movie
  playback/frame-advance, forces itself off for Netplay with a
  confirmation prompt, and re-baselines tracking on reset. The Hardcore
  checkbox stays disabled in the UI pending RA's compliance review.
- Fixed the achievement-unlock toast using the wrong (short) notification
  duration instead of the configured one.

Netplay:
- Fixed Netplay input silently not applying locally when this machine's
  Controller Ports were still set to "One Controller": Port 2 is CTL_NONE
  in that mode, so a second player's input synced correctly to every other
  peer but was dropped on this machine's own core.
- Connecting to or hosting a Netplay session now automatically switches
  Controller Ports to "Two Controllers" when needed, instead of just
  warning about it.
- Added a "Show Netplay ping" option (Settings > General > Overlays),
  showing the connection's round-trip time next to the frame rate overlay.

Qt/UI:
- On-screen messages now stack in a queue instead of overwriting each
  other.
- OSD toasts get a bigger title line; "Show ROM info on load" is now an
  opt-out checkbox in Options > General.
- Library: Enter/Return now launches the selected game, same as
  double-click.

Stability:
- Fixed a race at the start of a session's first ROM load that could
  fast-forward video and audio for a moment (the emu thread ran
  unthrottled before the display callback and sound device were fully
  wired up).

snes9xrd v0.5
Qt:
- Fixed a persistent black-rectangle rendering bug in the Settings dialog
  and main window: a CSS cascade-order bug in theme.qss let a generic
  transparent-background rule silently win over QMainWindow/QDialog
  backgrounds, compounded by several plain QWidget subclasses missing
  Qt::WA_StyledBackground.
- Fixed the Settings dialog's Cancel button not reverting the Theme,
  "Allow gamepad input while window is not focused", and the Windows
  registry file association, which are applied as immediate side effects
  outside the saved config snapshot.
- Renamed the "Blue Cloud" theme to "Blue Cloud (White/Blue)".
- Added a new "AMOLED (Black/Purple)" theme.
- Added an Undo State shortcut (default Ctrl+U) for the existing undo-load
  core feature, placed under Settings > Shortcuts right after "Load State
  from Current Slot".
- Added default shortcuts for the existing per-channel sound toggles:
  Toggle Sound Channel 1-8 (Alt+1..Alt+8) and Toggle All Sound Channels
  (Alt+0).
- Widened the Settings dialog's default size.
- README overhaul: documented every default keyboard shortcut and the
  fork's feature set (rewind, save states/undo, multi-binding inputs,
  per-channel sound, movies, cheats, speed control).

snes9xrd v0.4
Qt:
- Save State / Load State failures are now surfaced via the on-screen message
  overlay instead of failing silently.
- Audio driver initialization failures now show an error message instead of
  failing silently.
- Fixed the OpenGL renderer not falling back to the Qt renderer on context
  creation failure (it now behaves like the Vulkan renderer already did).
- Shader preset load failures (OpenGL and Vulkan) now report through the
  on-screen message overlay instead of only printing to the console.
- Fixed a settings-window dangling pointer/lifetime issue (converted to a
  QPointer).
- Fixed the Shader Parameters dialog stealing focus from the Emulation
  Settings dialog.
- Sound Settings: expanded the playback rate list and buffer size step,
  and added a Frame Advance mute option.
- Added the sharp-bilinear-flexible software filter.
- Global QSpinBox/QDoubleSpinBox style polish.
- Default rewind buffer size is now 10MB on a clean config instead of
  disabled (0).
- Freeze-file-not-found and successful-screenshot notices now use the
  on-screen message overlay instead of a modal dialog.
- Fixed screenshot saving being rejected by newer libpng bit-depth/color-type
  validation.
- Fixed the Windows build not compiling in the app icon/manifest/version
  resource.
- About dialog: added a link to the snes9xrd GitHub repository.

snes9xrd v0.3
Qt:
- AVI recording: added Start/Stop AVI Recording to the File menu, with an
  optional Hi-Res mode (Emulation Settings > Recording) that records at the
  native double resolution used by hi-res and interlaced games.
- AVI recording now stops and finalizes the file automatically when the ROM
  changes (Open File, Load MultiCart), instead of continuing to record
  mismatched frames from the new ROM.
- Legacy file menu parity: added a Recent Files submenu, Load MultiCart, and
  per-slot Save/Load Game Position submenus backed by a state preview dialog
  (thumbnail + slot picker), matching the legacy Win32 UI.
- Added a Hacks dialog (SuperFX clock speed, overclock, sound interpolation
  filter, allow invalid VRAM access, separate echo buffer, disable sprite
  limit) reachable from the legacy-style menu.
- Added a Cheat Search dialog (search/reset/add cheat by value) alongside
  the existing Cheats list dialog.
- Directories panel: added dedicated folder locations for Movies, SPC
  dumps, and Satellaview memory packs (ROM/Config/Custom), matching the
  existing SRAM/States/Cheats/Patches pattern.
- Fixed the SPC dump folder incorrectly resolving to the Export folder.
- Moved the "Auto-Save SRAM" interval control from the Directories panel to
  the General panel, and made it actually apply to the running core
  (previously UI-only).
- Made the SRAM interval spinbox's up/down arrows more visible in the dark
  theme.
- Game library: widened the Size column's default width.
- Fixed a crash: setting the rewind "Frames between steps" to 0 could
  divide by zero.
- Fixed a data race between the emulation thread and the SDL audio callback
  thread over the shared audio ring buffer.
- Fixed a data race on the emulation thread's status flags and its
  cross-thread main loop callback.

snes9xrd v0.2
Qt:
- Controllers panel: added a Super Scope binding view (Fire, Pause, Auto
  Fire, Cursor, Aim Offscreen), fully user-configurable like the SNES
  controller and mouse views; only Fire defaults to Left Click.
- Auto Fire is a genuine frame-synced turbo for Super Scope's Fire button,
  implemented in the shared core (S9xControlEOF) the same way as Joypad
  Turbo A/B, and follows the same turbo speed setting.
- Controllers panel: added a configurable Mouse binding view (Click L/R);
  physical mouse clicks can now be captured/assigned like keyboard or
  joystick inputs instead of being hardwired.
- Fixed the controller diagram shifting position/size when switching
  between the Controller, Mouse, and Super Scope binding views.
- The binding "Set" combo now automatically jumps to the correct port slot
  when switching into Mouse or Super Scope port modes.
- Controllers panel: added a per-row clear ("-") button, instead of only a
  global clear-all action.
- MultiCart dialog: added a BIOS status row, Slot A/B paths are now
  remembered across sessions, and fixed OK not actually starting the game.
- Fixed a BIOS folder resolution bug that could return an empty path.
- General code quality pass (casts, signed/unsigned comparisons, dead code
  removal, shared connect-lambda helpers).

snes9xrd v0.1
Qt:
- Game library: added a persistent on-disk scan cache (gamelist_cache.dat)
  keyed by file size and modification time, so unchanged ROMs skip the
  expensive full read + CRC32 on every launch.
- Config and cache files (snes9x-qt.conf, gamelist_cache.dat) are now saved
  next to the executable by default when that folder is writable, making
  the install portable.
- Controllers panel: the SNES controller diagram's background now matches
  the surrounding panel color, so it looks integrated with the rest of the
  theme instead of showing a fixed white box.
- Removed the experimental gamepad auto-assign checkbox; bindings are now
  always configured explicitly per controller.
- Moved the controller diagram image into the Qt resource bundle
  (qt/src/resources/controllers/) instead of loading it from the repo root.
- Added the fork's own name and version (snes9xrd v0.1) to the window title
  and the Help > About dialog, alongside the underlying Snes9x core version.

Legal:
- Added fork attribution and repository link to LICENSE.
