Version 2.0.0
Release date: 2023-03-11
Release overview
The 2.0 release introduces multiple fundamental changes to the application, most notably a new theme engine which brings various new concepts. The traditional view styles (basic/detailed/video/grid) have been replaced with only system and gamelist views in addition to variants, which are essentially theme profiles. These are much more flexible than view styles and can be freely defined by the theme author. The new engine is also fully generalized and almost all theme elements can be used anywhere and in unlimited numbers. Many of these elements and properties are new additions as well.
Theme variants, color schemes, aspect ratios and transitions can now be defined by the theme author and are user-selectable from within the menu system. In addition to all this new theme functionality the application is still backward compatible with legacy theme sets.
The renderer has been modernized and rewritten and while still using OpenGL it's now fully shader-based instead of using a fixed function pipeline as was the case in previous releases. Tate mode (vertical screen orientation) support has been added including the ability to rotate screen contents within the application window. Rendering performance has been greatly improved in some areas such as post processing (used for video player scanline and blur shaders among other things). A new SVG rendering library named LunaSVG has been introduced which offers much better file compatibility than before, while doing it with better performance.
Overall application speed and performance has been greatly improved with faster startup times, less latency and lower CPU utilization. Many bugs have been fixed and multiple quality of life improvements have been made. Support for a lot more systems and standalone emulators has also been included with this release, see below for more details.
Detailed list of changes
- Made fundamental changes to the application logic by removing most view styles and replacing them with a new theme variants concept
- Added theme support for defining and applying different layouts for various display aspect ratios such as 16:9 and 4:3
- Added theme support for defining and applying different color schemes
- Added theme support for defining and applying granular transition animation profiles
- Added a new grid component that is usable in both the system and gamelist views
- Made gamelist theming much more flexible by allowing any number of elements of any types to be defined
- Deprecated multiple older theming concepts like features, extras and hardcoded metadata attributes
- Renamed the default theme set from rbsimple-DE to Slate (slate-es-de)
- Ported modern-DE to the new theme engine and renamed it to Modern (modern-es-de)
- Added variant trigger (override) support to replicate the legacy theme engine automatic view style switching
- Events are now parsed during startup which avoids issues with the OS thinking the application has hung when loading
- Added an application updater that checks for new releases on startup (currently only provides notifications)
- Replaced the NanoSVG library with LunaSVG for greatly improved SVG rendering capabilities
- Added support for caching of SVG images
- Added support for sizing SVG images arbitrarily (overriding the image aspect ratio by stretching and squashing)
- Added support for 2x and 4x MSAA anti-aliasing (OpenGL renderer only)
- (Windows) Made game launching more seamless by making the application window one pixel wider instead of one pixel less in height
- gamelist.xml files are no longer loaded from the ROMs/system directories (although old behavior can be retained via an es_settings.xml option)
- Added support for always grouping custom collections under the custom collections system regardless of theme set support
- Added support for mixed-case custom collection names
- Added a startup progress bar to the splash screen
- Expanded the quick system select menu option from an on/off entry to a selection of different button combinations
- Expanded the random system or game button from an on/off entry to a selection between "Games only", "Games and systems" or "Disabled"
- Changed the order of the help system entries Y, X, B and A to instead be listed as A, B, X and Y
- Changed the start button for the screensaver from "Back" to "X"
- Changed the help system description for the "A" button in the gamelist view from "Launch" to "Select"
- Changed the menu header for the gamelist options menu from "Options" to "Gamelist options"
- Added support for the Emerson Arcadia 2001 (arcadia) game system
- Added support for the Arduboy Miniature Game System (arduboy)
- Added support for the Acorn Computers BBC Micro (bbcmicro) game system by adding the MAME standalone emulator
- Added support for the Capcom Play System I, II and III (cps1, cps2 and cps3) game systems
- Added support for the VTech CreatiVision (crvision) game system
- Added support for the Tiger Electronics Game.com (gamecom) game system
- Added support for the LCD Handheld Games (lcdgames) game system
- Added support for the Sega Mega Drive (megadrivejp) game system (Japanese region)
- Added support for the Casio PV-1000 (pv1000) game system
- Added support for the Quake (quake) game system
- Added support for the VTech V.Smile (vsmile) game system
- Added support for the WASM-4 Fantasy Console (wasm4) game system
- Added support for the Microsoft Windows (windows) game system
- Added support for the Nintendo Wii U (wiiu) game system on Linux and macOS by adding the Cemu standalone emulator
- Added support for the Infocom Z-machine (zmachine) game system by adding the Gargoyle standalone emulator
- Added support for the Ava release of Ryujinx for the switch system on Linux and Windows
- (macOS) Added support for the Nintendo Switch (switch) game system by adding the Ryujinx standalone emulator
- Added ares standalone as an alternative emulator for many systems
- Added MAME standalone as the default emulator for the macintosh system (Mac SE and Mac Plus diskette images)
- Added MAME standalone as the default emulator for the gameandwatch system
- Added Stella standalone as an alternative emulator for the atari2600 system
- Added Gopher2600 standalone as an alternative emulator for the atari2600 system on Unix and Windows
- Added PrBoom+ standalone as an alternative emulator for the doom system
- Added openMSX standalone as an alternative emulator for the colecovision, msx, msx1, msx2 and msxturbor systems
- Added SameBoy standalone as an alternative emulator for the gb and gbc systems
- Added Gearboy standalone as an alternative emulator for the gb and gbc systems on Unix and Windows
- Added puNES standalone as an alternative emulator for the famicom and nes systems on Unix and Windows
- Added Hatari standalone as an alternative emulator for the atarist system
- Added Fuse standalone as an alternative emulator for the zxspectrum system
- (Linux) Added support for the Sega Model 3 (model3) game system by adding the Supermodel standalone emulator
- (Linux) Added Supermodel standalone as an alternative emulator for the arcade and mame systems
- (Linux) Added support for the mGBA Qt and Snes9x GTK standalone emulators
- (Linux) Added support for the official xemu AppImage release
- (Linux) Added support for the AppImage release of Flycast
- (Linux) Added .esprefix file injections to the Dolphin, PrimeHack, Triforce, Yuzu and xemu standalone emulators
- Added support for the Sega Model 2 (model2) game system on Linux on macOS by adding the MAME - Current RetroArch core
- Added MAME standalone as an alternative emulator for the model2 system
- (Windows) Added the MAME - Current RetroArch core as an alternative emulator for the model2 system
- (Windows) Added a -force-feedback option and an %INJECT% variable to the Supermodel emulator for the arcade, mame and model3 systems
- Added a %GAMEDIR% variable to the -rompath option for all MAME standalone entries to allow launching games from subdirectories
- Added Triforce (Dolphin fork) standalone as an alternative emulator for the gc system on Linux and Windows
- Added simple64 standalone as an alternative emulator for the n64 system on Linux and Windows
- Added Rosalie's Mupen GUI standalone as an alternative emulator for the n64 and n64dd systems on Linux and Windows
- Added VICE standalone as an alternative emulator for the c64 (x64sc only) and vic20 systems
- (Windows) Added PrimeHack as an alternative emulator for the gc and wii systems
- (Windows) Added Project64 as an alternative emulator for the n64 system
- (Windows) Added SSF as an alternative emulator for the saturn and saturnjp systems
- (Windows) Changed the binary for emulator Citra from citra.exe to citra-qt.exe as the command line binary is broken on this OS
- Added support for the mugen system on Linux and macOS using the Ikemen GO game engine
- Added CPCemu standalone as an alternative emulator for the amstradcpc system
- Added MAME standalone as an alternative emulator for the gx4000 system
- Added MAME standalone as an alternative emulator for the atarijaguar system
- (Windows) Added BigPEmu standalone as an alternative emulator for the atarijaguar and atarijaguarcd systems
- Reverted the atarijaguarcd system to placeholder status on Unix and macOS as no emulators including Virtual Jaguar run these games properly
- Added the pcwindows platform to the ports system to improve scraping
- Added the .cdi and .cue file extensions to the atarijaguar and atarijaguarcd systems
- Added the . (dot) file extension to the xbox360 system on Windows to support extensionless XBLA games
- Added the .d64 file extension to the n64 and n64dd systems
- Added the .car and .rom file extensions to the a5200 system
- Added the .car file extension to the atari800 system
- Added the .bin file extension to the gx4000 system
- Added the .dsk file extension to the macintosh system
- Added the .m3u file extension to the pc98 and pcfx systems
- Added the .minipsf file extension to the psx system
- Removed the .7z and .zip file extensions from the 3do, neogeocd, neogeocdjp and switch systems
- Removed the .ccd and .cue file extensions from the fbneo system
- Removed the .ccd, .cue and .iso file extensions from the neogeo system
- Added the FinalBurn Neo RetroArch core as an alternative emulator for the neogeocd and neogeocdjp systems
- Added MAME standalone as an alternative emulator for the neogeo, neogeocd and neogeocdjp systems
- (Linux) Changed to find rule wildcard matching for the RetroArch, Basilisk II, DuckStation and SheepShaver AppImages
- (Linux) Added FinalBurn Neo standalone as an alternative emulator for the arcade, cps, fbneo, mame, neogeo, neogeocd and neogeocdjp systems
- (Windows) Added FinalBurn Neo standalone as an alternative emulator for the arcade, cps, fbneo, mame and neogeo system
- Set DOSBox-X and DOSBox Staging to start in the game directory so per-game dosbox.conf files can be used
- Changed the fullname for the 3do system from "3DO" to "3DO Interactive Multiplayer"
- Changed the fullname for the atomiswave system from "Atomiswave" to "Sammy Corporation Atomiswave"
- Changed the fullname for the bbcmicro system from "BBC Micro" to "Acorn Computers BBC Micro"
- Changed the fullname for the colecovision system from "ColecoVision" to "Coleco ColecoVision"
- Changed the fullname for the dragon32 system from "Dragon 32" to "Dragon Data Dragon 32"
- Changed the fullname for the samcoupe system from "SAM Coupé" to "MGT SAM Coupé"
- Changed the fullname for the uzebox system from "Uzebox" to "Uzebox Open Source Console"
- Changed the fullname for the vectrex system from "Vectrex" to "Smith Engineering Vectrex"
- (macOS) Added an additional find rule entry for DOSBox-X as the binary name has been changed
- (Linux) Added Flatpak support for Mednafen using the Mednaffe package
- (Linux) Added Flatpak support for Solarus using the Solarus Launcher package
- (Linux) Added a --fullscreen flag to the lightspark emulator for the flash game system
- Added support for folder links, used for launching game files inside folders without having to enter them
- Added a folder badge, including a folder link overlay in case a link has been configured
- Added a collection badge, shown when editing custom collections to indicate that a game is part of the collection
- Added the ability to color shift badge icons, badge controller icons and badge folder link icons
- Added the ability to center-align badges
- Adjusted the splash screen sizing to be more consistent across various screen aspect ratios
- Modernized the OpenGL renderer by replacing the fixed function pipeline with shaders
- Unified the desktop OpenGL and OpenGL ES renderers and upgraded to OpenGL 3.3 (4.6 on the Steam Deck) and OpenGL ES 3.0 respectively
- Changed the renderer pixel format from RGBA to BGRA
- Changed to premultiplied alpha for images as well as for GIF and Lottie animations, leading to a significant speed increase
- OpenGL: Added an OpenGLVersion setting for choosing between OpenGL 3.3, 4.2 and 4.6 (has to be manually set in es_settings.xml)
- OpenGL ES: Added an OpenGLVersion setting for choosing between OpenGL ES 3.0, 3.1 and 3.2 (has to be manually set in es_settings.xml)
- Greatly improved the performance of shader post-processing such as scanlines and blur rendering
- Greatly improved application startup speed by avoiding a lot of unnecessary SVG rasterizations
- Implemented dynamic texture allocation to the font code to reduce memory usage and avoid missing glyphs
- Added support for changing the saturation for font textures
- Large optimizations to the text wrapping code (generallly 300-400% faster)
- Added support for linear interpolation for font texture magnifications
- Added support for texture mipmapping with trilinear filtering
- Added on-demand texture loading to the carousel
- Improved the renderer scaling accuracy
- Added new tileSize, tileHorizontalAlignment and tileVerticalAlignment properties to the image element for better tiling support
- Added support for substituting the emulator binary in staticpath rules with an explicit command (useful for launching specific binaries in Flatpaks)
- The actual names for emulators with find rule entries are now displayed in the error popup window if they're not found during game launch
- Reorganized the UI Settings menu a bit and added entries to set the variant, color scheme, aspect ratio and transitions for newer theme sets
- Removed the "Preload gamelists on startup" setting
- Removed the "Play videos immediately (override theme)" setting
- Renamed the sound menu option "Play audio for videos in the gamelist view" to "Play audio for gamelist and system view videos"
- Added an "Ignore keyboard input" option to the input device settings menu
- (Unix) Set the "Disable desktop composition" option as disabled by default as it caused issues with some GPU drivers
- (macOS) Enabled startup animations which were previously disabled specifically for this operating system
- The media viewer now always loads all images upfront to avoid audio stutter when browsing the files
- Added support for defining which types of game media to use for all image elements (and also for the video component static image)
- Added a legacy (backward compatibility) mode for still supporting older RetroPie EmulationStation themes
- Added theme support for Lottie animations (vector graphics)
- Added theme support for GIF animations
- Added a GameSelectorComponent for displaying game media and metadata in the system view
- Added support to the system view for displaying videos, Lottie animations, GIF animations, date/time components and game ratings
- Replaced the forceUppercase theme property with a more versatile letterCase property (forceUppercase is retained for legacy theme compatibility)
- Added two letterCaseCollections and letterCaseGroupedCollections properties to control the letter case more specifically for the primary components
- Added support for overriding the default "unknown" values for the datetime and text elements (in case of missing game metadata)
- Renamed the textlist property selectorOffsetY to selectorVerticalOffset
- Added a selectorHorizontalOffset textlist property to control the selector's relative horizontal position
- Added a selectedSecondaryColor property to the textlist to highlight folder entries in the gamelist view with a different color than file entries
- Added theme support for setting the textlist indicators to symbols, ascii or none
- Added theme support for setting the textlist custom collection indicators to symbols or ascii
- Removed the "Use plain ASCII for special gamelist characters" menu option as it's now theme-controlled
- Removed the "Enable menu scroll indicators" menu option
- Removed the "Show system names in collections" menu option
- Added a menu option to retain extra MAME name information (region, version/revision, license, release date etc.) for unscraped game names
- Added theme support for appending system names to game names in collection systems
- Changed the badges default lines property value from 2 to 3
- Made it possible to set any text element as a scrollable container using either metadata values or literal strings
- Added support for defining the scrollable container speed, start delay and reset delay from the theme configuration
- Added support for arbitrary aspect ratios for RatingComponent images and also added an overlay property
- Added theme support for defining the opacity for most element types
- Added theme support for defining relative brightness for images, videos and animations
- Added theme support for defining color saturation for images, videos and animations
- Added theme support for defining the video fade-in time
- Added theme support for enabling and disabling video pillarboxes and scanline rendering
- Added theme support for defining the threshold for when pillarboxes should be applied to a video
- Added theme support for enabling or disabling audio playback for videos
- Added theme support for color shifting videos (and the static image)
- Added theme support for setting separate textColorDimmed and iconColorDimmed properties for the system and gamelist views
- Added a new cropSize property to the image and video elements to crop images and videos to the defined size
- Added two new flipHorizontal and flipVertical properties to the image element
- Added support for nesting theme variables
- Added support for defining multiple theme "variables" tags in the same XML file
- Added support for overriding/redefining variables
- When encountering missing theme include files defined by variables, a debug message is now printed instead of throwing an error
- When encountering missing theme files defined by element path properties, a debug message is now printed instead of a warning
- Added two DebugSkipMissingThemeFiles and DebugSkipMissingThemeFilesCustomCollections settings (which need to be manually set in es_settings.xml)
- Prevented loading of theme sets using the "resolution" tag introduced by RetroPie in 2020 as it's a very bad idea to use this logic
- Added support for vertical abbreviations of multiline text entries
- Disabled the pillarboxes and scanline rendering menu options when using a non-legacy theme set
- Improved theme element placement by replacing the "alignment" and "logoAlignment" properties with specific horizontal and vertical properties
- Made it possible to use almost all game metadata field when theming text elements
- Made it possible to set the image interpolation method (nearest neighbor or linear filtering) per image from the theme configuration
- Changed the helpsystem properties entrySpacing and iconTextSpacing from fixed pixel values to relative values
- Added support for using unsigned integers for theme properties
- Added a metadataElement theme property to the image, video, animation and text element types to control fading and hiding of arbitrary elements
- Added the rendering of a green rectangle around the CarouselComponent when pressing Ctrl+i while in debug mode
- Changed the color of the rectangle from blue to green for TextListComponent when pressing Ctrl+t while in debug mode
- Added scraper settings for defining a retry count and a retry timer in case of errors
- Added scraper support for displaying the returned platform if it does not match the game platform, or if multiple platforms are defined for a system
- Added scraping of fan art and updated the media viewer to display these images
- Added scraping of box back covers when using TheGamesDB
- If a wheel (marquee) image on ScreenScraper falls back to another region, then the wheel-hd image is now used instead if it matches the set region
- Removed scraping of arcade controller information using ScreenScraper as they have ruined this functionality
- Newline characters are now removed from game names when scraping with ScreenScraper (these occur in some very rare instances)
- Hex-encoded ampersand characters in game names are now converted correctly when scraping with ScreenScraper
- Added a ScreenScraper-specific option to remove dots from game name searches when using the multi-scraper in automatic mode
- Moved the option "Scrape actual folders" higher up in the scraper options menu
- Added the ability to set a manual sortname specifically for custom collections using the metadata editor
- When scraping in semi-automatic mode, horizontal scrolling of long game names are no longer reset when automatically selecting the result
- Added support for using the tilde (~) symbol in the es_systems.xml path entries to expand to the user home directory
- Reduced CPU usage significantly when a menu is open by not rendering the bottom of the stack
- Reduced CPU usage significantly by only rendering the necessary systems in SystemView
- Added support for dimming components (fade to black)
- Added support for rotating the application screen contents 0, 90, 180 or 270 degrees
- Added support for offsetting the screen contents within the application window
- Added support for running the application at a lower resolution in fullscreen padded mode
- Added logging of the display refresh rate on startup
- Made many improvements to GUI sizing and positioning when running in vertical screen resolutions
- The application startup can now be aborted via an OS signal or using the configured keyboard quit shortcut
- Improved the behavior and consistency for the virtual keyboard when using non-standard keyboard mappings
- Improved the theme loading error logging to make it consistent and easier to understand
- Added a log warning for unthemed systems during theme set loading
- Changed the warning log level for missing theme files to debug level if the paths are set using variables
- Added new theme system variables for differentiating between collections and non-collection systems
- Added shader support for performing BGRA to RGBA color conversion
- Added opacity support to the scanline shader
- Added the rlottie library as a Git subtree
- Updated to build correctly with FFmpeg 5.1
- Updated FFmpeg to 5.1.2, FreeType to 2.12.1 and pugixml to 1.12.1 on Windows and macOS
- Updated SDL to 2.26.3 on Windows, macOS and the Linux AppImage builds
- Updated curl to 7.86.0 on Windows
- Added a workaround for playing broken video files with invalid PTS values
- Refactored the rendering code from a shared namespace into proper classes
- Removed the deprecated OpenGL ES 1.0 renderer
- Increased the maximum VRAM limit from 1024 MiB to 2048 MiB
- Increased the minimum VRAM limit from 80 MiB to 128 MiB
- Increased the default VRAM limit from 256 MiB to 512 MiB
- Increased the default VRAM limit for the Raspberry Pi from 184 MiB to 192 MiB
- (Unix) Removed the RetroArch core directory for the NixOS and nixpkgs repository
- The .emulationstation/gamelists directory is now created on application startup instead of when scraping for the first time
- On Windows all dependencies were moved in-tree to the "external" directory to greatly simplify the build environment
- Updated the build scripts to support native M1/ARM builds on macOS
- Improved the in-tree build on macOS to not needing to install any libraries when compiling the "external" dependencies
- When building as an AppImage a current SDL library release is now built and bundled instead of including the OS-supplied version
- When building as an AppImage the "data" directory (e.g. /usr/share/emulationstation) is now excluded when looking for resources and themes
- Added libGLdispatch.so.0 to the AppImage to fix a crash introduced by a Mesa library update
- Updated the CImg library to commit 4d061dcd67c08e9a36a01875e78b53ee86501dd7
- Large refactoring to improve thread safety and singleton pattern usage
- Made the logging thread safe
- (Windows) Changed many log entries to use backslashes instead of forward slashes as directory separators
- Added the build date to to main menu for alpha, beta and dev builds
- Added a left trigger + right trigger help system icon and removed the deprecated hotkey icon
- Added PlayStation 1/2/3 and Switch Pro controller type support
- Renamed some SNES controller button assets to be more intuitive
- (slate-es-de) Recreated the Nintendo GameCube controller as the old graphics had some issues and was not accurate
- Added Nintendo GameCube, Sega Master System and Sega Dreamcast controller badge icons
- Added an arcade twin stick controller badge icon
- Moved all Platform functions to the utility namespace instead of using the global namespace
- Implemented proper XML attribute support in ThemeData that eliminates the risk of name collisions
- Added size restrictions to images and fonts so incorrect theme configuration would not lead to crashes or excessive memory utilization
- Made animations on the carousel better looking by using a new non-linear interpolation method
- Migrated the carousel code from SystemView to a separate CarouselComponent
- Changed the carousel properties to be more generic by renaming "logo" to "item", e.g. itemSize, maxItemCount etc.
- Added the properties "itemsBeforeCenter" and "itemsAfterCenter" to define entries for carousels of the wheel type
- Added support for horizontal wheel carousels
- Added two wheelHorizontalAlignment and wheelVerticalAlignment properties for aligning wheel carousels within the overall element area
- Added reflections support to the carousel
- Added a new itemAxisHorizontal property to the carousel to keep wheel items horizontal at all times
- Added a new imageFit property to the carousel to allow items to be stretched/squashed or cropped to the defined item size
- Added carousel theme support for setting the opacity, saturation and dimming for unfocused items
- Added carousel theme support for applying image color shifts
- Added carousel theme support for defining image brightness
- Added carousel theme support for defining image saturation
- Added carousel theme support for setting item transitions to "slide" or "instant"
- Added carousel theme support for enabling faster scrolling speed with a third scroll tier
- Added carousel theme support for controlling item stacking for overlapping items
- Added carousel theme support for defining margins around the currently selected item
- Added carousel theme support for rotating items around their own axis (not supported for wheel carousels)
- Added carousel theme support for color shifting the selected item
- Added carousel theme support for offsetting items to achieve a diagonal layout
- Added a fadeAbovePrimary property to control whether elements above the system view carousel and textlist should be rendered during fade transitions
- Removed support for the thumbnail game media type
- Changed all occurances of "GameList" to "Gamelist" throughout the codebase
- Removed a huge amount of unnecessary Window* function parameters throughout the codebase
- Removed a lot of unnecessary applyTheme() calls when updating help prompts
- Removed the last remnants of the PowerSaver
- Removed the RetroPie ES sizing bug replication from TextListComponent for non-legacy theme sets
- Added checks for nonexistent navigation sounds in the theme configuration with fallback to the default sounds
- Changed the opacity data type and functions from unsigned char to float throughout the codebase
- Refactored the six gamelist classes into two new classes; GamelistBase and GamelistView
- Rewrote the gamelist logic to handle an arbitrary amount of components per type and split the legacy code into a separate file
- Renamed Gamelist.cpp to GamelistFileParser.cpp and moved it to its own namespace instead of using the global namespace
- Renamed GuiGameScraper.cpp to GuiScraperSingle.cpp
- Renamed SystemScreensaver.cpp to Screensaver.cpp
- Refactored RatingComponent to improve rendering accuracy and performance
- Moved UIModeController.cpp from the es-app/views directory to es-app
- Set the clang-format option SpaceBeforeCpp11BracedList to true and reformatted the codebase
- Added the clang-format option AllowShortEnumsOnASingleLine and set it to false
- Removed some unnecessary typedefs and replaced the remaining ones with the more modern "using" keyword
- Greatly simplified the video controls code (play/stop/pause etc.)
- Removed the deprecated VideoVlcComponent
- Removed the deprecated tools/update_theme_formatversion.sh script
- Lots of general code cleanup and refactoring
- (Windows) Added error handling to StringUtil::stringToWideString() and StringUtil::wideStringToString() to perform an emergency shutdown if needed
- Updated the MAME index files to include ROMs up to MAME version 0.251
- Added a program release number in addition to the version number
- Changed tools/create_AppImage.sh to not include version information in the AppImage filename
- Updated and improved the theming documentation
Bug fixes
- Multiple levels of symlinking in the ROMs directory tree could crash the application on startup
- Adding a dot (.) to the es_systems.xml extension tag (to setup extensionless entries) led to a crash if the system contained folders
- Enabling collections from the Game Collection Settings menu could crash the application in some rare cases
- There was a use after free issue in the multi-scraper which could in theory crash the application
- Running with the --force-input-config command line option and aborting the input configuration would lead to a black screen and eventually a crash
- Parsing of .desktop files on Unix did not properly handle escaping of % characters which made game launching fail for some RPCS3 games
- For the cps system, MAME standalone was configured with the wrong system directory for the -rompath option, pointing to "arcade" instead of "cps"
- Invalid ScreenScraper game entries were sometimes not filtered out from server responses
- During some menu operations that reloaded the gamelist view, the cached background could miss some components as they were not rendered in time
- Text wrapping did not work correctly for text that typically does not contain spaces, like Japanese
- Changing some values using the metadata editor could lead to an incorrect sort order if the changes were done from within a grouped custom collection
- Changing the setting "Group unthemed custom collections" could lead to incorrect custom collections sorting under some circumstances
- For gamelists which mixed files and folders, the folder sorting was sometimes incorrect
- Incorrect folder paths were displayed in the metadata editor if the setting "Only show ROMs from gamelist.xml files" was enabled
- Games located in subdirectories were not added back to custom collections when disabling the "Exclude from game counter" metadata option
- Enabling and then disabling the "Exclude from game counter" metadata option would remove a game from all currently disabled custom collections
- Navigation sounds for the trigger buttons would play when repeatedly pressed at the start or end of textlists
- Slide and fade transitions would sometimes stop working after changing theme sets
- Using fade transitions, when holding a direction button to scroll the system view carousel, the key repeat would cause an unwanted background rendering
- Textlist entries would sometimes scroll horizontally even though they fit inside the element width
- A star was included in the quick selector for gamelists that had a mix of files and folders but where only folders were marked as favorites
- Custom collections editing mode did not end when switching UI modes
- Editing a folder using the metadata editor added any new values to the filter index, even though it shouldn't be possible to filter folders directly
- There were multiple issues with filtering games inside folders (too many games filtered, inconsistent behavior etc.)
- The outermost logos would sometimes glitch out during carousel transitions
- Horizontal and vertical gradients were mixed up (showing the opposite gradient type if set in a theme)
- The VideoComponent static images were not fading out smoothly on gamelist fast-scrolling
- Rating icon outlines would not fade out correctly when fast-scrolling in a gamelist
- The rating icons would not fit into the designated space in the scraper GUI when running at some vertically oriented screen resolutions
- The game description would start to scroll too late when running the multi-scraper in semi-automatic mode
- If setting an origin other than 0.5 for a video with pillarboxes enabled, the video would not get centered on the black rectangle
- The video player output frame width was not set correctly which made some videos render as garbled when using FFmpeg 5.1 and later
- If a gamelist scroll fade-in animation was playing when opening a menu, it would continue to play after closing the menu
- The gamelist quick list scrolling overlay would not disappear as intended under some circumstances
- Using the trigger buttons to jump to the start or end of a gamelist did not reset any currently held navigation buttons
- When a legacy theme set had a video view style but did not have a valid md_video entry then the video player would still start (and play the audio)
- Clearing a game in the metadata editor would sometimes not remove all media files (if there were both a .jpg and a .png for a certain file type)
- Adding collections or changing collection settings could sometime lead to the gamelist not getting rendered until navigating away from the current system
- The tile property for the image element did not work correctly with SVG images
- Defining an itemScale (logoScale) property lower than 1.0 for the carousel did not work correctly
- Carousel text did not get scaled/multiplied correctly with the itemScale property (bug retained for legacy themes for maximum backward compatibility)
- Letters would sometimes get rendered with ugly edge artifacts, visible when scaling text on the carousel
- Text opacity did not work correctly in some places, such as for the help prompts
- ScrollableContainer faded semi-transparent text to fully opaque when resetting
- ScrollableContainer faded in the background text color in addition to the text color when resetting
- Text elements that had an opacity set to lower than FF via the color tag were faded in during gamelist scrolling
- The help system was offset by the entrySpacing property width when right-aligned using an X origin value of 1
- The help system was rendered on top of menus if placed at such a location on the screen
- The help system "A" button was incorrectly shown as "Apply" instead of "Newline" when using the virtual keyboard with multi-line input fields
- Theme sets were not always sorted correctly (as seen when mixing uppercase and lowercase letters in theme names)
- The SliderComponent knob was not consistently positioned
- The device text flickered in GuiDetectDevice when configuring a controller
- The selector bar was not aligned correctly during menu scale-up animations
- The bottom menu separator bar was not getting rendered when running at really low resolutions like 320x240
- Doing a manual reload using Ctrl+r in debug mode would sometimes not update modified image files
- Abbreviations of long words in multiline text entries sometimes exceeded the designated text area
- Navigation sounds would sometimes not play when browsing game media in the media viewer
- When defining the same sound file for multiple navigation sounds in the theme configuration an error was logged to es_log.txt on theme change
- The text debug overlay had the wrong size for scrollable containers
- The textlist debug overlay would sometimes get positioned incorrectly
- StringUtil::delimitedStringToVector could return empty elements
- (Windows) File paths would get escaped with quotation marks even if they did not contain any spaces
- (Windows) The emulator binary path would sometimes not get escaped correctly in es_log.txt on game launch
- The .chd and .rp9 file extensions were missing for the amigacd32 system on macOS and Windows