This repository contains a collection of unofficial Android ports for the following classic game engines and projects:
- Doom RPG & Doom II RPG (RE | II RE)
- Wolfenstein RPG (RE)
- Doom64 EX Plus (atsb | Enhanced)
- PsyDoom (BodbDearg)
- UZDoom (UZDoom)
- Perfect Dark (fgsfdsfgs)
- Arx Libertatis (arx)
- FTEQW (fte-team)
- Widelands (widelands)
- Vanilla-Conquer (TheAssemblyArmada)
- Classic-RBDOOM-3-BFG (MadDeCoDeR)
The following projects are scheduled for Android porting:
- Citadel (Next release)
Note: There are no other open-source mobile ports planned after these projects.
** Global Architecture Note: SDL3 Migration** All SDL2-based engines in this repository have been migrated to SDL3 via sdl2-compat. Be aware that
sdl2-compaton Android is not officially supported by the SDL team, but it is required for modernizing the input and window management layers across these legacy codebases.
- OS: Android 8.0 or later
- GPU: Hardware supporting OpenGL ES 2.0
- RAM: 1 GB system RAM
- OS: Android 12 or later
Starting from the latest releases, all ports (except Doom1 RPG and Vanilla-Conquer) support Vulkan rendering through ANGLE.
- Requirements: Android 8.0+ and Vulkan 1.0/1.1 hardware support.
Full keyboard and mouse input is supported across the ports.
Physical controllers and on-screen controls are mutually exclusive. Most legacy engines natively support only a single gamepad.
Note: The on-screen controls emulate an Xbox controller layout. To use a physical controller, you must disable the on-screen overlay in the launcher settings.
| Action | Button |
|---|---|
| Move Forward / Backward | D-pad Up / Down |
| Turn Left / Right | D-pad Left / Right |
| Attack / Talk / Use | A |
| Next / Previous Weapon | Right / Left Trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open / Back | Start |
| Action | Button |
|---|---|
| Move Forward / Backward | D-pad Up / Down |
| Turn Left / Right | D-pad Left / Right |
| Attack / Talk / Use | A |
| Next / Previous Weapon | Right / Left Trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open / Back | Start |
| Items Info / Drinks | Left / Right Shoulder |
| PDA | B |
| Bot Dis | Y |
| Action | Button |
|---|---|
| Move Forward / Backward | D-pad Up / Down |
| Turn Left / Right | D-pad Left / Right |
| Attack / Talk / Use | A |
| Next / Previous Weapon | Right / Left Trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open / Back | Start |
| Items Info / Syringes | Left / Right Shoulder |
| Journal | Y |
The launcher supports machine translation for the Doom RPG series into multiple languages. Translation is performed locally on the Android device via the CTranslate2 API, requiring no internet connection.
- Wolfenstein RPG: Obtain the
.ipafile, copy it to your device, and select its path in the launcher. - Doom RPG: Obtain the Brew file. Use the BarToZip PC tool and follow the Doomworld instructions to generate
DoomRPG.zip. Copy the ZIP to your device and select it in the launcher. - Doom II RPG: Obtain the
.ipafile, copy it to your device, and select its path in the launcher.
- Game Data: Requires the Doom 64 Remaster from Steam.
- Mods: Community mods are available on the Doom 64 Discord.
- Game Data: Requires a Doom PSX disc image (
.cue/.bin). See the official PsyDoom documentation. - Rendering: Requires Vulkan 1.0 support. Devices without Vulkan must use the legacy OpenGL ES renderer.
- Mali/PowerVR Performance: Low FPS on Mali and PowerVR GPUs is expected due to GPU stalls. This is an architectural limitation and will not be fixed.
- Alternative: For a playable PS1 Doom experience on Android, it is highly recommended to use DOOM CE via UZDoom.
- Game Data: Follow the GZDoom documentation.
- Known Issues & Workarounds:
- Vulkan Renderer: The native Vulkan renderer remains unplayable and will not be fixed. Upstream developers are responsible for this code.
- OpenGL Emulation on Mali/PowerVR: To avoid black screens caused by a bug in the UZDoom codebase (not the GPU drivers), OpenGL emulation now forces Vulkan rendering via ANGLE. Requirements: Vulkan support and Android 8.0+.
- OpenGL Emulation on Adreno: Works natively with the stock GLES driver without the aforementioned bugs; forced ANGLE is not applied.
- Fallback: If Vulkan/ANGLE is unavailable on Mali/PowerVR, use the legacy native OpenGL ES renderer (ported by beloko), which does not suffer from these black screen issues.
- Credits: Contains code from emileb's GZDoom Android port and glKarin's GLES 3.x native render. Licensed under GPL v3.
- Game Data: Follow the Perfect Dark port documentation.
- Requirements: ROM binaries must have
.z64or.Z64extensions. Requires OpenGL ES 3.0 support. Legacy ARMv7 devices are fully supported.
- Game Data: Follow the Arx Libertatis wiki.
- Features: Fully supports GLES 3.0 and GLES 2.0 rendering, improved controls, and full ARMv7 support.
- Vulkan on Mali: Vulkan rendering via ANGLE is fully playable on Mali GPUs. Previous low FPS issues caused by GPU stalls have been resolved.
- Credits: Integrates brightness fixes from xyzz's OpenMW Android port and gamepad implementations from the Nintendo Switch port.
- Game Data: Follow the FTEQW Wiki.
- Vulkan Renderer: The stock Vulkan renderer is completely disabled due to severe architectural flaws and instability. Use ANGLE if Vulkan rendering is strictly required.
- Engine Support:
- Quake 1, Hexen 2: Fully playable in single-player. Multiplayer in Quake 1 is unstable.
- Quake 2: Fully supported with all official addons via yquake2 (all addons are pre-compiled for Android). Single-player is playable; multiplayer works only with local bots.
- Quake 3: Support is nominal. Single-player is partially playable; multiplayer is non-functional.
- Half-Life 1: Not supported and excluded from the launcher.
- Known Bugs: Audio playback for certain sounds may fail in Quake2. This is an upstream FTEQW bug and will not be addressed.
- Audio: Uses SDL3 and AAUDIO.
- Credits: Integrates upstream Android bugfixes from glKarin and emileb.
- Game Data: Standalone RTS; no third-party assets required.
- Features: Supports GLES 2.0/3.0, ARMv7, screen scaling, and on-screen controls.
- Limitations: Gamepads are not supported. Multiplayer is deprecated (only basic server connections were tested).
- Docs: Official Wiki.
- Supported Games: Command & Conquer: Tiberian Dawn, Red Alert.
- Game Data:
- Tiberian Dawn: Requires original resources. DOS mode is enabled by default for better mobile scaling. If you see a black screen, extract
LOCAL.MIXfrom the DOS version and place it in your CNCNet resources folder. - Red Alert: Use official CNCNet resources.
- Tiberian Dawn: Requires original resources. DOS mode is enabled by default for better mobile scaling. If you see a black screen, extract
- Features: ARMv7 support. Gamepads are supported via on-screen emulation.
- Known Issues:
- Screen Reposition (#55): Rendering behind the camera is standard on Android in 2026, but Vanilla-Conquer fails to handle screen reposition events correctly, causing UI elements to render off-screen.
- Hardware Back Button: The Android hardware back button is non-functional.
- Lifecycle Crashes: Calling
onPause/onResumeevents can cause immediate render crashes.
- Credits: Integrates code from the Nintendo Switch port.
- Rendering: Strictly OpenGL ES 3.2 due to heavy reliance on modern GLSL 3.x features. GLES 3.1 and 3.0 API are supported, but expect issues, like lower FPS than with GLES 3.2 API
- Texture Compression (DXT vs ETC2): Hardware DXT decoding is implemented and functional, but it is highly recommended to disable it and use the ETC2 fallback. Do not disable the ETC2 texture cache (even though the toggle exists).
- Mali/PowerVR GPUs: Doom 3 BFG is a heavy IMR (Immediate Mode Rendering) engine. Performance on tile-based GPUs is inherently limited. Use the custom Android UI options to disable heavy effects and lower the screen resolution. No further engine-level optimizations will be made for these architectures.
- Memory Optimization (Texture Shrinking): Enable texture shrinking (skipping MIP-map levels) in the launcher to save 200-300 MB of RAM.
- ARMv7 Limitations: Running this engine on ARMv7 devices will likely result in OOM (Out of Memory) crashes due to the severe RAM limitations of 32-bit architectures. This is expected behavior.
- Credits: Integrates renderer code from glKarin and bugfixes from emileb's dhewm3 port.
- Clone the repository and open the root directory in Android Studio.
- Install Python 3.x (required for building native dependencies).
- Highly Recommended: Install ccache to drastically reduce compilation times for the 13 engines and native dependencies. (Windows users can use Chocolatey).
- Run the project.
Important: Building from source is strictly supported only for F-Droid build variants. Google Play variants are proprietary due to Crashlytics integration. Build Host: Only Windows 11 (25H2) x64 is officially supported as the build environment.
Pre-compiled APKs are available via:
This project is a compilation of numerous open-source components. Each component is distributed under its own license. Complete license texts are consolidated in THIRD-PARTY-LICENSES.TXT.
DoomRPG engine source code: Licence https://github.com/Erick194/DoomRPG-RE
Doom2RPG engine source code: Licence https://github.com/Erick194/DoomIIRPG-RE
WolfensteinRPG engine source code: Licence https://github.com/Erick194/WolfensteinRPG-RE
Doom64EX-Plus engine source code: Licence https://github.com/atsb/Doom64EX-Plus/
DOOM64-EX-Plus-Enhanced engine source code: Licence https://github.com/Styd051/DOOM64-EX-Plus-Enhanced
PsyDoom engine source code: Licence https://github.com/BodbDearg/PsyDoom
UZDoom engine source code: Licence https://github.com/UZDoom/UZDoom
Perfect Dark engine source code: Licence https://github.com/fgsfdsfgs/perfect_dark
ArxLibertatis engine source code: Licence https://github.com/arx/ArxLibertatis
FTEQW engine source code: Licence https://github.com/fte-team/fteqw
Widelands engine source code: Licence https://github.com/widelands/widelands
Vanilla-Conquer engine source code: Licence https://github.com/TheAssemblyArmada/Vanilla-Conquer
Classic-RBDOOM-3-BFG engine source code: Licence https://github.com/MadDeCoDeR/Classic-RBDOOM-3-BFG
Glslang: Licence https://github.com/KhronosGroup/glslang
VulkanMemoryAllocator: Licence https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
volk: Licence https://github.com/zeux/volk
ZMusic: Licence https://github.com/ZDoom/ZMusic
NG-GL4ES: Licence https://github.com/BZLZHH/NG-GL4ES
NG-GL4ES android openmw fork: Licence https://github.com/Sisah2/NG-GL4ES
gl4es: Licence https://github.com/ptitSeb/gl4es
gl4es fork from minecraft devs: Licence https://github.com/Uniaball/gl4es
fmod: Licence https://www.fmod.com/
libpng: Licence https://github.com/pnggroup/libpng
jna: Licence https://github.com/java-native-access/jna
file picker: Licence https://github.com/codekidX/storage-chooser
code from Android OMW: Licence https://gitlab.com/cavebros/openmw-android-docker
code from xyzz legacy Android openmw (sdl changes): Licence https://github.com/xyzz/openmw-android
code from GZDOOM Android: Licence https://github.com/emileb/gzdoom
koin for DI: Licence https://github.com/InsertKoinIO/koin
oboe for audio: Licence https://github.com/google/oboe
openal: Licence Licence https://github.com/kcat/openal-soft
SDL2: Licence https://github.com/libsdl-org/SDL/tree/SDL2
SDL2_mixer: Licence https://github.com/libsdl-org/SDL_mixer
SDL2_TTF: Licence https://github.com/libsdl-org/SDL_ttf/tree/SDL2
SDL3: Licence https://github.com/libsdl-org/SDL/
fluidsynth: Licence https://github.com/FluidSynth/fluidsynth
fluidsynth android fork: Licence https://github.com/VolcanoMobile/fluidsynth-android
CTranslate2: Licence https://github.com/OpenNMT/CTranslate2
sentencepiece: Licence https://github.com/google/sentencepiece
freetype: Licence https://gitlab.freedesktop.org/freetype/freetype
java bing translate api: https://github.com/marmot-z/bing-translate-api-java
apache commons:Licence https://commons.apache.org/
Reorderable: Licence https://github.com/Calvin-LL/Reorderable
kotlinx.serialization: Licence https://github.com/Kotlin/kotlinx.serialization
compose preferences(used in previous builds): Licence https://github.com/sproctor/ComposePreferences
Mlkit: Licence https://developers.google.com/ml-kit
OpusMT EN -> RU: Licence https://github.com/Helsinki-NLP/OPUS-MT-train
M2M100: Licence https://huggingface.co/facebook/m2m100_418M
small100: Licence https://github.com/alirezamshi-zz/small100
NLLB200: Licence https://huggingface.co/facebook/nllb-200-distilled-600M
google crashlytics for getting crashes: Licence https://firebase.google.com/products/crashlytics
zip4j: Licence https://github.com/srikanth-lingala/zip4j
room ORM for sqlite: Licence https://developer.android.com/jetpack/androidx/releases/room
gson: Licence https://github.com/google/gson
retrofit: Licence https://github.com/square/retrofit
icu: Licence https://icu.unicode.org/
datastore (used in previous builds): Licence https://developer.android.com/jetpack/androidx/releases/datastore
compose for all ui: Licence https://developer.android.com/compose
okhttp: Licence https://github.com/square/okhttp
lombok: Licence https://github.com/projectlombok/lombok
kotlin coroutines: Licence https://github.com/Kotlin/kotlinx.coroutines
legacy material dialogs: Licence https://github.com/afollestad/material-dialogs/
for icons are using: Licence https://game-icons.net/
Licence https://fonts.google.com/icons
LanaPixel ttf font: Licence https://opengameart.org/content/lanapixel-localization-friendly-pixel-font
UnityFont EX ttf font: Licence https://github.com/stgiga/UnifontEX
SDL_GameControllerDB: Licence https://github.com/mdqinc/SDL_GameControllerDB
Kotlin: Licence Licence https://github.com/JetBrains/kotlin
Java: Licence https://github.com/openjdk/jdk https://www.oracle.com/java/
C++: https://isocpp.org/
C: https://www.c-language.org/
Android NDK: https://github.com/android/ndk
Android SDK: https://github.com/AndroidSDKSources
Cmake: Licence https://gitlab.kitware.com/cmake/cmake
Clang: Licence https://github.com/llvm/llvm-project
Gradle: Licence https://github.com/gradle/gradle
Lemon: Licence https://www.hwaci.com/sw/lemon/
Re2C: Licence https://re2c.org/ https://sourceforge.net/projects/re2c/
SQLite: Licence https://sqlite.org/ https://github.com/sqlite/sqlite
multiplatform-settings (used in previous builds): Licence https://github.com/russhwolf/multiplatform-settings
slf4j: Licence https://github.com/qos-ch/slf4j
glad as UZDoom dependency: Licence https://github.com/Dav1dde/glad
androidx: Licence https://github.com/androidx
vorbis-android: Licence https://github.com/MoNTE48/libvorbis-android
opus: Licence https://github.com/xiph/opus
MPG123-Android: Licence https://github.com/rosuH/MPG123-Android
flac: Licence https://github.com/xiph/flac
libmp3lame-android: Licence https://github.com/xieyangxuejun/libmp3lame-android
libsndfile: Licence https://github.com/libsndfile/libsndfile
vpx-android: Licence https://github.com/cmeng-git/atalk-android/tree/master/aTalk/jni/vpx
com.n0n3m4.diii4a: Licence https://github.com/glKarin/com.n0n3m4.diii4a
custom-keyboard-android: Licence https://github.com/qinvent/custom-keyboard-android
GLM: Licence https://github.com/g-truc/glm
code from nintendo switch ArxLibertatis port: Licence https://github.com/fgsfdsfgs/ArxLibertatis
boost: Licence https://github.com/boostorg/boost
bullet3: Licence https://github.com/bulletphysics/bullet3
ffmpeg: Licence https://github.com/FFmpeg/FFmpeg
ffmpeg prebult binaries: Licence https://github.com/sk3llo/ffmpeg_kit_flutter
libjpeg-turbo: Licence https://github.com/libjpeg-turbo/libjpeg-turbo
bzip2: https://gitlab.com/bzip2/bzip2
ODE: Licence https://github.com/thomasmarsh/ODE
yquake2: Licence https://github.com/yquake2/yquake2
code from FTEQW beloko android port: https://github.com/emileb/fteqw
glbinding: Licence https://github.com/cginternals/glbinding
libtiff: Licence https://gitlab.com/libtiff/libtiff
asio: Licence https://github.com/chriskohlhoff/asio/
SDL2 Image: Licence https://github.com/libsdl-org/SDL_image/tree/SDL2
Process Phoenix: Licence https://github.com/JakeWharton/ProcessPhoenix
Code from Vanilla-Conquer nintendo switch port: Licence https://github.com/capsterx-switch/Vanilla-Conquer
Android Glob: https://github.com/freshHua/glob
Angle: Licence https://github.com/google/angle
android_openssl: Licence https://github.com/KDAB/android_openssl
sse2neon: Licence https://github.com/DLTcollab/sse2neon
d3es-multithread: Licence https://github.com/emileb/d3es-multithread
SPIRV-Tools - Licence https://github.com/KhronosGroup/SPIRV-Tools
SPIRV-Headers - Licence https://github.com/KhronosGroup/SPIRV-Headers
SPIRV-Cross - Licence https://github.com/KhronosGroup/SPIRV-Cross
etcpack - Licence https://github.com/wolfpld/etcpak
Android framepacing - Licence https://android.googlesource.com/platform/frameworks/opt/gamesdk/+/refs/heads/android-games-sdk-games-frame-pacing-release
DocumentsProvider working solution from - https://github.com/glKarin/com.n0n3m4.diii4a
libsquish - Licence https://github.com/oblivioncth/libsquish
All UZDoom and Doom credits belong to the original authors (id Software, Raven Software, Rogue Software, Digital Café, Nash Muhandes).
This project is a compilation of many open-source components. Each component is distributed under its own license. The source code and license terms for each component can be found in their respective repositories linked above.
Complete license texts for all third-party components are consolidated in the THIRD-PARTY-LICENSES.TXT.
The core project is distributed under the GPL v3 license.
Original copyright notices for all used components are preserved in their respective source files.