Lemuroid 1.10.0

Hi guys, it’s been a while since I posted here, but that doesn’t mean the work on Lemuroid stopped, on the contrary. I’m pretty proud to announce that version 1.10.0 is out, and it’s bigger than it looks.

It comes with major reworkings in a few key areas so let me just give you the highlights:

Added support for three new (old) platforms: PC Engine, Atari 7800 and Atari Lynx.

Cores are now downloaded on demand. After you scan your library Lemuroid will just take a look at your games and settings and only download the cores it requires. This, together with some additional optimizations, reduced the download size of the application to just 6MB. Each core will require an additional download from 100KB up to a few MB.

On some consoles, it’s now possible to choose between different gamepads types and different touch controls. This means that you can now switch between Standard or DualShock for PSX, 3 or 6 buttons for Genesis and 4 or 6 buttons for Arcade.

The application is now fully localizable on crowdin, with translations for Italian and Portuguese (BR) already included (thank you guys, you were really fast). Feel free to follow that link if you want to contribute your own language or proofread the work of others.

Added the possibility to support me via in-app purchases. Lemuroid is and always will be completely free, with no Ads or any feature blocked behind a paywall, but if you enjoy it and want to ensure its future development you can now do so in just one click.

The rest of the changes are under the hood. Cores and databases have been updated, and many application libraries have been updated or replaced. A bigger refactoring also landed, which brought faster and smoother game loading.

Have fun with it!

Lemuroid 1.8.0 with MelonDS and MAME2003-Plus

Hello fellow readers,

To celebrate the first year of Lemuroid, I’ve published a new version with two major features: improved Nintendo DS emulation (with MelonDS) and MAME 0.78 support (with MAME2003Plus).

For almost a year we survived using DeSmuME, but now that MelonDS has made some huge steps forward with version 0.9, including a dynamic recompiler for 64bit CPUs and many optimizations, it’s time for some changes.

I submitted a few patches to fix the Android port, added some firmware emulation options, and integrated the Drastic open-source BIOSes. Add a few of bug-fixes on top and stir for a month of tests and you’ll get a Nintendo DS emulator that is twice as fast.

We really need to thank Arisotura and her team. They worked very hard on the project, but we can finally enjoy a great open-source DS emulator on Android.

Some of my patches are still waiting for an upstream approval, but rest assured, as soon as these are merged you’ll be able to reap the benefits also in RetroArch.

The integration of MAME2003 Plus was a lot more straightforward, requiring only some slight changes to LibretroDroid.

Since we’re talking about big news: Lemuroid is also available on F-Droid. It’s a special version deprived of every Google library, which also downloads cores on demand.

Here you can find a complete changelog of Lemuroid 1.8.0:

  • New Nintendo DS core (MelonDS)
    • ~2x the performances of DeSmuME
    • Saves and States are not compatible with DeSmuME
    • Enable it from Settings -> Change Cores -> MelonDS
  • Add support for MAME2003 Plus core
    • Support MAME 0.78 romsets
    • Use full non-merged ROMs for auto-detection
  • Redesigned game menu Improved
  • Improved touch controls customization experience
  • Improved Arcade and MD/Genesis gamepad layouts
  • Fix possible crash when saving/loading games (thanks you Nicholas)
  • Fix directory scanning on Chromecast with Google TV (thank you vicviper74)
  • Many more tiny changes

As always, huge thanks to all the people who are supporting Lemuroid through tests, feedbacks or donations.

Enjoy!

Lemuroid 1.7.1 with fast-forward and quality

This last month I’ve been very busy drafting the release of 1.7.0, and later 1.7.1 for bonus bug fixing.

The biggest work went towards redesigning audio, which now runs on a separate thread and reduces glitches by imperceptibly accelerating and decelerating playback speed. This can’t make up for weak hardware running modern consoles, but it surely improves one of the biggest issues affecting Lemuroid. I’ll probably write a separate blog post about this. It was a very interesting and challenging problem.

The second most important change is fast-forward support. The most requested feature is here, and you can finally farm at double speed.

Something else happened in this release. It’s the first time Lemuroid (and LibretroDroid) received non-trivial external contributions, so a big thank you goes to Roberto and Tyler for their efforts.

And now for dessert, a lengthy changelog:

  • Add fast-forward option
  • Add mute option
  • Reimplemented audio from scratch to be more robust to glitches
  • Fix potential crash when loading PSP games
  • Fix screen flickering with some PSP games
  • Fix crash while playing Drill Dozer on GBA
  • Change n64 resolution to the original 320x240
  • Exposed dynamic recompiler option for PSX (Enable it for better performances)
  • Updated games database
  • Fix issues with some PSP games running too fast
  • Fix missing trigger events with some gamepads
  • Fix missing gamepads events in some scenarios
  • Fix wrong aspect ratio with Genesis games
  • Improved error handling with clearer messages
  • Small fixes and improvements

A big thank you to the people who are supporting Lemuroid with code, donations, and testing. You’ve been amazing.

Enjoy!

Lemuroid 1.6.0 with many improvements

Finally! I’m very happy to announce Lemuroid 1.6.0, with nothing particularly shiny but many many quality of life improvement, especially for PSX and Android TV:

  • Added support for chd and cue/bin format (PSX)
  • Added support for multi-disk games with m3u playlists (PSX)
  • Added support for favorites on Android TV
  • Improved LCD filter which now looks sharper
  • Allow changing display filter (Smooth, Sharp, LCD or CRT)
  • Improved scanning performances (on my directory it’s around 3 times faster)
  • Cores are now bundled within the application (read afterwards for details)
  • Many small tweaks and improvements

You’ll find the update on Google Play or Github.

A lot of work went into the scanner, which is now able to handle bin/cue files and m3u playlists for multi-disk games. This should make the majority of PSX ROMs compatible with Lemuroid.

Another heavily requested feature by the community was a sharper image filtering. The default bilinear filtering doesn’t always look good, especially on TVs when using the LCD shader. The nearest neighbour filtering has its own set of issues when scaling by non integer factors, causing inconsistent pixel sizes throughout the image. The best solution I found is a sharper bilinear filtering by sampling pixels in a smarter way. Try it out and let me know what you think!

Why are cores now bundled within Lemuroid? Because Google Play blocked updates for Retroarch for downloading untrusted executable code. Lemuroid did the same and it’s a real security concern, so after a few failed attempts with Dynamic Features, I decided to bundle cores with Lemuroid. This increased the download size from 6Mb to around 25Mb but should make it compliant.

And that’s all the news this month, excluding that Lemuroid was removed and reinstantiated on Google Play for an mysterious policy violation, the hacker attack to the Libretro servers and the guy who tried to sell GBA games using a Lemuroid clone.

Yeah. It was a quiet month…

If you are enjoying Lemuroid and appreciating my work, you can support my endeavours here.

Cheers!

Lemuroid 1.5.0 brand new touch controls

layouts

This post is going to be a little bit longer and technical than usual, so if you want to take a shortcut, here’s the kicker: Lemuroid 1.5.0 is out with completely new touch controls!

You’re free to go, but if you want to know how we got there, sit tight!

This journey starts back in September 2019, when I thought it was a good idea to implement each virtual key as a separate Android View. Android was managing touch events for me and everything just worked… Kind of.

After a few months the first issues started to surface. Some people were complaining about missing touches or improper multi-touch handling while others wanted some form of customization. Adding new consoles was also becoming a bit of a chore, with many similar but different xml layouts and Kotlin classes.

It was time to go back to the blackboard.

After a few days of thinking and prototyping I decided to design everything around a simple principle: putting primary controls directly under your thumb, and secondary controls radially around them. The implementation was done by drawing everything inside a single Android View on an accelerated Canvas and manually managing touch events.

This had its own set of challenges such as optimal positioning and sizing, and making sense of touch inputs, but in the end, I’m quite proud of the result.

So what can you expect from these new touch controls?

  • They are automatically sized to optimize the available space
  • Touch targets are much bigger and no longer related to the draw area
  • They can be customized in size and vertical position
  • The most complex layouts (n64, psx, psp…) can rotate up to 45 degrees, making them more comfortable at the expense of screen estate
  • Multitouch works as you’d expect
  • It is possible to slide your finger from one control to another (while thumbsticks and d-pads still lock on your finger)
  • The diagonal in d-pad now has a smaller activation area
  • You can press thumbsticks in the PlayStation layout by double tapping and holding
  • Tilt to Stick can be activated with a triple tap on any Stick

As before, the game pad View is split in the middle to accommodate both portrait and landscape orientations.

Everything was developed with Lemuroid in mind, but I decided to publish it as a separate Android library which you can integrate into your emulator, game or app. Say hello to RadialGamePad!

Another big news for today, if you wish to support the continuing development of this project, I launched my very own Patreon page.

Feel free to take the new controls out for a spin and let me know what you think!