New Frontend Concept

Introduction When I first bought my first Android device, almost one year ago, my main purpose was to be able to emulate old games on a portable console. I was quite disappointed because most of the emulators didn’t work properly or were paid applications and very expensive too. This was the condition of every average Android retrogamer until RetroArch for Android was announced: it was able to emulate many platforms and was free.

I quickly got to love it and it soon became the only launched application when I turned my device on!

There was a little problem though: the interface was not so… appealing. My collection grew up soon and games were named in so weirdly it was impossible to remember which game they contained. I was so lazy to begin checking each single file and renaming it.

Finally the last summer I took the decision to create a system able of identifying my games, and here’s where I knew the XPMB Launcher Project capable of identifying roms. I brought this feature to the next level creating an algorithm to retrieve proper data (release date and boxart) for each game. I also tried to edit the launcher so that it was able to launch games directly from retroarch, but it wasn’t so easy, and I finally decided to give up.

What I didn’t want, though, was to waste all of my work, so I decided to port this engine directly inside RetroArch as a new, stand-alone, feature: VektorGUI for RetroArch was finally born!

Instead of a PSP-like look, as it was in XPMB, I opted for a more retro-looking style: black background and a simple pixel-font for the texts. I really liked the result and decided to show my project directly on the RetroArch official board and IRC chat. I also published a preview video on my YouTube channel:

http://www.youtube.com/watch?v=eFNeYuf5aPQ

The feedbacks were so positive that this encouraged me to go on fixing the few remaining issues in the code. If you share my same problems, you should give a try to VektorGUI for RetroArch.

How to use: Setting VektorGUI for RetroArch is extremely simple, go in the Settings menu of RetroArch and in “Paths” tab set a ROM root directory. The first time you’ll chose a platform in VektorGUI mode, a subdir for that specific platform will be created in that folder (i.e. for “Play Station” games a “PSX” subfolder will be created). Now move your collection in the subdir and relaunch VektorGUI, that will soon start recognizing your roms and downloading proper data. If you use a joystick, use UP/DOWN keys to choose the game and press START (or ENTER) to launch the selected game. If you’re in touch mode, simply touch the game you want to play and press the “Play this game” button. That’s all.

How to manually add metadata: Inside of each platform subdir, there’s a folder named “Resources” and that’s where data for your collection is stored. If you want to manually add data for your unrecognized games, you should add 2 files:

-romname.prop -romname-CV.jpg

So, for example if your rom is named “Golden Sun (UE) [!].zip”, you’ve to create “Golden Sun (UE) [!].prop” and “Golden Sun (UE) [!]-CV.jpg”. The first file is a properties file and has this simple syntax:


CRC=XXXXXXXX
Year=2001
Description=Golden Sun is the first original role-playing game for the Game Boy Advance to appear in the U.S. And despite perhaps a too-familiar story line, Golden Sun's jaw-dropping graphics, deep magic system, and unique multiplayer arena mode truly show that the Game Boy Advance is capable of a serious RPG.
Title=Golden Sun

While the latter is just a regular cover in jpeg format. Simply rename your file to match the name of your rom file. You can skip the CRC property because it’s not needed for manually added files. What is important is that while writing the description, you don’t have to start a new line, so don’t hit the return key until you finish writing the description.

How to launch games (3rd+ apk): Since the 3rd release, I simplified a bit the support for input devices. To execute a game, simply tap it twice if you’re in touch mode, if you’re using a controller instead, select the game from the list and then press START/ENTER button to run it. If your button doesn’t work, you can use the same button that makes you click the UI elements (i.e. on ps3 controller it’s the X button) to execute the currently selected game.

Get VektorGUI for RetroArch (3rd test release)


- New UI Style
- Improved input device support (PS3 Controller & Mouse input)
- Fixed an issue with MAME metadata downloader

Source Code: GitHub Download (.apk): MEGA (Remember that VektorGUI mode is still in development/unstable)

Get VektorGUI for RetroArch (2nd test release)


- Added MAME support
- Tested input device support (PS3 Controller & Mouse input)
- Decreased resource demanded by the recognition process
- New name for stored metadata.


Source Code: GitHub Download (.apk): MEGA (Remember that VektorGUI mode is still in development/unstable)

Get VektorGUI for RetroArch Source Code: GitHub Download (.apk): MEGA (Remember that VektorGUI mode is still in development/unstable)

Wow, that certainly looks nice, and I know a lot of people have been wanting something like this. Thanks for sharing it. I look forward to checking out the code :slight_smile:

This looks very nice! Would love to see this integrated with RetroArch for an official release. Choosing a system first, and a supported emulator for that system second, followed by that system’s ROMs is a very logical and intuitive setup. How are metadata files stored for each ROM?

Wow man nice job!! how long have you been working on this?

Love it!!! Love to see it implemented!!!

I’ll explain the whole thing:

The roms have a root folder and the interface scans a subdir of this root folder. The root folder is the start rom folder that you can set in “Paths” settings, the subdirs - at the moment - have preset names: the ps1 subfolder is named “PSX”, the sega genesis one is named “MD” (mega drive), and so on. These subfolders contain the roms available for the chosen platform. When you select a platform and core, the ui gets the list of supported extensions for the selected core and scans each file in the subfolder, it can even recognize zipped files (doesn’t work with 7z or ecm).

For each rom the ui calculates - or instantly get if it’s a zip file - the CRC32 and searches it into a list (the dat-o-matic rom lists) In the case of PS1 games the UI scans the disk image to get the id of the game (SCXX-XXXXX) and search it inside a sqlite database containing all the existing ps1 games ids and titles.

Once the ui knows the rom’s name, it tries to find the info for that game contacting the thegamesdb.net APIs. A title matching algorithm was studied to do this. If the match rate is higher than a threshold - set to 51% - that is a probable correct title, the best match is chosen as title. Now I’ll finally answer the question: a “Resources” folder is created into the platform directory, it will contain 2 files for each rom:

  • Gamename-CV.jpg: the cover file
  • Gamename.prop: a properties map saved as file containing game name, year and description.

When the ui generates the rom list it checks if these file exist and if they don’t it tries to get data contacting the APIs, otherwise it directly loads game informations.

I was working on a launcher capable of doing this, but I was stopped by the fact RetroArch can’t be called by another application to execute a game, so I had all the “recognize and download” part ready. What I did is port this engine inside RetroArch. I’m working on RetroArch since Sunday, but on the engine i worked 1 month this last summer, then I had to stop for internship and graduation.

This is perfect for a more “console” experience with Retroarch on Android.

Would be nice to see something like this also on PC :slight_smile:

Thanks!! Will test it the second we have an apk with it.

Hi,

I’ve just fixed the issues that mostly concerned me and I’ve published a presentation + links to source and apk in the first post. I hope you’ll like it. :slight_smile:

I had tested it on the phone a bit and its fantastic!

Just a few things:

-When you change console and then turn from landscape to portrait or viceversa it goes back to the last platform, not the same you changed.

-Is possible to have Mame on this? Even if it cannot get from the internet the snap and description or having a way for us to do it manually adding the photo somewhere.

I was really waiting for something like this in Retroarch since the android version came out, a cool frontend to a more console experience with a hdmi connected device with a pad. The only things i see it needs to be perfect are to have mame implemented and being added to latest lordashram release (for having mame 151 or 152).

Thanks mate, will try to test it on the tablet also sometime, hope i had more time for Retroarch testing :slight_smile:

Cheers!!

EDIT: Installed on the tablet, a few more things:

-With a Dualshock3 pad as i enter on Vektor GUI and push a button it quits. Using another usb gamepad it enters on the GUI but i cannot move onto the games, looks like it has the focus on the Retroarch icon to go back to menu

-Added 116 NES games and it didnt download any pic or data of any of the games, also would be nice a button to force download data of a game selected. Before adding the NES games i added 61 SNES games, it downloaded like half of them only.

Thanks for your time and feedback!

Thanks sounds better than restoring the platform of the latest launched game. UPDATE: Now the UI is set so that it restores to the latest selected platform, instead of the platform of the latest launched game.

It’s surely possible, i can’t guarantee the reliability rate though. :slight_smile: UPDATE:I’ll try with two different APIs.

I’m running this UI on a JXD S7300B and works with its built in pad, I’ll try connecting a sixaxis pad

I’ll investigate on this! UPDATE:That was caused by a stupid human error, I’ve rewritten several code in the download engine, now it’s faster, less demanding and searches data for each game.

IMPORTANT I updated the source code, not the apk link!

I think this was asked but, anyway to have M.A.M.E. on this? Even the option to custom create, etc.

Hopefully this is worked into the version of retroarch. Seems like a decent front end like this was/is the only thing missing, IMHO

Hi and thanks for your feedback!

I am currently working to fix a problem with the engine to retrieve data and I’ve also rewritten it to make it less demanding for larger collections (tested with 1500+ roms).

In the current version of the .apk, the platform/core list is generated manually and I just put a selection of platforms to make a proof-of-concept UI. As said in the previous post, I’ve found two services who could help in retrieving metadata for MAME roms.

I’m a bit stuck in a multi-threading issue, once I fix that I’ll try adding MAME support. :slight_smile:

UPDATE: I’ve managed to fix the threading issue. The scanner searches for all games and further improvements will come (see the progress, the currently processed item and so on…).

I’ll soon start working on a scraper to get informations for MAME games.

UPDATE 2: I’ve managed to add support for MAME games (no game description available, but will be added in the future).

Hi and thanks for your feedback!

I am currently working to fix a problem with the engine to retrieve data and I’ve also rewritten it to make it less demanding for larger collections (tested with 1500+ roms).

In the current version of the .apk, the platform/core list is generated manually and I just put a selection of platforms to make a proof-of-concept UI. As said in the previous post, I’ve found two services who could help in retrieving metadata for MAME roms.

I’m a bit stuck in a multi-threading issue, once I fix that I’ll try adding MAME support. :slight_smile:

UPDATE: I’ve managed to fix the threading issue. The scanner searches for all games and further improvements will come (see the progress, the currently processed item and so on…).

I’ll soon start working on a scraper to get informations for MAME games.

UPDATE 2: I’ve managed to add support for MAME games (no game description available, but will be added in the future).

[/quote]

Very nice! Any chance of posting this update soon with the M.AME stuff included? If not, any idea when an ETA would be? Thanx sweetie

I’ll update the link as soon as I make all the needed tests and after checking the PS3 controller issue. If nothing goes wrong even tomorrow. Otherwise as soon as everything is fine :rolleyes:

I’ll update the link as soon as I make all the needed tests and after checking the PS3 controller issue. If nothing goes wrong even tomorrow. Otherwise as soon as everything is fine :rolleyes:[/quote]

What an amazing, lovely gift. This hopefully will work out and become part of the Retroarch eco-system.

Four quick practical questions:

  1. Will this create a performance hit on the games when the retroarch program is running this? It shouldn’t, right?
  2. I’m using an OUYA style micro-console called the Mad Catz M.O.J.O. Is doesn’t have a touch screen per say to navigate but there is mouse feature that allows the control pad to navigate the menu, I hope.lol… I guess my question is that will I be able to get around on my android unit which the control pad only?
  3. Is the MAME tweak successfully finding at least title names for all rom games? Really?? That’s impressive.
  4. Any chance to allow us to add custom artwork or description? Probably not if it is going off an external database, huh?

Thanx sweetie!

this is awesome hope it gets mainlined and implemented on all platforms. Thank you!

If we can also just put a .jpg onto the resources folder would be nice for games not found or if some day those webs goes down.

Looks pretty good, bought a MK802 IIIS yesterday, as soon as the new apk is uploaded ill test it there

Also, would be nice to add this to lordashram latests apks so we could use this with mame 0.151.

Retroarch+Mame+Arcade Stick+THIS= Awesome arcade experience on android :slight_smile:

  1. It shouldn’t. When a game is launched, the entire recognition process is interrupted and will restart when the gui is showed again.
  2. Yes, only dpad mode is locked, but a mouse shouldn’t. I’m going to test several input devices later.
  3. I confess I’m a bit ignorant in MAME subject, but all the tested games were found properly. Everything depends on the .zip file name.
  4. Game data is fetched from an online service and stored directly on your device, so that if a game already has informations and cover, the engine doesn’t use the webservice anymore for that game. Game covers and informations can be manually added, it’s just matter of adding a file with the proper name in the proper folder.

Thanks to you for the feedback/questions, that give me hints on how to improve this!

Thanks for your feedback :slight_smile:

As said before you can manually add game data/cover, it’s just matter of putting the proper file in the Resources folder. I’ll write further instructions once the new apk is out! :slight_smile:

UPDATE: I’ve done some tests with a PS3 Sixaxis Controller in wired mode. I can access the GUI without any problem, but I cannot select the platform menu to change platform or launch a game, because I just added support for ENTER button, but some joypad drivers are mapped to use a controller specific button, BUTTON_START. The game launch issue has been fixed quickly adding also BUTTON_START, I need some time for the select platform menu, because I need to change the way input from devices is handled. :slight_smile:

[quote=“vektor”]

  1. It shouldn’t. When a game is launched, the entire recognition process is interrupted and will restart when the gui is showed again.
  2. Yes, only dpad mode is locked, but a mouse shouldn’t. I’m going to test several input devices later.
  3. I confess I’m a bit ignorant in MAME subject, but all the tested games were found properly. Everything depends on the .zip file name.
  4. Game data is fetched from an online service and stored directly on your device, so that if a game already has informations and cover, the engine doesn’t use the webservice anymore for that game. Game covers and informations can be manually added, it’s just matter of adding a file with the proper name in the proper folder.

Thanks to you for the feedback/questions, that give me hints on how to improve this!

Thanks for your feedback :slight_smile:

As said before you can manually add game data/cover, it’s just matter of putting the proper file in the Resources folder. I’ll write further instructions once the new apk is out! :slight_smile:

UPDATE: I’ve done some tests with a PS3 Sixaxis Controller in wired mode. I can access the GUI without any problem, but I cannot select the platform menu to change platform or launch a game, because I just added support for ENTER button, but some joypad drivers are mapped to use a controller specific button, BUTTON_START. The game launch issue has been fixed quickly adding also BUTTON_START, I need some time for the select platform menu, because I need to change the way input from devices is handled. :)[/quote]

Minor suggestion. This is so cool and so legit, you should remove the “experimental” label which sounds self-conscious. Just do versioning. If it’s still a BETA in some sense, just do the retroarch thing and don’t give it an official 1.0 version but do something like 0.9.2 or whatever… It’s solid enough that some of us will start using it for real, despite the caveats about it.

This doesnt look experimental at all, can be really used, once we get mame cores and control with pads IMO its perfect, dont need any more stuff =D

If i could ask for something that would be being able to add small videos like the typical mame frontends instead of photos, but as it is is perfect, also being added into Retroarch and not another app.

Will get ready that MK802 IIIs gadget with a few pads to start testing Retroarch and specially this frontend.