GithubHelp home page GithubHelp logo

emulairemulator / emulair-android Goto Github PK

View Code? Open in Web Editor NEW
42.0 4.0 7.0 143.33 MB

๐Ÿ‘พ An open-source emulator front-end based on Lemuroid

License: GNU General Public License v3.0

Kotlin 100.00%
android emulator frontend libretro retroarch lemuroid atari nintendo playstation sega

emulair-android's Introduction

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.

emulair-android's People

Contributors

edyc24 avatar giscadiana avatar meepo39-1 avatar radubratan 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

emulair-android's Issues

[FEATURE] Add details screen for games on long press

  • has "Restart", "Run", "Add to favorites / Remove from favorites" buttons
  • has extra info such as release year, regions, languages, size on disk, wikipedia description (or from other database)
  • is fullscreen drawer with "X" button on top left

[FEATURE] Add profile activity

  • same as info activity
  • transition is from right to left when opened
  • will contain several fragments
  • has button for "Save Sync" (replaces the "Save Sync" button from the menu_nav_top, which we should remove after this feature is added)

[BUG] MaterialSlider doesn't work inside SeekBarPreference

For whatever reason, in layout_preference_main_seekbar.xml, when changing to Material 3's <com.google.android.material.slider.Slider>, the whole app crashes when navigating to the Advanced Settings Fragment. This is weird because changing other preference elements to their Material 3 counterparts works.

[FEATURE] Add info activity

  • same as intro screen, except is child of MainActivity
  • can only be accessed from MainActivity
  • is separate activity, not fragment
  • contains no fragments
  • same transition type (shared axis), from left to right, when opened
  • has expandable cards (title is always visible, description is expanded)

[BUG] Themes are a mess

TODO:

  • ๐ŸŸฉ๐ŸŸฉ create a Light Theme
  • ๐ŸŸฉ๐ŸŸฅ create an AMOLED Theme
  • ๐ŸŸฉ๐ŸŸฉ add system default option
  • ๐ŸŸฉ๐ŸŸฉ move all colors from colors.xml to material-colors.xml and remove the redundant ones
  • ๐ŸŸฉ๐ŸŸฉ implement theme switching using a list preference
  • ๐ŸŸฉ๐ŸŸฅ add a switch preference for toggling wether or not to use dynamic colors
  • ๐ŸŸฉ๐ŸŸฅ make the switch available only to A12+ devices
  • ๐ŸŸฅ๐ŸŸฅ modify the code to enable dynamic colors based on the switch preference value
  • ๐ŸŸฉ๐ŸŸฉ add the right colors everywhere

Color map:

  • first color: feature has been implemented or not
    • green: implemented
    • yellow: partially implemented
    • red: not implemented yet
  • second color: feature is planned or not
    • green: planned
    • red: no longer planned (therefore removed)

[BUG] Material Components misbehaving in pause menu

Whenever turning a switch on or off in the pause menu, the event occurs but the animation doesn't work. In contrast, the same switches work perfectly fine in the Settings Fragment.

In addition, any Material Dialog has missing text padding.

[BUG] System sprites are misaligned

In the systems list, inside the Systems Fragment, some sprites are misaligned (can be fixed by editing them in Aseprite). Also, redrawing or touching up some of them would be a good idea.

[BUG] Game and pausemenu cannot be displayed under the notch/punch hole

Only the RadialGamepad wants to be displayed under the notch. This is especially obvious when opening the button remapping menu in landscape screen orientation - the "Reset" and "Done" buttons, as well as the tooltip in the middle, are misaligned, whereas the RadialGamepad buttons themselves aren't.

[FEATURE] Add intro screen

  • change launch activity from MainActivity to IntroActivity
  • max 5 fragments
  • unskippable, unless user went through it once
  • preferably use Jetpack Compose for ease of implementation
  • must have Material 3 shared axis transitions

[FEATURE] Add splash screen

  • how come apps such as Google Keep have nice splash screens only on A12? How did they do that? Must research
  • also add regular splash screen for older versions

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.