Coder Social home page Coder Social logo

ludere's Introduction

Ludere

A LibRetro-powered ROM packager for portable emulation

Philosophy

The current state of emulation on Android is excellent relative to other methods of emulation. However, the experience is not seamless and it is not universal. Allow me to elaborate. By seamless, I mean to say that there are very few steps involved between opening the application and actually playing the game. With most emulators from a fresh install, one must open the application, download a core (i.e. RetroArch), locate their ROM, and then begin playing, totally at least two steps of interference. Contrarily, Ludere reduces the process down to one simple step: open the application. The core, ROM, controls, core settings, and everything else are already configured. In terms of universality, one cannot easily duplicate their configuration across devices without repeating the steps for each device. Instead, Ludere is a simple APK with all configuration already prepared, so installing an exact duplicate of the game is as easy as installing any other APK.

Purpose

The goal of Ludere is to increase the level of abstraction for emulation on Android.

Here's a diagram of how most Android emulators are configured:

└── Generic Emulator App
    ├── Roms
    │   ├── rom1.gba
    │   ├── rom2.gba
    │   └── rom3.gba
    ├── Saves
    │   ├── rom1.sav
    │   ├── rom2.sav
    │   └── rom3.sav
    └── States
        ├── rom1.state
        ├── rom2.state
        └── rom3.state

Here's how Ludere is configured:

└── Ludere
    ├── rom
    ├── save
    ├── state
    └── *other system files*

Features

  • LibRetro core is fetched once on the first launch
  • ROM is packaged inside the APK, no external importing required
  • Save state support (single slot)
  • SRAM is saved when the application loses focus
  • All-in-one package, can be easily distributed once packaged

Libraries

Configuration

  • Edit app/src/main/res/values/config.xml and change your configuration
  • Copy your ROM to app/src/main/res/raw/rom (where rom is the ROM file)

Building Offline

It is usually best to build a release build to reduce the total file size and improve performance.

  • ./gradlew assembleRelease

This uses the official Ludere keystore to sign the APK. This is available in the root directory of the project. Feel free to use this key for your personal projects.

The output APK is located here: app/build/outputs/apk/release/app-universal-release.apk

Autogen Tool

Ludere has a directory called autogen which contains a basic script to batch-generate Ludere packages. To use it, simply navigate to this folder. Place your ROMs in the input folder. In this same folder, put a config.xml file with your preferred configuration for these ROMs. Ignore the ID and NAME fields, as they will be overwritten. The script also supports nested folders, in which each can contain their own configuration file. Execute the script with python generate.py.

Building Online

I know a lot of users are not experienced in building Android Studio projects but would still like to package their own Ludere packages. I've created a GitHub action to help those people.

TL;DR: You can build Ludere packages online

  1. Fork this repository by clicking the button in the top right corner of the repository. You may need to be on Desktop Mode for this to show up.

  2. Get a direct URL to your autogen payload (everything that would be in the input folder). Since GitHub Actions doesn't let us directly select a file to upload, you need to get a direct URL that the workflow can download. The easiest way to do this is by using Google Drive. Upload your ROM to Google Drive, then right click on it and click "Get link". Make sure it's set to "Anyone with the link" and copy it to your clipboard. The share link itself is not a direct download link, so head over to this site to convert it into one. Keep the direct URL handy, we'll need it later.

  3. Now we get to build the APK! Navigate to your forked Ludere repository we made in step 1. You should see a tab called "Actions" with a little play button icon next to it. Click on it. If you get a prompt asking you to enable Actions, just hit enable. Now, find the "Autogen" tab. If your browser is zoomed in, you might see a drop-down where you can switch the tab from "All workflows" to "Autogen". Now you should see a button that says "Run workflow" and it will prompt you for your Payload URL. Paste it here and click "Run workflow".

You can watch the build in realtime if you'd like. It can take quite a while to build, around 5 minutes per APK. When it finishes, your fork will have a new release with the APK attached. You can find the releases tab from the home page of your fork. And that's it! You can install that APK on any device you'd like.

Keystore

There is a keystore for signing Ludere packages that is public and free to use. Here are the details you should know when signing with it:

  • Keystore Password: ludere
  • Key Alias: key0
  • Key password: ludere

ludere's People

Contributors

tytydraco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ludere's Issues

PCSX Core , Analog Mode not recognized on games

Hey! I can't use the Analog Type to some games, like Ape Escape or Chrono Cross, they dont recognize as being in Analog Mode.

Tried this core variable:

pcsx_rearmed_pad1type = "analog", pcsx_rearmed_pad2type = "standard"

black screen

Hello, I downloaded the project and compiled it and ran on AVD. But except for the control button, there are black screens. Can I miss anything
image
image

PCSX core crashes on rotate

the original upload included details on how to allow either portrait or landscape but was locked to the orientation when the game opened. This was useful for roms that crash on orientation change.

Question.. PSX Multi Disc

Im really excited with your work! Really great work with this Simpliest Emulator!! :D

But I have a question.. how can I make Multi-disc PSX games playable trough this method?

Best regards!

building

Invalid injected android support version '202.7660.26.42.7486908', expected to be of the form 'w.x.y.z'

multi-touch Android 13 issue?

Not sure if this is related to the Android 13 update or just weird timing but...

I testes this issue with Samsung phone.

I've been using to emulate GBA and Saga genesis games for a short while, no problem. Today when I tried, in landscape mode only, when I select down and B it starts to press up also. As In when holding down down and press B, I can see the up button is pressed (highlighted). And reverse if I hold down B and press down then the A button is pressed.

It's a strange issue to explain but I can effectively only play in portrait mode now. Portrait is working fine, no change.

Has anyone else had this issue? On a Google pixel 4 if that makes any difference.

Please investigate this issue.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.