Unofficial ports of Doom 1,2, Wolfenstein RPG, Doom64 EX Plus, PsyDoom, UZDoom, Perfect Dark, Arx Libertatis, FTEQW, Widelands, Vanilla-Conquer, OpenXRay for Android
This is an Android ports of Doom 1,2, Wolfenstein RPG, Doom64 EX Plus, PsyDoom, UZDoom, Perfect Dark, Arx Libertatis, FTEQW, Widelands, Vanilla-Conquer, OpenXRay projects found here:
https://github.com/Erick194/DoomRPG-RE
https://github.com/Erick194/DoomIIRPG-RE
https://github.com/Erick194/WolfensteinRPG-RE
https://github.com/atsb/Doom64EX-Plus/
https://github.com/Styd051/DOOM64-EX-Plus-Enhanced
https://github.com/BodbDearg/PsyDoom
https://github.com/UZDoom/UZDoom
https://github.com/fgsfdsfgs/perfect_dark
https://github.com/arx/ArxLibertatis
https://github.com/fte-team/fteqw
https://github.com/widelands/widelands
https://github.com/TheAssemblyArmada/Vanilla-Conquer
https://github.com/OpenXRay/xray-16
This port for Android has the following system requirements:
- Operating system: Android 7.0 or later
- Graphics: videocard, which supports GLES 2.0 render
- Memory: 1GB system RAM
- Operating system: Android 12 or later (I tested it mostly on my phone with Android 12)
These source ports supported OpenGL ES 3.0 render with NG-GL4ES.
If your device is not supported OPenGL ES 3.0 render or you have graphics issues like black screen, then use binary
with OpenGL ES 2.0 render
At latest release all these source ports except (Doom1RPG and Vanilla-Conquer) started to support Vulkan render with Angle help. Angle support requries minimum Android 8 and vulkan 1.0 (1.1) support. On mtk it will be better to emulate gles 2.0 render with angle for better fps
This Android ports support controllers
On-Screen Controls and physical controllers cannot be used together. Most legacy engines support only one gamepad.
On-screen controls already emulate an Xbox controller for player movement. Disable on-screen controls if you want real controller support.
| Action | Button |
|---|---|
| Move Forward | D-pad up |
| Move Backward | D-pad down |
| Turn Left | D-pad left |
| Turn Right | D-pad right |
| Attack/Talk/Use | A |
| Next Weapon | Right trigger |
| Prev Weapon | Left trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open/Back | Start |
| Action | Button |
|---|---|
| Move Forward | D-pad up |
| Move Backward | D-pad down |
| Turn Left | D-pad left |
| Turn Right | D-pad right |
| Attack/Talk/Use | A |
| Next Weapon | Right trigger |
| Prev Weapon | Left trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open/Back | Start |
| Menu Open/Back | Start |
| Items Info | Left shoulder |
| Drinks | Right shoulder |
| Pda | B |
| Bot Dis | Y |
| Action | Button |
|---|---|
| Move Forward | D-pad up |
| Move Backward | D-pad down |
| Turn Left | D-pad left |
| Turn Right | D-pad right |
| Attack/Talk/Use | A |
| Next Weapon | Right trigger |
| Prev Weapon | Left trigger |
| Pass Turn | X |
| Automap | Select |
| Menu Open/Back | Start |
| Menu Open/Back | Start |
| Items Info | Left shoulder |
| Syringes | Right shoulder |
| Journal | Y |
This launcher supporting Doom RPG series machine translation to many languages by local AI directly on Android device via CTranslate2 API.
For running Doom 64 EX Plus - get Doom 64 remaster from STEAM
https://store.steampowered.com/app/1148590/DOOM_64/
Mods can be used from this Doom64 discord server - https://discord.com/invite/doom-64-593915163896315905
For running PsyDoom - Get Doom PSX disc with cue as described here https://github.com/BodbDearg/PsyDoom?tab=readme-ov-file#running-the-game
PsyDoom requires vulkan 1.0 render suppport.
If your device does not support vulkan render, then use legacy opengl es render
For running Uzdoom follow gzdoom docs - https://zdoom.org/w/index.php?title=Main_Page
Uzdoom engine has rendering issues at all mobile gpu vendors, except adreno.
Do not expect working vulkan render and OpenGL emulation at gpu vendors except adreno.
At mobile vendors - like mali or powevr use GLES 2.0 or GLES 3.x render.
This project contains code from GZDoom android port (https://github.com/emileb/gzdoom),
which is licensed under GPL v3. All modifications are clearly marked in commit history.
And using render changes (like OGL emulation, gles render and some bugfixes for Android platform)
credits for Android render changes and Android bugfixes to emileb - https://github.com/emileb
And contains code from glKarin GZDoom android port - https://github.com/glKarin/com.n0n3m4.diii4a
Gles 3.0 - Gles 3.2 native render support used from glKarin gzdoom port - https://github.com/glKarin/com.n0n3m4.diii4a
All credits for Gles 3.x native render support to glKarin - https://github.com/glKarin
This project is ALSO licensed under GPL v3.
For running perfect dark follow these docs - https://github.com/fgsfdsfgs/perfect_dark?tab=readme-ov-file#perfect-dark-port
All Rom binaries neeed to have .z64 or .Z64 file extensions. Otherwise, the game will not start.
For running perfect dark - your device need to support OPEN GL ES 3.0 render. Otherwise, the game will not start again.
This perfect dark port also supported legacy ARMV7 devices without any issues.
This port is far superior in quality to the old Arx Libertatis port, which was the first I ever developed for Android
In particular, it is fully supports both GLES 3.2 and GLES 2.0 rendering, has more convenient controls, and it has full ArmV7 support.
It is also has a ton of other improvements.
For running this port follow these ArxLibertatis docs - https://wiki.arx-libertatis.org/Getting_the_game_data
This port uses code from the legacy Android openmw repository as a solution to not working changing brightness bug - https://github.com/xyzz/openmw-android
All credits for solution for not working changing brightness in Android Arx Libertatis to xyzz - https://github.com/xyzz
This port is using gamepads code implementation from ArxLibertatis nintendo switch port - https://github.com/fgsfdsfgs/ArxLibertatis
All credits for gamepads implementation in ArxLibertatis android port to fgsfdsfgs - https://github.com/fgsfdsfgs
For running FTEQW follow these docs - https://quakewiki.org/wiki/FTEQW_Wiki
FTEQW supports quake 1, quake 2, quake 3, hexen 2 and half life 1. However quake 2 and quake 3 support is nominal
This engine does not have quake 2 native support. Instead it - it is using this engine https://github.com/yquake2/yquake2
This engine loaded core yquake2 in runtime. You can play quake 2 single player campaign with this support. But Multiplayer will not work.
The same applies to Quake 3. Support for Quake 3 is purely nominal - therefore multiplayer does not work in it at all. You can only play with bots in the
single player, and even then it is unstable.
There is no support for Half Life 1 at all. It just doesn't work at all. That's why I didn't even include it in the launcher
quake 1 net code also unstable with a lot of bugs.
You can play quake1 , quake 2 and hexen 2 single player I think without major bugs.
Rendering support: This engine supports opengl and vulkan on desktop.
On mobiles - it is suppports gles 2.0, gles 3.0 and vulkan renders, because I fixed almost all vulkan renders bugs in this engine for mobiles,
so, it is working now even on mtk
However vulkan support in this engine architecturally inefficient. Rendering performance will be very low even on Adreno
Due to this - do not use it, use gles 2.0 or gles 3.0 render instead it even on adreno.
For audio - openal with oboe is using, instead of SDL2 with openSLES support.
This port of FTEQW contains code from glKarin's FTEQW Android port: https://github.com/glKarin/com.n0n3m4.diii4a
And also used some bugfixes from beloko FTEQW Android port: https://github.com/emileb/fteqw
All credits for FTEQW Android bugfixes go to glKarin: https://github.com/glKarin and to emileb - https://github.com/emileb
I used these bugfixes for this legacy engine because fixing bugs in this awful legacy engine from scratch provides no practical benefit.
I do not have time to fix legacy engine bugs from zero if fixes already exist.
All credits and licenses are properly acknowledged in this port. Any other ideas or issues are not my responsibility.
If you want to fix bugs in this engine from scratch yourself, feel free to fork the FTEQW source code and adapt it for Android.
Widelands is a standalone RTS with its own assets. No third-party resources are required to run it on Android.
Supports GLES 2.0 and GLES 3.2 renders.
Works on ARMv7 devices.
Gamepads are not supported and will not be added.
Screen scaling and on-screen controls are implemented for mobile devices.
Multiplayer is dead in this RTS, only remote asset downloading and server connection were tested.
For more information, see the official wiki - https://www.widelands.org/wiki/Main%20Page/
This engine supports the classic Command & Conquer games:
- Command & Conquer: Tiberian Dawn
- Command & Conquer: Red Alert
To run Tiberian Dawn, you need the original game resources.
Recommended source: https://forums.cncnet.org/topic/8821-cc-1-tiberian-dawn-installation-on-windows-10/
On mobile devices, DOS mode is enabled by default to provide a larger and more comfortable game screen on phones. However, without additional resources, Tiberian Dawn will show only a black screen in DOS mode.
To fix this, download the required DOS version resources from here: https://www.moddb.com/games/cc-gold/downloads/command-and-conquer-dos
From the DOS version of the game, extract the file LOCAL.MIX and copy it into your CNCNet Tiberian Dawn resources folder.
To run Red Alert, use the official resources from CNCNet: https://cncnet.org/red-alert
Multiplayer in this RTS is effectively inactive. Only basic server connection functionality was tested.
ARMv7 devices should be supported.
Gamepads are supported, because On-screen gamepad emulation is used, which works without any known issues
This port is using some code from Vanilla-Conquer nintendo switch port - https://github.com/capsterx-switch/Vanilla-Conquer
All credits for this code to capsterx-switch - https://github.com/capsterx-switch
Unplayable yet.
This Android ports support keyboard and mouse
To build the APK file, clone this repository, open the project root directory in Android Studio and run the project.
Important: Bulding from source code supported only for fdroid buld variants, google variants are propritary due to crashlytics using.
Only windows 11 25h2 x64 is supported as build host, others OS are not supported, because I am not using them.
To download a working APK file, either do it from F-Droid here, or in the Releases Section.
-
For running Wolfenstein rpg get wolfenstein rpg ipa file.
Copy this ipa file to your device.
Run this android port and specify path to this file in launcher
-
For running Doom1 rpg get doom1 rpg brew file
get BarToZip exe from this PC release build https://github.com/Erick194/DoomRPG-RE/releases/tag/v.0.2.2
and follow this instructions https://www.doomworld.com/forum/topic/129997-doom-rpg-port-reverse-engineering-update-version-022-source-code-release/
to get DoomRPG.zip file. Copy DoomRPG.zip to your device.
Run this android port and specify path to this file in launcher.
-
For running Doom2 rpg get Doom2 rpg ipa.
Copy this ipa file to your device.
Run this android port and specify path to this file in launcher
This port using
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
OpenXRay engine source code: Licence https://github.com/OpenXRay/xray-16
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
LZO fork: Licence https://github.com/nemequ/lzo
Theora: Licence https://github.com/xiph/theora
Luajit cmake: Licence https://github.com/WohlSoft/LuaJIT
Android Glob: https://github.com/freshHua/glob
Angle: Licence https://github.com/google/angle
All UZDoom credits and Doom credits belong the original authors (id Software (Doom), Raven Software (Hexen/Heretic),
Rogue Software (Strife), Digital Café (Chex), 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.