Added
- Implemented GPU rendering on Linux and Windows
- Play NESd in the browser at https://nesd.jpj.dev/play/, with a self-hostable Docker image (ghcr.io/jpjonte/nesd)
- Fast-forward now plays audio
- Fast-forward speed is configurable: 2x (default), 3x, 4x, max (without audio)
- The file picker now supports letter skipping on a gamepad: the Previous/Next Tab actions jump to the previous/next starting letter
- Added a Low Pass Filter toggle to the Audio settings
- The log viewer now colors log levels and channels and supports text search
- Nightly and branch builds now show a build id in the About dialog and the startup log
- The video filters (CRT and smooth) are now available in the web version
- Multiple video filters can now be activated at once
Changed
- Holding a gamepad button in menus now speeds up the repeat rate over time
- Cancel on a gamepad (Escape on the keyboard) in the file picker now goes up one directory, and closes the picker once it is back at the directory it was opened at
- Flatpak nightlies are now published to the main jpj.dev Flatpak repo. The separate nightly repo is retired. Existing nightly installs show a message pointing at the new repo
- Video filters (CRT, smooth) can now run on top of the GPU renderer instead of forcing a fallback to the CPU renderer
- The Quit button is no longer shown on Android, where apps background instead of quitting
- The log viewer now opens at the Info level and tags telemetry lines as Debug
- The About button moved from the main menu to the General settings tab
- The main menu buttons now sit in a single row below the recent ROM list, so the ROM grid gets more rows on wide screens like the Steam Deck
- Updated default settings for new users: Auto load is enabled and scaling is set to "smooth"
Fixed
- Fixed the Zapper registering hits on the wrong target
- Fixed the CRT filter's scanlines rendering as one giant scanline
- Fixed a ROM path passed on the command line not starting automatically
- Fixed the "Save states" entry in the recent ROM context menu doing nothing when no game is running
- Fixed not all architectures being published to the Flatpak repo
- Fixed MMC1 games (e.g. The Legend of Zelda) freezing after rewinding
- Fixed controller focus getting stuck in the file picker's search bar
- Fixed Escape quitting to the main menu instead of opening the in-game menu after resuming the game with Enter
- The Android status and navigation bars are now hidden by default
- Keys that are not bound to anything no longer trigger UI shortcuts while in game (e.g. Escape quitting to the main menu when "Open Menu" is bound to another key)
- Fixed constant audio crackling on some Android devices. Audio is now consumed at the device's own pace, and underrun recovery fills the buffer further than before
- Fixed audio stutters due to inconsistent timers