RetroArch 1.12.0 release


RetroArch 1.12.0 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Views

This view lists all games in your collection released in the year 2000.
This view lists all games in your collection released in the year 2000.

There is now an entirely new way to display and organize content – Views!

You can turn a filter set in the Explore menu into a so called “View” file which then gets listed alongside playlists. This also adds the ability to filter a category by range in the Explore menu and not just filter on exact matches.

The views are saved into .lvw (libretro view) files that just like playlist .lpl (libretro playlist) files are in JSON format and are stored in the same playlists directory.

You can combine several filters in whichever order you see fit and then save the results as a view
You can combine several filters in whichever order you see fit and then save the results as a view

Here’s some examples of views that are now possible with the new range filtering:

  1. Games made between 1992 and 1996 by developers Capcom and Capcom Production Studio 1
  2. Games supporting 5 to 8 players
  3. Games containing “Mario” in the title released between 1988 and 1994

These are just some examples of what is possible with this new system. It’s a pretty powerful system, and we hope this gives you a lot of flexibility to better organize your content.

How to use it

  1. Go to Explore screen/tab.
  2. Search through the list of games sorting through it however you want, then once you’re satisfied with the output, select ‘Save As View’. It will now add this ‘view’ to the playlist list. In Ozone, you can select it from the left popup toolbar. In XMB it will show up next to your playlists. NOTE: You can currently not rename views from within the application.

    Android – Haptic feedback for touch overlays

    Courtesy of neil4 who implemented this great feature
    This repurposes the setting ‘Vibrate On Key Press’, which previously enabled a 16ms vibration on any screen touch.

    Now the device’s standard keypress feedback is triggered on overlay key/button state changes, except when a finger leaves the screen.

    It’s currently only implemented for Android, but it can potentially be implemented for other systems with haptic feedback later. It’s not enabled by default for now so you will have to enable it manually. To do this, go to Settings -> Input -> Haptic Feedback/Vibration, and enable ‘Vibrate On Key Press’.

    iOS 13+ port

    The iOS ARM64 port is completely revamped and targets iOS 13 and later now. It leverages Swift and it has some unique features.

    iOS 13+ port now has a toolbar which lets you pull up an onscreen keyboard
    iOS 13+ port now has a toolbar which lets you pull up an onscreen keyboard

    For instance, it adds support for revealing the onscreen keyboard and enabling touch screen mouse input by adding a toolbar that is revealed by tapping the top of the screen.

    There is also now an iOS 16 lockscreen widget.

    WiiU improvements

    Some important WiiU platform improvements. Default directories should now be created on the fly (fixing a longstanding issue), and some of the networking issues that popped up in 1.11.x have now been fixed.

    Changelog

    1.12.0

    • CONFIG/CLI: Allow use of –appendconfig with override cfgs instead of getting ignored
    • CONFIG/LOGGING: No more console startup logging if logging to file
    • CONFIG: Saves config on exit only once instead of (worst case scenario) 3 times
    • DATABASE/EXPLORE/VIEW: Add View feature – Add saving of a filter set in the Explore menu into a so called “View” file which then gets listed alongside playlists. This also adds the ability to filter a category by range in the Explore menu and not just filter on exact matches.
    • FILEBROWSER: Fix regression – certain extensions keep disappearing
    • IOS: New modern iOS version (targeting iOS 13 and up), leverages Swift
    • IOS: Fixes to iOS toolbar
    • IOS16: Add iOS 16 lock screen widget
    • IOS13+: Added emulator keyboard
    • IOS13+: Add JIT support for non-jailbroken devices
    • IOS13+: Added support for touch mouse handler
    • IOS13+: Changed click-and-drag behavior to double tap hold and drag
    • INPUT/HAPTIC/OVERLAYS/ANDROID: Improve haptic feedback for input overlays
    • LINUX/MALI FBDEV: Add conditional support for OpenGL ES 3.x
    • LOCALIZATION: Updates
    • LOCALIZATION/ENGLISH: Add British English language option
    • LOGGING/QT: Increase log buffer to 2048 characters – Vulkan validation layer messages output correctly now.
    • MENU/XMB: Remember selection per main tabs. Addresses the following : collection playlists can contain hundreds or thousands of items. When scrolling through one, pressing left or right by accident can be common. This resets the playlist to the top
    • MIST/STEAM/STEAMDECK: Don’t expose Black Frame Insertion (BFI) if we are running on a Steam Deck
    • NETWORKING/WINDOWS: Disable poll support for MSVC 2010 and earlier. WSAPoll is not supported on Windows XP and earlier.
    • NETWORKING/WIIU: Fix socket_connect_with_timeout for WIIU
    • NETWORKING/WIIU: Fixes RetroAchievements login
    • NETWORKING/WIIU: Fixes other online updater functionality
    • SAVESTATES/NOTIFICATIONS: Add delay to savestate notifications, so that GPU savestate screenshots stay untouched
    • SAVESTATES/SCREENSHOTS: Avoid ‘video_gpu_screenshot’ with savestates. Allow GPU screenshots with savestates only when there is no other way of getting a screenshot.
    • SCREENSHOTS/VULKAN: Unload screenshot widget texture early. Fixes Vulkan crash when closing content while a screenshot widget is still on-screen
    • SCREENSHOTS/VULKAN: Fix screenshot widget crash when ticker animating
    • WAYLAND: Set correct app ID
    • WIIU: Add some missing default directories
    • WIIU: Get mkdir working on WiiU (directory creation)

RetroArch 1.11.1 release!


RetroArch 1.11.1 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

NOTE: The Android version on Samsung Galaxy Store, Huawei AppGallery, and Amazon App Store will be updated soon. We will remove this notice when it has been updated. Until then, grab the APK from our site.

NOTE: Several size optimizations have been made to the packages. We no longer pre-install all of the optional XMB theme packs or other miscellaneous assets. Previously we also shipped autoconfig files that were irrelevant for that specific platform. By excluding these files from the package, we have managed to reduce the filesize and overall amount of files of RetroArch downloads/installs significantly. On consoles this will be very helpful where SD card/FTP installs can tend to be very slow.

If you still want to have all assets, you can go to Online Updater and select ‘Update Assets’. This will install all assets.

Changelog

1.11.1

  • GENERAL: Fix DEFAULT_FILL_TITLE_MACRO
  • NETWORKING: Add the const qualifier to some function parameters
  • NETWORKING/NETPLAY/UPNP: Add a private or CGNAT address warning to UPnP
  • SAVESTATES/SCREENSHOTS: Avoid ‘video_gpu_screenshot’ with savestates
  • UWP: Better ‘Save on quit’ fix

1.11.0

  • 3DS: Add unique ID’s
  • 3DS: Add bottom menu options
  • 3DS: Set bottom_asset directory default
  • 3DS: Only enable internal counter with CONSOLE_LOG defined
  • 3DS: Set default bottom font values
  • 3DS: Fix CIA installation issues
  • 3DS: Support latest libctru
  • ANDROID: Add HAVE_ACCESSIBILITY
  • ANDROID: Gingerbread support
  • ANDROID: Touchpads support
  • ANDROID: Builtin Xperia Play autoconfig profile
  • ANDROID: Disable Feral GameMode for Android – only available on Linux
  • ANDROID: Add a configurable workaround for Android reconnecting devices
  • ANDROID/FDROID: Add F-Droid metadata to repo in Fastlane format
  • AUDIO/AUDIO MIXER: Add missing locks for thread safety
  • AUDIO/AUDIO MIXER: Fix audio mixer memory leak + remove redundant ‘single threaded’ rthreads implementation
  • AUTOSAVE: Change/improve exit behavior of autosave thread – if condition variable is signaled, the loop is ran another last time so we can do a final check/save before stopping the thread.
  • CDROM: Fix memory leak caught with asan – buf passed to filestream_read_file
  • CORE INFO/NETPLAY: Ensure current core info is initialized at runloop_event_init_core when netplay is enabled
  • CHEEVOS: Upgrade to rcheevos 10.4
  • CHEEVOS: Allow creating auto savestate in hardcore
  • CHEEVOS: prevent invalid memory reference if game has achievements but core doesn’t expose memory
  • CHEEVOS: Release achievement badge textures when video driver is deinitialized
  • CHEEVOS: Re-enforce hardcore limitations once achievements are loaded
  • CHEEVOS/MENU/MATERIALUI: Show achievement badge icons in MaterialUI driver
  • D3D9: D3D9 has been split up into two drivers – D3D9 HLSL (max compatibility, no shader support yet) and D3D9 Cg (dependent on deprecated Nvidia Cg runtime library)
  • D3D9/HLSL/XMB: XMB fix
  • D3D9/CG: D3D9 Cg driver fixed
  • D3D11: Fix overlay not showing up
  • D3D11/12: Reduce lag with WaitForVBlank – this rather simple addition seems to make D3D11/12 very very close to Vulkan/GLCore regarding input lag.
  • D3D11/12: Add waitable swapchains and max frame latency option
  • D3D11/12: Make waitable swapchains optional
  • DATABASE: Reformat ‘rdb_entry_int’ – Nitpick adjustments for database entries: Capitalize “Release Date”, and remove space before : from Release Date rows which use integer
  • DATABASE/EXPLORE: Allow On-Demand Thumbnails in Explore menu
  • DATABASE/EXPLORE/MENU/OZONE/XMB/RGUI: Explore menu thumbnails
  • DISC CONTROL: Better Disc Control append focus
  • DOS/DJGPP: Add a workaround for libc bug
  • AUTOMATIC FRAME DELAY: Added slowmotion resiliency
  • AUTOMATIC FRAME DELAY: Added string representation for seeing the current effective delay without opening statistics
  • AUTOMATIC FRAME DELAY: Added “ms” to logging and “(ms)” to label just like in Audio Latency
  • GENERAL: Don’t bake in OpenAL and libcaca by default unless explicitly enabled with configure switch.
  • GENERAL: Reduce amount of strlen calls
  • GENERAL: Reduce or simply sin/cosf calls
  • GFX: Fix readability and precision issues in aspectratio_lut
  • GFX: Add option to manually enable/disable automatic refresh rate switching
  • GFX: Enable automatic configuration of ‘VSync Swap Interval’
  • GFX/FONT/FREETYPE: Use FT_New_Memory_Face – first read it from file to memory beforehand –
    this solves an asset extraction issue when selecting ‘Update Assets’ – apparently FT_New_Face keeps an open file handle to the font file which
    prevents it from being overwritten/deleted while the program is still running.
  • GFX/THUMBNAILS: Thumbnail aspect ratio fix
  • GFX/THREADED VIDEO: Optimizations, fixes and cleanups
  • GFX/VIDEO FILTERS: Add Upscale_240x160-320×240 video filter with ‘mixed’ method
  • GLSLANG: Fix compilation with ./configure –disable-builtinglslang – was missing linking against -lMachineIndependent and -lGenericCodeGen static libs
  • INPUT: Fix off by one error for input_block_timeout setting. Also default to 0 for this setting (pretty massive performance gain)
  • INPUT: Analog button mapping fixes
  • INPUT/HID/OSX: Fix DualShock3 support
  • INPUT/HID/LINUX: (qb) Disable HAVE_HID by default for now for Linux as long as there are no working backends for both
  • INPUT/HID/WINDOWS: (qb) Disable HAVE_HID by default for now for Windows as long as there are no working backends for both
  • INPUT/HID/WIIU: Fix DualShock3 support
  • INPUT/OVERLAY: Block pointer input when overlay is pressed
  • INPUT/REMAPPING: input_remapping_save_file – existing remapping file was needlessly reloaded
  • INPUT/REMAPPING: Add option to disable automatic saving of input remap files
  • INPUT/LINUX/UDEV: Fix lightgun scaling on Y axis
  • INPUT/LINUX/X11/LED: Add LED keyboard driver
  • INPUT/WINDOWS/LED: LED keyboard driver cleanup
  • INPUT/WINDOWS/WINRAW: Clear key states when unfocused
  • INPUT/WINDOWS/WINRAW: Fix pointer device position
  • IOS: iOS app icon fixes & revisions
  • LIBRETRO/SAVESTATES: Implement an api call for context awareness
  • LOCALIZATION: Updates
  • LOCALIZATION: Add Catalan language option
  • LOCALIZATION: Fix some bad localization
  • LINUX: Make memfd_create call more backwards compatible by calling it through syscall – on older systems, you’ll have to include linux/memfd.h for the MFD_ defines, and call memfd_create() via the the syscall(2) wrapper (and include unistd.h and sys/syscall.h for it work). We exclude linux/memfd.h header include because we already provide the MFD_ defines in case they are missing
  • LINUX/MALI FBDEV: Fix assertion failed on video threaded switch
  • MENU: Menu paging navigation adjustments
  • MENU: New Menu Items for disabling Info & Search buttons in the menu
  • MENU: Allow the user to use volume up/down/mute hotkeys from within the menu
  • MENU: Add missing sublabels for non-running Quick Menu
  • MENU: Reorganize Quick Menu Information
  • MENU: Savestate thumbnails – Savestate slot reset action
  • MENU: Allow changing savestate slots with left/right on save/load
  • MENU: Add ‘Ago’ to playlist last played styles
  • MENU: Add proper icons for shader items
  • MENU/MATERIALUI: Add icon for ‘Download Thumbnails’
  • MENU/XMB: Add options for hiding header and horizontal title margin
  • MENU/XMB: Dynamic wallpaper fixes
  • MENU/XMB: Add Daite XMB Icon Theme
  • MENU/XMB/OZONE: Savestate thumbnail aspect ratio
  • MENU/XMB/OZONE: Core option category icon refinements
  • MENU/XMB/OZONE: Fullscreen thumbnail browsing
  • MENU/XMB/OZONE: Add playlist icons under ‘Load Content’
  • MENU/XMB/OZONE: Thumbnail improvements
  • MENU/XMB/OZONE: Savestate thumbnail fullscreen + dropdown
  • MENU/XMB/OZONE: Prevent unnecessary thumbnail requests when scrolling through playlists
  • MENU/OZONE: Fix playlist thumbnail mouse hover after returning from Quick Menu
  • MENU/OZONE: Thumbnail visibility corrections
  • MENU/OZONE: Playlist metadata reformat
  • MENU/OZONE: Savestate thumbnail fixes
  • MENU/OZONE: Add savestate thumbnails
  • MENU/OZONE: Header icon spacing adjustment
  • MENU/RGUI: Savestate thumbnails
  • MENU/SETTINGS: Turn Advanced Settings on by default, this entire filtering of settings will need a complete rethink anyways
  • MENU/WIDGETS: Widget color + position adjustments
  • MIYOO: Exclude unused HAVE_HID for Miyoo
  • MIYOO: Enable screenshots
  • MIYOO: Enable rewind
  • NETWORK: Allow MITM server selection on OK callback
  • NETWORK: Replace socket_select calls
  • NETWORK: Implement binary network streams
  • NETWORK: Poll support
  • NETWORK: Check connect errno for successful connection
  • NETWORK: Get rid of the timeout_enable parameter for socket_connect
  • NETWORK: Fix getnameinfo_retro’s port value for HAVE_SOCKET_LEGACY platforms
  • NETWORK: Define inet_ntop and inet_pton for older Windows versions
  • NETWORK: Define isinprogress function
  • NETWORK/NATT: Move natt files to “network”
  • NETWORK/NETWORK STREAMS: Add function netstream_eof
  • NETWORK/NETPLAY: Fix game CRC parsing
  • NETWORK/NETPLAY: Disable and hide stateless mode
  • NETWORK/NETPLAY: Change default for input sharing to “no sharing”
  • NETWORK/NETPLAY: Enforce a timeout during connection
  • NETWORK/NETPLAY: Disallow clients from loading states and resetting
  • NETWORK/NETPLAY: Special saves directory for client
  • NETWORK/NETPLAY: Ensure current content is reloaded before joining a host
  • NETWORK/NETPLAY: Fix client info devices index
  • NETWORK/NETPLAY: Fix input for some cores when hosting
  • NETWORK/NETPLAY: Memory leak fixes
  • NETWORK/NETPLAY: Force a core update when starting netplay
  • NETWORK/NETPLAY: Fix NAT traversal announce for HAVE_SOCKET_LEGACY platforms
  • NETWORK/NETPLAY: Refactor fork arguments
  • NETWORK/NETPLAY: Fix content reload deadlocks on static core platforms
  • NETWORK/NETPLAY: Disallow netplay start when content is not loaded for static core platforms
  • NETWORK/NETPLAY: Show client slowdown information
  • NETWORK/NETPLAY: Improve check frames menu entry
  • NETWORK/NETPLAY: Do not try to receive new data if the data is in the buffer
  • NETWORK/NETPLAY: Copy data on receive, even if the buffer is full
  • NETWORK/NETPLAY: Fix lobby sublabel CRC display on some platforms
  • NETWORK/NETPLAY: Support for customizing chat colors
  • NETWORK/NETPLAY: Small launch compatibility patch adjustments
  • NETWORK/NETPLAY: Support for banning clients
  • NETWORK/NETPLAY: Minor tweaks to the find content task
  • NETWORK/NETPLAY: Support for gathering client info and kicking
  • NETWORK/NETPLAY: Fix possible deadlock
  • NETWORK/NETPLAY: Initialize client’s allow_pausing to true
  • NETWORK/NETPLAY: Disable netplay for unsupported cores – with stateless mode being disabled for now, there is no reason not to include this. Refuse to initialize netplay when the current core is not supported (no proper savestates support)
  • NETWORK/NETPLAY/DISCOVERY: Ensure fixed width ints on packet struct
  • NETWORK/NETPLAY/DISCOVERY: Support for IPv4 tunneling (6to4)
  • NETWORK/NETPLAY/DISCOVERY/TASKS: Netplay/LAN Discovery Task refactor – aims to prevent blocking the main thread while awaiting for the LAN discovery timeout; This is accomplished by moving the whole discovery functionality into its task and using a non-blocking timer to finish the task. Also fixes discovery sockets not being made non-blocking, which could cause the main thread to hang for very long periods of time every pre-frame.
  • NETWORK/NETPLAY/TASKS: Find content task refactor – fixes many issues along the way, including a couple of nasty memory leaks that would leak thousands of bytes each time the task ran. It also expands the original concept by matching currently run content by filename (CRC matching is always performed first though).
  • NETWORK/NETPLAY/TASKS: Find content task refactor – Ensure CRC32 is 8 characters long
  • NETWORK/NETPLAY/LOBBY: Add setting for filtering out rooms with non-installed cores
  • NETWORK/NETPLAY/LOBBY: Hide older (incompatible) rooms
  • NETWORK/NETPLAY/LOBBY: Add a toggleable filter for passworded rooms. In addition, move lobby filters into its own submenu for better organization.
  • NETWORK/NETPLAY/MENU: Chat supported info for the host kick submenu
  • NETWORK/NETPLAY/MENU: Localize relay servers
  • NETWORK/NETPLAY/MENU: Host Ban Submenu
  • NETWORK/NETPLAY/MENU: Add client devices info to the kick sub-menu
  • NETWORK/NETPLAY/MENU: Path: Netplay -> Host -> Kick Client – Allows the host to kick clients. Allows the host to view client information: connected clients (names), status (playing/spectating) and ping.
  • NETWORK/NETPLAY/VITA: Add net_ifinfo support
  • NETWORK/NETPLAY/VITA: Enable partial LAN discovery
  • NETWORK/NETPLAY/VITA: Change default UDP port to 19492
  • NETWORK/NETPLAY/VITA: Do not multiply negative timeout values
  • NETWORK/NETPLAY/VITA: Fix epoll’s timeout parameter
  • NETWORK/NETPLAY/VITA: Launch compatibility patch
  • NETWORK/NETPLAY/3DS: Launch compatibility patch
  • NETWORK/NETPLAY/3DS: Adapt POLL for 3DS platform
  • NETWORK/NETPLAY/PS3: Launch compatibility patch
  • NETWORK/NETPLAY/WII: Enable net_ifinfo for some features. In practice, this only allows the netplay’s UPnP task to succeed on the Wii.
  • NETWORK/NETPLAY/WIIU: Launch compatibility patch
  • NETWORK/NETPLAY/SWITCH: Launch compatibility patch
  • NETWORK/UPNP: Attempt support for remaining platforms
  • NETWORK/UPNP: Support for IPv4 tunneling
  • ODROID GO2: Increase DEFAULT_MAX_PADS to 8 for ODROIDGO2, since that impacts the RG351[X] consoles. The RG351[X] have a USB host controller and can have an arbitrary number of USB gamepads.
  • ONLINE UPDATER: Online Updater menu reorganizing
  • OSX: Fixed items of system top menu bar on macOS
  • OSX: Revision to macOS app icon set
  • PLAYLISTS: Ensure history list will contain CRC32
  • PLAYLISTS: Fix CRC32 comparison – as state->content_crc has “|crc” suffix.
  • PS4/ORBIS: Orbis/PS4 Support using OrbisDev toolchain
  • PS4/ORBIS: Update xxHash dependency
  • PS4/ORBIS: Shader cache
  • RETROFW: Exclude unused HAVE_HID for RetroFW
  • RETROFW: Support battery indicator on RetroFW
  • RETROFW: Enable menu toggle button on retrofw devices
  • SHADERS: Shader Preset Loading of Multiple additional #references lines for settings
  • SHADERS: Shader Load Extra Parameter Reference Files – this adds the ability to put additional #reference lines inside shader presets which will load additional settings. The first reference in the preset still needs to point at a chain of presets which ends with a shader chain, and subsequent #reference lines will load presets which only have parameter values adjustment. This allows presets to be made with a modular selection of settings. For example with the Mega Bezel one additional reference could point at a preset which contained settings for Night mode vs Day mode, and another reference could point to a preset which contained settings for how much the screen should be zoomed in.
  • SHADERS/MENU: Increase shader scale max value
  • SCANNER/DC: Fix Redump bin/cue scan for some DC games
  • SCANNER/GC/WII: Add RVZ/WIA scan support for GC/Wii
  • SCANNER/PS1: Improved success rate of Serial scanning on PS1 by adding support for the xx.xxx format
  • SCANNER/PS1: Changed return value of detect_ps1_game function to actually return a failure when the Serial couldn’t be extracted. Scanner will then fallback on crc check, and usually ends up finding the games in the database.
  • SWITCH: Enable RWAV (WAV audio file) support
  • STRING: Do not assume char is unsigned
  • TASKS: More thread-awareness in task callbacks
  • TASKS: Fix race condition at task_queue_wait
  • TVOS: Revised tvOS icons w/ updated alien.
  • VFS: Fix various VFS / file stream issues
  • VULKAN: Fix more validation errors
  • VULKAN: Attempt to fix validation errors with HDR swapchain. Always use final render pass type equal to swapchain format. Use more direct logic to expose if filter chain emits HDR10 color space or not
  • VULKAN/ANDROID: Honor SUBOPTIMAL on non-Android since you’d want to recreate swapchains then. On Android it can be promoted to SUCCESS.
  • SUBOPTIMAL_KHR can happen there when rotation (pre-rotate) is wrong.

  • VULKAN/DEBUG: Automatically mark buffer/images/memory with names
  • VULKAN/DEBUG: Move over to VK_EXT_debug_utils. Debug marker is deprecated years ago.
  • VULKAN/HDR: Fix leak of HDR UBO buffer
  • VULKAN/BFI: Fix BFI (Black Frame Insertion) regression
  • WINDOWS: Fix exclusive fullscreen video refresh rate when vsync swap interval is not equal to one – refresh rate in exclusive fullscreen mode was being incorrectly multiplied by vsync swap interval, breaking swap interval functionality at the gfx driver level
  • WIN32: Do optimization for Windows where we only update the title with SetWindowText when the previous title differs from the current title
  • WIN32: Skip console attach when logging to file
  • WIN32: Remove black margins with borderless non-fullscreen window
  • WIN32/TASKBAR: Release ITaskbarList3 on failed HrInit – pointer wasn’t NULL’d, thus set_window_progress would cause weird behavior
  • WII/GX: Fix potential datarace
  • WIIU: Implement sysconf and __clear_cache
  • WIIU: Add OS memory mapping imports
  • UWP: Added launch protocol arg ‘forceExit’ so a frontend can tell an already-running RetroArch UWP instance to quit.
  • UWP: Enable core downloader/updater
  • UWP: Remove copy permissions as its inefficient as we can just directly assign the new ACL and that works
  • Xbox/UWP: Remove expandedResources
  • Xbox/UWP: UWP OnSuspending crash fix
  • Xbox/UWP: Enable savestate file compression by default for UWP/Xbox – got told there are no more issues with it
  • Xbox/UWP: Add support for 4k to angle on xbox for MSVC2017 build

RetroArch now on the Samsung Galaxy Store!


We keep expanding!

We’re happy to announce that RetroArch is now available on the Samsung Galaxy Store! For free, of course.

Q&A

How can I download RetroArch from the Galaxy Store?

The Galaxy Store should be pre-installed by default on Samsung phones. It is a storefront available exclusively for Samsung-branded devices.

Open the app on your device, type in RetroArch in the search bar, and download it from there.

How does this version differ from the Google Play Store version?

The version available on the Galaxy Store is identical to the version you can download from our website.

It has a couple of big advantages over the Google Play Store version:
* There is no set core limit. For RetroArch Plus on the Play Store, it is up to 127 cores that can be installed. We have to hand-pick these cores specifically so that users can install them on the Google Play Store.
* Cores are distributed from the Libretro buildbot infrastructure. There are far more cores available than on the Play Store.

Should I use this version or the Google Play Store version?

On a Samsung phone, you have the choice to choose between either version. Regardless, we highly recommend you use the Galaxy Store version over the Google Play Store version. Reasons are listed above, but on top of that, the Google Play Store version has not been updated for a while because of increasing restrictions and requirements that we haven’t caught up with yet.

Bottom line, we anticipate the Google Play Store version to become more and more nerfed as time goes on unfortunately. There is nothing we can do about this, these are restrictions and limitations imposed by Google to have the software available for distribution on the Play Store. To get a more full-featured version, download the Galaxy Store version.

RetroArch should now be available on the Google Play Store, Amazon App Store, Huawei App Gallery, and Samsung Galaxy Store. No matter what device you are on and which ecosystem you are in, we try to have you covered.

RetroArch 1.10.3 release!


RetroArch 1.10.3 has just been released.

Grab it here.

If you’d like to learn more about upcoming releases, please consult our roadmap here.

Remember that this project exists for the benefit of our users, and that we wouldn’t keep doing this were it not for spreading the love to our users. This project exists because of your support and belief in us to keep going doing great things. We have always prioritized the endusers experience, and unlike others, we have never emburdened them with in-app ads, monetization SDKs or paywalled features, and we intend to continue to do so. If you’d like to show your support, consider donating to us. Check here in order to learn more. In addition to being able to support us on Patreon, there is now also the option to sponsor us on Github Sponsors! You can also help us out by buying some of our merch on our Teespring store!

Core Updates

FBNeo, LRMAME2003 Plus, UAE and VICE have seen the regular weekly updates/improvements. We can’t list all the changes there, so we just suggest you go to the respective Github repositories and check out the chanes there.

LRMAME

LRMAME updated to version 0.242 (latest). LRMAME is now also available for ARM Macs now. You can get it from the Core Downloader.

Nestopia

FourScore support (4 player multitap) has been added for the following games:

  • Spacey McRacey
  • NNNNNN
  • Arkade Rush
  • Justice Duel
  • BMX Simulator
  • Way of the Exploding Fist

PCSX ReARMed

This core has a new auto frameskip mode (based on free audio buffer space).

The Lightrec dynamic recompiler has been updated, and it should fix several crashes and bugs that occurred before. This would only affect users on x86/x86_64 and MIPS architecture processors, as ARM architecture-based systems continue to use the Ari64 dynarec instead.

There has been a GunCon overhaul, the following input descriptors have been added:

  • Add Trigger, Reload, Aux A, and Aux B as mappable buttons in RetroArch menu for players 1 and 2.
  • GunCon trigger, A, and B buttons are mapped to Gun Trigger, Gun Aux A, and Gun Aux B instead of hard coded to left click, right click, and middle click.
  • Force cursor to corner of screen for offscreen reload so that reloading works on all four edges of the screen.
  • Allow Gun Reload RetroArch input to emulate an offscreen shot.
  • Switch gun coordinates from “Pointer” type to “Lightgun” type.

GW (Game & Watch)

The GW (Game & Watch) Libretro core is now available for the MSVC 2005 and 2010 Windows versions. These versions can run on older Windows OS versions than the regular version.

gpSP

The gpSP Libretro core now uses a small translation cache for the Miyoo platform.

Cap32

An emulator of the Amstrad CPC 8bit home computer range. This has seen several improvements.

  • DB: new games from retroachievements
  • UI: added DB icon DSK to status bar
  • DB: you could add direct tokens using $ (for joystick keybinds or cleans)
  • DB: added DB v1 using clean-cpc-db info
  • CORE: added model 664 to allow DSK and BASIC 1.0
  • CORE: detect some configurations from filename
  • VIDEO: minor fixes (requires more work)

SMS Plus GX

The SMS Plus GX Libretro core should now be more stable on RetroArch PSP. We achieve this by avoiding unaligned memory access. Previously, after starting a game, the console would have a tendency to locks itself and shut down.

Other related changes – we replaced ALIGN_LONG with ALIGN_DWORD for Miyoo and RetroFW to match
the standalone versions. This fixes Master System background rendering. It was dropped from 3DS as ARMv6 allows unaligned memory access and defining that macro had no effect anyway. ALIGN_DWORD was dropped from Raspberry Pi (ARMv6/7/8), Classic (ARMv7), OS X non-PPC (x86, ARMv8), Vita (ARMv7) and Switch (ARMv8) as those platforms support unaligned memory access.

Beetle Virtual Boy

Fixed a couple inaccuracies in the VSU modulation emulation, fixing a few sound effects in “Virtual Boy Wario Land”.

Mesen

The Nintendo Entertainment System emulator core has seen a couple of improvements.

Before, the core would upload audio by using the audio batch callback multiple times per frame, unduly ‘stressing’ the frontend audio buffer and leading to poor AV synchronisation.

We now ensure that the audio batch callback is only used once per frame (unless the frontend does not support batches of sufficient size, in which case the samples will be split appropriately).

We also did the following:

  • Sets the default audio sample rate to 48000 Hz. The previous default of 96000 Hz is so high that RetroArch is required to flush the audio driver twice per frame, which is bad for AV synchronisation.
  • Removes the 192000 and 384000 sample rate options, since these are in fact unsupported by the underlying emulator code…

Add 4:3 (Preserved) & 16:9 (Preserved) aspect ratios
Mesen by default preserves the aspect ratio in all cases when cropping the overscan, which results in a difference between the core provided 4:3 and 16:9 ARs, and RetroArch’s own 4:3 and 16:9 ARs, which doesn’t always results in a ideal image (specifically 16:9 on a 16:9 display will look weird when cropping is applied).

We now separate Mesen’s preserved 4:3 and 16:9 ARs into their own selections for the core provided aspect ratio so people can choose whenever or not they want the aspect ratio to be preserved when using either one of the selections as their core provided aspect ratio.

bsnes Mercury/bsnes C++98

The Super Nintendo Entertainment System emulator core has seen a couple of improvements.

Before, the core(s) would upload audio in packets of 64 samples – which means the audio batch callback is used multiple times per frame, unduly ‘stressing’ the frontend audio buffer and leading to poor AV synchronisation.

We now ensure that the audio batch callback is only used once per frame.

REminiscence

This Flashback game engine core has now been added for the Miyoo platform as well.

ScummVM

Several serious crashes should be fixed now as a result of us updating the libco coroutines middleware library.

FCEUmm

This Nintendo Entertainment System emulator core has seen several improvements.

More mapper additions and improvements
Improve mappers 49, 215/258, 340, 341, 351 and 444. Add newly-(re)assigned mappers 294 and 310. Add new mapper 467.

Expose internal audio RF filter option
The core already contains a low pass audio filter designed to recreate the ‘muted’ sound of the NES when connected to a television via the RF modulator – but for some reason this functionality is not enabled/exposed.

We have simply wired it up to a new Audio RF Filter core option. When enabled, the (subjective) improvement in audio quality is quite dramatic. The filter has a negligible performance impact.

(This filter produces the effect discussed here: https://forums.libretro.com/t/lowpass-filtering-for-nes-rf/37258)

Add optional ‘fake’ stereo sound effect
We added a new Stereo Sound Effect core option which may be used to simulate stereo sound by delaying the right audio channel (relative to the left) when upmixing the mono output from the NES. The delay can be configured from 1 to 32 ms.

The effect is identical to the fake stereo currently available in the Mesen core.

minivmac

minivmac is an emulator for the Mini vMac, a miniature Macintosh. We added this core now for ARM Macs. It can be downloaded from the Core Downloader.

Genesis Plus GX

Genesis Plus GX is a Sega Master System/Sega Game Gear/Sega Megadrive/Sega Genesis emulator core.

We are using the low memory codepath now for Miyoo systems. As this platform only has 32MB RAM, like the RS-90.

xRick

The Rick Dangerous game engine core has been added for the Miyoo platform.

Snes9x 2005

This Super NIntendo Entertainment System emulator core has seen several improvements.

Before, the core had bad audio sample pacing:

  • Neither variant of the core sent a number of samples per frame that would match the nominal expected values given by the sample rate and fps set in retro_get_system_av_info()
  • Due to integer rounding errors, the non-plus core always would send too few samples
  • The ‘plus’ version of the core would send the ‘correct’ number of samples, in terms of actual emulation – but this does not tally with the sample rate reported to the frontend. Moreover, the ‘plus’ core would call the audio batch callback twice per frame, which unduly stresses the frontend audio buffer.

As a result, the core had bad audio/video synchronisation, affecting frame pacing.

We fixed several issues:

  • The audio sample rate is now reported as 32040 Hz
  • The non-plus core uses an accumulator to ensure that ‘fractional’ audio samples are accounted for and sent when required
  • The plus core now uploads audio samples only once per frame

In addition, we did the following

  • Fixed three memory leaks that were found in the core
  • Modified the Console Region core option to require a restart (since it has never been possible to change this at runtime…)

Snes9x2005 Non-Plus: Add optional low pass audio filter
Apart from a substantial difference in audio emulation accuracy, probably the most obvious difference between the ‘plus’ and ‘non-plus’ versions of the core is that the latter has an inadequate level of low pass audio filtering, leading to tinny/scratchy sound.

We added a simple optional low pass filter at the output stage of the ‘non-plus’ core. When enabled, audio is more mellow/bassy, and the generated sound is closer to that produced by the ‘plus’ version – with only a negligible increase in performance requirements.

Snes9x 2010

This Super NIntendo Entertainment System emulator core has seen several improvements.

Use audio batch callback only once per frame

Before, the core would upload samples in batches of ~64, which means the audio batch callback is used many (~9) times per frame. This ‘overstresses’ the frontend audio buffer and leads to bad AV synchronisation.

We have fixed the issue by ensuring that the audio batch callback is used to send all available samples only once per frame.

Improve save state efficiency + fix save state size

At present, every time that retro_serialize_size() is called (i.e whenever save states are used), the core determines the save state size by allocating a temporary 5 MB buffer and writing into this an actual save state. Moreover, it then fails to report the actual size correctly due to a bug in the memory stream wrapper code – which means save states are always 5 MB in size. This represents a terrible inefficiency.

Now, the save state size is now calculated independently of regular save state creation. No temporary buffer is required, and there is no need to actually write a save state to memory – and save states now have the correct size (~830 kb)

SwanStation

This Sony PlayStation1 emulator core has been updated.

  • Remove ‘Force Pop’n Mode’ & ‘NeGcon Steering Axis Deadzone’ options

60Hz modes for > 60Hz emulated platforms

Big improvements for WonderSwan, Lynx and PokeMini emulator cores for the majority of systems that don’t happen to have VRR displays!

Beetle WonderSwan

At present the core runs at ~75Hz, matching the native refresh rate of the WonderSwan hardware. This is fine if the core is run on a VRR display (or one that natively supports 75Hz…), but on regular 60Hz panels it can cause issues. In particular, screen tearing is very likely to occur. You can experience this on Linux (when not using a compositor and without vsync forced at the driver level) and on 3DS. The tearing is so bad on 3DS that we would previously consider the core to be unusable on that platform…

We now added a new 60Hz Mode core option, which can be used to force the core to run at 60Hz (actually 60.38Hz, but RetroArch handles this nicely via dynamic rate control). Note that the core still runs at the ‘correct’ speed when this option is enabled – internally, the core is running the nominal ~75 frames per second, but every 5th frame is ‘dropped’. This reduces video smoothness, but then 75Hz on a 60Hz display is not smooth either. More importantly, enabling this option eliminates screen tearing.

In addition, we have also made the following minor changes:

  • The frontend reported framerate is now set correctly in 75Hz mode (previously this was truncated, leading to a slight tendency for the frontend audio buffer to under-run)
  • The internal audio samples buffer has been reduced from a ~64kb (!) static array to a tiny, dynamically created array of just the correct size
  • On 3DS, the video buffers are now allocated in linear memory (for improved performance)
  • The 96000, 192000 and 384000 audio sample rate options have been removed, because they are nonsensical and harm AV synchronisation

Thanks to this 60Hz mode, Beetle WonderSwan is now perfectly playable on RetroArch 3DS. We have enabled this option by default. If you are using a VRR display or if you are running at a native 75Hz resolution and would like to change it back to the native refresh rate, you can just turn this option off in Quick Menu -> Options.

We have also added the core for RetroArch PS2, although it can’t reach fullspeed. It’s debatable whether it’s worth including, but for now we keep it in.

There is also a new optional audio feature. The WonderSwan has a tendency to produce rather harsh/abrasive chiptunes. The low pass audio filter softens and ‘mellows out’ the generated sound.

PokeMini

At present the core runs at 72Hz, matching the native refresh rate of the Pokemon Mini hardware. This is fine if the core is run on a VRR display (or one that natively supports 72Hz…), but on regular 60Hz panels it can cause issues. In particular, screen tearing is very likely to occur. We could experience this on Linux (when not using a compositor and without vsync forced at the driver level) and on 3DS.

We have now added a new 60Hz Mode core option (enabled by default), which can be used to force the core to run at 60Hz. Note that the core still runs at the ‘correct’ speed when this option is enabled – internally, the core is running the nominal 72 frames per second, but every 6th frame is ‘dropped’. This reduces video smoothness, but then 72Hz on a 60Hz display is not smooth either (and few Pokemon Mini games are ‘smooth’ to begin with…). More importantly, enabling this option eliminates screen tearing.

Handy

This Atari Lynx emulator core has seen several big improvements.

Fix frame pacing
Before, this core had entirely broken frame pacing. The core reported a fixed refresh rate of 75Hz to the frontend, but the Lynx (and the internal emulation code) has a variable refresh rate of 0-75Hz; games can render at any rate they please. In retro_run(), the Lynx is always emulated until the next ‘end of frame’ event occurs – if a game renders at e.g. 25 fps, this means retro_run() will actually correspond to (1/25) seconds worth of Lynx runtime instead of the expected (1/75) seconds. In this case, the game is emulated too quickly – but it appears to run at the correct speed in the frontend because the core uploads an ‘oversized’ audio buffer (1/25 seconds worth of samples). RetroArch syncs on audio in such a way that when too many samples are received, the frontend runs in ‘slow motion’ – so the ‘too fast emulation’ + ‘too many audio samples’ effectively cancel out. But the results are awful. This is a significant violation of the libretro API, and it destroys the frontend’s ability to properly synchronise audio and video, and to pace the frames correctly.

We now modified the run loop such that a fixed number of CPU cycles are emulated on each call of retro_run(), corresponding to the actual frontend output video refresh rate (which can be set via a new Video Refresh Rate core option). Thus the Lynx is always emulated at the correct speed, audio is always uploaded in batches of the correct size, and generated video frames are captured and output when available (and when the frontend can accept them).

The default Video Refresh Rate has been set to 60Hz, which provides smooth results for most games (and also eliminates screen tearing on 60Hz displays, which was an issue when the core only reported a 75Hz refresh rate). If a game has a higher frame rate than this (rare, but e.g. the intro and menus of California Games run at the full 75 fps), then ‘excess’ frames will be dropped. Users with 75Hz+ VRR displays can set higher refresh rates to improve video smoothness in these cases.

Improve save state efficiency
Before, the retro_serialize() function determines the save state size by allocating a temporary ~310kb buffer, writing an actual save state into it, then fetching the resultant buffer occupancy. This is terribly inefficient – and retro_serialize() is called 3 times every time a state is saved or loaded…

We modified the serialisation memory stream code to allow a ‘virtual’ save state to be made – no buffer is required, and no data are copied. This means retro_serialize() can now fetch the save state size with no memory allocations and no wasted effort.

Add optional LCD ghosting filter

We added a new LCD Ghosting Filter core option which can be used to apply an LCD ghosting effect by blending multiple successive frames. The number of blended frames can be set from 2-4; using more frames improves the quality of the effect at the expense of increased performance requirements.

LCD ghosting is particularly beneficial for the Lynx because many games run at very low frame rates, and some blurring helps to smooth out the frequently ‘jerky’ screen updates.

RetroArch Updates

See the Changelog below for a detailed breakdown of all the changes that have happened.

One of the biggest changes for Steam users by far is the new Steam Discord Rich Presence support. NOTE: You will need to use the desktop client in order for this to work. It won’t work with the webbrowser client.

Changelog

1.10.3

  • ANDROID: Decouple Play Core dependency to bring app into compliance for F-Droid
  • AI/SERVICE: Disable AI Service setting by default
  • BLUETOOTH/LAKKA: bluetoothctl: add / modify pairing steps
  • CHEEVOS: Disallow manual frame delay setting in Hardcore Mode
  • DATABASE: Serial scanning for Wii now includes WBFS
  • INPUT/MAPPING: Fix offset + crash when clearing input port binds
  • INPUT/MAPPING: Fix saving of ‘Analog to Digital Type’ when configuration overrides are used
  • LOCALIZATION: Add Valencian language option
  • LOCALIZATION: Updates
  • MENU/SETTINGS: Move ‘Show Menu Bar’ under ‘Windowed Mode’ settings
  • MENU/SETTINGS: Add sublabels for ‘Subsystems’ and ‘Input Deadzone/Sensitivity’
  • MENU/SETTINGS: Move ‘On-Screen Notifications’ to top
  • MENU/XMB: Unified the shadow alpha value to a slightly darker one for better readability
  • MENU/XMB: Corrected the option label and sublabel for actual behavior
  • MIYOO: Enable ALSA audio driver and default to it
  • PSP: Take out extra languages/localization, adds about 4/5MB to the binary, and RAM is limited on PSP (32MB and 64MB RAM models)
  • STATIC PLATFORMS: Populate all history list metadata when launching content from playlists
  • STEAM: Introduce Steam Rich Presence
  • VIDEO: Fast-Forward Frameskip improvement
  • VIDEO/THREADED: Stability fixes
  • WINDOWS/WINRAW: Fix multiple light guns
  • WIIU: Fix USB get_device_name(), don’t truncate to three chars