Skip to content

EmulairEmulator/Emulair-Android

Repository files navigation

Emulair Emulator

Get it on Google Play Get it on F-Droid Get it on GitHub

Details

Emulair is an Android exclusive open-source front-end for Libretro cores, based on Lemuroid. For more information about the project (such as how the code functions, why the project exists, who worked on it, etc.), check the Wiki page. To see our backlog, check the Projects page. Our old backlog (before transferring Emulair to this organization) can be found here: https://github.com/users/RaduBratan/projects/2/. Note that you should access the first link for the most up-to-date backlog.

Philosophy

The primary goal of Emulair is to combine the ease of use and simple but accessible interface of Lemuroid with RetroArch's extensive customizability and features, while also adding support for standalone emulators.

Origin

It originates from Lemuroid, which, in turn, is a rib of Retrograde. It also uses LibretroDroid under the hood to run Libretro cores. The 2D sprites for the systems are taken from hakchi2 and Faustbear.

Systems - Libretro Cores

Note: "Emulator1 and Emulator2" means you can't choose between them because they are combined, "Emulator1 or Emulator2" means you can switch the cores.

Systems - Standalone Apps

Note: This feature hasn't been implemented yet.

Existing Features (from Lemuroid)

  • Easily search for any installed video game
  • Manually save/load states
  • Automatically save/load states when correctly closing a game (by clicking "Quit" in the pause menu)
  • Add games to a "Favourites" list
  • Simulate various screens, such as LCD or CRT
  • Remap some touch screen controls (such as joysticks or D-pads) to gyroscopic input, by double/triple tapping the buttons
  • Customizable touch controls (size and position)
  • ROMs scanning and indexing
  • BIOSes scanning and indexing
  • Gamepad support (with button remapping included)
  • .zip ROMs support
  • Local, offline multiplayer support (up to 4 controllers, only in games where you can select more than one player)

Added Features

  • Complete visual redesign with consistent sizing, spacing and corner radius
  • Complete conversion to Material Design 3 Components
  • An easier to navigate app structure
  • An info screen containing frequently asked questions and other useful stuff
  • A profile screen used for easily connecting to RetroAchievements (RetroAchievements support not yet implemented)
  • A "Close menu" button accessible from the pause menu, so users don't have to click their device's back button every time they want to unpause a game
  • A themed app icon for Android 13+ devices
  • A "Jump back in" section on the "Games" page, along with "Recents", "Favorites" and "All Games"
  • Separate screens with vertical lists for "All Games" and "Favorites" (i.e. they're not just horizontal carousels anymore)
  • Button prompts before (almost) every important action
  • New dark theme, light theme and system default theme
  • New in-app icons
  • New sprites for systems
  • Bypass screen lock to rotate the screen whenever you want
  • Automatically rescan internal directories on app restart and resume
  • Fixes for bugs that were carried over from Lemuroid (e.g. multitasking splitscreen error, emulation resetting when screen auto rotates while system display scaling is non-default)
  • Plenty QOL features, updates and fixes (e.g. show content under notch/punch hole, add more supported word dividers for file names)

Upcoming Features

  • Complete rewrite in Jetpack Compose (my priority until I finish it)
  • Dynamic light/dark theme (tried implementing with XML, should actually work with Compose)
  • More emulation cores (almost all cores found on RetroArch)
  • More exposed settings for all the cores
  • More state slots
  • More save file formats (possibly related to adding more cores)
  • More animations and effects
  • More controls customization (e.g. hide any button, move buttons anywhere on the screen, etc.)
  • Better ROM scraping and name detection (right now games that have even the slightest variation in their names are not detected, e.g. "God of War - Chains of Olympus (USA)" is detected, but "God of War - Chains of Olympus (Asia)" isn't)
  • Better NDS and 3DS touchscreen controls (i.e. will be placed above the screens)
  • Cheat codes support
  • RetroAchievements support
  • .7z ROMs support
  • Save/load state undoing/redoing support (using hidden copies)
  • Search filters support (i.e. sort by system, genre, year; order by ascending or descending)
  • Full phone sensors support (i.e. emulators will take advantage of tilt sensors, cameras, microphones, etc.)
  • Hacked ROMs, homebrews, ROMs with unusual file formats support (possibly related to adding more cores)
  • File saving to storage/emulated/0
  • Automatic state saving every x seconds
  • Custom touchscreen gamepad transparency
  • Custom volume, fast forward speed and vibration strength
  • Change volume and fast forward speed directly from the pause menu
  • Different app layout for tablets and foldables
  • Different app layout for phones in landscape orientation
  • An updated Libretro games database with more fields (e.g. release year, release month, etc.)
  • A user-friendly intro screen concisely explaining how to use the app
  • A "Starred Systems" list
  • A details screen accessible by long-pressing a game or a system
  • A splash screen for Android 12+ devices
  • Choose if you want to automatically fall back on other emulators or not, in case a game doesn't work (must unlock the option to switch between FinalBurn Neo and MAME 2003-Plus first)
  • Set core on a per game basis (not just global)
  • Change filter on a per game or per system basis (not just global)
  • Rebind controls on a per game or per system basis (not just global)
  • Save Libretro thumbnails in cache so they don't have to be reinstalled every time the user reopens the app
  • Toggle between showing the content under notch/punch hole or not
  • Allow BIOs scanner to also accept .bin files, not just .rom files
  • Pause/Resume emulation without having to open the pause menu
  • Configure overscanning amount for PS1 and N64 games (i.e. remove top and bottom borders)
  • Move game screen(s) freely
  • Create a debug log whenever an error occurs so developers can better understand what happened
  • Allow different buttons to trigger the same action
  • Make the title of the Systm Games page reflect the system the user is currently viewing
  • Slide down to rescan games folder instead of automatically rescanning every time
  • (If possible) Automatically convert saves when switching cores
  • (If possible) Tell wether or not a 3DS ROM is encrypted
  • (If possible) Run Ahead from RetroArch support
  • (If possible) ROM patching support

Note: The above features won't be released in this exact order. Some features may be changed or even removed from this list.

Upcoming Bug Fixes

  • Some non PS1 (mostly PS2) games are incorrectly detected as PS1 games
  • Regular back icon doesn't align with the searchView back icon (should be automatically fixed when reworking the search screen using Compose)
  • MaterialSlider doesn't work in SeekBarPreference (should be automatically fixed when reworking the whole app using Compose)
  • Saves from disk 1 aren't kept when switching to disk 2 (more testing needed)
  • After disabling "Auto save state on correct quit", the last save state before the disabling doesn't load
  • (If possible) After closing a game (using the phone's home button) without saving the game to a state slot, reopening the app from the app tray resets it to the home screen; but when clicking the notification or opening the app from the recents tray, the game is corectly resumed and it no longer resets (in other words, closing the app then opening it in a certain way resets it)

Removed Features (from Lemuroid)

  • Android TV support (was difficult to maintain)
  • Turn games into shortcuts for your launcher (didn't understand its purpose initially, I'll bring it back)
  • Save files to Google Drive (worked only if downloaded from Google Play; Drive folder was inaccessible; split the codebase in two versions; only acted as bandaid for the lack of keeping save files after uninstalling the app; better to remove it than keep it)

Note: Some features will be brought back later.

Dropped Features (from Emulair)

  • Sync save files with Google Firebase (added in separate branch for the purpose of a university course, will not be implemented)

Note: Some features will be brought back later.

Name Meaning

"Emulair" is a triple entendre and the name is inspired by the Lawnchair launcher (not associated with Emulair). Firstly, "Emulair" kind of sounds like the word "Emulator" (if you try hard enough). Secondly, "Emulair" means "lair of the emu bird", an animal whose name is similar to the abbreviation of the word "emulator". Lastly, "Emulair" also means "lair for all your emulators", which is similar in name to "Vimm's Lair", a place for preserving video games.

Legal

Copyright (C) 2023-2024 Radu-George Bratan

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Before downloading the source code of this software to use it in a project (no matter if it's private or public), please make sure that you understand what the GNU General Public License v3.0 allows you, forbids you as well as requires you to do.