idTech4A++ (Harmattan Edition)
idTech4A++ (Harmattan Edition) is a port of id Tech 4 engine games and other engines to Android, Windows, and Linux supporting many classic titles.
- Type: PC port
- Game: Skin Deep
- Runs on Windows and Android
- By glKarin
- Latest release v1.1.0harmattan73, 2026-09-30
- Source: https://github.com/glKarin/com.n0n3m4.diii4a
README
idTech4A++ (Harmattan Edition) 
idTech engine games For Android. An idTech games runtime libraries collection on Android
DOOM III/Quake 4/Prey(2006)/Enemy Territory: QUAKE Wars OpenGLES on Android/Windows/Linux
DOOM 3 BFG/The Dark Mod/Quake 1 2 3/RTCW/GZDOOM/ETW/RealRTCW/FTEQW/STAR WARS™ Jedi Knight/Serious Sam Classic/Urban Terror/OpenMOHAA/Skin Deep/Quadrilateral Cowboy/Icarus Starship Command Simulator on Android
Original named DIII4A++, based on com.n0n3m4.diii4a's OpenGLES version.
Latest version:
1.1.0harmattan73(lindaiyu)
Latest update:
2026-09-25
Arch:
arm64 armv7-a
Platform:
Android 4.4+
License:
GPLv3
idTech4's feature
- Linux/Windows(MinGW/MSVC(without editor)) build
- multi-threading renderer
- pure soft shadow with shadow-mapping
- soft shadow with stencil-shadow and translucent stencil shadow
- global illumination rendering
- lighting model: Phong/Blinn-phong/PBR/Ambient/No-lighting
- Wide-character language translation and BFG new fonts support
- debug render tools support with programming render pipeline
- OpenGLES2.0/OpenGLES3.0
- png/dds/bimage texture image, jpeg/png/bmp/dds format of screenshot
- obj/dae/md5mesh format static model
- psk&psa/iqm/gltf&glb/fbx format animation/static model
- OpenAL(soft) and EFX Reverb
- Float console
- DOOM3(with full body awareness mod, view body mod, bot mod, view flashlight mod)
- Quake4(with bot mod, full body awareness mod, view body mod) and Raven's idTech4 engine
- Prey(2006)(with full body awareness mod) and HumanHead's idTech4 engine
Support games/mods
| Game | Engine | Version | OpenGL ES version | Vulkan version | Standalone folder (* means always enabled) | Mods/Plugins |
|---|---|---|---|---|---|---|
| DOOM III | n0n3m4's dante | - | 2.0/3.0 | doom3 | Resurrection of Evil The Lost Mission Classic DOOM3 Rivensin HardCorps Overthinked Doom^3 Sabot(a7x) HeXen:Edge of Chaos Fragging Free LibreCoop LibreCoop D3XP Perfected Doom 3 Perfected Doom 3:RoE Doom 3: Phobos(Dhewm3 compatibility patch) | |
| Quake IV | n0n3m4's dante | - | 2.0/3.0 | quake4 | Hardqore Awakening Translate Subtitle | |
| Prey(2006) | n0n3m4's dante | - | 2.0/3.0 | prey | ||
| Enemy Territory: QUAKE Wars | n0n3m4's dante | - | 2.0/3.0 | etqw | ||
| DOOM 3 BFG(Classic DOOM 1&2) | RBDOOM-3-BFG | 1.4.0 (The last OpenGL renderer version) | 3.0 | 1.1 | doom3bfg | |
| The Dark Mod | Dark Mod | 2.13 | 3.2 (require geometry shader support) | darkmod * | ||
| Return to Castle Wolfenstein | iortcw | 1.51d | 1.1 | rtcw | ||
| Quake III Arena | ioquake3 | 1.36 | 1.1 | quake3 | Quake III Team Arena | |
| Quake II | Yamagi Quake II | 8.60 | 1.1/3.2 | 1.0 | quake2 | Capture The Flag Ground Zero The Reckoning Team Evolves Zaero 3rd Zigock Bot II |
| Quake I | Darkplaces | - | 2.0 | quake1 | ||
| UZDOOM(64bits) | UZDOOM | 4.14.2 | 2.0/3.2 | 1.0 | uzdoom * | |
| Wolfenstein: Enemy Territory | ET: Legacy | 2.83.2 | 1.1 | etw | Omni-Bot support | |
| RealRTCW | RealRTCW | 5.3 | 1.1 | realrtcw | ||
| STAR WARS™ Jedi Knight - Jedi Academy™ | OpenJK | 1.0.1.1 | 1.1 | openja | ||
| STAR WARS™ Jedi Knight II - Jedi Outcast™ | OpenJK | 1.0.1.1 | 1.1 | openjo | ||
| FTEQW | FTEQW | 1.05 | 3.2 | 1.1 | fteqw * | |
| Serious Sam Classic : The First Encounter | SamTFE | 1.10.7 | 1.1 | serioussamtfe * | ||
| Serious Sam Classic : The Second Encounter | SamTSE | 1.10.7 | 1.1 | serioussamtse * | ||
| Urban Terror | Q3-UT4 | 4.3.4 | 1.1 | urt | ||
| Medal of Honor: Allied Assault | OpenMOHAA | 0.82.1 | 1.1 | openmohaa | ||
| Skin Deep | SkinDeep | 1.0.4 | 3.2 | skindeep | ||
| Quadrilateral Cowboy | SkinDeep | 1.0.2602252 | 2.0/3.0 | qc | ||
| Icarus Starship Command Simulator | SkinDeep | 1.0.9 | 2.0/3.0 | icarus |
Update 1.1.0harmattan73 (2026-09-25)
- Add
Enemy Territory: QUAKE Wars(ver 1.5) support, game standalone directory namedetqw, game data directory namedetqwbase. More view in Enemy Territory: QUAKE Wars. - Add
Quake 4: Awakeningmod of Quake4 support, game data directory namedq4xbase. More view in Quake 4: Awakening. - Add
Quake 4: Translate Subtitlemod of Quake4 support, game data directory namedhazzzzzy. More view in Quake 4: Translate Subtitle. - Update RealRTCW version to 5.4.
- Update The Dark Mod version to 2.14.
- Fix DOOM3-BFG Vulkan.
- Add gyroscope dead zone(rad/s) setting in launcher's controls tab panel.
idTech4's new Cvar/Commands:
About DOOM 3
Switch current weapon and last weapon
bind "Your key" "_impulse51"
About Quake IV
- Effect system: Quake4 new advanced
BSEparticle system is working now! Also see Quake4BSE, Quake4Decompiled.
About Prey(2006)
- Some problems solution: e.g. using cvar
harm_ui_translateAlienFontto translate Alien text on GUI. - Exists bugs: e.g. some incorrect collision(using
noclip), some GUIs not work(Music CD in RoadHouse). - If settings UI is not work, can edit
preyconfig.cfgfor binding extras key.
bind "Your key of spirit walk" "_impulse54"
bind "Your key of second mode attack of weapons" "_attackAlt"
bind "Your key of toggle lighter" "_impulse16"
bind "Your key of drop" "_impulse25"
About Enemy Territory: QUAKE Wars
- Only support play with bots, and has some bugs.
Screenshot
Game



Mod




Other











Changes:
Build:
- idTech4A++ using std libc's malloc/free in Mem_Alloc/Mem_Free in idlib/Heap.cpp
- idTech4A++ using pure OpenGL programming render pipeline
Engine macros
- _MULTITHREAD: Add multithread support for rendering.
- _USING_STB: Using stb jpeg instead of libjpeg for jpeg image file.
- _K_CLANG: If compiling by clang not GCC.
- _MODEL_OBJ: Add obj static model support.
- _MODEL_DAE: Add dae static model support.
- _SHADOW_MAPPING: Add Shadow mapping support.
- _OPENGLES3: Add OpenGLES3.0 support.
- _OPENAL _OPENAL_EFX _OPENAL_SOFT: Add OpenAL(soft) and EFX Reverb support.
- _NO_LIGHT: Add no lighting support.
- _STENCIL_SHADOW_IMPROVE: Add stencil shadow improve support(translucent shadow, force combine global shadow and self local shadow).
- _SOFT_STENCIL_SHADOW: soft shadow(OpenGLES3.1+), must defined
_STENCIL_SHADOW_IMPROVEfirst. - _MINIZ: Using miniz instead of zlib, using minizip instead of DOOM3's UnZip.
- _USING_STB_OGG: Using stb_vorbis instead of libogg and libvorbis.
- _D3BFG_CULLING: Add DOOM3-BFG occlusion culling support.
- _WCHAR_LANG _NEW_FONT_TOOLS: Add wide-character language font support.
- _D3BFG_FONT: Add DOOM3-BFG new font support.
- _GLOBAL_ILLUMINATION: Add global illumination support.
- _POSTPROCESS: Add retro postprocess rendering support.
- _GLSL_PROGRAM: Add GLSL program on new material stage support.
- _IMGUI: Add imGUI support.
- _SND_MP3: Add mp3 sound file support.
- _RAVEN_BSE: Build BSE as effect system on Quake 4.
- _RAVEN_FX: Build Fx as effect system on Quake 4.
- _MODEL_MD5V6: Add 2002 E3 demo md5mesh/md5anim v6 version animation model converter.
- _MODEL_PSK: Support Unreal engine psk/psa animation/static model.
- _MODEL_IQM: Support iqm animation/static model.
- _MODEL_SMD: Support Source engine smd animation/static model.
- _MODEL_GLTF: Support Khronos gltf/glb animation/static model.
- _MODEL_FBX: Support Autodesk fbx animation/static model.
* DOOM 3
- _DOOM3: Build DOOM 3 improve changes.
- MOD_BOTS: Build bot support in multiplayer-game.
- _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.
- _MOD_VIEW_BODY: Build view-body mod.
- _MOD_VIEW_LIGHT: Build player flashlight mod.
* Quake 4
All new sources files put on raven folder.
- _RAVEN: Enable Raven Quake 4 patches in engine and idlib source code.
- _QUAKE4: Enable Raven Quake 4 patches in game source code.
- _RAVEN_BSE: Build Raven Quake 4 BSE as particle system.
- _RAVEN_FX: Build DOOM 3 FX instead of BSE as particle system.
- MOD_BOTS: Build bot support in multiplayer-game.
- _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.
- _MOD_VIEW_BODY: Build view-body mod.
* Prey(2006)
All new sources files put on humanhead folder.
- _HUMANHEAD: Enable Humanhead Prey patches in engine and idlib source code.
- _PREY: Enable Humanhead Prey patches in game source code.
- _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.
* Enemy Territory: QUAKE Wars
All new sources files put on humanhead folder.
- _SPLASHDAMAGE: Enable SplashDamage ETQW patches in engine and idlib source code.
- _ETQW: Enable SplashDamage ETQW patches in game source code.
Android
- _OPENSLES: Add OpenSLES support for sound.
Linux
- REQUIRE ALSA, zlib, X11, EGL, SDL2
- ./bin/cmake_linux_build_doom3_quak4_prey.sh
Windows(MSVC)
- REQUIRE SDL2, cURL, zlib:
vcpkg install SDL2 curl - Setup your vcpkg.cmake path
- /bin/cmake_msvc_build_doom3_quak4_prey.sh
- Copy OpenAL32.dll from vcpkg package path to binary path:
vcpkg install OpenAL-Soft
Testing version(Non-release. Automatic CI building By Github actions when pushing commits)
- idTech4A++ for Android arm64: Android testing.
- idTech4A++ for Android arm32: Android testing.
- DOOM 3/Quake 4/Prey(2006) for Windows x64: Windows x64 testing.
Build DOOM3/Quake4/Prey(2006) mod for Android idTech4A++
Run idTech4A++ on other Android application with Android intent
- Setup game type with
gamekey: also see Q3E/com.n0n3m4.q3e.Q3EGameConstants.java GAME_XXX constants. Valid value:doom3quake4prey2006etqwquake2quake3rtcwtdmquake1doom3bfggzdoometwrealrtcwfteqwopenjaopenjosamtfesamtseurtopenmohaaskindeepqcicarussource - Setup game command arguments with
commandkey. Starts withgame.arm
e.g. Run DOOM 3 with custom mod game dll
startActivity(new Intent().setComponent(new ComponentName("com.karin.idTech4Amm", "com.n0n3m4.q3e.Q3EMain"))
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
// 1. Setup game type
.putExtra("game", "doom3")
// 2. Setup game command
.putExtra("command", "game.arm +set fs_game moddir + harm_fs_gameLibPath /data/app/~~tBiIEpYUhA3P4wkarcd1AA==/com.author.package-p0-kOTTN2iU3ZewCcNXsrA==/lib/arm64/libgame.so")
);
finish();
Bot support on DOOM3/Quake4
- Extract
doom3/d3_sabot_a7.pk4(DOOM 3) orq4base/q4_sabot_a9.pk4(Quake 4) file in apk to game data folder, it includes some defs, scripts and MP game map AAS file(version < 66). - Set cvar
harm_g_autoGenAASFileInMPGameto 1 for generating a bad AAS file when loading map in Multiplayer-Game and not valid AAS file in current map, you can also put your MP map's
