Quake 3 core ported to Libretro/RetroArch – with working online multiplayer + more!

Hot on the heels of vitaQuake 2 being ported to Libretro/RetroArch, now’s the time for a full-fledged Quake 3 core to make its way to RetroArch!

Rinnegatamante used his vitaQuake 3 source port as the basis for this core. Unlike the vitaQuake 2 core, there is no fallback software renderer. Unlike Quake 1/2, Quake III: Arena was the first game by id Software to require the use of a 3D videocard. For now, this core will require the OpenGL API.

So what exactly is vitaQuake 3? It’s an ioquake3 port by Rinnegatamante that was originally made for the PS Vita as a standalone release, and has now since been ported to the libretro API itself.

It currently supports the following games/mods:

  • Quake III: Arena
  • Quake III: Team Arena
  • OpenArena
  • Urban Terror
  • Q3Rally

The core is currently available on both Windows and Linux on the Libretro buildbot.

Features

  • Fixed frame steps just like the Quake 2 core. You can set the target framerate beyond 60fps in case you have a high refresh rate TV/monitor
  • Resolution can be increased up to 4K (3840×2160). We will probably increase this limit later on
  • Fully working online multiplayer support
  • Full mod support. Should work with Urban Terror, Open Arena, etc

What is not done

  • Needs keyboard/mouse control options. Right now only the gamepad is fully mapped
  • (For mobile) If we want to bring it to mobile, the GL renderer has to compile as GLES 2.0-compatible. Alternatively we could make a separate renderer specfically for this purpose.

How to get it

The core is available right now on our buildbot. It will be only available for Windows PCs, Mac and Linux for now given the OpenGL fixed function requirements right now. We will see where we can go from here.

To install this core, in RetroArch’s Main Menu, go to Online Updater. First make sure your core info files are updated. Select ‘Update Core Info Files’.

After this is done, select ‘Core Updater’. From here, you can select ‘Quake III: Arena (vitaQuake 3)’ from the list and download it.

Requirements/How to use it

You need one of the following:

  • A working version of Quake 3 Arena’s datafiles (buy it on GOG, Steam, etc)
  • A demo version of Quake 3 Arena with the datafiles extracted

We might put up the demo version of Quake 3 Arena on our Content Downloader later to simplify the process for people who just want to test this core out.

Anyway, once you have the data files unpacked somewhere on your storage device, go to RetroArch, go to ‘Load Content’, go to the directory that has the data files, go to the baseq3 folder, and open pak0.pk3.

It should start the core now.

vitaVoyager – Star Trek Voyager: Elite Force Holomatch


vitaVoyager is a port of lilium-voyager, an ioquake3 fork made to be compatible with the multiplayer mode of Star Trek Voyager: Elite Force.

Star Trek Voyager: Elite Force was a game made by Raven Software in the early ’00s. It uses the id Tech 3 engine, the same engine powering Quake III: Arena.

Both local and online multiplayer are fully implemented as well as game against bots.

How to get it

The core is available right now on our buildbot. It will be only available for Windows PCs, Mac and Linux for now given the OpenGL fixed function requirements right now. We will see where we can go from here.

To install this core, in RetroArch’s Main Menu, go to Online Updater. First make sure your core info files are updated. Select ‘Update Core Info Files’.

After this is done, select ‘Core Updater’. From here, you can select ‘Star Trek Voyager: Elite Force (vitaVoyager)’ from the list and download it.

Requirements/How to use it

You need one of the following:

  • A working version of Star Trek Voyager: Elite Force’s multiplayer data files

Holomatch, with permission from Raven and other parties, is now fully free to download and distribute.

See this page here

Other relevant info can be found here

“Fortunately you can play the multiplayer for free. Either you get it from the UFP, a multigaming clan or The Last Outpost, one of the last Elite Force RPG communities left.”

https://ufplanets.com/cms.php?27-Star-Trek-Voyager-Elite-Force

“UFPlanets.com LTD. has received written permission from CBS Broadcasting Inc., the current license holder of the Star Trek franchise and associated material, including the licensed material contained in these installers, to redistribute Star Trek Voyager® Elite Force™ for free via a digital download installer. “

We will have to research if it’s feasible or permissible for us to include these files on our Content Downloader. Until we have made that final determination, you can get them through one of the links above instead.

Anyway, once you have the data files unpacked somewhere on your storage device, go to RetroArch, go to ‘Load Content’, go to the directory that has the data files, go to the baseEF folder, and open pak0.pk3.

It should start the core now.

Coming tomorrow – lifting the curtains on id Tech 4

Tomorrow we’ll have a new blog post dedicated to our in-development Doom 3 libretro core. Stay tuned!

RetroArch 1.8.0 released!


RetroArch 1.8.0 has just been released. The default mobile UI has seen a complete overhaul and we hope this will address many of the usability issues people had with RetroArch’s menu on Android/iOS. Note that we are far from done and that the next versions will have even more enhancements coming up!

In addition to the MaterialUI menu improvements, we now have MAME overlay compatibility for the OpenGL driver, seamless driver switching, and more!

Grab it here.

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!

Big features

Complete overhaul of MaterialUI – UX for Android/iOS massively improved!

With version 1.7.9, we already improved the mobile UX significantly by adding touchscreen gestures and better touch responsiveness.

This however pales in comparison to what has been done for version 1.8.0 in this department. We will quickly go over the major highlights, most of the text here has been written by jdgleaver (the author of these changes) with only minimal edits by myself –

New menu scaling

At present, Material UI is scaled according to screen resolution and hard-coded magic numbers. This ‘kinda-sorta’ works on some mobile devices, but in general (and specifically on desktop computers and tablets) the interface is too large, and scaling is highly inconsistent when resizing windows. To combat these inadequacies, there existed a ‘DPI override’ feature which allowed the user to set a specific scale – but this didn’t work in real-time (so adjustments were blind), and it’s not user friendly (since the average user can’t be expected to know the correct DPI setting for their screen).

This new version modifies the scaling of Material UI such that it uses the hardware-reported DPI value of the display, with empirical adjustments to accommodate very large and very small screen sizes (where normal DPI scaling fails). This should ensure an appropriate default interface size regardless of hardware. Moreover, it removes the ‘DPI override’ and replaces it with a generic Menu Scale Factor under User Interface > Appearance, which is a simple fractional multiplier (much easier for the user to understand!). This Menu Scale Factor is now also used by XMB (instead of the previous XMB-specific scale factor) – it is intended that Ozone and menu widgets will obey this setting in the future.

  • DPI Override Removed – Menu Scale Factor comes in its place – starts out at 1.00x and can be made smaller or higher than the default value
  • Material UI now correctly readjusts its layout when screen orientation changes on mobile devices
  • Material UI now resizes in real-time when the user manually sets the Menu Scale Factor (this never worked properly with the old DPI override)
  • Material UI no longer leaks memory on ‘context reset’

Menu animations

A new ‘Menu Transition Animation’ option has been added under User Interface > Appearance. When this is enabled, menu transition events are animated.

All sorts of animations have been added – fade-in effects, slide effects, etc. If you dislike any of these, you can always turn the setting off completely to go back to the previous behavior.

System bar

A new Android-style ‘system bar’ has been added. This shows current core name, clock and battery level.

Navigation bar


The navigation bar is now shown at all times – i.e. it is an actual navigation tool, rather than a ‘top-level-menu’ curiosity.

Two new context-sensitive buttons have been added:

On the bottom left we have a ‘back’ button. This performs the same function as tapping the menu bar, but the button is in a more ergonomic/standard position. This should address most of the complaints Android users have about RetroArch ignoring the hardware back button.

On the bottom right we have a ‘resume content’ button. This means we can easily change/test runtime settings without performing finger gymnastics. e.g. we can change a core option or apply a shader and immediately toggle the menu off without having to hit back to get to the quick menu, and scroll up to the resume content entry.

Auto-Rotation

A new ‘Auto-Rotate Navigation Bar’ option has been added under User Interface > Appearance. When enabled (this is the default setting), the navigation bar is moved to the right hand side of the screen when using landscape screen orientations. It looks something like this:

If you don’t like this and you want it to always appear at the bottom of the screen, turn this option off.

Title bar

The title bar now uses a larger font, and the sublabel font has also been enlarged a little, to more closely align with Material Design standards.

Optimize Landscape Layout

A new Optimize Landscape Layout option has been added under User Interface > Appearance. This is intended to address the rather uncomfortable appearance of Materail UI in landscape orientation on wide displays (particularly on the desktop). The option is disabled by default on mobile platforms (like iOS/Android), and enabled by default everywhere else. When enabled, it looks something like this:


Graceful switching between video drivers

Graceful switching between video drivers has been added for Linux and Windows PCs thanks to Rinnegatamante (Patreon here). This feature originated as a bounty request, and it’s on the verge of being completed.

RetroArch in the past behaved unpredictably and unstably when switching to cores that wanted a context other than what was currently active. This could happen because of video_driver settings being different in a core config override or because a core’s core options were telling it to use a different renderer than what was active (e.g., GL vs Vulkan)

What happens now, is that RetroArch can seamlessly switch video drivers if a core requires it.

Example –

one of the new cores we have added over the past few weeks, VitaQuake 2, is a core that has two renderers. It has a software renderer and an OpenGL 1.x renderer. Say that RetroArch is running with the ‘vulkan’ video driver. We want to load VitaQuake 2.

What would happen with RetroArch 1.7.9

  • The renderer of VitaQuake 2 has two options – Software and OpenGL. Because there is no hardware context in the core for Vulkan, it would switch to Software.

What happens now with RetroArch 1.8.0 (with driver switching enabled)

  • The renderer of VitaQuake 2 has two options – Software and OpenGL. We make the assumption that you wouldn’t want to use the software renderer if OpenGL is available, so instead, RetroArch will seamlessly switch to OpenGL. When you unload the core/game, it will switch back to ‘vulkan’, so the driver switch will not be written to the config file.

What if you still want to use the Software renderer with a core like this with Vulkan?
That is certainly possible. To do this, we need to turn off the ‘driver switching’ feature. First, you need to make sure that ‘Show Advanced Settings’ is enabled under ‘User Interface’ settings. Once you have made sure of that, go to ‘Settings -> Core’. Then turn off ‘Allow cores to switch the video driver’. It should now behave like before again.

What if a core has several hardware context renderers? (like Dolphin/PPSSPP)
Cores like Dolphin and PPSSPP have several renderers available, such as OpenGL, Direct3D11 and Vulkan. Say you have RetroArch running with the vulkan driver. It would then naturally pick the ‘Vulkan’ renderer. Ditto for OpenGL and Direct3D11. So nothing changed there in that regard.

What is this particularly useful for?
The big issue with using the Vulkan video driver in RetroArch in the past (or Direct3D 11) is that while some software rendered cores might run faster with these drivers vs. OpenGL, there are plenty of Libretro cores that require the use of OpenGL. With this new feature, it will properly fallback to OpenGL for these exclusive cores but still use Direct3D 11 or Vulkan for all other cores. You can get the best of both worlds this way.

MAME layout compatibility with OpenGL driver


This started as a bounty request, and it has now been implemented at least for the regular OpenGL driver.

If you don’t know what MAME layout files are, you can read this here.

How to get this working?

First, ensure that you are using the OpenGL driver. NOTE: Make sure this is ‘gl’ driver, ‘glcore’ will not work right now but might work in a future version. Only the regular ‘gl’ driver right now will work with MAME layouts.

  • Find a layout bundle, like these: https://mrdo.mameworld.info/mame_artwork_ingame.php
  • Go to Settings > Onscreen Display > Video Layout and set ‘Enable Video Layout’ to ON, then use the ‘Video Layout Path’ option to navigate to your layout bundle.

NOTE: It’s only available for the GL driver right now, but we would like to extend it to other drivers in the future. Automatic loading of layouts based on content filename would also be a good improvement.

Changes

1.8.0

  • AI SERVICE: Added in fix for BMP returns to AI service. Added in label passing to AI service call
  • BSV: Fix BSV recording/playback
  • BUGFIX: Fix crash when setting Thumbnail Directory
  • BUGFIX/STABILITY: Set “Automatically Add Content to Playlist” to false by default, this was unstable on PS3 and Mac and other platforms potentially as well.
  • COMMON: Graceful driver switching for Windows and Linux
  • COMMON: Cache frame before converting 0RGB1555
  • LAKKA: Wi-Fi Access Point settings
  • MENU: Menu scaling improvements
  • MENU/MATERIALUI: There are no longer any animation glitches when ‘wraparound’ scrolling from the last entry in a list to the first, or when performing horizontal swipe navigation gestures on certain settings-type entries
  • MENU/MATERIALUI: List entries underneath the title and navigation bars are no longer highlighted when touching the title/navigation bars (this was only a cosmetic issue, but it was annoying…)
  • MENU/MATERIALUI: The current menu list is no longer reloaded when pressing the currently active tab on the navigation bar
  • MENU/MATERIALUI: The ticker text spacer has been set to a ‘bullet’ character (same as Ozone)
  • MENU/MATERIALUI: The default colour theme has been set to ‘Ozone Dark’
  • MENU/MATERIALUI: Three new colour themes have been added.
  • MENU/MATERIALUI: A new Menu Transition Animation option has been added under User Interface > Appearance. When this is enabled, menu transition events are animated
  • MENU/MATERIALUI: The navigation bar is now shown at all times – i.e. it is an actual navigation tool, rather than a ‘top-level-menu’ curiosity
  • MENU/MATERIALUI: Two new context-sensitive buttons have been added to the navigation bar – back button and resume button
  • MENU/MATERIALUI: A new Auto-Rotate Navigation Bar option has been added under User Interface > Appearance. When enabled (this is the default setting), the navigation bar is moved to the right hand side of the screen when using landscape screen orientations
  • MENU/MATERIALUI: The playlists tab is now correctly hidden when User Interface > Views > Show Playlist Tabs is disabled
  • MENU/MATERIALUI: Material UI now correctly readjusts its layout when screen orientation changes on mobile devices
  • MENU/MATERIALUI: Material UI now resizes in real-time when the user manually sets the Menu Scale Factor (this never worked properly with the old DPI override)
  • MENU/MATERIALUI: Material UI no longer leaks memory on ‘context reset’ (fonts were previously never free()’d)
  • MENU/MATERIALUI: A new Android-style ‘system bar’ has been added. This shows current core name, clock and battery level
  • MENU/MATERIALUI: A new search icon is shown on the title bar when viewing playlists and file browser lists. Pressing this launches the search interface
  • MENU/MATERIALUI: The title bar now uses a larger font, and the sublabel font has also been enlarged a little, to more closely align with Material UI standards
  • MENU/MATERIALUI: A number (quite a large number) of layout/spacing issues have been fixed
  • MENU/MATERIALUI: The existing colour theme handling code is not fit for purpose, so the whole lot got ripped out and reimplemented. In doing so, also adjusted all the theme colours to better match Material UI standards – with a few liberties taken for aesthetic purposes.
  • OSD: Fix fast forward indicator when not using menu widgets
  • PSP1: Remove duplicated FPS indicator on the screen
  • LIBNX/SWITCH: Make audren threaded audio driver the new default
  • VIDEO LAYOUT: Add video layout MAME overlay compatibility. Enabled for Windows/Linux/OSX/iOS/Android/libnx. Only works with GL driver for now, no glcore yet

RetroArch 1.7.9 (v2) released!


RetroArch 1.7.9 (v2) has just been released. Among many other things, it includes big QoL (Quality of Life) improvements for mobile users.

The menu system should now support touchscreen gestures and controls in general should be much improved inside the menu. But that’s far from all!

Grab it here.

If you’d like to show your support, consider donating to us. Check here in order to learn more. You can also help us out by buying some of our merch on our Teespring store!

More frequent stable releases

We will be doing stable releases more frequently from now on instead of them happening only once every 3 months. This way, we can gather live feedback from users based on things we change and it’s easier for us to adapt to user feedback.

Big features

Much-improved menu navigation and touch gestures

Version 1.7.9 will debut touchscreen gestures for the menu for the first time! You will now be able to operate the XMB and MaterialUI menu without needing a gamepad or overlay!

XMB gestures

The following gesture functionality is available with XMB:

  • Swipe up/down in the left margin: scroll through current menu list by ascending/descending the alphabet
    Swipe up/down in the middle region of the screen: scroll up/down through current menu list by one ‘page’ (i.e. one screen’s worth of entries)
  • Swipe left/right: navigate left right, or change the setting value of the currently active item
  • Tap left margin below top margin: Back/cancel action
  • Tap left margin above top margin (top left corner): Open search interface
  • Tap right margin: select currently active item
  • Tap menu list in middle region of screen: activate item, or select it if already active
  • Long press active menu item in middle region of screen: reset item to default setting value
  • Press and drag up/down in the right margin: scroll up/down through menu list (the further you drag, the faster it goes – up to a limit corresponding to keeping a cursor key held down)
  • Press and drag left/right in the top margin: navigate left/right, or change the setting value of the currently active item (again – the further you drag, the faster it goes)

MaterialUI gestures

The following gesture functionality is available with MaterialUI:

On the ‘home’ screen(s):

  • Swipe left/right to switch between the three top-level menus (i.e. has same effect as tapping the icons on the tab bar)

On playlists, file lists and drop down lists:

  • Swipe left/right on the top half of the screen to ascend/descend the alphabet.
  • Swipe left/right on the bottom half of the screen to scroll up/down by 10% of the list size (or one screen height, if this is larger)

On other types of menu:

  • Swipe left/right on a highlighted item to simulate normal cursor key left/right input (i.e. can be used to change settings)

On all menus:

  • A quick tap highlights and selects an item
  • A ‘short press’ (held for > 200 ms) just highlights the item. This is useful for highlighting a settings item prior to swiping left/right to change the value

Auto rotation of overlay when orientation changes (from landscape to portrait and vice versa)

This must have been bugging Android and iOS users for a long time, and finally it is fixed!

We added a new Auto-Rotate Overlay option under Settings > Onscreen Display > Onscreen Overlay (enabled by defaultt on mobile). When enabled, any overlay with both landscape and portrait support will automatically be rotated according to the current display aspect ratio (which corresponds to device orientation for mobile platforms).

Note: Since the overlay specification has no concept of orientation, this auto-rotate feature depends upon proper naming conventions in overlay config files:

  • The active overlay name should contain a fixed string corresponding to it’s layout (i.e. landscape or portrait). Prefixes/suffixes are fine.
  • The overlay rotate button should be wired up, with a target overlay whose name contains a fixed string corresponding to the opposite layout. (Again, prefixes/suffixes are fine)

AI Service – Faster image mode

The image mode should now be substantially faster. It now saves the image in-memory in PNG format then passes it along to the translation service.

To learn more about our AI Service, check out our Youtube guide above.

Changes

v2

  • 3DS: Fix 3DS screen flickering when OSD is enabled
  • IOS: Fix crash that could happen at startup
  • MENU/MATERIALUI: Change DPI scaling back to original – too many issues with current implementation, requires a redesign
  • AI SERVICE: Image mode is now much faster, it now saves the image in-memory in PNG format then passes it along to the translation service
  • BUGFIX: Touch input – When using an overlay to toggle the quick menu on touchscreen devices, we no longer get ‘phantom’ menu input – i.e. the old bug of hitting the toggle and instantly resuming content (or performing a save state) is fixed
  • BUGFIX: Networking – RetroArch crashed when pressing left while Relay Server Location entry was selected
  • BUGFIX: Networking – fix memory leak that could happen at exit after a network operation had run
  • CHEEVOS: Improve handling of line endings when calculating CD hashes for retroachievements
  • CHEEVOS: Add support for Sega CD/Saturn; reduce hash calls to server
  • FPGA: Add initial FPGA port for Z-Turn boards – not really release-ready yet, will need community support to continue. Currently employs naive framebuffer approach, not fullspeed
  • GL1: GLDirect (D3D9 to OGL1.1 wrapper) support
  • GONG: Stability fixes
  • LINUX/UDEV: Fix touchscreen/lightgun issues
  • MENU/MATERIALUI: MaterialUI no longer ‘forgets’ its place when navigating backwards in menus, and navigation in general is ‘cleaner’
  • MENU/MATERIALUI: Add initial gesture support
  • MENU/MATERIALUI: Improved touch support
  • MENU/MATERIALUI: Bugfix – Random’ items are no longer automatically highlighted when performing standard up/down ‘flick’ scrolling through lists (items are only highlighted when you keep the pointer still for > 200 ms)
  • MENU/MATERIALUI: Bugfix – The display no longer ‘jerks’ for one frame when navigating backwards through lists
  • MENU/MATERIALUI: Bugfix – The Material UI scaling factor is now based upon the device-reported screen DPI value (previously it relied upon a hard-coded magic number, which was never correct)
  • MENU/RGUI: Functional mouse/touchscreen support
  • MENU/ONSCREEN KEYBOARD: On-screen keyboard entry via mouse/touchscreen has been tidied up – no more double inputs (or unwanted menu interaction in the background)
  • MENU/MOUSE: Mouse wheel up/down is now a proper ‘up/down’, same as using cursor keys or a dpad
  • MENU/MOUSE: Mouse wheel tilt left/right has been wired up to normal ‘left/right’ commands. Also further improved mouse wheel tilt
  • MENU/OZONE: Add option to toggle between static and scrolling content metadata
  • MENU/XMB: Add full gesture support
  • MENU/OSX: Fixed mouse buttons – mouse down events were not hooked up
  • MENU: When navigating backwards from a core options drop-down list (i.e. pressing select or cancel), the last menu position is remembered (instead of resetting back to the first core option item each time)
  • MENU: Add mouse/touchscreen gesture support
  • MENU: Add option to delete playlists (Settings > Playlists > Playlist Management)
  • MOBILE (ANDROID/IOS): Add option to automatically rotate overlays when changing orientation
  • OSD: Memory details should now be available on every platform (get_mem_total and get_mem_free need to be implemented in the frontend driver for it to work)
  • OSD: Memory details can now be shown individually without FPS and frame count
  • PS2: Fix memory leaks in font/video driver
  • SWITCH: Set default aspect ratio to core provided instead of 4:3
  • THREADED VIDEO: Fix FPS text in threaded video mode
  • VITA: Set default aspect ratio to core provided instead of 4:3
  • VITA: Add system language detection
  • VITA: More memory support
  • WIN32: Log window now has title ‘Logging Console’
  • WII: Add Wiimote lightgun support