A 3DS emulator based on Citra
Go to file
ADAS2024 209173fa0c
[Android] Add Combo Button (#1244)
* Base starting commit for Feature Impl

* Base commit 2 (off of closed PR, impl details of the actual button will likely be different.)

* Added Combo Button Bool setting to use for later implementation.

* Added Combo Button Submenu and associated strings. Need to implement button displaying for user to interact with.

* Added layout file for combo settings for potential impl

* Removed combo settings as it wasn't liked. Starting Multi Choice impl

* Added Multi Choice Impl. Need to Refactor OnClick for MultiChoice and debug Impl when adding combo button.

* Change List<> in Multi Files to be MutableSet<> to allow adds while prevent potential duplicates. Finished primary multi choice backend impl.

* used correct lisencing procedure for multi files

* Added code in arrays.xml to display the buttons.
This code has the buttons display but clicking on them crashes the app. Will debug further.
Also replaced setSelectedValues with add and remove SelectedValue for clarity purposes.

* Deleted Int Combo Value array in arrays.xml as it was not needed. Able to Click multiple buttons at once but unchecking them causes app to crash. (within the MultiChoice OnClick for SettingsAdapter.kt)

Also debating whether to remove the normal MultiChoice addition as it wasn't added.

* Attempt to deal with merge conflicts

* Moved OnSettingChange after I add or remove selected vals to fix crashing issue.

* Displayed combo button in both landscape and portrait

* WIP on Button Impl, made combo button setting run time editable

* Changed the combo_key string into button_combo, added functionality (impl could be better), added combo key as an input bindable setting within the buttons tab

* Moved Combo Settings into just controls instead of having its own submenu

* Made ComboHelper code more readable and added the key setting to be toggleable in game

* Edited Layout integers of combo button. Made Combo Button display properly in normal portrait mode.

* Code Cleanup and Start of Reimplementation based off #1430

* Progress commit for better impl, need to have the pop up menu show up to select buttons

* Code cleanup and bug fix to properly map values.

* Deleted Multi String Setting, added basic error handling, added comment explaining hardcoded size

* Changed Combo Button to be a HotKey, changed impl to be default multi choice, and removed StringMultiChoice details

* Remove Commented Code

* Changed ComboHelper.kt to use Native Button ints, removed rest of initial implementation traces

* Commented out debug logging, added back missing TODO statement regarding magic numbers

* Cleanup

* Changed Combo Key to Combo Button in kotlin code (will need to test)

* Trying to integrate combo button as a SettingsKey setting. Running into issues with malformed/missing key

* latest changes (added setting to default ini). Still debugging file issue

* added possible fix to touchscreen latency issue, will need to test

* Reverted MultiChoice code to original, removed unused strings and variables and ensured consistent naming, fixed latency issues with button,

* reverted int list setting change as its no longer needed.

* `combo_buttons` --> `combo_button_buttons`

* default_ini.h: Adjust ini comment for combo_button_buttons

* Fix "Reset Overlay" not affecting combo button

* Better center default position of combo button in portrait layout

* `combo_button_options` --> `combo_button_settings`

Better reflects string content

* Last-minute minor string nitpicks

---------

Co-authored-by: OpenSauce <opensauce04@gmail.com>
2026-07-04 15:11:06 +01:00
.ci Rename USE_DISCORD_PRESENCE option and def to ENABLE_DISCORD_RPC 2026-06-17 17:17:21 +01:00
.github ci: Add libretro- prefix to libretro CI jobs 2026-06-16 17:28:38 +01:00
CMakeModules [Android] Add Combo Button (#1244) 2026-07-04 15:11:06 +01:00
dist Remove unintended leftover scripts 2026-07-02 21:40:19 +02:00
docker/azahar-room docker: Fix azahar-room Dockerfile failing to build with podman 2026-05-25 17:04:47 +01:00
externals dynarmic: Update to latest commit (#2236) 2026-06-24 16:11:31 +02:00
hooks hook: remove clang-format check 2017-02-17 13:52:23 +02:00
src [Android] Add Combo Button (#1244) 2026-07-04 15:11:06 +01:00
tools ci: Add job for ktlint 2026-06-16 16:13:05 +01:00
.gitattributes Meta: Add gitattributes file 2018-09-22 14:59:15 -06:00
.gitignore Add Kotlin code formatting/style configuration files 2026-06-16 16:13:05 +01:00
.gitmodules externals: Switch to cryptopp-modern (#2139) 2026-06-04 22:38:47 +02:00
AI-POLICY.md Added AI policy document 2026-03-20 14:15:36 +00:00
CMakeLists.txt Rename USE_DISCORD_PRESENCE option and def to ENABLE_DISCORD_RPC 2026-06-17 17:17:21 +01:00
Doxyfile Remove every trailing whitespace from the project (but externals). 2015-05-29 21:59:29 +01:00
license.txt core: Add ability to insert cartridges 2026-01-10 20:51:28 +00:00
README.md Added prerelease badge to readme 2026-03-20 18:42:21 +00:00

Azahar Emulator

Current Release Current Prerelease

GitHub Downloads Google Play Downloads Flathub Downloads CI Build Status

Azahar is an open-source 3DS emulator project based on Citra.

It was created from the merging of PabloMK7's Citra fork and the Lime3DS project, both of which emerged shortly after Citra was taken down.

The goal of this project is to be the de-facto platform for future development.

Installation

Windows

Azahar is available as both an installer and a zip archive.

Download the latest release in your preferred format from the Releases page.

If you are unsure of whether you want to use MSVC or MSYS2, use MSYS2.


MacOS

To download a build that will work on all Macs, you can download the macos-universal build on the Releases page.

Alternatively, if you wish to download a build specifically for your Mac, you can choose either:

  • macos-arm64 for Apple Silicon Macs
  • macos-x86_64 for Intel Macs

Android

There are two variants of Azahar available on Android, those being the Vanilla and Google Play builds.

The Vanilla build is technically superior, as it uses an alternative method of file management which is faster, but isn't permitted on the Google Play store.

For most users, we currently recommended downloading Azahar on Android via the Google Play Store for ease of accessibility:

Get it on Google Play

Alternatively, you can install the app using Obtainium, allowing you to use the Vanilla variant:

  1. Download and install Obtainium from here (use the file named app-release.apk)
  2. Open Obtainium and click 'Add App'
  3. Type https://github.com/azahar-emu/azahar into the 'App Source URL' section
  4. Click 'Add'
  5. Click 'Install', and select the preferred variant

If you wish, you can also simply install the latest APK from the Releases page.

Keep in mind that you will not recieve automatic updates when installing via the APK.


Linux

The recommended format for using Azahar on Linux is the Flatpak available on Flathub:

Download on Flathub

Azahar is also available as an AppImage on the Releases page.

There are two variants of the AppImage available, those being azahar.AppImage and azahar-wayland.AppImage.

If you are unsure of which variant to use, we recommend using the default azahar.AppImage. This is because of upstream issues in the Wayland ecosystem which may cause problems when running the emulator (e.g. #1162).

Unless you explicitly require native Wayland support (e.g. you are running a system with no Xwayland), the non-Wayland variant is recommended.

The Flatpak build of Azahar also has native Wayland support disabled by default. If you require native Wayland support, it can be enabled using Flatseal.

Build instructions

Please refer this repository's wiki for build instructions

How can I contribute?

Pull requests

If you want to implement a change and have the technical capability to do so, we would be happy to accept your contributions.

If you are contributing a new feature, it is highly suggested that you first make a Feature Request issue to discuss the addition before writing any code. This is to ensure that your time isn't wasted working on a feature which isn't deemed appropriate for the project.

After creating a pull request, please don't repeatedly merge master into your branch. A maintainer will update the branch for you if/ when it is appropriate to do so.

Language translations

Additionally, we are accepting language translations on Transifex. If you know a non-english language listed on our Transifex page, please feel free to contribute.

Note

We are not currently accepting new languages for translation. Please do not request for new languages or language variants to be added.

Compatibility reports

Even if you don't wish to contribute code or translations, you can help the project by reporting game compatibility data to our compatibility list.

To do so, simply read https://github.com/azahar-emu/compatibility-list/blob/master/CONTRIBUTING.md and follow the instructions.

Contributing compatibility data helps more accurately reflect the current capabilities of the emulator, so it would be highly appreciated if you could go through the reporting process after completing a game.

Minimum requirements

Below are the minimum requirements to run Azahar:

Desktop

Operating System: Windows 10 (64-bit), MacOS 13.4 (Ventura), or modern 64-bit Linux
CPU: x86-64/ARM64 CPU (Windows for ARM not supported).
     Single core performance higher than 1,800 on Passmark.
     SSE4.2 required on x86_64.
GPU: OpenGL 4.3 or Vulkan 1.1 support
Memory: 2GB of RAM. 4GB is recommended

Android

Operating System: Android 10.0+ (64-bit)
CPU: Snapdragon 835 SoC or better
GPU: OpenGL ES 3.2 or Vulkan 1.1 support
Memory: 2GB of RAM. 4GB is recommended

What's next?

We share public roadmaps for upcoming releases in the form of GitHub milestones.

You can find these at https://github.com/azahar-emu/azahar/milestones.

Join the conversation

We have a community Discord server where you can chat about the project, keep up to date with the latest announcements, or coordinate emulator development.

Join at https://discord.gg/4ZjMpAp3M6