RetroArch 1.7.7 – UI Updates

RetroArch 1.7.7 includes many user interface tweaks and improvements. Here is a brief round-up of important changes:

Playlist Enhancements

Playlist display has been tidied up with some general housekeeping:

  • Content metadata can now be displayed via playlist ‘sublabels’. These have been added to all menu drivers apart from Ozone (which employs a side panel instead), and at the most basic level are used to show current core associations. This greatly improves the appearance of history and favourites playlists – for example:

Sublabels OFF

Sublabels OFF

Sublabels ON

Sublabels ON

Sublabels can be enabled/disabled via the Show playlist sublabels option under Settings > Playlists. (Note: Users who disable sublabels but still want a ‘clean’ history/favourites can hide core associations via the Show associated cores in playlists option)

  • Playlist sorting is now consistent, and controlled via a Sort playlists alphabetically toggle under Settings > Playlists. When enabled, all content playlists (excluding histories) are presented in alphabetical order. When disabled, entry display order may be set manually by editing playlist files with an external editor.
  • All menu drivers now show identical playlist information in all cases.
  • Playlist titles have been shortened/cleaned up.
  • Various bug fixes have been implemented, including proper sorting of playlists with blank labels, and the prevention of duplicate history entries.

Content Runtime Logging

RetroArch can now keep track of your playtime. For most menu drivers, this information is presented via playlist sublabels:

Content Runtime: XMB

…whereas Ozone uses a side panel:

Content Runtime: Ozone

Content runtime logs are enabled/disabled via two new options under Settings > Saving:

  • Save runtime log (per core): Generates a separate log file for each core+content combination (standard behaviour)
  • Save runtime log (aggregate): Logs playtime for each item of content independently of the associated core (handy for users who like to run the same content with multiple cores)

A Playlist sublabel runtime option under Settings > Playlists allows either log type to be displayed in the menu.

Runtime files are saved in JSON format, and may be edited by hand should users wish to add existing playtime accumulated before this logging feature was added. By default they are written to the following locations:

  • Per core logs: [playlist_dir]/logs/[core_name]/[content_name].lrtl
  • Aggregate logs: [playlist_dir]/logs/[content_name].lrtl

…with the following example content:

{
  "version": "1.0",
  "runtime": "1:28:27",
  "last_played": "2019-05-08 14:59:56"
}

Thumbnail Additions

A small but significant improvement: thumbnails can now be displayed on ‘mixed content’ playlists – most notably history and favourites.

Content History Thumbnails

This works by correctly utilising the db_name field of playlist entries when searching for thumbnails. This information (when available) is now automatically added to history/favourites whenever new entries are created. (Note that history/favourites generated with the previous 1.7.6 release will need to be deleted/recreated for proper thumbnail support)

A caveat here is that content launched via the file browser (or command line) has no associated db_name – but we’ve added a workaround for this. Provided that the content directory and thumbnail directory have the same name, thumbnails will be identified and shown. This requires some external organisation (e.g. SNES ROMs must be placed in a Nintendo - Super Nintendo Entertainment System folder), but it means that – for the first time – users who rely exclusively on the file browser can still view thumbnails on their content history playlists.

Menu ‘Ticker Text’ Improvements

Another small yet important addition…

RetroArch veterans will be familiar with menu ‘ticker text’ – i.e. the slow ‘back and forth’ scrolling method used to display text strings that are too long to fit on screen:

Menu Ticker Text: Bounce Left/Right

Many users think this is too slow, and reading text backwards is awkward – so now both the scroll speed and method can be adjusted via two new options under Settings > User Interface > Appearance:

  • Ticker Text Animation: Can be set to either Bounce Left/Right (existing behaviour) or Scroll Left
  • Ticker Text Speed: 0.1x -> 9.9x

The Scroll Left animation is a standard scrolling marquee, and combining this with a higher speed provides a more comfortable viewing experience:

Menu Ticker Text: Scroll Left

(The new ticker is available for all menu drivers, and looks best with RGUI due its use of a fixed width font)

RGUI Remastered

The venerable RGUI is often considered the ugly duckling of the RetroArch family, but with this release it can stand head and shoulders with XMB and Ozone. Here’s a highlight reel of the most significant changes:

Menu Sublabel Support

Previously, RGUI had no way of displaying sublabels. These are commonly used in XMB/Ozone/GLUI to show informative ‘help’ text for each menu entry, but they also (for example) provide netplay room information and the content runtime metadata mentioned above. In other words, they are an important aspect of the user experience.

To remedy this shortcoming, we now have a Show menu sublabels option under Settings > User Interface > Views. When enabled, sublabels are printed in the space at the bottom of the screen where the core name would normally be shown:

RGUI: Menu Sublabels

Shadow Effects

A new Shadow Effects option can be found under Settings > User Interface > Appearance, which may be used to add drop shadows to all menu elements. This really makes RGUI ‘pop’, and greatly increases text legibility when using colour themes or wallpapers with lighter backgrounds:

RGUI: Shadow Effects

Widescreen Support

RGUI now has proper support for 16:9 and 16:10 displays:

RGUI Aspect Ratio Settings

The new Menu Aspect Ratio option under Settings > User Interface > Appearance allows the selection of both ‘regular’ 16:9/16:10 ratios and ‘centred’ variants – the latter can be used in conjunction with wallpaper themes to enable fancy border effects:

RGUI Menu Preset: GB Pocket

RGUI Menu Preset: VT2 Amber

(These and a number of other custom menu presets are available via the online assets updater – they can be found in the rgui folder inside the assets directory)

Closely related to this is the new Lock Menu Aspect Ratio option. By default, RGUI will stretch to fit the aspect ratio of the currently running content, which means the ‘Quick Menu’ is frequently distorted – for example:

RGUI Lock Menu Aspect Ratio: OFF

By setting Lock Menu Aspect Ratio to either Fit Screen or Integer Scale, RGUI will always be displayed with the correct Menu Aspect Ratio value:

RGUI Lock Menu Aspect Ratio Settings

(Note that Integer Scale is recommended on most platforms, since it ensures that menu pixels are always perfectly square and free of scaling artefacts)

Thumbnail Support

RGUI now has full playlist thumbnail support:

RGUI Playlist Thumbnails

This is controlled via the following new options under Settings > User Interface > Appearance:

  • Show Playlist Thumbnails: When enabled, mini ‘scaled down’ thumbnails are displayed to the right of playlist entries. When disabled, it is still possible to toggle a fullscreen thumbnail by pressing RetroPad Y while a playlist entry is highlighted.
  • Top Thumbnail: Thumbnail type to be shown at the top of the screen. This is also the type of thumbnail that is presented fullscreen whenever RetroPad Y is pressed.
  • Bottom Thumbnail: Thumbnail type to be shown at the bottom of the screen.
  • Swap Thumbnails: Just swaps the draw positions of the top/bottom thumbnails (allows the ‘fullscreen’ thumbnail type to be shown at the bottom of the screen)
  • Thumbnail Downscaling Method: Selects which algorithm to use when ‘shrinking’ thumbnail images to fit on screen. This allow a choice between performance (Nearest Neighbour) and quality (Bilinear or Sinc/Lanczos3). Generally, the highest quality (Sinc/Lanczos3) option may used without issue.

Of course, loading thumbnail images incurs a performance penalty. This is utterly insignificant on most platforms, but on devices with very slow storage (e.g. old Nintendo consoles, such as the 3DS) the overheads of handling thumbnails can produce lag when scrolling rapidly through playlists.

But this is RGUI: the inclusive menu driver. All kinds of hardware are accounted for. To this end, an additional Thumbnail Delay (ms) option is provided, which prevents thumbnails from loading until the selection pointer has been idle for the specified amount of time. Setting this to ~256 ms (or higher) essentially removes all overheads during menu navigation, while still providing responsive thumbnail display. This enables lag free, thumbnail-enriched playlists on even the weakest of hardware.

On-Screen Keyboard

Prior to this release, the only way to enter usernames/passwords or perform searches in RGUI was to make use of a physical keyboard. Not any more. RGUI now has a proper gamepad-controllable on-screen keyboard, just like all the other menu drivers:

RGUI On-Screen Keyboard

Battery Notifications

RGUI has also gained an optional battery indicator, complete with ‘icons’ showing charging status/battery level:

RGUI Battery Indicator

Extended ASCII Support

Traditionally, RGUI has only supported English as a display language, since it was limited to the 128 characters of the standard ASCII set. With the 1.7.7 release, a new Extended ASCII Support option has been added under Settings > User Interface > Appearance, which (at the cost of a miniscule performance hit) allows another 128 ‘special’ characters to be shown. When this is enabled, RGUI gains full support for the following additional languages:

  • French
  • Spanish
  • German
  • Italian
  • Dutch
  • Portuguese

RGUI Extended ASCII Support

Performance Optimisations

Despite these enhancements and additions, the performance overheads of the RGUI ‘render’ function have been reduced by almost an order of magnitude. This means RGUI is lighter and leaner than ever before, and users of (virtually) all platforms can enjoy the extra ‘bling’ at no added cost.

(Even 3DS – one of the weakest devices we support – runs full speed with every RGUI feature enabled, including the particle effect animations described here)

Core Progress – Snes9x 2002 – Input lag reduced by 1-2 frames

Written by Brunis:

There’s probably a good number of people still using RetroArch’s snes9x2002 core for SNES emulation on low-performance devices (primarily Raspberry Pi 1 and Zero). There’s probably also going to be a resurgence now that the Retroflag GPI Case is coming. Because of this, I had a look at snes9x2002, testing both the performance (frame rate) and input lag. Turns out snes9x2002 had two issues with input lag:

In the LibRetro layer: The emulator would first run to generate a frame, then the input would be sampled, instead of the other way around. This means that the input fed to the emulator was always that which was sampled after rendering the previous frame. This added between 0 and 1 frame of input lag, depending on frame rendering time.

In the emulator itself: Each time the emulator was kicked off to render the next frame, it would start at the first scanline and run to the last. Due to how most SNES games work (polling input at the beginning of VBLANK, running game logic during VBLANK and scanning out the resulting lines from scanline 0 to 226/240), the optimal thing to do is to start the emulator at VBLANK, just before polling input, and then run it for a complete frame until the start of the next VBLANK. That means you capture input polling, game logic and resulting image within one and the same emulator loop. This issue added exactly 1 frame of input lag.

I fixed these issues (with Tatsuya79 on GitHub helping out with committing the LibRetro layer fix) and the result is a reduction of input lag by 1-2 frames (16.7 to 33.3 ms), without any increased computational demands. The updated core is available now, by updating from source or using the Online Updater in RetroArch.

It’s important to mention that these fixes bring snes9x2002 up to par with the other RetroArch snes9x cores in terms of input lag. Unless you have a really low-performance device, you’re still better off using snes9x2005 and upwards for the superior emulation.