Version 1.1.0
Release date: 2021-08-10
Release overview
The 1.1 release brings many large changes including a fullscreen media viewer, a game launch screen, a miximage generator, a new video player and a new controller API featuring automatic controller configuration and controller profiles.
A much better mechanism to find emulators and emulator cores has been implemented as well, which among other things removes the need to manually modify the Path variable on Windows to find RetroArch. It also eliminates the requirement for a separate Flatpak-specific es_systems.xml file on Linux.
There are also several changes under the hood, such as the addition of the CImg image processing library, automatic code formatting of the entire codebase using clang-format, change of language standard from C++11 to C++14 and lots of general code refactoring.
Apart from this, numerous small improvements and bug fixes are part of the release, as detailed below.
Detailed list of changes
- Added a miximage generator that can be run automatically from the scraper and which includes comprehensive options, configurable from the menu
- Added an offline generator GUI for the miximage generator which can be used for bulk miximage generation without going via the scraper
- Added a fullscreen game media viewer
- Added a game launch screen that displays the marquee image, the game name and the system name
- Added a new video player based on FFmpeg
- Added a 60 FPS frame rate upscaler option to the video player which results in slightly smoother playback for low frame rate videos (e.g. 24 and 30 FPS)
- Implemented a new mechanism for locating emulators and cores, with configurable find rules (this eliminates some hacks such as the separate Flatpak es_systems.cfg file)
- Added a Windows-specific find rule that searches the Registry for the App Paths keys, which eliminates the need to modify the Path manually to find RetroArch
- Removed the deprecated %COREPATH% setting and corresponding menu entry
- The "Run in background (while game is launched)" option can now be enabled on all operating systems instead of only on Windows
- Added a workaround for a game launch issue on Windows when using AMD and Intel GPUs
- Moved to the SDL GameController API which gives numerous improvements to the controller handling
- Default controller configuration is now automatically applied, input configuration should rarely if ever be required any longer except for deliberate button customization
- Added support for selecting the controller type (Xbox, Xbox 360, PS4, PS5 and SNES), which changes the help icons, help text and the input configuration tool icons and text
- Added an option to limit the input in ES-DE to only the first controller (this does not affect the emulators)
- Switched the order of the "Back" and "Start" buttons (or equivalents) in the input configurator to align with the other button entries which go from left to right
- Added separate controller deadzone values for the triggers and thumbsticks
- Removed the startup notification regarding default keyboard mappings being in use, instead default mappings are now considered the recommended input configuration
- The controller input configuration is not automatically started any longer if there is no es_input.cfg file or if there are no applicable configuration entries in the file
- Increased the max allowed size for images when scraping, which should now only downscale files which really need it
- Changed the resampling algorithm for image downscaling for the scraper from bilinear to Lanczos which results in noticeably sharper images
- Added a configurable option to automatically retry scraping up to eight times in case of ScreenScraper TLS errors
- Changed the button for jumping to a random system or game and added a setting for enabling or disabling the functionality altogether
- The help text for the "A" button now shows "Enter" instead of "Launch" in the grouped custom collections view
- Added navigation sounds for some actions where it was missing, such as when attempting to add folders, placeholders or systems to custom collections
- Changed the custom collection "Jump to" navigation sound to the select sound instead of the scroll sound
- A notification is now displayed in the grouped custom collections view if a filter is applied to the selected collection
- Changed the default screensaver type from "dim" to "video" and made the fallback screensaver "dim" instead of "black"
- Moved the video screensaver audio setting to the sound settings menu
- Added support for the Nintendo Switch game system (using the Yuzu emulator)
- Added an option to use plain ASCII characters for the favorite, folder and tickmark symbols, which makes some themes with very pixelated fonts look coherent
- Created a new main menu entry for input device settings
- Moved the input device configuration tool to the input device settings menu
- Adjusted the size and position of the various menus to accomodate one additional entry on the screen
- The quit menu is now disabled by default, instead showing the "Quit EmulationStation" entry unless configured otherwise
- Removed the "Display game media from ROM directories" setting as it doesn't make sense to support this legacy functionality any longer
- Added support for using the %ESPATH% and %ROMPATH% variables in the slideshow screensaver custom image directory setting
- Improved scaling relative to the screen aspect ratio for various GUI components which enhances the layout on 4:3 displays and ultrawide monitors
- Removed the menu fade-in effect as it looked terrible
- Enabled the menu scale-up effect for the OpenGL ES renderer
- Renamed es_systems.cfg, es_settings.cfg and es_input.cfg to es_systems.xml, es_settings.xml and es_input.xml
- Changed the es_systems.xml logic so it loads from the program resources directory by default (a customized file can be placed in ~/.emulationstation/custom_systems)
- Added a %HIDEWINDOW% variable which can be used in the es_systems.xml file on Windows, primarily intended for hiding console windows when launching scripts
- Added support for using the %ESPATH% variable in the media directory setting
- Removed the marquee image from rbsimple-DE as it's now baked into the miximages
- Set the gamelist video scanline rendering option to disabled by default
- Changed the setting description for the favorites game toggling button
- Simplified and improved the setup of portable installations on Windows
- Converted all navigation sound files to stereo as previously it was a mix of mono and stereo files (done for rbsimple-DE and the fallback sounds)
- The themes and scripts directories are now automatically created during startup
- Cleaned up some application startup messages
- The application version is now saved to es_settings.xml, which can be used in the future to notify the user after upgrades to a newer release
- Added a DebugSkipInputLogging option which is intended primarily for development and needs to be manually set in es_settings.xml
- Added the CImg library as a Git subtree and created some utility functions for it (used by the miximage generator and the game launch screen)
- Added a function to ImageComponent to crop fully transparent areas around an image
- Added and clarified startup log warnings for missing or invalid es_systems.xml platform tags
- Added a CMake option to control whether the VLC video player should be built, and set this to off by default
- Made it possible to build on the Raspberry Pi 4 (tested on Raspberry Pi OS)
- Removed the deprecated VideoOmxComponent
- Removed the pointless APPLE_SKIP_INSTALL_LIBS CMake option
- Added a clang-format style configuration file to use for automatic code formatting
- Formatted the entire codebase using clang-format
- Integrated clang-tidy with CMake and made it possible to enable it via a flag
- Added the NanoSVG library as a proper Git subtree
- Changed the language standard from C++11 to C++14
Bug fixes
- Marking all games as favorites for a system or folder or removing all favorite markings would sometimes crash the application
- Scraping new game media using the single-game scraper followed by a re-scrape that was aborted could crash the application
- The scraper search could be refined or skipped after the result was accepted which sometimes crashed the application
- Attempting to load a non-existent font file defined by the theme crashed the application instead of using the bundled font as fallback
- Refining a search before it was completed and then cancelling the dialog would lead to an empty scraper screen
- Game media would sometimes not get displayed after single-game scraping
- Games that were filtered out were included in the random game selection for the grouped custom collections view
- After switching theme sets with only a single system available, diagonal slide transitions would sometimes play when moving to the system view
- Ongoing slide transition animations would continue to play after switching theme sets
- When using the Video view style, the static image would not get rendered during the first Slide transition when coming from the System view
- Long game names that were horizontally scrolling in the gamelist view would sometimes flicker when returning to the start position
- On Windows, images with Unicode characters in the game name that were resized when scraping would not get saved with valid filenames
- The glitches when configuring trigger buttons in GuiInputConfig have been fixed
- GuiDetectDevice wouldn't detect controller input that was of the "axis" type (i.e. analog inputs)
- GuiInputConfig didn't correctly inform which buttons could be skipped for some rows
- The scraper would sometimes consider very small images to be invalid
- Scraper searches for Nintendo Family Computer (Famicom) games were not accurate
- The Quick System Select help prompt was shown even when there was only a single game system present
- The "Back (cancel)" help prompt was missing for the single-game scraper
- The "Y" button help prompt wasn't displayed correctly when using the Grid view style
- Fractional game rating values would always get rounded up
- Encountering a corrupt image file would lead to a continuous loop of attempts to load the image while filling the log file with error messages
- Cropping in ImageComponent didn't work correctly
- The debug logging for the analog controller inputs had some inconsistent signs