Site icon Libretro

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.

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

FCEUmm

Description: This is a Nintendo Entertainment System console emulator

Dolphin

Description: This is a Nintendo GameCube/Wii console emulator

Nestopia

Description: This is a Nintendo Entertainment System console emulator

QuickNES

Description: This is a Nintendo Entertainment System console emulator

Beetle PSX

Description: This is a Sony PlayStation console emulator

Prosystem

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

Quasi88

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

fMSX

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

Heavy improvements have been made to the fMSX core.

PCSX2

Description: This is a Sony PlayStation2 console emulator

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

Changelog

1.9.14

Exit mobile version