Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Repository files navigation

Unofficial Android Ports of Classic Game Engines

This repository contains a collection of unofficial Android ports for the following classic game engines and projects:


Status: Development Completed

Future Development

The following projects are scheduled for Android porting:

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-compat on 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.

System Requirements

Minimum

  • OS: Android 8.0 or later
  • GPU: Hardware supporting OpenGL ES 2.0
  • RAM: 1 GB system RAM

Recommended

  • OS: Android 12 or later

Vulkan Support via ANGLE

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.

Keyboard and Mouse Support

Full keyboard and mouse input is supported across the ports.


Controllers Support

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.

Default Gamepad Mappings

Doom RPG

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

Doom II RPG

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

Wolfenstein RPG

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

Translation

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.


Engine-Specific Instructions & Known Issues

How to run Doom RPG Series

  1. Wolfenstein RPG: Obtain the .ipa file, copy it to your device, and select its path in the launcher.
  2. 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.
  3. Doom II RPG: Obtain the .ipa file, copy it to your device, and select its path in the launcher.

Doom 64 (Doom64 EX Plus)

  • Game Data: Requires the Doom 64 Remaster from Steam.
  • Mods: Community mods are available on the Doom 64 Discord.

PsyDoom

  • 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.

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.

Perfect Dark

  • Game Data: Follow the Perfect Dark port documentation.
  • Requirements: ROM binaries must have .z64 or .Z64 extensions. Requires OpenGL ES 3.0 support. Legacy ARMv7 devices are fully supported.

Arx Libertatis

  • 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.

FTEQW

  • 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.

Widelands

  • 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.

Vanilla-Conquer

  • 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.MIX from the DOS version and place it in your CNCNet resources folder.
    • Red Alert: Use official CNCNet resources.
  • 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/onResume events can cause immediate render crashes.
  • Credits: Integrates code from the Nintendo Switch port.

Classic-RBDOOM-3-BFG

  • 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.

Building from Source

  1. Clone the repository and open the root directory in Android Studio.
  2. Install Python 3.x (required for building native dependencies).
  3. Highly Recommended: Install ccache to drastically reduce compilation times for the 13 engines and native dependencies. (Windows users can use Chocolatey).
  4. 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.


Download

Pre-compiled APKs are available via:


Credits & Third-Party Licenses

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).


Licenses

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.

Copyright Notices

Original copyright notices for all used components are preserved in their respective source files.

About

Doom, Wolfenstein RPG series, Doom64 EX+, PsyDoom, UZDoom, Perfect Dark, Arx Libertatis, FTEQW (quake 1, quake2, quake 3, hexen 2), Widelands, Vanilla-Conquer (C&C Tiberiawn Dawn and C&C Red Alert), Classic-RBDOOM-3-BFG (Doom 3 BFG Edition) Android ports

Resources

Stars

87 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages