N64 peformance and juggling multiple controllers

Hello,

First of all, RetroArch is an amazing piece of software. I’ve enjoyed some of my favourite classics on RetroArch more than any other time since the original console experience. Partly through solid, glitch free rendering, and partly through the excellent shader support. With the N64 core especially, 4xsoft + hyllian/cgwg, or 4xsoft + interlace+deinterlace looks excellent on my plasma, close to a real N64 on CRT.

However there are a couple of annoying issues that prevent it being as amazing as it should be.

One is N64 performance. I’m using the Shield TV, and while all the 1st party classic run flawlessly as expected, a handful of other games run significantly below fullspeed, therefore being unplayable. Mainly RARE titles, like Goldeneye and Perfect Dark, plus a few others including Lego Racers and San Francisco Rush. At default settings btw.

For comparison’s sake, every PSP game I’ve tried on the PSP core on the Shield run fullspeed, without a hitch. And perhaps more importantly, the actual Mupen64 emulator itself runs all N64 games I’ve tried at full speed, even when using an interpreter instead of dynarec.

The second issue is controller functionality, and this is the one that’s been far more infuriating than performance issues.

Ideally I’d like to be able to hotswap different controllers for different cores/games. Saturn pad for fighters, N64 pad for N64 games, and just the standard Shield pad for PSP games for example. But this has really been an exercise in frustration, it seems impossible, so now I’ve just resorted to using the standard Shield controller for everything.

First, despite having input mapping override per core/game that works well, there appears to be only one global mapping slot, rather than one per controller. So everytime I try and use a different controller, I have to remap all buttons.

Second is the mechanism for choosing which controller is active in slot 1. You have to use the currently active controller, then choose the desired controller, then proceed with the newly assigned one, remap all buttons etc.

The thing is, it’s incredibly easy to just get locked out of the menus altogether. While scrolling through which new controller you’d like to use, it’s easy to land on “disabled” at which point none of the controllers work, and I have to revert back to a backed up config file to be able to simply use the menus again. This has happened countless times.

What I’d suggest is something similar to how Mupen64ae handles controllers. First, have any connected controller be able to navigate menus to prevent the absurd menu lock up, using autoconfig buttons, to ensure the back/select functionality is there. Then load the actual button mapping when a game starts.

Also like Mupen64, just allow the user to save button config files per controller. What would be even better, would be the option to autoload the appropriate button mapping file for whatever controller was used to start a game.

Oh, and one more thing, as of right now N64 controllers (via adapter) aren’t even usable on RetroArch, due to the Mayflash adapter capping the range of the analog stick to about 64%. WIth WIndows it’s not a problem, as you can just calibrate the stick. That’s not possible on Android, and therefore Mario can’t even run :wink:

Mupen64ae handles it fine through, you just select the N64 controller preset, and it maps the buttons and scales the analog range perfectly.

Anyway, I do think perfect controller handling would go a LONG way to making RetroArch Android a much improved, more enjoyable experience.

Cheers.

This may be related… My wife and i were playing Mortal Kombat 4 and right stick down for down c for sweep kick stopped working mid game. no restarting or remapping fixed it… it was registering the button push everywhere in retroarch but not in the game. we just went to PSX and I kicked her ass anyways… ;p

Just a quick update to the performance situation, there’s definitely something strange with the Android build and Mupen. Far slower than it should be. It doesn’t help that dynarec is insta-crash, but even on cached interpreter it should be much, much faster. After playing more games, there’s a decent % that don’t run full speed.

My work computer runs Goldeneye at 60fps with 10% CPU usage on cached interpreter. And in terms of raw benchmarks at least, the Shield TV is half as fast.

A shame dynarec doesn’t work too, as Goldeneye uses only 1% using dynarec, so would obviously run full speed :wink: