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.
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.
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.
- Arcade by FinalBurn Neo and MAME 2003-Plus
- Atari 2600 by Stella
- Atari 7800 by ProSystem
- Atari Lynx by Handy
- Bandai WonderSwan by Beetle Cygne
- Bandai WonderSwan Color by Beetle Cygne
- NEC PC Engine by Beetle PCE FAST
- Nintendo 64 by Mupen64Plus
- Nintendo DS by DeSmuME or melonDS
- Nintendo 3DS by Citra
- Nintendo GB by Gambatte
- Nintendo GBC by Gambatte
- Nintendo GBA by mGBA
- Nintendo NES by FCEUmm
- Nintendo SNES by Snes9x
- Sega Genesis by Genesis Plus GX
- Sega CD by Genesis Plus GX
- Sega Game Gear by Genesis Plus GX
- Sega Master System by Genesis Plus GX
- SNK NG Pocket by Beetle NeoPop
- SNK NG Pocket Color by Beetle NeoPop
- Sony PS1 by PCSX ReARMed
- Sony PSP by PPSSPP
Note: "Emulator1 and Emulator2" means you can't choose between them because they are combined, "Emulator1 or Emulator2" means you can switch the cores.
Note: This feature hasn't been implemented yet.
- 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)
- 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)
- 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.
- 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)
- 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.
- 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.
"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.
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.