If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.10 version) is scheduled to be released very soon!
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. 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!
Highlights
RetroArch is now finally on Steam!
On September 14, 2021, RetroArch finally appeared on Steam (available here). It is available right now for both Linux (SteamOS) and Windows. See our initial release article here. Since then, we have already had over 100K+ downloads on Steam and over one million visits. Thanks to you all! We aim to make RetroArch the very best it can be.
What you need to know:
New cores are coming as DLC additions.
There is no macOS version available on Steam yet (but we'd like to!)
Remote Play is supported. We make no guarantees as to how well this will work.
Steam Cloud sync should be supported for save files.
There is work underway on automation - the idea is that both cores and RetroArch on Steam would be updated automatically.
Lastly, we hope that new users can be understanding of the fact that RetroArch’s UI might have a bit of an initial learning curve. We are a small team, and we definitely intend to simplify the UI at least for beginners in the coming months, but we are simply not ready yet. So we hope people are understanding of this and appreciate the swiss knife flexibility and power of RetroArch in the meantime instead of focusing on the overall complexities or whatnot of the UI/UX.
The Steam version should be updated to 1.9.10 soon.
High Dynamic Range fixes for D3D11/D3D12!
Fixed contrast to be more correct - now scales from 0-10 linearly and behaves more the way you'd expect it to - changed name to ditch legacy settings users may have
D3D11/HDR: Fixed D3D11's blend, rasterizer and topology states not being set to the sames when using HDR and leaving the menu - caused issues with PCSX2's Shadow of the Colossus
Added ability to skip inverse tonemapper to the shader via the constant buffer using 'inverse_tonemap' - set to 0.0f to skip
Fixed potential bug when swapping between HDR and SDR and the bit depth not being set correctly
Filters
1.9.10 adds a new Picoscale_256x-320x240 video filter. This uses a number of high quality, high performance algorithms developed by irixxxx for Picodrive standalone to upscale 256x224, 256x239 and 256x240 content to 320x240 (content of any other resolution is passed through unchanged).
Much like the existing Upscale_256x-320x240 filter, this is intended for use on platforms/devices with native 320x240 resolution support, where it greatly reduces aliasing while producing a significantly sharper image than conventional (hardware) bilinear filtering.
Three filter variants are provided:
Picoscale_snn_256x-320x240: 'Smoothed' nearest neighbour Picoscale_bl2_256x-320x240: 2-level-bilinear with 2 quantized weights Picoscale_bl4_256x-320x240: 4-level-bilinear with 4 quantized weights
Essentially, both image 'smoothness' and performance requirements increase in order of snn -> bl2 -> bl4.
Go here to see several screenshots demonstrating the output of each filter type: (click for full-size images)
These filters are highly efficient. Tested with the Snes9x 2005 Plus core (a lightweight core which is nonetheless at the upper limit of many low powered handheld devices), we see the following increase in total performance overheads when each filter is applied (note that the existing Upscale_256x-320x240 filter is included for comparison):
Filter
Performance
overheadbl2
+13%
No filter
+0%
snn
+8%
bl4
+30%
upscale_256x_320x240
+27%
The performance overheads relative to the existing Upscale_256x-320x240 filter are:
Filter
Performance overhead
snn
-69%
bl2
-45%
bl4
+14%
Thus SNN and BL2 in particular have very little performance impact.
All credit goes to irixxxx - many thanks for giving us permission to use your work in RetroArch!
In other video filter news, the Switch/libnx port now also has video filters support!
Playlist Manager - New 'Refresh Playlist' option
The manual content scanner provides a quick and easy method for generating playlists - but there exists no convenient way to update playlists that already exist. If a user adds content to a ROM directory then they must go to the trouble of reconfiguring and re-running the manual scan (including selecting the ROM directory, system name, default core, etc.); if they have simultaneously removed some files, then they are also obliged to go to the relevant 'playlist manager' menu and 'clean' the playlist. This is time consuming and tedious.
1.9.10 adds a new Refresh Playlist option to the 'playlist manager' menus. When selected, the current playlist will be re-scanned with the manual scan configuration that was last used to generate/edit the playlist. 'Refreshing' a playlist also populates all entries of the Manual Scan menu - so it is easy to tweak values should the user wish to update the allowed file extension list, etc..
In addition: a new Validate Existing Entries option has been added to the manual scan interface. When enabled, any existing playlist is checked before commencing the content scan; entries referring to missing files, or files with invalid extensions, are then removed.
Validate Existing Entries is disabled by default, but automatically enabled whenever a playlist is refreshed. Thus selecting Refresh Playlist will both add new content and remove missing/invalid entries.
Note:
This functionality will not work with playlists generated before this commit, since they will lack the required metadata. It will be necessary for the user to re-run a 'normal' manual scan for any playlist they might want to later refresh; thereafter, the Refresh Playlist option will appear in the relevant 'playlist manager' menu and maintenance becomes a one-button affair.
We can only 'refresh' playlists created via the manual content scanner - not the database scanner. When performing a database scan, there is no practical method for extracting all required metadata for a repeat operation.
3DS - Add bottom screen idle state
Some nice QoL improvement for RetroArch 3DS users! 1.9.10 allows the bottom screen on the 3DS to be disabled when idle. On compatible devices, the bottom screen backlight is toggled.
If no core is running, the bottom screen is always idle with the backlight turned off.
If a core is running with the bottom screen in it's 'default state', the bottom screen will idle in ~6 seconds. The displayed text "Tap the bottom screen to go to the Retroarch menu" fades out and the LCD backlight is disabled.
When interacted with the screen, the backlight turns on and toggles the menu as usual.
When in the menu / paused, the bottom screen remains active.
RetroAchievements/Cheevos improvements
Don't write achievement credentials to override
Ignores changes to cheevos_token, cheevos_password, and cheevos_username when generating config override files.
While this is particularly important for not remembering a stale authentication token, not entering any credentials until after loading content, and then saving the override could lead to the actual password being stored in the override even after the authentication token is generated and put in the master settings file.
Since neither the authentication token nor the password should be stored in the override file, I believe it also makes sense to exclude the username, as having a per-override username would also require a per-override authentication token or password. If a players wants to have a separate retroachievements user for a specific core, they can still manually add the entries to the override file, but those will be cleared out any time they update the override file from within the application. A better solution would be to use separate master configs and launch using the --config option.
Disable slowmotion when enabling hardcore mode
There's already code preventing the user from toggling (or otherwise using) slowmotion when achievement hardcore mode is enabled. Slowmotion provides an advantage for the user's reflexes, so we don't allow it in hardcore mode.
This addresses an issue where the user could enable hardcore mode with slowmotion already toggled on, and it would remain on. The user would be locked in slowmotion as the toggle would be disabled, but with enough patience, it could be worth it. With this change, slowmotion is disabled when enabling hardcore mode.
Changelog
1.9.10
3DS: Add bottom screen idle state
3DS: Add unique IDs for Gearboy/Gearcoleco/Gearsystem, correct CAP32 code
3DS/SAVESTATES: Fix RAM states to file when core deinits
AUDIO/MIXER: Pad sample buffers to prevent potential heap-buffer-overflows when resampling (fixes crash when using 30 kHz menu audio files)
AUDIO/LINUX/SNAP: Add JACK support
CHEEVOS: Don't write achievement credentials to overrides
CHEEVOS: Disable slowmotion when enabling hardcore mode
D3D9: Fixed MVP matrix issue for RGUI texture (main game frame still won't show up though)
D3D11/D3D12/HDR: Fixed contrast to be more correct - now scales from 0-10 linearly and behaves more the way you'd expect it to - changed name to ditch legacy settings users may have
D3D11/HDR: Fixed D3D11's blend, rasterizer and topology states not being set to the sames when using HDR and leaving the menu - caused issues with PCSX2's Shadow of the Colossus
D3D11/D3D12/HDR: Added ability to skip inverse tonemapper to the shader via the constant buffer using 'inverse_tonemap' - set to 0.0f to skip
D3D11/D3D12/HDR: Fixed potential bug when swapping between hdr and sdr and the bit depth not being set correctly
D3D11/D3D12/HDR: Added numerous helper functions to help create the correct values to colour the UI - normally the white UI elements should be rendered at paper white not max brightness for various reasons
BUGFIX/ANDROID: Fix crash that could happen on Android with Sameboy core - would crash on rumble function
GFX/WIDGETS: New regular widget message appearance
INPUT/MOUSE: Add distinct mouse zero index label for drivers that do not support multimouse
INPUT/RUMBLE: Add generic rumble gain to input settings
INPUT/UDEV/X11: Add workaround to fix keyboard input when using X11 + Udev
LIBNX/SWITCH: Add Video Filters support
LOCALIZATION: Fetch translations from Crowdin
OPENDINGUX/BETA: Disable OpenAL
PLAYLISTS: Add 'Refresh Playlist' option
STEAM: Initial release on Steam
UWP/VFS/XBOX: Improvements and bugfixes to UWP VFS driver
VIDEO/REFRESH RATE: Automatic PAL/NTSC refresh rate switch where available - as long as the platform display server allows changing refresh rates and the display has the desired refresh rate
VIDEO FILTERS: Add 'Picoscale_256x-320x240' video filter
We have been busy working on the Steam version to improve compatibility and stability. Right now, we need to make some changes for the Linux platform. For a long time, we have manually released everything on the Steam, this has now been automated for both platforms. Looking forward you can expect regular updates and soon a nightly branch. However, to simplify RetroArch on Steam we are moving to the same folder structure on all platforms. Additionally, on Linux, we are moving from the AppImage-based release to using the newer soldier runtime available in Steam to increase the likelihood of RetroArch working out of the box on more Linux distributions.
As there is a small risk for breakages for Linux users we felt the need to properly inform about this. So what does this change mean? Currently, the RetroArch base directory on Linux is RetroArch-Linux-x86_64-Nightly.AppImage.config/retroarch which you can see the retroarch's itself in a subdirectory instead of being in the main directory of the game, so our goal is basically same directory structure for every platform! Due to the chance of data loss our recommendation is to copy everything you care about, for example; save files, options, your cfg files etc. somewhere safe outside the Steam install. While Steam Cloud should keep everything safe, we do still feel the need to mention this, as the changes are not risk-free.
The update is currently scheduled to go out the 3rd of October together with the next frontend release.
Today, RetroArch has finally been released on Steam for both Windows and Linux/SteamOS. The Store page can be found here.
Differences between the Steam version and regular version
Functionally, RetroArch on Steam should be identical to the version you can get on our website, except for the following:
There is no Core Downloader to stay compliant with Valve/Steam's Terms of Service.
Instead, you can download and install cores in either one of two ways:
Manually dragging the core file (a .dll file on Windows, .so on Linux) over to the 'cores' directory of RetroArch Steam.
Installing the core as a DLC.
10 Cores Available At Launch
We have decided to launch with 10 cores at launch. These cores are available both for Linux/SteamOS and Windows users. A 'core' is a program that RetroArch loads. It can be an emulator, game, or any other program. RetroArch loads this 'core', and from there RetroArch becomes the program.
The cores currently available as DLC on Steam are as follows:
First, you install RetroArch on Steam. After that, you can install the cores either on Steam's browser page by clicking 'Manage DLC' and easily installing them all at once, or you can go to each respective page and install it from there.
More cores will be coming as DLC soon. We have no ETA on when these will arrive, but it will likely be a dripfeed of new cores on a periodic basis as it takes a lot of time preparing the pages, descriptions, logos, previews and whatnot that a Steam page requires.
Things to know
RetroArch on Steam is available for 64bit Windows/Linux users only for now. We are not sure if we will be supporting 32bit on Steam as well.
Builds right now are not automated but might be later on.
There is no macOS version available on Steam yet. There are no plans yet for this, but if there are updates on this, we will tell you.
Remote Play is supported. We make no guarantees as to how well this will work.
Steam Cloud sync should be supported for save files.
Lastly, we hope that new users can be understanding of the fact that RetroArch's UI might have a bit of an initial learning curve. We are a small team, and we definitely intend to simplify the UI at least for beginners in the coming months, but we are simply not ready yet. So we hope people are understanding of this and appreciate the swiss knife flexibility and power of RetroArch in the meantime instead of focusing on the overall complexities or whatnot of the UI/UX.
If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.9 version) is scheduled to be released very soon!
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. 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!
Highlights
High Dynamic Range support for Direct3D 11/12 drivers!
We have now added HDR (High Dynamic Range) support to RetroArch's Direct3D 11/12 driver thanks to a generous contributor! l What you should know:
* The HDR settings can be found in Settings -> Video when you are using the Direct3D 11 or 12 driver. In order to change to D3D11/12, go to Settings -> Drivers, and change Video to 'D3D11/12'.
In case you don't see the option, and you have made sure first that your driver is set to Direct3D 11/12, it might be that HDR is disabled in Windows 10. Make sure HDR is enabled in Windows in case you don't see it pop up. In Windows, go to 'Display Settings' (pictured below) and make sure the HDR setting is turned on. If it doesn't show up, your display device might simply not support HDR.
* We now let Direct3D 11 compile frontend shaders against Shader Model 5.0 (SM 5.0) in case your graphics card driver supports D3D11 Feature Level 11.0 or higher. Previously, it would always compile frontend shaders against Shader Model 4.0, and unfortunately the AMD FSR shader that has just been added needs SM 5.0 capabilities in order to work.
* While HDR already works on the UWP version on PC, on Xbox there are currently several deal-breaking display issues with it, so it remains disabled there for now. <h3>Thoughts on future RetroArch HDR support</h3> * We still need HDR implementations for other modern graphics APIs, like Vulkan (and Metal and/or OpenGL core if possible). We have no ETA on when this will be done. Ideally a generous contributor submits it to us, just like what happened with D3D11/12. * Slang [the shader format] will need HDR support as well in order to take full advantage of the expanded gamut. Right now the author that made the D3D11/12 implementation made a reference shader that he says can already take advantage of HDR - check out his new shader 'integer-scaling-scanlines.slangp'. You can find this preset inside the folder 'scanlines/shaders'. It is an integer scaling mode pixel perfect scanline shader for use with low resolution monitors, underpowered machines, the new HDR mode in RetroArch and for people who want pixel sharp scanlines with absolutely no moire patterns (but with the downside that integer scaling must be on and so not fill up the screen or over fill the screen). * It needs to be pointed out that HDR support on Linux in general is very premature right now compared to Windows. Windows happens to be a bit further along at this point in this department. Hopefully this inequality will be addressed shortly. But just know that this might tie our hands a bit.
A fully interactive touchscreen menu for the bottom screen of the 3DS has been added by the very generous contributor bulzipke!
The following functions are currently available on this screen:
Resume Game Toggles RetroArch menu, closes it and goes back to the game. Create Restore Point If you touch this, save it to SD card. If the Save State Thumbnails option is enabled, you can see Screenshots at the Load Restore Point Load Restore Point Shows the date when you saved it. (And show Screenshot if exists). If you change the State Slot, bottom menu will refresh Screenshot / date / state.
Some important convenience features came as a result of this too. Savestate loading / saving to RAM instead of to disk was added, so it's possible to have temporary suspend points without writing to disk. The state is only saved to disk when either:
* Closing the lid of the 3DS * Pressing the HOME button * Exiting RetroArch
This gives things a very seamless feel. Not only that, the saving of state to RAM is orders of magnitude faster vs. saving to disk, so now while doing these operations, things no longer slow to a crawl.
There's also the option to disable the bottom screen - Settings->User Interface->3DS Bottom Screen
Although this option will not affect performance, it is estimated that "Tap the Touch Screen to go to the Retroarch menu" text may add additional battery consumption to draw the screen. So it's always nice to have the option to toggle it off if need be.
AMD FidelityFX Super Resolution (FSR) has been ported to Libretro/RetroArch!
A very generous contributor submitted a fully working implementation of AMD FSR as an slang shader for use in RetroArch! This shader should be fully compatible with the following video drivers in RetroArch:
* Metal * OpenGL Core (or at least 4.0 with regular OpenGL driver) * Vulkan * Direct3D 11 (if your card supports Direct3D 11 Feature Level 11.0 or higher) * Direct3D 12
We have had to update our Direct3D 11 driver to allow for the use of Shader Model 5.0 when your GPU supports it, since this shader requires SM 5.0 features and wouldn't work on D3D11 without it.
The contributor mentions in his pull request that implementing AMD FSR as a pixel shader seemed to work out just fine despite AMD insisting it is supposed to be implemented as a compute shader.
On top of this straight port of FSR, he also took the time to remake the SMAA shader. It is now supposed to be less of a port and just uses the original library unmodified, while adding a few features and higher quality search textures. The contributor wasn't too happywith the quality of this AA and wanted to check if it could be improved, mainly because FSR requires good looking AA (Anti-Aliasing) otherwise it wouldn't make much sense. In the end, quality gains were marginal, pretty much imperceptible. Despite that, there is also an AMD FSR+SMAA preset that you can use.
You can see some comparison images down below - to the far left is the image without any shaders, in the middle is AMD FSR, and to the right is AMD FSR + SMAA applied.
Ys Seven undub with the PCSX2 core in RetroArch. The image is zoomed in here by 2x. Left: no shaders, middle: AMD FSR shader, right: AMD FSR + SMAA.
1st image: Gradius V with the PSCX2 core in RetroArch, zoomed in to showcase how FSR can combat aliasing. Left: no shaders, middle: AMD FSR, right: AMD FSR + SMAA. Note how the jaggies become less pronounced by applying FSR, and how they become even less with SMAA added to the mix.
2nd image: Gradius V with the PCSX2 core in RetroArch, zoomed in. Top: no shaders, middle: AMD FSR, right: AMD FSR + SMAA.
3rd image: Panzer Dragoon running on Kronos with AMD FSR shader (click on the image to see it without shader applied).
Add enhanced search functionality to the 'Cheats' menu
1.9.9 adds enhanced search functionality to the Quick Menu > Cheats menu, similar to that in the core downloader and core manager menus:
In addition, the search feature may be used to filter cheats that are currently on or off: this is done by searching for the 'key' string .on or .off
* The key string is case insensitive * The actual on/off text is localised - it matches whatever is currently shown as the cheat value (i.e. if the user language is set to French, the on key is .Activé * The leading period was chosen because (a) it should be available on most keyboard layouts, (b) it is available on the first 'page' of RetroArch's OSK and (c) it is easier to type than enclosing the string with brackets, as it is displayed in the cheat value text
Faster sinc resampler and audio conversion for ARM NEON platforms
Previously, the audio sinc resampler and the audio conversion functions only had optimized SIMD codepaths written in ASM for ARM NEON. There are more and more platforms/toolchains now that prohibit or make it difficult to use assembly routines, or strongly recommend you resort to SIMD intrinsics instead.
So we have done exactly that now. All the audio conversion routines (float to signed 16bit integer, signed 16bit integer to float) and the sinc audio resampler now have ARM NEON intrinsic optimized codepaths available instead of just defaulting to C codepaths. This should contribute to performance on platforms like the Mac M1, Android devices, the PS Vita, iPhone devices, and ARM Linux hardware in general (both AArch64/ARMv7).
We have still left in these legacy ASM codepaths behind an ifdef in case someone still has a use for it, but from now on we will try to make sure to offer both intrinsic and ASM codepaths whenever possible, or intrinsic only if both can't be provided.
Important fixes
Fix cheat when using second instance runahead Before, using cheats when second instance runahead was enabled caused undefined behaviour because the cheats are only applied to the primary core (and not the secondary one). 1.9.9 fixes the issue. It also ensures that cheats are correctly reapplied when second instance runahead is toggled on while content is running.
Fix menu sounds (audio mixing) when using the 'sinc' resampler with quality lower than 'normal' Before, if the sinc resampler was used with a quality of lower or lowest, then enabling any 'menu sounds' (including cheevos notifications) would completely break in-game audio. 1.9.9 fixes the issue by ensuring that all audio mixer resamplers use the same quality setting as the main one. In addition, we ensure that the same backend driver is used.
1.9.9 also fixes a memory leak when loading system sounds without a driver reinit (i.e. when toggling menu sounds via the menu)
Fixed several crashes that could occur during fullscreen toggle Fullscreen toggle should now be more robust in cores like PCSX2, Flycast and other 3D-based emulator cores.
Add option to (force-)write current core options to disk RetroArch saves core options automatically when closing content - but if a badly behaved core causes a crash on close content, then the current core option settings will be lost.
1.9.9 adds a new Flush Options to Disk entry to the Quick Menu > Options > Manage Core Options menu. When selected, this will force the current core options to be written immediately to the active options file.
Since 99% of users will not need this functionality (it was requested for users testing the PCSX2 core) the entry is hidden by default, with visibility controlled via a new Settings > User Interface > Menu Item Visibility > Quick Menu > Show 'Flush Options to Disk' option.
This PR also fixes a rather nasty bug related to saving core options: At present, if a user has Use Global Core Options File enabled, and they create then delete a per-game or per-content directory options file via the Manage Core Options interface, when the current options are re-saved to the global file then any settings not related to the current core will be removed (!). This has been fixed by ensuring that all locally stored config file data is properly updated whenever per-game or per-content directory options files are deleted.
Highlight currently selected value in Shader Parameter drop-down lists
Before, when opening a shader parameter drop-down list via Quick Menu > Shaders > Shader Parameters, the selection cursor would always 'reset' itself to the top of said list. 1.9.9 ensures that the current parameter value will be auto-selected and marked.
Note that we may replace these shader parameter drop-down lists with keyboard input at some point, but we might as well fix this selection bug in the meantime (since it is so easy to do!).
Allow 'Vertical Refresh Rate' to be entered manually via keyboard/onscreen keyboard
Making significant changes to Settings > Video > Output > Vertical Refresh Rate (e.g. 60 Hz -> 50 Hz) is quite tedious, since holding left/right only modifies the value in 0.001 Hz steps.
1.9.9 adds the ability to set this parameter 'manually'. When Vertical Refresh Rate is selected, a new value can be entered via the OSK or physical keyboard.
For current settings where very long dropdown lists are spawned, we might consider switching over to this style of input instead.
Linux - udev - Look for "ID_INPUT_KEY", not "ID_INPUT_KEYBOARD" Very important contribution by icculus (of SDL fame) -
This fixes programs using /dev/uinput to create a virtual keyboard failing to be detected on startup. Usual symptom is some sort of GPIO-based controller on a Raspberry Pi that looks like a keyboard to the OS and can control EmulationStation, but fails to work in-game unless you restart the controller's program while the game is running (in which case udev_input.c's hotplug code, which was using the correct string, would pick it up).
Core info cache files are now portable
Core info cache files should now be portable.
The core info cache stores absolute core paths, which breaks portability (i.e. if the cache is enabled and the core directory is moved, cores can no longer be loaded).
In truth, it is a mistake to cache the core path in the first place, since this is already retrieved from the filesystem regardless of whether the cache is enabled. 1.9.9 therefore removes core paths from the info cache, so the correct (dynamically determined) path is always used.
As a result, iOS now has core info cache files re-enabled again, which should lead to an increase in overall core info performance.
Changelog
1.9.9
3DS: Add bottom touchscreen menu
3DS/SAVESTATES: Save and load save states to and from RAM
AUDIO/MIXER: Ensure than menu sounds are re-enabled when calling CMD_EVENT_AUDIO_REINIT
AUDIO/RESAMPLER/MIXER: Fix menu sounds (audio mixing) when using the 'sinc' resampler with quality lower than 'normal'
AUDIO/CONVERSION/ARM NEON: Add intrinsic NEON versions for float_to_s16/s16_to_float - should lead to optimized codepaths for AArch64/ARMv7 architectures without being dependent on ASM codepaths.
AUDIO/RESAMPLER/ARM NEON: Add intrinsic NEON version for lanczos sinc function - should lead to optimized codepaths for AArch64/ARMv7 architectures without being dependent on ASM codepaths.
CHEEVOS: Upgrade to rcheevos 10.2
CHEATS: Add enhanced search functionality to the 'Cheats' menu
CHEATS/RUNAHEAD: Fix cheats when using second instance runahead
CONFIG: Add option to (force-)write current core options to disk (Quick Menu)
CORE INFO CACHE: Remove core path from core info cache. Should make core info caches portable now (for example: you can move RetroArch to a separate dir and they would still work).
D3D11: Use Shader Model 5.0 for frontend shaders if D3D11 Feature level is at least 11.0 or higher. Should fix some new shaders that require SM 5.0 (like AMD FSR)
D3D11: Add HDR support (not working for Xbox for now)
D3D12: Add HDR support (not working for Xbox for now)
EMSCRIPTEN: Fixed web player bug with filesystem and runtime
INPUT/OVERLAY: Fix overlay input when analog to digital mapping is enabled
INPUT/UDEV: Look for "ID_INPUT_KEY", not "ID_INPUT_KEYBOARD"
INPUT/WINRAW: Fix crash when overlay is enabled
MAC/METAL: Add Discord RPC support
MENU: Allow 'Custom Aspect Ratio (X Position)/(Y Position)/(Width)/(Height)' to be entered manually via keyboard
MENU: Allow 'Vertical Refresh Rate' to be entered manually via keyboard
MENU/SHADERS: Highlight currently selected value in Shader Parameter drop-down lists
STABILITY: Safer way of avoiding the race condition in audio_driver_sample/audio_driver_sample_batch - we can check audio-suspended to see if we're doing a fs/windowed toggle - enhances stability when fullscreen toggling/tearing down context
STABILITY: When audio driver write callback function fails, don't turn audio off completely - look if audio_driver_output_samples_conv_buf is non-NULL first before we attempt to write audio - enhances stability when fullscreen toggling/tearing down context
STABILITY: Input robustness for cores that use internal threading (full teardown/setup), no audio should be processed at this point in time
VIDEO: Screen resolution list sanitizing
VULKAN: Fix some Vulkan validation layer errors
UWP: Updated icons courtesy of Danp142
UWP/XBOX: Disable CPU model check on Xbox as it doesn't work and can even crash
UWP/VFS/XBOX: Code cleanup and simplification of UWP VFS driver
If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.7 version) is scheduled to be released a week from today.
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 with our users. This project exists because of your support and belief in us to keep going doing great things. 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!
Highlights
New RetroFW port
We added support for OpenDingux before for JZ4770-based handhelds. After this, we added support for RetroMini RS-90 devices.
And now thanks to Poligraf, we have a working build for all the JZ4760-based handheld devices running RetroFW. RetroFW is a Dingoo based firmware runnin on the MIPS 4760 which is around 50% the speed compared to other devices running Opendingux.
We have been told these cores all run well on the hardware.
All of these low powered handheld devices help us tremendously in optimizing our cores for the low end spectrum of hardware devices. gpSP, PCSX ReARMed and Picodrive are already starting to reap the benefits of it.
Core option categories
We are going to be making a persistent effort now to enhance RetroArch's UX and lower the acessibility curve. To that end, we now have also implemented core option categories support.
Up to this point, every core option in a core (Quick Menu -> Options) has all been shown in a a flat alphabetical list. Users can quickly get confused if they have to scroll down a massive list of options.
So, 1.9.8 finally adds core option categories. Options assigned to a category will be displayed in a submenu of the main core options menu on supported frontends. For example - here we assign Gambatte's mulitplayer options to a Game Boy Link category:
If you do not like this new behavior, there are always options to turn it off. Go to Settings > Core > Core Option Categories setting (enabled by default). When disabled, core option categories are ignored, and core options will effectively be displayed using the old v1 format.
Cores that already support core option categories
Core option categories have to be specifically added per core. Some of the cores that already support core option categories are as follows:
Final Burn Neo
Mupen64Plus Next
Beetle Saturn
Beetle PSX
Beetle PCE
Beetle PCE Fast
Genesis Plus GX
Snes9x 2010/2005/2002
DOSbox Pure
DOSbox Core
UAE (Amiga)
VICE (Commodore 64)
Have you ever noticed RetroArch starting a game in windowed mode and then blowing up the window to ridiculous sizes that exceeds the boundaries of your desktop? Well, we now have a solution for that!At present, when RetroArch is in windowed mode with Remember Window Position and size disabled, the window size will be equal to the core provided base_width/base_height multiplied by the Windowed Scale. This is potentially 'catastrophic': if a core has a very large base_width/base_height (e.g. PPSSPP with a x7 internal scale factor) and Windowed Scale is set to the default x3, then the window size can be enormous - potentially exceeding the capacity of the host GPU and causing RetroArch to crash.1.9.8 adds two new options:
Settings > Video > Windowed Mode > Maximum Window Width (default: 1920)
Settings > Video > Windowed Mode > Maximum Window Height (default: 1080) ...which can be used to cap the maximum window size to a 'sane' value.
The PR also cleans up the Settings > Video > Windowed Mode menu, auto-hiding options where required, and re-initing drivers when toggling Remember Window Position and size. Also, since the 'remember' part of Remember Window Position and size is only enabled for Windows, an alternate Use Custom Window Size is provided on other platforms.
Auto-updating core option menu visibility updates without toggling Quick Menu
Cores are able to show or hide their options via the RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY callback on supported fontends. A significant shortcoming here is that if a change to one core option (via the frontend) affects the visibility of another option, the frontend cannot update the menu state until the core has run for at least one frame. So with the core options menu open, visibility updates cannot happen in real-time - instead, the user must toggle the quick menu off then on before the menu will change. This is ugly and confusing.1.9.8 adds a new RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK environment callback which allows the core to register a function that enables the frontend to (a) force a core-side option visibility update and (b) allows the frontend to check whether option visibility has changed. This means all show/hide operations can now generate real-time menu updates.
Windows
Plenty of important fixes for Windows users.If you experienced lockups in the past when disconnecting an audio device while using the WASAPI audio driver, well, rejoice, this will no longer happen. Simultaneous shift sticky fixes were made to the DirectInput input driver. Dinput would not send WM_KEYUP for both Shifts if they were pressed together and released, resulting in sticky Shifts= Pinball games ruined in DOSBox.The following fix was made to the Windows RawInput driver - the Left Alt key could get stuck when Alt-Tabbing. No more. The keyboard can now also be mapped to analog input axes, meaning you can bind the left and right analog stick on the RetroPad to your keyboard keys.
PlayStation2 version
1.9.8 solves the flickering issues that appear in the cores that use the FRAME_SKIP as Snes9x2002 does.Also, 1.9.8 basically mounts HDD partition if RetroArch actually started from the HDD unit.In this way, we skip the mount partition if the user just wants to use USB.
macOS/OSX version
Plenty of important fixes for macOS users this time!There were several serious memory leaks with the Metal video driver. These have now been fixed.Serious bugs related to the input autodetection subsystem have finally been fixed. Now when you connect a gamepad, it will no longer try to attach the same pad to two controller ports simultaneously. This has been a longstanding bug that we're glad has finally been consigned to the dustbin of history thanks to the help of a generous contributor who did quite some work to delve deep into this issue. We also made sure everything still works across a wide variety of macOS machines (from a PowerPC Mac running OSX 10.5 to an Intel and ARM Mac running more recent macOS versions).
WiiU version
Lots of improvements have been made once again to the WiiU port.All the libretro RPX cores are now compressed. Not only do they load faster (leading to faster startup times), but it means you have a lot more space left on your SD card.L3 and R3 buttons have been fixed on several gamepads, they were previously completely nonfunctional.Furthermore, promising work is underway for a PlayStation1 emulator core running on RetroArch WiiU. More on that later once more news is forthcoming.
UWP/Xbox versions
We have been fixing several bugs with the UWP port, many of these affecting in particular RetroArch users on Xbox One/Series.Microsoft recently released a new Dashboard update that caused some breakage for existing RetroArch installs. We have managed to fix the startup problem that occurred on the latest dashboard. We also fixed the onscreen keyboard display which was previously completely glitched out.Note that on the latest Dashboard, some compatibility problems still persist. For instance, it has been reported that several games on PCSX2 no longer work as of the recent update. This will require investigation and it is our guess if anything can be done about this, we will have to determine this after more investigation has occurred. For now, you might experience scaling issues with some of the ANGLE/GL powered cores like Mupen64Plus Next and Flycast because of the Dashboard update. We hope that we will be able to transition from ANGLE to something like GLon12 soon. What this would buy us is full desktop OpenGL support instead of just OpenGLES. This would mean a more complete superset of OpenGL (up to 3.3 from what we can hear), more cores that would work out of the box instead of custom cores made to work with ANGLE, etc. We will see if we succeed in this, but that's something for a later version.In the meantime, we have also enabled Translation features. Note that we haven't been able to implement the Text-to-Speech accessibility feature yet, but all other features should be there now for experimentation.We have also re-enabled the "Explore" tab on the Main Menu. We haven't found any issues with this anymore after the recent bugfixes/improvements we made to the underlying database code, but let us know if there are any more issues on that front.Several cores that used the libretro VFS subsystem and/or CHD loading previously no longer worked. Examples include the Beetle cores. This has been fixed.
Screen resolution settings improvements
Currently the "Screen Resolution" list wrongly alters also video_refresh_rate to the rounded value, as in 59.940 Hz becomes 59.000.This change makes sure all the 59.94 multiples (59/119 etc) result in the proper float value instead of integer.Also, previously notifications when setting the refresh rate would repeat itself twice. This has been fixed.
Changelog
1.9.8
AUDIO/WINDOWS/WASAPI: Stop deactivating audio on fast forward
CHEEVOS: Hide challenge indicators when resetting
CHEEVOS: Support for more than 64 memory regions
CHEEVOS: Automatically retry 'http error code -1'
CONTENT INFORMATION: Show content info label+path rows always
CORE OPTIONS: Core option categories implemented
CORE OPTIONS: Add option to disable core option categories
DATABASE: Fix heap-buffer-overflow when fetching CRC values
DATABASE/EXPLORE: Fix CRC32 reading in explore menu
DATABASE/LIBRETRODB: Fix writing of numerical values
DATABASE/LIBRETRODB: Fix libretro-db loading on big endian platforms
DUMMY CORE: Skip state_manager_event_{deinit/init} when core type is dummy, should skip warning spam 'Implementation uses threaded audio. Cannot use rewind..' when using rewind
INPUT/UDEV: Limit udev device scan to subsystem 'input'
INPUT/SDL2/WINDOWS: Fix keyboard event keycodes
INPUT/WAYLAND: Fixes a bug where the first player's mouse, pointer, and lightgun are echoed to the other ports. Now, those other ports correctly report zero. In the future support for multiple mouselike devices will need to be added, which is a bigger project
INPUT/WAYLAND: The driver now respects keyboard_mapping_blocked
INPUT/WAYLAND: When possible, deprecated lightgun defines are replaced with the new ones. The coordinates are still using the old relative callbacks
INPUT/WINRAW: Prevent Alt getting stuck when Alt-Tabbing
INPUT/WINRAW: Add pointer status
INPUT/WINRAW: Add missing analog keybinds
LIBNX/SWITCH: Fix poll missing for controller 2-8
LIBNX/SWITCH: Fix layout not applied correctly and hangs when splitting joycons
LIBRETRO: Core options category API implemented
LIBRETRO: Fix RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE callback when runahead is enabled
LIBRETRO: Add environment callback for enabling core option menu visibility updates without toggling Quick Menu
LOGGING: Starting logging and verbose mode before first config load
LINUX: In some Linux Desktop Environments, like Budgie, task bar feature is unable to pin applications. With StartupWMClass= present in .desktop file, it is possible to pin the application
LOCALIZATION: Fetch translations from Crowdin
MENU: Relocate 'Manage Playlists' to top
MENU: Fullscreen resolution width/height settings no longer require 'advanced settings'
MENU/REFRESH RATE: Fix double notifications with refresh rate settings
MENU/OZONE: Ensure the existence of values used in selection calculation
MENU/OZONE/VULKAN: Casting to unsigned caused an integer overflow and after float promotion would lead to 'x' being a garbage value, leading to problems when this value was passed to vkCmdSetViewport. This stops Vulkan validation layers from complaining about it
METAL: Fixed font driver memory leaks
MOUSE: Change default mouse index to port index
MOUSE: Friendly names for mice where available
OSX: Fix some memory leaks
OSX: Fix controller duplication bug
PS2: Implement alpha for the video driver
PS2: Aspect ratio handling
RETROFW: Initial port
UWP/XBOX: Enable Explore tab by default - seems to work fine
UWP/XBOX: Fix startup issues with latest Xbox Dashboard updates - ANGLE cores still show up wrong
UWP/XBOX: fix issue where files where opened as OPENALWAYS instead of OPENEXISTING this fixes beetle cores
UWP/XBOX: fix issue where filesizes where not returned properly, this fixes loading arcade dat files
UWP/TRANSLATION: Enabled translation services for both UWP MSVC2017 and 2019. No TTS speech yet.
VIDEO: Fix refresh rate 59Hz rounding
WINDOWS: Remember original refresh rate
WINDOWS/VULKAN: Refresh rate fixes + cleanups
WIIU: Fix L3/R3 buttons
WIIU: Compress RPX libretro cores
WIIU: Add ICInvalidateRange (necessary for JITs)
WIIU: Slight filesystem optimisation
WIIU: Add option for running without core info (emscripten-style)
What's next
It has been often requested during our project's history, but yes, we finally want to do something on the UI/UX front. We have been considering introducing an 'Easy Mode' that should aim at making things much less of a maze to navigate for non savvy users.Stay tuned for more info!
If you'd like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.7 version) is scheduled to be released a week from today.
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 with our users. This project exists because of your support and belief in us to keep going doing great things. 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: We will update this notice as soon as we have uploaded the 1.9.7 version for UWP/Xbox as well to our server. For now, these still point to the previous version (1.9.6). We thank you for your understanding.
Release notes
A brand new platform port has been added for RetroMini RS-90 (and similar devices). These are low-powered mass-produced MIPS handheld devices that are sold for very cheap. To us, it is yet another opportunity to optimize our cores for low-end devices.
PlayStation2 users are in for a treat. gpSP (Game Boy Advance emulator core) has been optimized and tuned for PS2 to the point where it should run most games at fullspeed. RetroArch should also have a bitmap font driver implemented now instead of relying on gsKit like before.
WiiU users benefit from many improvements to file I/O optimizations (faster loading/startup times), network speed, and menu/font rendering.
Switch users should benefit from the 7zip compatibility added to this release.
Many improvements to the CRT SwitchRes feature have been made. For more details, see 'Changelog' below.
Highlights
New RetroMini RS-90 port
Following on from the success of our OpenDingux port for JZ4770-based handhelds, we are pleased to announce official support for RetroMini RS-90 devices running OpenDingux Beta. This tiny console has one of the weakest CPUs we have ever targeted; it has just 32 MB of RAM, an ultra-low resolution 240x160 display and is available for as little as $20 - but still it provides an enjoyable RetroArch experience.
All regular frontend features are working (excluding rewind and runahead support)
RGUI offers surprisingly comfortable performance at 240x160 (even thumbnails are supported - with a fullscreen toggle mapped to the start button)
Content can be displayed with integer scaling, or nearest neighbour and semi-linear software filters are provided for fullscreen viewing
Given the limited specifications of the hardware, a modest section of cores are available. The following generally run at full speed:
Gambatte: All GB games (GBC games have mixed success)
Genesis Plus GX: Master System & Game Gear games
Pokemini
QuickNES
...while these offer varying degrees of playable content with frameskipping enabled via core options:
Mednafen PCE Fast
Picodrive: Genesis
Potator
RACE
gpSP
For the best results, we recommend applying a per-application CPU overclock for the RetroArch application: highlight RetroArch on the device's home screen, press the select button > Edit RetroArch, and set Clock Frequency to 420 MHz (depending on the chip, a lower value may be required, or even higher may work correctly).
PlayStation2 - playable Game Boy Advance emulator added
gpSP should now be available for RetroArch PS2 starting as of version 1.9.7. This is a Game Boy Advance emulator core. Davidgf has been working hard on this core for the past few months and the results speak for themselves - this should be the first time that a PlayStation2 is able to run Game Boy Advance games at fullspeed.
WiiU improvements
In addition to the improvements listed for WiiU previously, there's also the following to mention:
Fix inputs breaking when connecting/disconnecting remotes When a KPAD controller (Wiimote, Pro Controller, etc.) gets disconnected or has its accessory changed, the Wii U's API gives nonsensical results for a little while, even while claiming these results have no errors whatsoever. This was wreaking havoc in the input system and ended up leaving the controllers useless. 1.9.7 attempts to work around the console's API by filtering out some of the unknown results.
Download progress indicator fixed for large transfers An important bug was fixed that was causing issues while downloading the Assets from within the program. When downloading a large file on a 32-bit platform, the progress indicator will get pinned to 100% after downloading roughly 40MiB. This causes a lot of stress for assets.zip, where the 40MiB mark is about halfway. This bug has been fixed. Note that this improvement is not only beneficial for WiiU but should benefit other 32-bit platforms in general.
Linux / xdg-screensaver improvements
1.9.7 provides a workaround for the long-standing issue of "protocol error" messages being written to stderr whenever the "Suspend Screensaver" option is enabled and the X11 context driver is used. These messages don't actually come from RetroArch - they're xdg-screensaver's, which is a script for cross-DE screensaver suspending that RetroArch calls to do its job.
It turns out, the script has a problem with title-less windows. See the related bsnes issue for analysis - kudos to Screwtapello for figuring this out. The proposed solution is to check if there's already a title, and if there isn't, to set it to a single "space" character, which is surprisingly enough for xdg-screensaver to work. The space character is picked so that there's no visible difference between the bogus title and no title at all. The alternative is to make sure that RA's window has a title at all times - too much of a hassle for something this trivial.
Changelog
1.9.7
3DS: Add unique ID's
CRT/SWITCHRES: Fixed some Monitor index bugs ad updated to the latest SR2
CRT/SWITCHRES: Fixed monitor index corruption on Windows and added correct fractal scaling. Only used when required
CRT/SWITCHRES: Updated log defines to match SR upstream.
CRT/SWITCHRES: Added new SR_CONFIG_PATHS for non Windows and Linux systems. Not that SR works on them but to fix RA compile issues
CRT/SWITCHRES: Updated SR2 code base to latest. Added supprt for windows monitor indexing. Fixed monitor index bug where index 1 was not being used correctly and "auto" was not being sent.
CRT/SWITCHRES: Updated swithres for x86 windows fix
CRT/SWITCHRES: fixed SR2 auto issue
CRT/SWITCHRES: Fixed auto monitor bug
CRT/SWITCHRES: Fixed monitor index corruption on Windows
CRT/SWITCHRES: Fixed buffer size bug
CRT/SWITCHRES: Added correct fractal scaling. only used when required.
CORE INFO: Automatically disable core info cache when core info directory is read-only
EMSCRIPTEN: add MAME2003 / MAME2003-plus to web.libretro
INPUT/UDEV: udev fixes add pointer pressed to pointer device to allow udev users to access this device
VIDEO: Add 'Integer Scale Overlay' - Force integer scaling to round up to the next larger integer instead of rounding down
VIDEO: New 'Full' aspect ratio added. This aspect ratio is useful when used with a shader which has a border in it. The aspect ratio is set to the full window area, so that the viewport spans the whole viewport. When using a border type shader like the Mega Bezel this allows the graphics to span the whole window regardless of the user's monitor aspect ratio
VITA: Wrong flags for not piglet version
UNIX: Correct backlight max_brightness path
UWP/XBOX: Default to Direct3D11 driver on UWP builds
UWP/XBOX: Do not use windowed mode on UWP/Xbox by default, set default resolution to 1920x1080 by default. Should fix display issues with Dolphin/PCSX2 on Xbox
WIIU: Fix inputs breaking when connecting/disconnecting remotes
WIIU: Input - ignore some bogus KPAD results
WIIU: Font rendering fixes - render font lines with correct spacing, and only sample alpha channel when rendering fonts
WIIU/NETWORK: Network speed optimisations - WINSCALE, TCP sACK, large buffers
WIIU/LIBFAT: Increase cache size on WiiU
WIIU/FILE IO: Filesystem optimisations - add fast path for already aligned buffers
WIIU/FILE IO: Use 128K vbufs for WiiU - we have loads of RAM and large vbufs are very beneficial
RetroArch is now available on the Amazon App Store! Note: Will work best with a gamepad. Link here.
As of this moment, RetroArch is available on the Google Play Store (here and here), Amazon App Store (here),Steam (here, available by requesting access) and Itch.io(here).
If you’d like to learn more about upcoming releases, please consult our roadmap here. The next version of Lakka (with an updated RetroArch 1.9.6 version) is scheduled to be released a week from today.
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 with our users. This project exists because of your support and belief in us to keep going doing great things. 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!
Release notes
Be sure to also read our Libretro Cores Progress Report (a link will appear here later).
Windows users (with XAudio2 audio driver): RetroArch would previously hang/lock up if you happened to disconnect your current audio device. For instance, this could happen if you were playing with headphones on and you decided to suddenly disconnect your headphones. This has now been fixed. Instead of it locking up the program, instead the sound is just lost instead.
Security concerns over the AI Service on Windows have been addressed.
Improvements to the Windows installer have been made. This should hopefully prevent potentially disasterous situations from happening again. This could happen for instance when the user pointed the installer to install to a directory he should not be pointing to (like C:\Program Files for instance or the desktop), and did not heed the warning.
Linux users should hopefully no longer experience crashes when toggling between normal and threaded video mode with OpenGL thanks to a patch by grant2258.
The Direct3D 11 driver has been improved for Windows users thanks to Stenzek (DuckStation author). Several fixes: tear control support is queried. If not supported, flip mode presentation will not be used and Direct3D will resort back to the legacy blit model instead (less optimal and worse windowed mode). DXGI Alt+Enter handling has been disabled since it would conflict with RetroArch’s fullscreen mode switch. Non-vsynced output without the flip model should also be properly fixed now, when tear support is enabled and flip model is used, it should be possible to fastforward.
Highlights
Optimize scanning of large data sets
When scanning content, the amount of time required to push each new entry to the resultant playlist increases exponentially with playlist size. For small romsets this is typically unnoticeable, but when dealing with very large data sets (e.g. arcade romsets) scanning quickly becomes impractical. A full arcade romset can take several hours to scan – or days on Linux (where certain file operations that are a NOOP on Windows, etc. are very slow).
This happens because the ‘push entry to playlist’ routine is highly inefficient. It has to check whether the entry being added already exists in the playlist, which requires a content path comparison – which in turn involves several expensive operations to resolve ‘real’ file paths and deal with any inconsistencies in archive path notation. The problem is that these expensive operations happen every time: push an entry to the playlist, and it will process and compare every existing content path until it finds (or does not find) a match; push another entry and it will process every path again. Once a playlist hits a couple of thousand entries, this constant reprocessing grinds the scanning process to an effective halt.
1.9.6 solves the issue by caching all parameters derived from content paths on first use, so when pushing multiple entries to playlists the expensive path operations are only carried out once per existing entry. In addition, hash keys are used to minimise lengthy string comparisons. This greatly improves the efficiency of content scanning – and also of playlist management features (since these require nested playlist searches, which now also use the cached content path values/hashes).
For example, before with 1.9.5 and earlier, it was effectively impossible to scan 100k files. Now with 1.9.6, on a low spec development machine running Linux:
A manual scan of 100k files takes 20 minutes
Performing a Clean Playlist operation on the resultant playlist takes 5 minutes
Add support for mapping multiple controllers to a single input device
1.9.6 adds support for the remapping of individual controllers to arbitrary core input devices. This allows multiple controllers to be assigned to one input. To configure this, a new Mapped Port option has been added to the Quick Menu > Controls > Port N Controls menu:
Here, the Port 2 Controls refers to the physical controller; Mapped Port refers to the core port that will receive input from this controller.
For example, to map physical controllers 1 and 2 to the player 1 input of a core, set the following:
Port 1 Controls > Mapped Port > 1
Port 2 Controls > Mapped Port > 1
There are various use cases for this remapping:
It allows multiple controllers to be used when playing hotseat multiplayer games that normally support only a single controller
It allows hybrid-type controllers (e.g. two joysticks mounted in a cabinet) to be used as a single device
It allows easy swapping of player 1/player 2 (etc.) inputs – for example, when the PSX version of Metal Gear Solid asks the player to plug their controller into port 2
Note that these configuration settings are independent from the main RetroArch config file. To make any changes persistent, a Core, Content Directory or Game remap file must be saved.
1.9.6 also cleans up a long standing issue when configuring remaps: before, changes to Device Type and Analog to Digital Type via the Quick Menu while a core is running will ‘bleed through’ to the main config file. This is harmful and unintuitive behaviour. With 1.9.6, the global settings for these values are cached when initialising a core, and restored when the core is unloaded. (This essentially became a necessity for using the port remapping functionality, since it is rather easy to create complex configs that should in no way touch the main config file…)
‘Analog to Digital Type’ usability improvements
RetroArch is able to map the left or right analog stick of a gamepad to D-Pad input via the per-port Analog to Digital Type menu setting. Unfortunately, this is a ‘trap’ for new users: mapping a stick in this fashion disables its analog input, which creates confusion when using cores that have native analog support. Many users enable Analog to Digital Type by default, then complain on reddit/discord that analog controls do not work for PSX/N64/etc. games.
1.9.6 modifies the Analog to Digital Type functionality such that it can be disabled automatically for cores that have native analog support. The setting now has the following values:
None: No mapping
Left Analog: Map left stick to D-Pad, but disable mapping if core attempts to read analog input
Right Analog: Map right stick to D-Pad, but disable mapping if core attempts to read analog input
Left Analog (Forced): Always map left stick to D-Pad, disabling left stick analog input
Right Analog (Forced): Always map right stick to D-Pad, disabling right stick analog input
In addition, a sublabel has been added to the Analog to Digital Type menu entries, which should help to explain what they actually do.
Finally, this PR required some modification of input overlay-related code, during which the following bugs were fixed:
There is no longer contention between analog stick inputs when an input overlay and physical controller are attached to the same port
Input overlays no longer generate analog stick input in addition to D-Pad input when Analog to Digital Type is set to the left or right stick
AI Service (Windows) Security Improvements
Several security-related improvements have been made to the AI Service functionality for Windows in an attempt to address concerns that this could be abused. Speech input is no longer sent as a commandline argument to PowerShell, and both the language and speed parameters are properly sanitized and only allow for a few hardcoded safe values to be passed now. This should mitigate most of the attacks that could be thought of with regards to injection.
Windows Installer improvements
Several safeguards have been put in place to prevent people from making a severe mistake during the installation process on Windows. With the installer program, it is no longer possible to install RetroArch to a directory that has existing files or subdirectories. Instead, it has to be written in a new directory. We have to insist on this because the uninstallation process involves wiping RetroArch’s entire directory and everything in it. In the past, people could have made the mistake of pointing it to “C:\Program Files” without putting it in a separate subdir, with disastrous results on deinstallation. While the installer program did warn about this and asked you with a dialog prompt if you were sure, nevertheless we cannot take this risk to begin with. This has been resolved by simply deallowing this to happen by forcing you to install RetroArch to a new empty dir.
Changelog
1.9.6
ARCHIVE: Fix archive delimiter detection when file path contains no slashes
ANDROID: Do not duplicate port 0 mouse and gun inputs to other ports
AUDIO/XAUDIO2: Fail instead of crashing when disconnecting an audio device
CHEEVOS: Reset cached progress each time menu is opened
CRT/SWITCHRES: Add support for switchres.ini core and directory overrides
D3D11: Don’t use allow tearing flag with blit swap chains. Also disables the flip model if the allow tearing flag is not supported.
D3D11: Disable DXGI’s ALT+ENTER handling
D3D11: Don’t pass ALLOW_TEARING when unsupported
D3D11: Fix non-vsynced output without flip, black screens in fullscreen
D3D12: Relocated ‘d3d12_gfx_sync’
D3D12: Fixed swap interval option
GFX: Fix uninitialized variables in gfx_display_draw_cursor
HISTORY: Hide ‘Add to Favorites’ when viewing an entry of the favorites playlist
INPUT: ‘Analog to Digital Type’ usability improvements
INPUT: Add support for mapping multiple controllers to a single input device
INPUT/REMAPPING: Add support for mapping multiple controllers to a single input device
INPUT/LIGHTGUN: Bind lightgun trigger to first mouse button by default
INPUT/UDEV: Only add mouse if it has buttons and add vebose device friendly names
INPUT/UDEV: Skip mouse with no button errors and keep the rest
INPUT/UDEV: Fix Game Focus mode
INPUT/UDEV/X11: Change udev driver for dual lightgun support in X11
LIBNX/SWITCH: Update to libnx 4.0.0
LOCALIZATION: Fetch translations from Crowdin
LOCALIZATION: Fix Switchres menu texts
MENU/OZONE: Ensure sidebar display status is updated correctly when performing rapid menu navigation
MENU/XMB: Dynamic wallpaper fix
MENU/XMB: Icon opacity fix
MENU/QT/WIMP: Fix default core detection when playlist file name does not match ‘db_name’
PLAYLISTS: Optimise scanning of large data sets
SECURITY: Plug so-called high-risk vulnerability related to Powershell – avoid injection – don’t send speech input as commandline argument
UWP/XBOX: Add expanded resources Rescap to increase performance of UWP version in app mode on Xbox
WINDOWS/INSTALLER: Add smarter isEmptyDir reference implementation that looks for subdirectories from NSIS documentation
WINDOWS/INSTALLER: Register new function DirectorySet that is called when pressing the “Next” button on the MUI_PAGE_DIRECTORY, aka the install folder selection GUI. DirectorySet contains the criteria for an acceptable folder, which are:
IfFileExists “$INSTDIR\retroarch.exe” returns 1
IfFileExists “$INSTDIR\*.* returns 0, there is no existing folder
IfFileExists “$INSTDIR\*.*” returns 1, there is a folder, and isEmptyDir returns 1, therefore the folder is empty, including of subdirectories
last Sunday a tragedy befell the emulation community, when Near tragically took their own life. While we feel Near needs no introduction, we feel it is only right to let people know of the extent to which Near’s work laid the foundational framework of Libretro/RetroArch, and what other great projects they worked on, including of course bsnes (which needs no introduction at this point).
Among Near’s other great accomplishments: libsnes (which later turned into our fork, libretro), libco (a cooperative multi-threading library), Higan (a multi-system emulator), Ares, and various other auxiliary projects.
Out of respect for Near’s untimely passing, we have delayed the release of the next RetroArch by a full week. You won’t be seeing us doing any promotional material or coverage for it until then, and who knows, we might even skip going into it at all. We feel this right now is more important and should get front and center coverage.
We asked three people familiar with Near to provide their own eulogy. Recognize that we speak from the heart and that our purpose in doing this is to pay proper respect and tribute to a great programmer in the emulation scene, the likes of whom we might never get again.
Hunter Kaller
About 15 years ago, I was just getting into open-source software and the Super Nintendo was always my favorite console, so I was excited to find a relatively new open-source emulator that ran even the weird, unpopular games. The author of the emu had a forum where they posted their releases and all the cool stuff they were working on, and that forum was home to a tight community of other smart, creative folks.
That forum was the old bboard, and that emu author was, of course, Near. As we all know, Near was extremely prolific, driven in their pursuit of perfection, and generous enough to share their many accomplishments with the world at large. In addition to their work on bsnes, Near also documented their relentless reverse engineering escapades on the bboard, along with their efforts to understand the entirety of as many facets of software development as they could, top to bottom. The bboard was home to some pretty epic (in the classical sense) threads in which Near would dive head-first into topics–like the fundamentals of signal resampling–that most of us outside of graduate-level computer engineering programs consider black magic.
It is no exaggeration when I say: without Near and the community they cultivated on the bboard, there would be no libretro and no RetroArch.
Libsnes (which would serve as the basis for libretro) was Near’s design to decouple their backend code from the endless frustrations of frontend coding. The bboard is where Themaister first developed and released SSNES, which would become RetroArch. They met Twinaphex while attempting to port bsnes to the PS3 via libsnes+SSNES on Near’s behalf. To this day, many of our cores depend on Near’s libco cooperative threading library. I could go on.
With that said, we did not always agree or even get along. Near’s perfectionism frequently put them at loggerheads with individuals who felt some thing or other was already “good enough” (that is basically the tl;dr of how libsnes became libretro), and, on a personal level, I do not presume Near considered me a “friend” (or even thought of me much at all, for better or for worse). Like most of the people reading this, I suspect Near had a much larger effect on my life than I had on theirs.
Nevertheless, I hope Near understood the immense positive effect they had on my life and the lives of countless other individuals, not just through their numerous accomplishments but also as a compassionate and insightful human being. The world is a less-interesting place now, without Near.
Alcaro
We were never the closest friends; I was around for a while, but I was always more interested in bsnes than you, Near.
I now realize I was wrong. Too many open source maintainers are valued only for their contributions and otherwise taken for granted, leading to tragedies like this. May you finally have the peace you were denied in life.
Daniel De Matteis
I have been a bsnes fan since the very beginning when it was first announced. I remember running Mega Man X2 on an Pentium 4 PC at the time in 2005 with a premature version of bsnes and feeling that finally there was an emulator that could get the sound exactly right, and it played exactly right. Those are memories and experiences that I will always cherish.
I was not even really involved in programming until around half a decade later. I had a chance meeting with Themaister around 2010 when Near was trying to see if bsnes could run acceptably well on a PlayStation3. It didn’t, and we pretty much got stuck at the 50fps mark, but what that chance occurrence did show me was the massive potential of libsnes as an emulation abstraction layer and how easily software could be ported across platforms so effortlessly without having to maintain multiple copies of a codebase per platform. I was sold there and then on the entire potential of libsnes and SSNES. And one thing lead to another.
Fast-forward to 2021 and it’s been well over a decade since the project started and I’ve been running it now for all this time. You now know of libsnes as libretro and SSNES as RetroArch but the core concept has remained fundamentally the same, right down to the same API. Where there was in 2010 only one emulator implemented as a core (bsnes), now there is nearly 200 implementations, and not all of them even emulators. The only credit I can take in this is that I have put an inhuman amount of time in building the road so that people will come with daily maintenance and coordinating of projects so that everything works well within Libretro/RetroArch as an ecosystem. But Near absolutely deserves the credit for coming up with the foundational pillar on which this all stands. While I won’t profess to be a brilliant coder myself, I do recognize brilliance and potential where I see it. And projects like hiro, libco, and libsnes definitely show that raw genius that was in Near. I’m afraid it will be highly unlikely we will ever see a programmer as gifted involved in open-source emulation again, certainly not one with as much commitment and passion. Everyone with an appreciation for the Super Nintendo (yes, even Nintendo themselves) owes a huge amount of debt to Near for doing the near impossible in documenting and preserving this system and its back catalogue for all of posterity. It is very rare that you see someone with such selfless commitment dedicating themselves towards fully preserving a system.
Person who wishes to remain anonymous
Near was a very kind and sweet person, who cared for others. They were very talented and was amazing at what they did. I hope that they have found peace.