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.

README

idTech4A++ (Harmattan Edition) idTech4A++

Android Build Actions Status Windows/Linux Build Actions Status
Discord chat
Latest Release
Download Android testing Download Windows/Linux testing

Get it on F-Droid

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

GameEngineVersionOpenGL ES versionVulkan versionStandalone folder
(* means always enabled)
Mods/Plugins
DOOM IIIn0n3m4's dante-2.0/3.0doom3Resurrection 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 IVn0n3m4's dante-2.0/3.0quake4Hardqore
Awakening
Translate Subtitle
Prey(2006)n0n3m4's dante-2.0/3.0prey
Enemy Territory: QUAKE Warsn0n3m4's dante-2.0/3.0etqw
DOOM 3 BFG(Classic DOOM 1&2)RBDOOM-3-BFG1.4.0
(The last OpenGL renderer version)
3.01.1doom3bfg
The Dark ModDark Mod2.133.2
(require geometry shader support)
darkmod *
Return to Castle Wolfensteiniortcw1.51d1.1rtcw
Quake III Arenaioquake31.361.1quake3Quake III Team Arena
Quake IIYamagi Quake II8.601.1/3.21.0quake2Capture The Flag
Ground Zero
The Reckoning
Team Evolves Zaero
3rd Zigock Bot II
Quake IDarkplaces-2.0quake1
UZDOOM(64bits)UZDOOM4.14.22.0/3.21.0uzdoom *
Wolfenstein: Enemy TerritoryET: Legacy2.83.21.1etwOmni-Bot support
RealRTCWRealRTCW5.31.1realrtcw
STAR WARS™ Jedi Knight - Jedi Academy™OpenJK1.0.1.11.1openja
STAR WARS™ Jedi Knight II - Jedi Outcast™OpenJK1.0.1.11.1openjo
FTEQWFTEQW1.053.21.1fteqw *
Serious Sam Classic : The First EncounterSamTFE1.10.71.1serioussamtfe *
Serious Sam Classic : The Second EncounterSamTSE1.10.71.1serioussamtse *
Urban TerrorQ3-UT44.3.41.1urt
Medal of Honor: Allied AssaultOpenMOHAA0.82.11.1openmohaa
Skin DeepSkinDeep1.0.43.2skindeep
Quadrilateral CowboySkinDeep1.0.26022522.0/3.0qc
Icarus Starship Command SimulatorSkinDeep1.0.92.0/3.0icarus

Update 1.1.0harmattan73 (2026-09-25)

  • Add Enemy Territory: QUAKE Wars(ver 1.5) support, game standalone directory named etqw, game data directory named etqwbase. More view in Enemy Territory: QUAKE Wars.
  • Add Quake 4: Awakening mod of Quake4 support, game data directory named q4xbase. More view in Quake 4: Awakening.
  • Add Quake 4: Translate Subtitle mod of Quake4 support, game data directory named hazzzzzy. 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:

Cvar list
Command list


About DOOM 3

Switch current weapon and last weapon

bind "Your key" "_impulse51"


About Quake IV

  1. Effect system: Quake4 new advanced BSE particle system is working now! Also see Quake4BSE, Quake4Decompiled.

About Prey(2006)

  1. Some problems solution: e.g. using cvar harm_ui_translateAlienFont to translate Alien text on GUI.
  2. Exists bugs: e.g. some incorrect collision(using noclip), some GUIs not work(Music CD in RoadHouse).
  3. If settings UI is not work, can edit preyconfig.cfg for 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

  1. Only support play with bots, and has some bugs.

Screenshot

Game

Classic bathroomQuake IV on DOOM3 Prey(2006) on DOOM3ETQW on DOOM3

Mod

Resurrection of EvilThe lost missionClassic DOOMQuake 4: Awakening

Other

Quadrilateral CowboyDOOM 3 BFGIcarus Starship Command Simulator Quake III : ArenaQuake III : Team ArenaUrban Terror Quake IIThe Dark ModQuake I Return to Castle WolfensteinWolfenstein: Enemy TerritoryRealRTCW STAR WARS™ Jedi Knight - Jedi Academy™STAR WARS™ Jedi Knight II - Jedi Outcast™Medal of Honor: Allied Assault Wolfenstein 3D


Changes:

Change logs


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

  1. _MULTITHREAD: Add multithread support for rendering.
  2. _USING_STB: Using stb jpeg instead of libjpeg for jpeg image file.
  3. _K_CLANG: If compiling by clang not GCC.
  4. _MODEL_OBJ: Add obj static model support.
  5. _MODEL_DAE: Add dae static model support.
  6. _SHADOW_MAPPING: Add Shadow mapping support.
  7. _OPENGLES3: Add OpenGLES3.0 support.
  8. _OPENAL _OPENAL_EFX _OPENAL_SOFT: Add OpenAL(soft) and EFX Reverb support.
  9. _NO_LIGHT: Add no lighting support.
  10. _STENCIL_SHADOW_IMPROVE: Add stencil shadow improve support(translucent shadow, force combine global shadow and self local shadow).
  11. _SOFT_STENCIL_SHADOW: soft shadow(OpenGLES3.1+), must defined _STENCIL_SHADOW_IMPROVE first.
  12. _MINIZ: Using miniz instead of zlib, using minizip instead of DOOM3's UnZip.
  13. _USING_STB_OGG: Using stb_vorbis instead of libogg and libvorbis.
  14. _D3BFG_CULLING: Add DOOM3-BFG occlusion culling support.
  15. _WCHAR_LANG _NEW_FONT_TOOLS: Add wide-character language font support.
  16. _D3BFG_FONT: Add DOOM3-BFG new font support.
  17. _GLOBAL_ILLUMINATION: Add global illumination support.
  18. _POSTPROCESS: Add retro postprocess rendering support.
  19. _GLSL_PROGRAM: Add GLSL program on new material stage support.
  20. _IMGUI: Add imGUI support.
  21. _SND_MP3: Add mp3 sound file support.
  22. _RAVEN_BSE: Build BSE as effect system on Quake 4.
  23. _RAVEN_FX: Build Fx as effect system on Quake 4.
  24. _MODEL_MD5V6: Add 2002 E3 demo md5mesh/md5anim v6 version animation model converter.
  25. _MODEL_PSK: Support Unreal engine psk/psa animation/static model.
  26. _MODEL_IQM: Support iqm animation/static model.
  27. _MODEL_SMD: Support Source engine smd animation/static model.
  28. _MODEL_GLTF: Support Khronos gltf/glb animation/static model.
  29. _MODEL_FBX: Support Autodesk fbx animation/static model.

* DOOM 3

  1. _DOOM3: Build DOOM 3 improve changes.
  2. MOD_BOTS: Build bot support in multiplayer-game.
  3. _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.
  4. _MOD_VIEW_BODY: Build view-body mod.
  5. _MOD_VIEW_LIGHT: Build player flashlight mod.

* Quake 4

All new sources files put on raven folder.
  1. _RAVEN: Enable Raven Quake 4 patches in engine and idlib source code.
  2. _QUAKE4: Enable Raven Quake 4 patches in game source code.
  3. _RAVEN_BSE: Build Raven Quake 4 BSE as particle system.
  4. _RAVEN_FX: Build DOOM 3 FX instead of BSE as particle system.
  5. MOD_BOTS: Build bot support in multiplayer-game.
  6. _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.
  7. _MOD_VIEW_BODY: Build view-body mod.

* Prey(2006)

All new sources files put on humanhead folder.
  1. _HUMANHEAD: Enable Humanhead Prey patches in engine and idlib source code.
  2. _PREY: Enable Humanhead Prey patches in game source code.
  3. _MOD_FULL_BODY_AWARENESS: Build Full-body-awareness mod.

* Enemy Territory: QUAKE Wars

All new sources files put on humanhead folder.
  1. _SPLASHDAMAGE: Enable SplashDamage ETQW patches in engine and idlib source code.
  2. _ETQW: Enable SplashDamage ETQW patches in game source code.

Android

  1. _OPENSLES: Add OpenSLES support for sound.

Linux

  1. REQUIRE ALSA, zlib, X11, EGL, SDL2
  2. ./bin/cmake_linux_build_doom3_quak4_prey.sh

Windows(MSVC)

  1. REQUIRE SDL2, cURL, zlib: vcpkg install SDL2 curl
  2. Setup your vcpkg.cmake path
  3. /bin/cmake_msvc_build_doom3_quak4_prey.sh
  4. 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)


Build DOOM3/Quake4/Prey(2006) mod for Android idTech4A++


Run idTech4A++ on other Android application with Android intent

  1. Setup game type with game key: also see Q3E/com.n0n3m4.q3e.Q3EGameConstants.java GAME_XXX constants. Valid value: doom3 quake4 prey2006 etqw quake2 quake3 rtcw tdm quake1 doom3bfg gzdoom etw realrtcw fteqw openja openjo samtfe samtse urt openmohaa skindeep qc icarus source
  2. Setup game command arguments with command key. Starts with game.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

  1. Extract doom3/d3_sabot_a7.pk4(DOOM 3) or q4base/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).
  2. Set cvar harm_g_autoGenAASFileInMPGame to 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