RetroArch Android – New versions for Play Store – please read!


Remember our previous article back in August? We could no longer update RetroArch to the newest version on the Google Play Store because their policies had changed with regards to the use of externally hosted dynamic library files.

Right after this, we suffered from the crippling buildbot server hack which really set us back. Hence we haven’t been able to address the situation as of yet.

Now, though, thanks to your help and support, we are finally on the cusp of having a solution that we hope (and think) will satisfy nearly everyone.

RetroArch Play Store – two separate versions

RetroArch on the Google Play Store is going to be different now from the version you can download on our website.

The Google Play Store version has the following plus and minuses:

    – The Core Downloader no longer connects directly to our build infrastructure – in accordance with Google Play Store’s new policies, this had to be changed.
    + Instead, you will be able to select from 50 hand-curated libretro cores to download from within the application. These cores are downloaded from Google’s servers instead.

  • + The Play Store version will be updated twice a week, possibly more if users request it. Both the cores and RetroArch itself will be updated in the process. You will no longer have to wait for months on end for a new version – instead, new versions will be pushed to the Play Store automatically.

Why only 50 cores? Unfortunately, if we don’t want to cut off support for Android OS versions lower than 8.0, we have to limit it to this number. However, there are two alternative :

RetroArch Plus

RetroArch64 has now transformed into RetroArch Plus! What separates this version from the regular Play Store version?

  • – It will only work on Android OS 8.0 and up.
  • + Because of this, you have access to 127 cores instead.

So if you have a newer device, going for RetroArch Plus is a straight upgrade instead of sticking it out with the regular RetroArch version. In addition to this, all the pros and cons of the regular Play Store version also applies to this version.

Of course, there is also a third option:

RetroArch non-Play Store version

This is RetroArch as you have always known it up to this point on Android. It has the Core Downloader which pulls from our build infrastructure, you are not limited to an arbitrary amount of cores, and it retains the same backwards compatibility as earlier versions.

The only caveat is that this version will only be available on our website from now on. Right now, this version is only available in nightly form, but once we release 1.9.1 (which should be pretty soon), you’ll be able to get it as a stable release as well.

+ Because we no longer have to care about this non-Play Store version having to be uploaded to Google Play, we no longer have to make sure the APK stays within the 100MB threshold. This means we can finally package all the assets into the APK, giving you more overlays, borders, shaders, etc. Previously we had to strip some of these out to save on space.

What you should know as a Play Store Edition user

Convert your already installed cores from previous versions

Important for people who upgrade from previous versions –

Instead of having an option in the online updater to update all installed cores at once, that option is replaced by the “Switch Cores to Play Store Versions” option. This is a one-time step that replaces any cores on your device with versions from the Play Store. It’s a necessary step for users to receive core updates on the Play Store going forward. Any cores that the Play Store can’t provide (that are outside of the 50 or 127 predefined cores for example) will remain on the device as is.

To do this, go to Online Updater -> Switch Cores to Play Store Versions.

You can still sideload cores

While it’s not possible anymore to download cores directly from our servers with the Core Downloader, it is possible for you to sideload any core you have downloaded manually. To do this, you need to unzip the core you want to install to your Android device. Then go to ‘Load Core’, ‘Install or Restore a Core’, and select the (unzipped) core you want to install.

When?

The Play Store version has been submitted to the Google Play Store, and after we have passed initial approval, it should be available shortly.

RetroArch Plus is available here.

We hope that you understand we have tried to do the best possible to make sure that people can continue using and enjoying RetroArch on Android despite the increased limitations. Supporting three separate versions instead of one certainly adds to our workload, but with our new infrastructure we feel we are able to handle it. A huge shoutout to farmerbb for putting in an incredible amount of work during this Holiday period to ensure that this has been rolled out successfully. We would have never been able to do it without him!

Coming soon – RetroArch for OpenDingux release (GCW Zero/RG 350/etc)

Written by jdgleaver

RG350 is but one of the many MIPS-based devices on the market today running OpenDingux.

OpenDingux is a Linux distribution used by a number of open source handheld gaming consoles such as the GCW-Zero, and more recently the popular RG350, RG350P and RG350M range of devices. An initial ‘experimental’ port of RetroArch for OpenDingux was made in January, but it was left unfinished. Over the past two months we have been working hard to rectify this situation.

We are pleased to announce that RetroArch now treats OpenDingux as a first-class citizen, and an official release will be included with the rollout of the new build infrastructure. While targeting the RG350M as a flagship platform (its 640×480 display offers a wealth of upscaling potential), all JZ4770-based devices should be supported. The release highlights include:

  • A reworked and well-optimised SDL-based graphics driver, with numerous features that were missing from the original experimental port (e.g. OSD notification text, graceful handling of invalid display modes, VSYNC control, fast forward support).
  • Full leverage of the hardware IPU (Image Processing Unit), with menu-based control of aspect ratio/integer scaling and image filtering methods (bicubic, bilinear, nearest neighbour).
  • A custom gamepad driver that integrates seamlessly the peculiar input configuration of OpenDingux devices (a hybrid of virtual keyboard inputs and analog sticks) and which offers full rumble support.
  • Many ‘under the hood’ enhancements such as support for battery level monitoring, memory usage reporting, a clean up of irrelevant menu entries, RGUI fixes, directory path rationalisation and a number of carefully tested compiler optimisations. This is a ‘lean and mean’ build tuned specifically for the hardware, with no unnecessary bloat.

We are launching with a modest collection of cores, each one hand-picked for performance and compatibility:

  • FB Alpha 2012 CPS-1
  • FB Alpha 2012 CPS-2
  • FB Alpha 2012 Neo Geo
  • FCEUmm
  • Gambatte
  • Genesis Plus GX
  • gpSP (Note: Currently lacks a dynarec)
  • Handy
  • Beetle PCE Fast
  • Beetle WonderSwan
  • mGBA (Note: GB/GBC/SGB content only)
  • PicoDrive
  • PokeMini
  • PrBoom
  • QuickNES
  • RACE
  • Snes9x 2005
  • Snes9x 2005 Plus
  • TyrQuake
  • VICE x64

We understand that some users may question the validity of expending two man-months of development time on such a ‘niche’ set of devices. It is the nature of RetroArch, however, that work on one platform frequently benefits others. All of the following RetroArch and core improvements have come about as a direct result of this endeavour:

– RetroArch now has a robust mechanism for implementing automatic frame-skipping based on audio buffer occupancy. This is something that stand-alone emulators have had since time immemorial, but RetroArch has always lacked (leading to the infamous ‘crackling audio’ so often reported). Auto frame-skip is a literal game changer, making a variety of previously unusable cores viable on underpowered hardware. Thus far it has been added to:

  • FB Alpha 2012 CPS-1
  • FB Alpha 2012 CPS-2
  • FB Alpha 2012 Neo Geo
  • FBNeo
  • Genesis Plus GX
  • gpSP
  • Beetle PCE Fast
  • Beetle WonderSwan
  • mGBA
  • PicoDrive
  • Snes9x 2005
  • Snes9x 2005 Plus

– As a platform without shader support, video filters are a vital part of the OpenDingux RetroArch experience. To this end, a number of new filters have been added – including several high quality LCD (and Game Boy style) effects that rival shaders, and are useful even on the desktop. In addition, many filters have been optimised intensively for maximum performance on OpenDingux, which of course reduces overheads on all platforms. And finally: OpenDingux work revealed a long-standing bug (now fixed) which disabled video filters entirely on Android.

– Snes9x 2005/Snes9x 2005 Plus has gained colour operation optimisations from Snes9x 1.60 and MIPS-specific assembly code from PocketSNES, which combine with auto frame-skip to significantly enhance performance on low end hardware. Two critical save state bugs have also been fixed.

– Our low-powered arcade cores (FB Alpha 2012 CPS-1/CPS-2/Neo Geo) have been substantially cleaned up and improved, with core option sublabels, aspect ratio correction, low pass audio filters and software-based screen rotation for devices without hardware rotation support. With auto frame-skip, even bottom-tier devices can run arcade content smoothly.

– Interframe blending in Gambatte and mGBA has been optimised, reducing performance overheads by ~70%. The same blending method has also been added to gpSP (along with optional colour correction).

– Beetle WonderSwan now has software-based screen rotation for devices without hardware rotation. In addition, colourisation palettes similar to those in Gambatte have been added for monochrome content (raw black and white is often uncomfortable to view on devices without shaders!).

– OpenDingux has rumble functionality, but we were lacking cores with which to exercise it. We therefore added rumble support to Gambatte and PrBoom, and improved the existing haptic feedback in PokeMini and TyrQuake.

This OpenDingux RetroArch port has been a passion project, born out of sheer amazement that so many of our cores run so beautifully on such limited hardware. We hope that offering a full-fat RetroArch experience will help to revitalise the community surrounding these interesting little devices. And we hope that our non-OpenDingux users will also profit from the optimisations and enhancements!

All this and more will be coming to you as part of our new range of ‘supported’ platform stable/nightly releases once the new infrastructure is about to go public. Stay tuned for more on that during the holidays!

DOSBox Pure – Out now for public testing

Article Written by Psyraven –

Hi all,

After 6 months of quite intense development, DOSBox Pure has been released for public testing. DOSBox Pure is a new fork built for RetroArch/Libretro, aiming for simplicity and ease of use.

The main features of this fork are:

  • As easy as a console game emulator by loading DOS games from ZIP files and saving into separate save files
  • Support for save states and even rewinding
  • Automatic game detection with custom gamepad to keyboard mapping for many DOS games
  • Mouse, keyboard and joystick emulation for gamepads and an on-screen keyboard

Other features are support for cheats, built-in MIDI software synthesizer (needs a SF2 soundfont file), disc swapping menu and a start menu that lists EXE files controllable by gamepad.

This initial release is feature complete as of now for what I wanted to accomplish, yet it is clearly marked as intended for public testing. So try to be constructive and as technical as possible if something doesn’t work as expected, I’ll be thankful.

I wanted to get this out before the holidays and to personally end 2020 with something cool. I hope you like it 🙂

Code and download: https://github.com/schellingb/dosbox-pure

Setting the record straight on cores and their ‘up-to-date’ status

We have started spotting a recurring trend of bad faith actors (it’s often times the same handful of people, with their own disingenuous reasons for pushing this meme) continuing to make bad-faith arguments that Libretro cores lag behind ‘upstream’ (whatever they think this means, often times they’re not even sure themselves or get it wrong) and that they’re out of date. In the past we’ve simply brushed it off as FUD (Fear, Uncertainty, Doubt) that attempts to muddy the waters, and therefore let it go unaddressed, hoping our users can separate fact from fiction by themselves. Unfortunately it’s the Internet and the more times you repeat a lie, over time people start parroting it.

So let’s set the record straight:

  • We take great care in making sure Libretro cores work as best as possible. Despite similar bad faith actors making strenuous arguments that we provide no additional added value to cores, it takes a lot of hard work and effort to make sure that programs (whether they be emulators/games, or whatnot) are properly integrated into the Libretro app lifecycle so that they run flawlessly within a Libretro frontend, such as RetroArch. There is no simple ‘port and compile’ button that one clicks when making a Libretro core. When making a Libretro core, you dig deep into the internals of a program, you figure out how the runloop works, and you reimplement it. Sometimes a program makes that easy to do because its own internal runloop is already setup well for this, other times it requires a lot more effort. To make a long story short, all this takes hard work and effort, and we try to do it on a consistent basis in a way that provides additional added value to the user. Whether one core might not fit that description does not invalidate the vast majority of cores where this is the rule, and not the exception.
  • We have spotted a recurring trend where endusers tend to overestimate the importance of random commits made to ‘downstream’ projects. While we try to work with devs when the opportunity arises, there are instances where we need to have a shallow fork of a project and judiciously do backports when such a mutually beneficial arrangement doesn’t work out. In this case, it has to be said that not every single commit that ever gets pushed to a repository is of importance, or even important to a libretro port to begin with. For instance, an update to some GUI framework is often times completely unimportant to the Libretro core.
  • We work hard on a per-daily basis to keep cores updated as much as possible. Updates go instantly live on a daily basis through RetroArch’s builtin ‘Core Installer/Updater’ service. You literally can’t have it more fresh off the press. We think that repeated claims and heckling over random cores being ‘not up to date’ is putting an unfair and exhausting strain on us where we are pressured into continuing to walk on some hamster treadmill so that an enduser can finally get a ‘rebased’ core with some inconsequential commit that has no bearing at all on the Libretro core. We simply aren’t going to fall into that deathtrap.
  • We update projects as much as possible and we try to make sure in the process that they continue to run well. Keeping a core updated is one thing, but you also want to ensure that it continues working on the platforms we care for, that the performance is maintained, etc. We go above and beyond the call of duty to pay attention to these things. We feel it is unfair that all this hard work and labor goes unnoticed and instead people engage in unfair levels of navel gazing over random commits that they themselves have no idea what added value they add to the core, whether it’s even baked in for the Libretro core, etc.

To dispel another set of rumors, no, Dolphin has not been ‘outdated’ now for months, Citra is getting a rebase soon, PPSSPP has not been ‘outdated’ for months. We are working hard on our new infrastructure at the moment where these cores can get rolled out. If they are not on our old buildbot right now, chalk it up to still having to recover from a rather nasty server hack that left us incapacitated at least for half a month or more, and we are still not completely done with the current server migration. We are completely confident that our project will be running better than ever before Christmas hits and that our new Libretro infrastructure will allow us to get things done much faster and much more efficiently than before.

Please note, it’s fine to point out when certain updates can benefit a Libretro core, certainly there can always be outliers and there can always be cores that could do with some improvements. But above being demanding, what matters even more is just contributing the necessary changes. While we are very grateful for the contributors we have, they already put in a lot of work as is in their own spare time. This kind of constant pressure to ‘update 24/7 around the clock for every nonconsequential commit I see happening on a repo’ is a problem. We do not want our pool of contributors to be overburdened or stressed out with these requests especially when the users in question cannot even tell us to what extent these contributions matter. We ask people that they leave it up to us to determine in these cases the pace at which we update repos, what changes are immediately merged in, what comes later, etc. It’s simply tiring and exhausting to continue seeing these talking points being pushed in an effort to discourage people from using RetroArch when we know ourselves just how much work, effort and time we put into all this to provide our users with the best possible experience they can get. Often times we even add features that are not even in upstream, or entire renderers are being written from scratch to provide a superior experience.

In short, there are some cores that are completely upstream, with commits fresh from upstream, without us even being involved. There are other cores where we do maintenance of the Libretro core ourselves because we deem it is the best option there. We’d like to ask the users that are insistent on these day-0 updates to please have some faith that the creators of Libretro/RetroArch in this case are perfectly capable of determining what is best for the user and to let us work at our own indiscretion. Every single update being pushed to a repo cannot just be mindlessly pushed, there has to be a filter and a process to ensure that for instance a platform we support continues working, that performance is not adversely affected, etc. We run a holistic framework here and we try to establish a truly crossplatform game console platform here that goes beyond the scope of nearly any project out there. The net we have to cast in terms of things to care about and what factors to take into consideration simply is much larger than is the case with most projects.

So, in summary:
* No, cores are NOT outdated. We have over 150+ cores and we simply DO NOT have time to tell you about every single change or update we push to our repos. It would be an inhuman amount of work for a team of our size, and any time spent writing patch notes would be time being taken away from working on our project and maintaining the stuff. Often times we push updates like over 3 or 4 times a day for various cores. We simply cannot give you status updates for all of this beyond just a ‘cores have been updated, click this button so you can immediately update them’. So people have to take their poison there. We are not Microsoft here with tenthousand workers working around the clock.
* And in the event a core *might* not be completely ‘up-to-date’ compared to some random ‘downstream’ (in the case where this is important and relevant), not only does the core still work fine and perform well (seriously, sometimes you don’t have to update exactly this very minute, sometimes things are just fine in a stable form), but we are usually quick to respond, and one or two exceptions to the rule does not give anyone the right to overexaggerate and make bad-faith arguments that they are ‘all outdated’. Also, these issues could be alleviated even quicker if we had more contributors that would join us in taking care of some of the workload. As it is, a lot falls into our lap and we are happy to accomodate, but that also means we work at our own pace and we determine what is important, and we are completely within our right to prioritize this according to our timetable.
* Furthermore, we often add features that are not even in any standalone version. Not to mention making completely new things like ParaLLEl RDP/RSP. It’s simply not true that you are ever going to get a ‘worse’ experience with RetroArch, quite the opposite. We feel these are simply bad faith arguments being made in a flimsy attempt to discourage people from trying out RetroArch. We put great love and care into our project to make it the best it could be, and it is rather upsetting to keep seeing these same talking points being trotted out by the same people, so we felt that since ignoring the nonsense doesn’t make it end, it’s time to address it.

We thank you for your understanding and we hope that we have managed to set the record straight on some of these things. Rest assured, we want to provide you at all times with the best possible experience when it comes to gaming. We completely believe in RetroArch becoming the ultimate be-all end-all crossplatform gaming console, and our passion for this is boundless. We will see it through to its conclusion no matter if not everybody shares our vision. Thanks for your time in reading this and we hope to provide some real quality new content for you soon!

P.S. RetroArch works Day One on Xbox Series S/X! All you need is a Dev Kit mode activation and you’re ready to go.

Work In Progress PCSX2 Libretro core in development

PCSX2 is a PlayStation2 emulator with a fairly high degree of compatibility. For over two years we have ran a bounty hoping that somebody would be able to port PCSX2 to libretro, so that it can run for instance inside a libretro frontend like RetroArch.

Today, I can happily report that we are nearing the point where the core is becoming quite usable. It might not be long before we can finally make our first initial release. Watch our YouTube video premiere here that shows you a variety of games running on an in-development PCSX2 core, running on RetroArch of course.

Let’s discuss briefly what to expect in the weeks ahead when the initial release version launches. So far there is only a 64bit x86_64 libretro core. There might be a 32bit core in the future, but it’s contingent on improvements made in upstream first. The OpenGL and Direct3D 11 renderers have both been hooked up. Direct3D 11 renderer should be a bit faster on Windows than OpenGL, but on the flip side OpenGL has slightly more features (higher blending accuracy modes for instance).

Things NOT to expect for now:
* Android support. Totally dependent on upstream efforts to make PCSX2 more portable. This will remain for 64bit x86_64 PCs for now.
* No Mac support. GSdx has OpenGL 4.x requirements and Mac doesn’t meet them. Standalone should be the same in this regard.

We are hugely grateful to aliaspider for finally getting this core up and running in libretro. Together with Govanify we have also found some x64 dynarec bugs that he managed to solve, so games like Drakengard and Klonoa 2 work now with the 64bit dynarec. Govanify has some plans to make the PCSX2 codebase much more portable than it is now, but this is a long-term project.

PS. Keep checking our RetroArch YouTube channel. We will be showing you many games running on PCSX2 / RetroArch in the upcoming days ahead.