RetroArch 1.9.14 release!


RetroArch 1.9.14 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. 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

Vulkan – Avoid hard crash when capturing screenshot in emulating mailbox

The emulating mailbox infrastructure is very hacky and needs a rethink to be able to properly support screenshots. Emulating mailbox is pretty nasty to begin with and should be considered a hack. The next version might have a setting to allow you to disable mailbox emulation entirely. Mailbox emulation as it is only takes effect in fullscreen mode.

Steam updates

We have been busy since 1.9.13! The following cores have been added:

RetroArch Steam now has 26 cores in total, and the 27th is about to be added soon, EasyRPG! Please look forward to future announcements of more cores coming to Steam soon.

Netplay improvements

Netplay has received plenty of improvements thanks to the efforts of Cthulhu. We have a lot more prepared for the next version, so consider this a prelude to the main event.

  • Added setting to allow/disallow players other than the host from pausing the game.
  • Added a sublabel for netplay max connections.
  • Changed unknown commands to be ignored instead of forcing a disconnection.
  • Fixed port override macro from not being set immediately after the port setting.
  • Fixed memory leaks.
  • Show passworded rooms on lobby. Small improvement to the lobby viewer – it should now make a distinction between passworded rooms and non-passworded rooms.
  • uPnP: Fixes more memory leaks
  • uPnP: Added a task_queue_wait to prevent executing two nat tasks at once, so it’s also thread safe now
  • uPnp: Fix UPNP port mapping failed error – switch to a permanent lease time, but request it to be removed when we do netplay_free

For the next version, we will finally address the relay MITM server issues.

WiiU improvements

* Keyboard support has been fixed. The problem was caused by changing the driver lookup point. The deferred lookup resulted in the WIIU trying to treat the keyboard as a gamepad which …
didn’t work. This change short-circuits at the connection event by ignoring mouse &
keyboard connection events.

* Picodrive is now available for the WiiU, and this marks the first time there is a 32X emulator for WiiU, on top of it running at fullspeed.
* Caprice32 is now available for the WiiU.

Core improvements

As mentioned before, as part of Project IO, we are going over every core and performing some basic quality control checks. This already resulted in numerous Quality of Life enhancements to cores. Not all of the improvements listed below can be attributed to Project IO, but it’s fair to estimate over 90% of them are.

VICE

Description: This is a Commodore 64 home computer emulator

  • Updated to use VFS instead of straight file I/O (ProjectIO)
  • Core option sublabel adjustments
  • Audio detection for AutoLoadWarp
  • More moderate tape warp detection
  • Press play on tape change
  • Mapper additions
  • Dupecheck for disk append
  • More distinguishable light gun cursor
  • Diskwarp audio detection correction
  • Mute Datasette with Autoloadwarp
  • Diskwarp audio detection improvement
  • Autoloadwarp automuting fixes
  • Fix sound muting on rewind
  • Add Automatic Zoom Mode
  • Aspect toggle correction
  • Touch pointer cleanups

FCEUmm

Description: This is a Nintendo Entertainment System console emulator

  • Add automatic Crowdin synchronization
  • Mapper 196: Support IRQ for The Ancient & Modern Heroes
  • Mapper 319: Use hp898f.c only for the old incorrect UNIF bank order, and 319.c for all NES 2.0 ROMs. Add CNROM mode and solder pad switch to the latter.
  • Mapper 57: Change default DIP for YH-xxx Olympic multicarts, always reset to menu
  • Mapper 178: Always reset to menu.
  • CNROM/UNROM: Only emulate bus conflicts when explicitly specified by NES 2.0 header
  • Added support for mapper 383
  • Add UNROM modes and two-chip variant to mapper 242
  • Add Realtec 8099 PCB support to mapper 236

Dolphin

Description: This is a Nintendo GameCube/Wii console emulator

  • Shake motions to middle mouse – Map Nunchuk and Wiimote shake to the middle mouse button.
  • Fix real Wiimote. Tested with a few games with a Dolphin Bar, works fine AFAICT 🙂 Still needs the “Continuous Scanning” core option ON to “pair” the Wiimote.
  • Remove analog properties for Classic Controller Pro + swap L/R and ZL/ZR

Nestopia

Description: This is a Nintendo Entertainment System console emulator

  • Add automatic Crowdin synchronization

QuickNES

Description: This is a Nintendo Entertainment System console emulator

  • Add automatic Crowdin synchronization

Beetle PSX

Description: This is a Sony PlayStation console emulator

  • Add core options to change crosshair color + remove light gun warnings
  • Add automatic Crowdin synchronization

Prosystem

Description: This is an Atari 7800 home console emulator from the ’80s

  • Fix base height. This system only have one resolution depending on if it is NTSC or PAL. Before it was even worse because it was always reporting a hardcoded 320×240 which is totally wrong, so better to output the correct one even if it is also hardcoded.

Quasi88

Description: This is an NEC PC-8800 series home computer emulator from the ’80s

  • Update core options to v2

fMSX

Description: This is an MSX home computer emulator from the ’80s

Heavy improvements have been made to the fMSX core.

  • Upgrade to fMSX 6.0
  • Replace all direct file I/O access with VFS
  • Support screen 6 & 7 (512px wide)
  • Support all 8 specific values for fmsx_mapper_type_mode
  • To enable fMSX to take over DiskROM disk access routines, conform -simbdos/-wd1793 fMSX cmdline option.
  • Second joystick was already mapped into RetroArch, but never enabled on fMSX side.. Author comments: “Now I can finally play F1 Spirit side by side with my son ;)”
  • Implement -auto fMSX cmdline option, as RA option ‘fmsx_autospace’. This doesn’t feel right though – is ALWAYS on. Also during boot and game start. This IS the way fMSX itself implements it, but I doubt if this feature is very useful.
  • Fix keyboard map: some keys where registering twice, and shifted keys did not need to be mapped
  • Add option fmsx_allsprites, which shows all sprites, i.e., lifts a video chip hardware limitation, which is reproduced faithfully by default. Makes for just a tad nicer (though less nostalgic) playing experience in games like Zanac.
  • Add option fmsx_font, to load a fixed text font
  • Optionally load .pal, automatically (was introduced in fMSX 4.0)
  • Finally support .cas tape, with autostart to convenience keyboardless platforms.
  • Fix maximum VRAM size – 192KiB (12 pages) was selectable in libretro.c but capped at 128KiB in MSX.c.
  • Support maximum RAM size (256 pages of 16KiB = 4MiB)
  • Remove unused code and features – remove dead code & unused features: effects, image-related code, dummy HID methods Keyboard() & GetJoystick(), debug console-related code, I8251.c/h serial COM, printer, EMULib.c, LoadFile()
  • Support fmsx CHT and bluemsx MCF cheat files – MCF support was already rudimentary present in fMSX.
  • implement multidisk (.m3u) support using code borrowed from bluemsx-libretro
  • retro_unload_game(): invoke TrashMSX() and solve free() problem related to getcwd()/WorkDir
  • explicitly #define NUM_FDI_DRIVES 4 (differs from MAXDRIVES, which is 2 for MSX!)
  • rework PATCH_Z80 Makefile cfg
  • fix 192kB VRAM using proper bitmask

PCSX2

Description: This is a Sony PlayStation2 console emulator

  • Add “Fast Texture Invalidation” hack core option
  • Add core options categories
  • GS-ogl: Put GL_ARB_get_texture_sub_image code under a define.
    Code is currently disabled, no need to check for the extension.

gpSP

Description: This is a Game Boy Advance portable handheld emulator

Improved audio frame pacing

Previously, the core was susceptible to crackling audio, particularly when using low frontend audio latency settings.

This is because the core was handling audio output suboptimally. At the set audio sample rate, the frontend expected between 1097 and 1098 audio samples per frame – but the core was sending samples in multiples of 256. This means that the audio output becomes ‘desynchronised’ with retro_run() – sometimes 1024 samples will get sent to the frontend for the current frame, sometimes 1280 as the core either falls behind or overcompensates. As a result, when the frontend tries to synchronise on audio, jitter can occur – and if the frontend audio buffer is small (when using low latency values), it can sometimes run dry or reach capacity, causing crackling.

1.9.14 modifies audio handling such that the correct expected number of samples is sent to the frontend in proper synchronisation with retro_run(). This greatly improves audio quality, even on the notoriously crackly Mother 3.

To demonstrate the effect of this, here are a couple of figures measured from the core on a Linux desktop with an audio latency setting of 64 ms, averaged over 5k frames:

Time spent close to audio buffer underrun:

* Current master: 8.68 %
* With this PR: 2.37 %

In addition, a Miyoo port has also been added.

VitaQuake2

Description: This is a Quake 2 game engine core

Now, this core got some big and much-needed improvements!

* Fixes segfaults (which prevented the core from even running on many platforms) due to:
* Illegal use of strcpy() when handling path strings
* Illegal use of realloc() in the memory ‘hunk’ handling code
* Severe memory corruption when using the Software renderer: an extern struct was created in one file then used in another with a different type definition, such that half the members were pointing to invalid addresses…
* Moves all core-generated files (saves + config.cfg) to the frontend save directory (these were previously dumped in the game directory)
* Removes irrelevant entries from the in-game menu (the multiplayer, options, etc. menus had no purpose in the libretro core)
* Fixes screen blanking behind the in-game menu when using the OpenGL renderer
* Updates the core options to v2 format
* Clarifies existing core option labels/sublabels
* Adds a core options category for input-related settings
* Adds new core option: Gamma Level
* Allows gamma correction for both Software and OpenGL renderers
* Adds new OpenGL core option: [GL] Brightness
Sets overall ‘environment’ brightness when using the OpenGL renderer
Default OpenGL brightness has been set to a usable level (previously almost nothing could be seen…)
* Adds new OpenGL core option: [GL] Texture Filtering
Allows selection of linear or nearest-neighbour filtering for textures, with ‘HQ’ variants that improve mipmap handling (reducing the movement-induced ‘shimmer’ effect on floor/ceiling textures)
* Adds new core option: Analog Deadzone
Used to eliminate controller drift
* Adds new core option: Auto Run
Enables running by default
* Adds new core option: Camera Sensitivity
Sets the speed of camera movement using the right analog stick
* Fixes gamepad mapping (and adds proper input descriptors) by replacing the botched copy/paste code from tyrquake. The default controls are now laid out as follows:
JOYPAD_LEFT: Open Inventory
JOYPAD_UP: Menu Up
JOYPAD_DOWN: Menu Down
JOYPAD_RIGHT: Use Inventory Item
JOYPAD_B: Menu Cancel
JOYPAD_A: Menu Select
JOYPAD_Y: Next Weapon
JOYPAD_L: Run
JOYPAD_R: Crouch / Descend
JOYPAD_L2: Jump / Climb
JOYPAD_R2: Attack
JOYPAD_R3: Drop Inventory Item
JOYPAD_SELECT: Show / Hide Help Computer
JOYPAD_START: Show Menu
* Fixes rumble functionality (previously, the Rumble core option did nothing…)
* Fixes mirrored controls when using the Software renderer with the OpenGL-only [GL] Mirror Mode core option enabled
* Improves the uniformity of left/right and up/down camera movement speed (previously, up/down motion was too fast)
* Ensures a valid framerate is selected when the Framerate core option is set to Auto (previously this would fail if display refresh rate was set to e.g. 59.950 Hz)
* Ensures core is properly shut down when ‘closing content’ via the frontend
* Fixes a number of memory leaks
* Replace direct file access with VFS routines
* Music support – adds support for playback of CD audio tracks. Music must be in OGG format, placed inside the /music folder.
* Ensure that resolutions incompatible with the software renderer cannot be selected (the software renderer caps out at 1920×1200, and breaks with aspect ratios less than 4/3)
* New OpenGL core option: [GL] HUD Scale Factor
Adjusts the scale of on-screen HUD icons/text and in-game menus. A value of 1.00 will draw elements at the size expected when running the original game at a native resolution of 320×240. A value of 0.00 will draw elements with 1:1 (pixel perfect) scaling
* New core option: Force 4:3 for Cinematics
When enabled (set by default), all videos (introductions, cutscenes) will be displayed at the correct aspect ratio of 4:3. If disabled, videos will be stretched to fill the screen
* New core option: Accurate Aiming
When enabled, weapons will target the exact centre of the aiming crosshair. This modifies the behaviour of the original game, where shooting is slightly inaccurate and projectiles intentionally drift
Core option Show Crosshair additions: Users can now select White Cross, Red Dot or Red Angle images to use as an aiming crosshair
* Bug fix: The aiming crosshair is now scaled to match other HUD elements
* Bug fix: OpenGL dynamic shadows are now rendered correctly (previously, the [GL] Dynamic Shadows core option did nothing…)
* Bug fix: The OpenGL functions Draw_Fill() and Draw_FadeScreen() now operate as intended (several benefits, including a ‘proper’ semi-transparent fade effect behind in-game menus)
* Bug fix: The software renderer no longer generates heap-buffer-overflows when scaling cinematics at certain resolutions

Fix compatibility with expansion packs + add expansion pack cores

All three Quake II expansion pack cores are now available on the buildbot. In addition, each core build will fail to load content – and provide an appropriate error notification – if the wrong PAK file is selected (e.g. if the user attempts to load the rouge expansion with the xatrix core).

The list of expansion packs is as follows:
* Quake II: The Reckoning (xatrix)
* Quake II: Ground Zero (rogue)
* Quake II: Zaero (https://www.moddb.com/mods/zaero)

O2EM

Description: This is a Magnavox Oddysey 2 console emulator

1.9.14 fixes the following audio-related issues previously affecting the core:

* Before, the audio sample rate was set entirely incorrectly (I believe due to a misunderstanding when the core was originally ported). A fixed output sample rate was used which does not match the internal generated sample rate – such that the last ~30% of the samples generated each frame were simply discarded (!). This has now been rectified. (Note that we have to do some internal resampling to 2/3 of the internally generated rate, since the default rate is so high/unusual that it causes poor performance of the sinc resampler used by RetroArch)
* Before, the Audio Volume core option was applied incorrectly when the value was set below 100%, creating a non-zero ‘silence’ level. This has been fixed.
* The Voice implementation previously used the libretro-common audio_mixer.h/.c code. This cannot be used directly by a core, since it relies on certain global variables; if the core is build statically then calling audio_mixer functions will create conflicts with RetroArch itself. 1.9.14 therefore replaces the mixer code with a core-specific core_audio_mixer.h/.c copy of the library.
* Previously, the mixing of The Voice into the main audio stream was not quite correct: it just added the voice, without dealing with clipping issues. This has been fixed, by using the audio mixer code ‘as intended’.
* In addition, a new Voice Volume option has been added to allow the volume of The Voice to be set independently from sound effects.

NOTE: Voice support is disabled for the Emscripten port.

PPSSPP

Description: This is a Sony PSP game handheld console emulator

* Move audio callback to the main thread (fixes the longstanding hang
issues when using OpenGL)
* 64ms on desktop isn’t enough due to excess buffering going on in this
emulator. Set default to 128ms instead for now.
* Different audio approach is necessary due to the following: it sets a
fixed framerate of 60, then sends either too many or too few audio
samples per frame in order to force the frontend to run at the correct
speed (.e.g. making the frontend run in slow motion for games that run
at 30fps) – this is undesirable for libretro, we want a consistent
amount of audio samples per batch.

Miscellaneous core improvements

  • 81/EightyOne: Add RetroFW port
  • Beetle Supergrafx: Use VFS instead of direct file I/O
  • Beetle Wswan: Fix v30mz regression (again)
  • Caprice32: [event] changed mouse pointer to absolute position
  • Caprice32: [event] better first the default mouse mode code.
  • Caprice32: [KoS] little fix to avoid render problem on WiiU
  • Caprice32: Should work now on WiiU
  • Caprice32: [KoS] changed to RETRO_DEVICE_ID_POINTER_PRESSED
  • Caprice32: [dsk] clean base
  • Caprice32: [fdc,slots] new loader endian compatible WIP
  • Caprice32: [loader] compatible wiiu basic loader.
  • Boom3: Add automatic Crowdin synchronization
  • Cannonball: remove XML config file loading/saving – settings are stored in core options file instead
  • Dosbox Core: Correct disassembly of some FPU instructions.
  • Dosbox Core: don’t do dual writes to opl2
  • Dosbox Core: Add proper opl3 handling of the waveform select to dbopl
  • FBA2012 CPS1: Add automatic Crowdin synchronization
  • FBA2012 CPS2: Add automatic crowdin synchronization
  • Gambatte: Add automatic crowdin synchronization
  • Beetle Lynx: Don’t tell software this is emulation
  • FBNeo: (libretro) xybots remapping
  • FBNeo: (libretro) llander remapping
  • FBNeo: megadrive update from gab75
  • FBNeo: nes update from gab75
  • FBNeo: gijoe: all clones have a 4 players mode
  • FBNeo: gaelco: modernize driver, fix thoop stg. 4 crash
  • FBNeo: atarivad, fix runahead w/some games using this
  • FBNeo: tempest: add some hacks
  • FBNeo: msx update from gab75
  • FBNeo: d_taitof2.cpp: add Majestic Twelve – The Space Invaders Part IV (US)
  • FBNeo: batman, more drums volume, vad offset, ssriders oops
  • FBNeo: xmen6p, note about resetting
  • FBNeo: In Your Face (inyourfa), fix priority
  • FBNeo: ssriders, fix # of players
  • FBNeo: speccy update c/o gab75
  • FBNeo: galaxian, update pisces date
  • FBNeo: 7z: fix cpp ODR (second attempt)
  • FBNeo: spectrum fix 48k’s ay
  • FBNeo: vector, underp mode change
  • FBNeo: video, less derpy mode changes for megadrive, etc
  • FBNeo: grdnstrm: also fix clones’s dips
  • FBNeo: grdnstrm: fix dips
  • FBNeo: sms: update Voyage – A Sorceress Vacation to 1.05
  • FBNeo: ssv, buffer spriteram for every game in driver
  • FBNeo: d_namcos2.cpp: added Mirai Ninja (Japan, set 2) [Corrado Tomaselli]
  • FBNeo: d_cps1: marked forgottnj as a prototype, it’s an unfinished version of the game
  • FBNeo: d_hyperpac.cpp: added New HyperMan (3-in-1 with Cookie & Bibi & Hyper Man) (set 2) [jordigahan]
  • FBNeo: d_cps1.cpp: Fixed 2 players mode DIP switch for sf2cejx and sf2hfj.
  • FBNeo: spectrum update from gab75
  • FBNeo: williams, add Playball!, fix lottofun
  • FBNeo: lua: fix window not opening after closing a game w/lua console opened
  • FBNeo: cbombers, undrfire: impl. contrast/luma settings as recommended by Tatsuya79
  • FBNeo: ssv, experimental lag fix plus fix pastelis 2p split screen mode
  • FBNeo: d_m107.cpp: hiscore support
  • FBNeo: ssv, add spritebuffering to stmblade to fix lines in stage 6, cleanup a little
  • FBNeo: experimental cheat fix for midway (mk/umk3/etc) games
  • FBNeo: md, updates from gab75
  • FBNeo: megadrive palette fix (0 bit ignored)
  • FBNeo: sys16b doesnt have highlights, only shadows. i think? revert if breaks something
  • FBNeo: add ktiger2p [DsNo]
  • Genesis Plus GX: Fetch translations & Recreate libretro_core_options_intl.h
  • Handy: Add automatic Crowdin synchronization
  • Lutro Pong: Alpha opacity fixes
  • LRMAME2003: Fix white crosshair color in some games
  • LRMAME2003: Fix wiiu rotation – ported from 2003+ grant2258
  • LRMAME2003: Adjust tempest volume
  • LRMAME2003: Update core_options.c
  • LRMAME2003: Flag cheat input port content
  • LRMAME2003: Fix cheat input ports defender and stargate
  • LRMAME2003 Plus: New working game Kyukyoku Tiger (Japan, 2 Players)
  • LRMAME2003 Plus: Use absolute to compare against threshold
  • LRMAME2003 Plus: Use new scaling function
  • LRMAME2003 Plus: Account for all sample rates – also correct labels to Hz
  • LRMAME2003 Plus: Tempest volume – Volume seems very low, adjusted to MAME2010 value
  • LRMAME2003 Plus: Change default for audio skew
  • LRMAME2003 Plus: Use libretro rotations when available and let mame sort anything that needs to be rotated – let MAME do rotations when ra fails
  • LRMAME2003 Plus: Improve the Priority Prom – Fixes some graphical problems in the mini game when the screen zooms in which was broken previously, with thanks to dink and the FBN dev team
  • LRMAME2003 Plus: In Your Face improvements
  • LRMAME2003 Plus: Fix rotations when rotations are disabled or not supported
  • LRMAME2003 Plus: Lethal Enforcers gun read
  • LRMAME2003 Plus: Crypt Killer gun read
  • LRMAME2003 Plus: Undrfire crosshairs and cleanups
  • LRMAME2003 Plus: Lightgun crosshair appearance core option
  • LRMAME2003 Plus: Jpark uses analog / le2_flip fix for le2u
  • LRMAME2003 Plus: fix SHA1 ktiger2p
  • LRMAME2003 Plus: Tidy up enhanced crosshair shape
  • LRMAME2003 Plus: Lethal Enforcers 2 fix gun reload top and bottom
  • LRMAME2003 Plus: Lethal Enforcers 2 color fix hack
  • LRMAME2003 Plus: Fix Lethal Enforcers 2 left side reload
  • LRMAME2003 Plus: Thunder Hoop and Squash refresh rate protection fixes – prevents Thunder Hoop from crashing on level 4 and insert coin text sticking on screen after you continue in Squash
  • LRMAME2003 Plus: Fix white crosshair color in some games
  • LRMAME2003 Plus: Bbusters fix gfx and gun calibration
  • LRMAME2003 Plus: Update namcos2.c
  • LRMAME2003 Plus: Player specific crosshair tracking
  • LRMAME2003 Plus: Failsafe if CONTENT_LIGHTGUN_COUNT equals zero
  • LRMAME2003 Plus: Tag player number draw_crosshair
  • LRMAME2003 Plus: Drawgfx – reset full array
  • mGBA: Add automatic Crowdin synchronization
  • Mu: Add pdb to the extensions list
  • PPSSPP: Reimplement audio
  • Picodrive: Fix loading of SMS/GG ROMs
  • Picodrive: sound, fix ym2612 ladder effect, add option
  • Picodrive: 32x, fix DMA mem-2-mem copying for big endian
  • Picodrive: sound, add ym2612 channel clipping, ladder effect
  • Picodrive: sms, set non-TMR images to region Japan
  • PocketCDG: Replace direct file I/O access with VFS
  • Pokemini: Add 7x (672×448) video scale
  • Prboom: Update core options to v2 and automatic Crowdin synchronization
  • SameBoy: Update the SameBoy core with latest changes
  • SameBoy: Add GB_is_cgb_in_cgb_mode
  • SameBoy: Add memory write callback, optimize memory access with likely/unlikely
  • SameBoy: Add a safe memory read API
  • SameBoy: Initial MBC7 support
  • SameBoy: Mouse controls for MBC7
  • SwanStation: Latest updates
  • VirtualJaguar: Fix 39 & 54 numpad controller/keyboard mapping
  • Yabause: Add automatic Crowdin synchronization

Changelog

1.9.14

  • ANDROID/PLAYSTORE: Implement MANAGE_EXTERNAL_STORAGE permission
  • ANDROID/PLAYSTORE: Bump up SDK level to 30 to comply with Play Store policies
  • AUDIO/MIXER: Increase sample buffer padding
  • CHEEVOS: Disallow achievements when spectating netplay
  • CHEEVOS: Fix need-to-activate achievement logic for non-hardcore
  • CHEEVOS: Don’t queue rewind re-init if already on main thread
  • CHEEVOS: Ignore unofficial achievements unless setting is enabled
  • CHEEVOS: Use SSL host when available
  • CHEEVOS: Validate hashes for secondary discs in multi-disc games
  • CHEEVOS: Ensure placard is initialized on main thread when game has no achievements
  • CHEEVOS: Audit achievement settings defaults and visibility
  • CHEEVOS: Show error message when no password provided
  • CHEEVOS: Use widget for game loaded achievement progress
  • CONFIG: Honor config_save_on_exit when Reboot/Shutdown is called
  • DISK CONTROL: Focus on current content entry in Disk Control append/insert
  • FRAMEDELAY: Auto Frame Delay Improvements – swap interval handling, D3DX handling, and delay target resets also on core restart. It should now work with high refresh rates and also with Direct3D 10/11/12 drivers
  • INPUT/GYRO/ACCELEROMETER/ANDROID: Re-enable Gyroscope & Accelerometer when RetroArch resumes or regains focus
  • INPUT/HID: Fix gamepad disconnect on unrecognized HID device
  • LAKKA: Patch to fix keyboard typing
  • LAKKA: CD-ROM eject menu item
  • LAKKA/BLUETOOTH: Add option to remove pairing
  • LAKKA/SWITCH: Disable rumble gain
  • LAKKA/SWITCH: Disable cpu scaling, uses its own CPU governor
  • LOGGING: Logging cleanups. A bunch of unifications and reformattings (capitalizations, dots, quotes, prefixes etc). Also added a few missing things, such as Run-Ahead error logging and LED interface init logging when it is enabled.
  • NETPLAY: Networking – should not print country for a local lobby
  • NETPLAY: Added setting to allow/disallow players other than the host from pausing the game.
  • NETPLAY: Added a sublabel for netplay max connections.
  • NETPLAY: Fixed port override macro from not being set immediately after the port setting.
  • NETPLAY: Show passworded rooms on lobby
  • NETWORK: Make HTTP header parsing case insensitive
  • NETWORK/UPNP: Fixed memory leaks
  • NETWORK/UPNP: Added a task_queue_wait to prevent executing two nat tasks at once, so it’s also thread safe now
  • NETWORK/UPNP: Switch to a permanent lease time, but request it to be removed when we do netplay_free. Switch to a permanent lease time, but request it to be removed when we do netplay_free.
  • NETWORK/UPNP: Only use a single interface for UPnP, return on the first one found instead of iterating over all of them and opening them one by one
  • OVERLAYS: Revert changes
  • RETROFW: Add OSS audio
  • VIDEO/ROTATION: Always return false if rotation can’t occur. RETRO_ENVIRONMENT_SET_ROTATION should return false when rotation has been forcefully disabled in frontend, that way the core can decide if aspect ratio should be rotated or not for vertical games. Useful for FBNeo for instance.
  • VULKAN: Avoid hard crash when capturing screenshot in emulating mailbox.
  • WIIU: Make wiiu_gfx_load_texture code safer
  • WIIU: Fix keyboard support.

RetroArch 1.9.13 ninjafix release

A ninjafix release was just pushed for RetroArch 1.9.13. This overwrites the current 1.9.13 build. Download it here.

The main reason for this was that the overlays had been changed in 1.9.13. This would lead to many people’s existing overlay config files being broken due to the paths no longer working. So we changed it back to defaults. We apologize for the inconvenience. For example, because of this, the default overlay for Android would fail to start, and some overlays for 3DS would fail to show up.

Several Cheevos-related fixes have also been pushed.

Changes

  • ANDROID/PLAYSTORE: Implement MANAGE_EXTERNAL_STORAGE permission
  • ANDROID/PLAYSTORE: Bump up SDK level to 30 to comply with Play Store policies
  • CHEEVOS: Fix need-to-activate achievement logic for non-hardcore
  • CHEEVOS: Don’t queue rewind re-init if already on main thread
  • CHEEVOS: Ignore unofficial achievements unless setting is enabled
  • NETPLAY: Networking – should not print country for a local lobby
  • NETPLAY: Add Text Chat functionality
  • OVERLAYS: Revert changes
  • VIDEO/ROTATION: Always return false if rotation can’t occur.
  • RETRO_ENVIRONMENT_SET_ROTATION should return false when rotation has been forcefully disabled in frontend, that way the core can decide if aspect ratio should be rotated or not for vertical games. Useful for FBNeo for instance.
  • WIIU: Make wiiu_gfx_load_texture code safer

RetroArch is looking for more translators

Written by DisasterMo

As all here know, RetroArch is an amazing open-source project. It has provided many people with countless hours of high quality entertainment. At the same time many contributors strive to make it better, more inclusive and more enjoyable for more people. That is why we translators do our best to localize RA into any and all languages we can!

Unfortunately, some translation efforts have been stagnating for some time, so we would like to ask you for help: If you would like to contribute to localizing RetroArch into your language, and make this app even more amazing, please consider joining us at Crowdin!

More translators for any language would be great, but languages in dire need of some include:

– Arabic
– Asturian
– Chinese Traditional
– Czech
– Danish
– Dutch
– Esperanto
– Galician
– Greek
– Hebrew
– Hungarian
– Indonesian
– Persian
– European Portuguese
– Slovak
– Swedish
– Ukrainian
– Vietnamese
– Welsh

And if you can’t find your language on Crowdin, just notify us right over at the #retroarch-translations channel of the libretro Discord and we’ll see if it can be added.

We have prepared a written tutorial for all of you who want to get started.

If you have any questions, just hop on over to the #retroarch-translations channel and we’ll gladly help you out!

Hope to see you there!

RetroArch 1.9.13 release!


RetroArch 1.9.13 has just been released.

Grab it here.

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

UPDATE (11/11/2021): A ninjafix release has been pushed. See our blog post 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. 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

Project IO continues

Project IO continues as we try to abstract all file I/O in libretro cores and RetroArch to meet the Google Play Store’s new policies. Android 11/12 requires the use of the Storage Access Framework for file I/O, as libc stdio access is being restricted as much as possible.

One of the beneficial side effects of Project IO is that in going over each core, we find out all sorts of long standing issues along the way, and we try to improve the cores along the way. So it serves as a much needed quality control check as well.

No RetroArch 1.9.13 for Google Play Store for now

Do not expect frequent updates to the Google Play Store version until further notice for now. This is because of the new Play Store requirements (as explained bove in the Project IO section). Basically what it comes down to is that despite our hardest work and effort, we have missed the deadline, and so any new APK that is pushed to Google Play is likely to be rejected until the minimum SDK Level (30) and SAF is being used. We are trying to work as fast as we can to get to that stage. A realistic target is possibly two weeks from now, but we’d rather not make promises and see how far we can get by that point. In the meantime, downloading it from our site (the non-Google Play Store version), the Amazon App Store, or Huawei AppGallery or all valid alternatives that should receive an update.

Automatic Frame Delay

After introducing unique innovations like runahead in the past, RetroArch continues to innovate once more and remains at the forefront of latency reduction: introducing automatic frame delay! Read all about it in our separate article here.

The aim of this option is to lessen the burden of creating core-specific and also game-specific overrides for Frame Delay, and instead go for “set it and forget it”. With 0 value, the starting point will be half frame time.

It is fairly simple and it is based on frame time averaging with a few different thresholds which filter out false positives and provide quick stabilization with bigger steps depending on the need.

It only goes down, it is temporary, and it will reset on core unload and on SET_SYSTEM_AV_INFO. The necessary values are shown in video statistics and all actions are logged in info level.

Some notes by the author:
* For Windows users – use the XAudio driver for now, WASAPI and DirectSound does not lead to reliable results with Auto Frame Delay for now.
* Early polling could behave better with frame delay. Try setting Polling Behavior from ‘Late’ to ‘Early’ and see if you prefer it that way. Note that that polling setting needs (restart) info with it, since it does not properly refresh in realtime. If it is anything but Late at startup, putting it to Late will be always one frame behind.

‘All Users Control The Menu’ option is back

A much requested feature by WiiU users is back again! This allows all the connected gamepad devices to control the menu simultaneously. It is enabled by default for WiiU and disabled for all other devices.

NOTE: Only player 1 can toggle the menu. This is a limitation of the current input system. But any set Menu Toggle Controller Combo will work fine for all users, so it is probably acceptable for now.

Initialise ‘Explore’ menu on a background thread

Before, accessing the Explore menu would freeze the user interface for up to several seconds (depending on host hardware performance) while playlists and databases are scanned.

1.9.13 just pushes the Explore menu initialisation onto a background thread, so the UI remains responsive while the various processing occurs. (Note that the host platform must of course have threading support – if not, Explore menu initialisation will remain on the main thread)

RetroAchievements – Replace co-routines with tasks

Not important much to endusers but still worthy of a mention to people familiar with the codebase. Replaces the single long-running load task for RetroAchievements with several smaller tasks (which are threaded).

This also eliminates the coroutine code as that was only being used to yield the long-running load task – there wasn’t actually anything else to be coroutine with.

Subtasks (i.e. 1a/1b) are queued together and can be executed in parallel. RetroArch’s task system only has one task thread, but the HTTP task does sort of interleave the server requests so they are more-or-less executed at the same time.

Core improvements

As mentioned before, as part of Project IO, we are going over every core and performing some basic quality control checks. This already resulted in numerous Quality of Life enhancements to cores. Not all of the improvements listed below can be attributed to Project IO, but it’s fair to estimate over 90% of them are.

mGBA

Description: mGBA is a Game Boy Advance emulator

Fixed audio pacing – no more crackles and bad frame pacing

GBA content ran with the mGBA core was sometimes subject to crackling audio and intermittent bad frame pacing (particularly when using low frontend audio latency settings).

It turns out that the core was handling audio suboptimally in the libretro layer. At the set audio sample rate, the frontend expects between 548 and 549 audio samples per frame – but the AVStream audio callback reads and sends exactly 512 samples. This means that the audio callback becomes desynchronised with retro_run() – sometimes 512 samples will get sent to the frontend for the current frame, sometimes 1024 as the core either falls behind or overcompensates. As a result, when the frontend tries to synchronise on audio, jitter can occur – and if the frontend audio buffer is small (when using low latency values), it can sometimes run dry or reach capacity, causing crackling.

Our changes modifies audio handling in the libretro layer such that the correct expected number of samples is sent to the frontend in proper synchronisation with retro_run(). With this change we no longer experience cracking audio in GBA games, and the 240p test suit demonstrates smooth scrolling.

Note that the changes here only affect GBA content. GB/GBC emulation produces irregular audio sample pacing that is not consistent with the set sample rate, and so I am unsure how best to handle it. The existing AVStream audio callback and fixed buffer size of 512 is therefore maintained for GB/GBC content (since it already seems to produce acceptable results in most cases)

Miscellaneous

While working on the above, we noticed that the audio produced by this core is somewhat ‘harsh’ sounding. We have added an optional (fast) low pass audio filter (with associated strength setting), which softens the generated output to a more comfortable level.

Since we had to modify the core options, we also took this opportunity to update the options to v2 format, with category support.

LRMAME

Description: This is the mainline MAME core based on current sourcecode

Update to 0.237

We have updated the LRMAME core to version 0.237.

1 frame of input lag removed from core

In addition, we are happy to report that a longstanding issue with this core has been resolved. There was previously 1 additional frame of input latency in this core. This has thankfully been shaved off now.

gpSP

Description: This is a Game Boy Advance emulator

x86 32bit/64bit dynamic recompilers

gpSP now has a dynamic recompiler for x86 x64 architecture processors! Now both 32bit and 64bit CPUs have a working dynamic recompiler.

This is now hands down the fastest Game Boy Advance emulator in existence on x86 x64 platforms, outside or inside of libretro/RetroArch. We have benchmarked it ourselves – on an i9 10900KF, we get a regular reading of 2270/2280 fps in fastforward mode with Super Mario Advance 2. This makes it even faster than QuickNES, an 8bit Nintendo Entertainment System emulator. It is a little bit slower than Gambatte (still one of the kings in terms of performant cores) at ~2300fps, but it bears reminding that Gambatte is only targeting 8bit Game Boy consoles as opposed to the 32bit Game Boy Advance.

With Advance Wars, we can get even crazier readings like anywhere from ~4000 to ~5000fps in windowed mode.

Suffice to say, this kind of performance before was simply unheard of for a GBA emulator. Suffice to say, if you were still hurting for performance with a Game Boy Advance emulator before (on whatever ghetto rig you have repurposed), give this a try!

prBoom

Description: This is a Doom/Doom 2/Ultimate Doom/Final Doom game engine core.

In addition to this core now using the VFS for file I/O, we also improved the following listed below.

Fix core options version detection

On recent versions of RetroArch the core options are currently falling back to v0 format (missing sublabels) due to a trivial ‘supported version check’ error in libretro_core_options.h. We fixed the issue.

Fix memory leaks + prevent potential segfault when saving/loading games

We tried fixing every memory leak that we could find in the core.

It also works around a nasty bug in the code for saving/loading games, where an array index can easily go out of bounds.

Note that we had to stub a certain deinit out for the Windows build, the z_zone memory management seems to be pretty hairy on Windows and we unfortunately haven’t found a clean way to fix that yet. However, we don’t expect this to be a big issue on Windows regardless since it’s a dynamically linked core that gets deallocated after unloading anyway. Most of the leaks on the statically linked consoles should be all gone, and that is what ultimately counts at the end of the day.

TyrQuake

Description: This is a Quake 1 game engine core.

In addition to this core now using the VFS for file I/O, we also improved the following listed below.

Fix startup crash on x64 systems

The core would segfault under some circumstances when running the shareware version of Quake on Windows.

It turns out that the code makes a number of assumptions about the width of certain data types when casting pointers, which are not true on a number of platforms. On 64bit Windows this can cause pointer addresses to be determined incorrectly – leading to chaos.

We fixed the issue by using standard fixed-width types for the affected pointer casts. It also cleans up some other related compiler warnings.

Clean up file path handling + fix segfault when loading content from ‘non-standard’ directories

Before, the core would segfault on certain platforms when loading PAK files from non-standard directories (anything other than id1, quoth, hipnotic, rogue) due to illegal usage of strncpy(). This can be observed most easily by attempting to run the shareware version of Quake from RetroArch’s online content downloader.

We fixed this issue, and also cleaned up all file path handling in libretro.c (using libretro-common routines). A number of libretro-common files have also been updated to the latest version.

Fixed memory leaks

We fixed three sources of memory leaks in the core:

* A relatively minor one related to loading PAK files (the file handle was always left open)
* Two serious ones in the sprite handling code, which may potentially trigger multiple times per frame (and which were likely to cause crashes on RAM limited platforms…)

Miscellaneous core improvements

We have been spending time improving fMSX (MSX emulator core), PX68K (X68K emulator core), and Frodo (Commodore 64 emulator core), but are not quite done yet. We will probably spend some time detailing the changes to these cores by the time the next release comes along (two weeks from now).

For WiiU users: Frodo has been added to the WiiU build.

  • Beetle PSX: Add static crop behavior for “Crop Overscan” alongside dynamic
  • Beetle PSX: Set game specific tweak to get Monkey Hero running past the title screen
  • FBNeo: Numerous updates – see below:
  • FBNeo: CPS1 – fix Strider palette fades
  • FBNeo: CPS1 – Stars: simplify/fix
  • FBNeo: CPS2 – added Super Street Fighter II: The New Challengers Super 2 (bootleg, USA 930911)
  • FBNeo: CPS2 – Corrected some overdumps for Alien Vs Predator [Guru]
  • FBNeo: Sync FB Neo with MAME 0.237
  • FBNeo: Spectrum updates from gab75
  • FBneo: Mega Drive updates from gab75
  • FBNeo: NES updates from gab75 – also add Goemon 2 Translation (English)
  • FBNeo: Fix Vigilante breakage
  • FBNeo: M90 – Hiscore support
  • FBNeo: PC Engine – Add sprite limit override DIP
  • FBNeo: PC Engine – Fix timing, arrange render pipeline, scale windowing for Supergrafx
  • FBNeo: Supergrafx – Dai Makai – perfect background scrolling fix
  • FBNeo: SNK – Fix Psychos DIPs
  • FBNeo: Colecovision – Fix v-linecount (glitch in Frogger)
  • FBNeo: Pacman – added Buccaneer (set 2) [Jeremy Locke, Cam]
  • FBNeo: d_seta.cpp: add dumps for plds in blandia set, and info for undumped plds
  • FBNeo: neogeo: add “The King of Fighters ’98 (Ratio hack)”
  • FBNeo: d_cps2.cpp: add Street Fighter Zero 2 Alpha (Asia 960805) [Genaro Rodarte]
  • FBNeo: New WORKING clone – Floritas (Multivideo Spanish Moon Cresta bootleg) [Retromaniacs]
  • FBNeo: Renamed ‘spcdraga’ as ‘floritas’
  • FBNeo: Add ‘floritasm’ and rename ‘spcdraga’ as ‘floritas’
  • FBNeo: Homogenized all “bootleg on Galaxian hardware” descriptions
  • FBNeo: Now there’s only one “Space Dragon” set
  • Frodo: Added WiiU build
  • Gambatte: Fix loading of custom palettes with CRLF line terminators
  • Genesis Plus GX Wide: Fix specific Plane B scrolling bug – This bug occurred when HSRAM values for Plane B were `>= 0x10000 – config.h40_extra_columns * 4` (e.g., `0xFFD8` when h40_extra_columns = 10) because of a bit carry into the upper 16-bit word of `xscroll`.
  • Kronos: Latest updates
  • MAME2003 Plus: Improve sound tempo for Dolmen and Twin Action – some sound niggles a constant crackling noise still remain
  • MAME2003 Plus: Use control name before universal default – uses the specific control name before filling with our universal defaults. Also update DAT.
  • MAME2003 Plus: Support a couple more Afega games – these just hang off the standard NMK16 code so can be added easy enough to nmk16.c rather than afega.c which would be more complicated
  • MAME2003 Plus: New gfx scrolling routine for Twin Action
  • MAME2003 Plus: Speed up macro search – refine search to look for player specific joycodes.
  • MAME2003 Plus: Add Amlogic S812 platform + cleanup unused vars in Makefile
  • PCSX2: Numerous updates – see below:
  • PCSX2: GS: Don’t propagate 24bit textures on download
  • PCSX2: GS: Properly loop when reading 32bit CLUT from offset
  • PCSX2: GS: Fix up CLUT offset handling in 32bit I8 mode
  • PCSX2: GameDB: Add gamefixes for Ruff Trigger
  • PCSX2: GameDB: Port Iridium Runners patch, update fixes
  • PCSX2: GameDB: Patch rounding problem in Playmobil Hype The Time Quest
  • PCSX2: GameDB: Sports (RTL)
  • PCSX2: GameDB: Katamari Games
  • PCSX2: GameDB: add VU clamping to ‘Enthusia Professional Racing’
  • PCSX2: GameDB: fix serial for ‘Panzer Elite Action – Fields of Glory’
  • PCSX2: GameDB: add EE clamping to ‘Max Payne 2 – The Fall of Max Payne’
  • PCSX2: GameDB: add VU clamping to ‘Battle Engine Aquila’
  • PCSX2: GS-hw: Don’t write clamped depth test value to depth buffer when ZMSK is enabled
  • PCSX2: GameDB :add VU clamping to Monster Rancher 3
  • PCSX2: GS-hw: Add Slam Tennis to automatic mipmapping.
  • PCSX2: EE: Cyclerate > 1 caused some cycles to be lost
  • PCSX2: GS-fx/glsl: Get rid of PS_ATST 0 condition. It does nothing so no need to have it in shader.
  • PCSX2: SIF: Kind of revert a SIF timing change made a while back to fix Parappa the Rapper 2
  • PCSX2: COP2: Fix reg allocation issue. Really fixes Devil May Cry which was a bug hidden by clamping hidden by a bug, yeah i think that covers it all…
  • Yabause: Fix pixel format on android

Changelog

1.9.13

  • CHEEVOS/MSVC2010: Add Cheevos support
  • CRT/SWITCHRES: Fixes some issue where scaling is incorrect in some video modes for CRT output.
  • FRAMEDELAY: Add ‘Automatic Frame Delay’ option
  • INPUT: Add ‘All users control the menu’ setting – any gamepad can control the menu when this is enabled. Only limitation right now is that only player 1 can toggle the menu, but any set Menu Toggle Controller Combo will work fine for all users, so this should be acceptable for now
  • INPUT/UDEV: Fix Dolphin bar and safeguard against not adding devices with no mouse or touch buttons detected
  • NETPLAY/CLI: -C/–connect commandline fix
  • NETPLAY: Other improvements
  • NETPLAY: Remove forced disconnection on unknown netplay command – will be backwards compatible with any version that removed this disconnect. instead of disconnecting, we just read the data and ignore, like most network implementations do
  • TASKS/CHEEVOS: Replace coroutines with tasks/thread
  • TASKS/DATABASE/EXPLORE: Initialise ‘Explore’ menu on a background thread – no more stall when hovering over the Explore tab