Version 1.2.0
Release date: 2021-12-28
Release overview
The 1.2 release introduces multiple new features and brings extensive bug fixing and lots of other small improvements. Support for alternative emulators has been added which can be selected system-wide or per game. These alternative emulators are added to the es_systems.xml file, making it easy to expand or customize the configuration. For this release most of the available RetroArch cores have been preconfigured, and a couple of standalone emulators have been included as well.
A virtual keyboard has been added (some code borrowed from Batocera.linux) which is fully integrated and can be used to input text via a game controller. By introducing this feature, a keyboard should now be completely optional for day-to-day use.
Another new feature is support for badges that display icons in the gamelist view indicating favorite games, completed games, game-specific controllers etc. Note that these badges require support from the theme set. And on the topic of theme sets, a new theme named modern-DE has been included with the installation as an alternative to the default rbsimple-DE theme.
The scraper has been improved and expanded, and in addition to the previously supported media it can now scrape box back covers, title screens and physical media images (cartridges, diskettes, tapes, CD-ROMs etc.). These physical media images are also included in the generated miximages, although that can be disabled using a menu option.
As for supported platforms, v1.2 brings official support for the Raspberry Pi 4/400, both for the 32-bit (armv7l) and 64-bit (aarch64) versions of Raspberry Pi OS.
Apart from all the above, a huge amount of work has gone into fixing bugs, refactoring the code and optimizing for performance. The language standard has been increased from C++14 to C++17 and the built-in vector and matrix data types and functions have been replaced with the GLM (OpenGL Mathematics) library equivalents.
Detailed list of changes
- Added alternative emulators support where additional emulators can be defined in es_systems.xml and be selected system-wide or per game via the user interface
- Populated the bundled es_systems.xml files with alternative emulator entries for most RetroArch cores
- Added a virtual keyboard, partly based on code from batocera-emulationstation
- Added badges that indicate favorite/completed/broken games as well as games suitable for children and those with a selected alternative emulator
- Added game-specific controllers that are selectable via the metadata editor and displayed as a controller badge
- Added scraping of title screens, box back covers and physical media images
- Updated the media viewer to display title screens and box back cover images
- Added physical media images to the generated miximages
- Added an option to rotate horizontally oriented game boxes when generating miximages
- Added size options (small/medium/large) for the boxes/covers and physical media images when generating miximages
- Added support for the Raspberry Pi 4 (Raspberry Pi OS 32-bit/armv7l and 64-bit/aarch64)
- Bundled a new alternative theme "modern-DE" which supports all the latest features from this release
- Changed the Unix fullscreen mode and removed the --windowed, --fullscreen-normal and --fullscreen-borderless command line options
- Removed the Unix-specific menu option "Fullscreen mode (requires restart)"
- Changed the Windows fullscreen mode and removed the "AMD and Intel GPU game launch workaround" menu option
- Made game launching more seamless on Windows for all GPU types
- Added the ability to make complementary game system customizations without having to replace the entire bundled es_systems.xml file
- Added support for an optional <systemsortname> tag for es_systems.xml that can be used to override the default <fullname> systems sorting
- Added a "winregistryvalue" find rule for Windows which can be used to retrieve emulator installation locations from arbitrary Windows Registry keys
- Added a %RUNINBACKGROUND% es_systems.xml variable and removed the hardcoded run in background logic for the Valve Steam system
- Added support for prefixing the %EMULATOR_% variable in the es_systems.xml file with a command, for example to use Wine to launch Windows emulators on Linux
- Added proper support for interpreting directories as files (for use with emulators where directories rather than files are passed during game launch)
- Added menu scroll indicators showing if there are additional entries available below or above what's currently shown on screen
- Added scraping of controller metadata (only for ScreenScraper and only for arcade systems)
- Improved the layout of the scraper GUIs (single-game scraper and multi-scraper)
- Added horizontal scrolling of long game names to the scraper GUIs
- Removed the "Scrape" text prefix from the scraper content settings
- Setting a blank name for an arcade game in the metadata editor now sets the value to the MAME expanded name instead of the physical file name
- Added proper frame drop functionality to the FFmpeg video player to greatly reduce stuttering on slower machines
- Made multiple optimizations to the FFmpeg video player to reduce CPU usage and to increase framerates on slower machines
- Disabled the FFmpeg video player hardware decoding option (it can still be built using a CMake flag)
- Significantly reduced the CPU usage on macOS while running in the background
- Removed the copying of es_settings.cfg to es_settings.xml as it caused issues when migrating from other EmulationStation forks
- Improved the gamelist filter GUI to not allow filtering of values where there is no actual data to filter, e.g. Favorites for a system with no favorite games
- Grayed out all fields in the gamelist filter GUI where there is no data to filter, previously some fields were removed entirely and some could still be used
- Added filters for "Controller" and "Alternative emulator" and sorted the filters in the same order as the metadata editor fields
- Added the ability to filter on blank/unknown values for Genre, Player, Developer, Publisher, Controller and Alternative emulator
- Added a menu option to change the application exit key combination
- If there are no custom collections, the "Custom game collections" menu entry is now grayed out
- Added an option to preload the gamelists on startup which leads to smoother navigation when first entering each gamelist
- Increased the amount of arguments for the custom event scripts from two to four
- Added the system name and full system name as additional arguments to the game-start and game-end custom events
- Lowered the minimum supported screen resolution from 640x480 to 224x224 to support arcade cabinet displays such as those running at 384x224 and 224x384
- Removed the ResidualVM system as it has been merged with ScummVM
- Added support for the Commodore VIC-20, Epic Games Store, Google Android, Java 2 Micro Edition, Philips CD-i and Symbian systems
- Added emulator configurations for the Microsoft Xbox, Microsoft Xbox 360 and Sony PlayStation 3 systems
- Added support for a more advanced system view carousel logo placeholder (for unthemed systems) by allowing the combination of text and graphics
- Expanded the themeable options for "helpsystem" to support custom button graphics, dimmed text and dimmed icon colors, upper/lower/camel case and custom spacing
- Made the scrolling speed of ScrollableContainer more consistent across various screen resolutions and display aspect ratios
- Decreased the amount of text that ScrollableContainer renders above and below the starting position as content is scrolled
- Made the game name and description stop scrolling when running the media viewer, the screensaver or when running in the background while a game is launched
- Added notification popups when plugging in or removing controllers
- Made large optimizations to the SVG rendering which reduces application startup time dramatically when many systems are populated
- Changed to loading the default theme set rbsimple-DE instead of the first available theme if the currently configured theme set is missing
- Added support for displaying the left and right trigger buttons in the help prompts
- Removed the "Choose" entry from the gamelist view help prompts
- Replaced a number of help prompt hacks with proper solutions
- Changed the "Toggle screensaver" help entry in the system view to simply "Screensaver"
- Changed the font size for the custom collection deletion screen to use the same size as all other menus
- Added support for upscaling bitmap images using linear filtering
- Changed the marquee image upscale filtering from nearest neighbor to linear for the launch screen and gamelist views
- Made the window corners slightly more rounded
- Moved the Media viewer and Screensaver settings higher in the UI settings menu
- Moved the game media directory setting to the top of the Other settings menu, following the new Alternative emulators entry
- Moved the ScreenScraper account toggle to the bottom of the scraper account settings menu
- Lowered the default volumes slightly for videos and navigation sounds
- Added loading of the System view to the ViewController preload function to decrease theme extras texture pop-in
- Disabled the application startup animations on macOS as they were very choppy and looked bad after moving to SDL 2.0.18
- Changed the filter description "Text filter (game name)" to simply "Game name" and a keyboard icon
- Removed a margin hack from TextComponent
- If abbreviated strings end with a space character, that space is now removed (TextComponent)
- Added support for multi-select total count and exclusive multi-select to OptionListComponent
- Added support for a maximum name length to OptionListComponent (non-multiselect only) with an abbreviation of the name if it exceeds this value
- Added support for key repeat to OptionListComponent, making it possible to cycle through the options by holding the left and right buttons
- Added key repeat for the "Jump to" and "Sort games by" selectors on the game options menu
- Added key repeat when editing the "Release date" entry in the metadata editor (DateTimeEditComponent)
- Added support for setting the Kidgame metadata flag for folders (which will only affect the badges)
- Added a blinking cursor to TextEditComponent
- Achieved a massive speed improvement for OptionListComponent by not resizing each added MenuComponent row (most notable in the filter GUI)
- Made multiple optimizations to the GUI components by removing lots of unnecessary function calls for sizing, placement, opacity changes etc.
- Simplified the logic for info popups and prepared the code for the future "multiple popups" feature
- Added support for a new type of "flat style" button to ButtonComponent
- Added support for correctly navigating arbitrarily sized ComponentGrid entries, i.e. those spanning multiple cells
- Bundled the bold font version of Fontfabric Akrobat
- Moved the resources/help directory to resources/graphics/help
- Removed the unused graphics files resources/graphics/fav_add.svg and resources/graphics/fav_remove.svg
- Added RapidJSON as a Git subtree
- Added the GLM (OpenGL Mathematics) library as a Git subtree
- Replaced all built-in matrix and vector data types and functions with GLM library equivalents
- Replaced some additional math functions and moved the remaining built-in functions to a math utility namespace
- Added a function to generate MD5 hashes
- Improved thread safety at multiple places throughout the codebase
- Made an optimization for SVG graphics to avoid a lot of unnecessary re-rasterizations
- Made all dependencies build in-tree on macOS instead of having to rely on Homebrew-supplied libraries
- Added a script to generate an AppImage on Linux
- Lots of other general code refactoring
- Increased the warning level for Clang/LLVM and GCC by adding -Wall, -Wpedantic and some additional flags
- Fixed a lot of compiler warnings introduced by the -Wall and -Wpedantic flags
- Changed the language standard from C++14 to C++17
- Increased the minimal required compiler version to 5.0.0 for Clang/LLVM and 7.1 for GCC
- Added CMake options to build with AddressSanitizer, ThreadSanitizer and UndefinedBehaviorSanitizer
- Changed two clang-format rules related to braced lists and reformatted the codebase
- Upgraded the bundled SDL version 2.0.14 to 2.0.18 on Windows and macOS
- Bundled the October 2021 release of the Mozilla TLS/SSL certificates
- Updated the MAME index files to include ROMs up to MAME version 0.237
- rbsimple-DE: Added some missing graphics for the xbox360 system
- rbsimple-DE: Improved existing graphics for the dos, pc and scummvm systems
- rbsimple-DE: Updated the info text for most systems
Bug fixes
- Single-scraping a game, aborting and then re-scraping without leaving the metadata editor would sometimes lead to a crash
- Setting a really small font size in a theme would crash the application
- Text containing invalid (partial) Unicode characters could crash the application
- Deleting the last custom collection could crash the application if the grouped "collections" system was set as the startup gamelist
- Connecting a controller with buggy drivers could crash the application
- Setting an invalid UIMode value in the configuration file could crash the application
- Setting an invalid scraper service value in the configuration file could crash the application
- When scraping in interactive mode with "Auto-accept single game matches" enabled, the game name could not be refined if there were no games found
- When scraping in interactive mode, the game counter was not decreased when skipping games, making it impossible to skip the final games in the queue
- When scraping in interactive mode, "No games found" results could be accepted using the "A" button
- When scraping in interactive mode, any refining done using the "Y" button shortcut would not be shown when doing another refine using the "Refine search" button
- When scraping in interactive mode, the first result row would get focused after the search completed even if the cursor was moved to a button beneath the list
- The multi-scraper did not update the filter index
- Multi-scraping and aborting before any games were fully scraped but after some game media was downloaded did not trigger a gamelist reload
- (Windows) Launching a game that changed the screen resolution would offset the ES-DE application window when exiting
- (Windows) Enabling the option to hide the taskbar would sometimes not focus the application window on startup (possibly only an issue on Windows 8.1)
- If there were gamelist.xml entries for existing files whose extensions were not setup in es_systems.xml, these would still get loaded and displayed
- Fixed multiple minor rendering issues where graphics would be slightly cut off or incorrectly sized
- Under some circumstances ScrollableContainer (used for the game descriptions) would contain a partially rendered bottom line
- If the TextListComponent height was not evenly dividable by the font height + line spacing, a partial bottom row would get rendered
- The line spacing for TextListComponent was incorrectly calculated for some resolutions such as 2560x1440
- Fixed multiple issues with scaling of images which led to various inconsistencies and sometimes cut-off graphics
- The system time zone was not taken into consideration when using the Unix epoch which lead to various strange problems in the metadata editor
- Removing games from custom collections did not remove their filter index entries
- Enabling the All Games collection lead to a potentially large memory leak under some circumstances
- Input consisting of only whitespace characters would get accepted by TextEditComponent which led to various strange behaviors
- Leading and trailing whitespace characters would not get trimmed from the ROM directory when entering this during initial setup
- Leading and trailing whitespace characters would not get trimmed from the collection name when creating a new custom collection
- Leading and trailing whitespace characters would get included in scraper search refines and TheGamesDB searches
- Leading and trailing whitespace characters would get included in game name filters
- Fixed multiple data races throughout the codebase caused by insufficient thread safety
- Game name (text) filters were matching the system names for collection systems if the "Show system names in collections" setting was enabled
- Brackets such as () and [] were filtered from game names in collection systems if the "Show system names in collections" setting was enabled
- If a theme used the forceUppercase property for a TextListComponent, this value was always set to true even if the theme defined it as false
- Fixed multiple issues where ComponentGrid would display incorrect help prompts
- Help prompts were missing for the "Rating" and "Release date" fields in the metadata editor
- There was some strange behavior in DateTimeEditComponent when changing the date all the way down to 1970-01-01
- When navigating menus, the separator lines and menu components did not align properly and moved up and down slightly
- Under some circumstances and at some screen resolutions, the last menu separator line would not get rendered (still an issue at extreme resolutions like 320x240)
- When scrolling in menus, pressing other buttons than "Up" or "Down" did not stop the scrolling which caused all sorts of weird behavior
- With the menu scale-up effect enabled and entering a submenu before the parent menu was completely scaled up, the parent would get stuck at a semi-scaled size
- The launch screen text had ugly scaling artifacts if the menu opening effect was set to "Scale-up"
- The custom collection deletion screen had incorrect row heights when running at lower resolutions such as 1280x720
- If there was an abbreviated full system name for the "Gamelist on startup" option, that abbreviation would also get displayed when opening the selector window
- Really long theme set names would not get abbreviated in the UI settings menu, leading to a garbled "Theme set" setting row
- Disabling a collection while its gamelist was displayed would lead to a slide transition from a black screen if a gamelist on startup had been set
- When marking a game to not be counted in the metadata editor and the game was part of a custom collection, no collection disabling notification was displayed
- When running really low on texture memory, the menu texture would not get rendered correctly
- At low screen resolutions, logos on the System view carousel would sometimes jump down a pixel when scaling down
- There was a tiny and randomly occuring gap between the system carousel and systemInfo bar during slide transitions between the System and Gamelist views
- The "no games" dialog did not have correct line wrapping when running at 1280x1024
- SliderComponent had very inconsistent widths at different screen aspect ratios
- SliderComponent did not properly align the knob and bar vertically
- Buttons were not sized and padded consistently across different screen resolutions
- OptionListComponent arrows were not padded consistently across different screen resolutions
- Resizing in SwitchComponent did not reposition the image properly leading to a non-centered image
- Horizontal sizing of the TextComponent input field was not consistent across different screen resolutions
- The sizing of the metadata editor was strange, which was clearly visible when activating the Ctrl+G debug mode
- The "sortname" window header was incorrectly spelled when editing this type of entry in the metadata editor
- When the last row of a menu had its text color changed, this color was completely desaturated when navigating to a button below the list