Skip to content

idTech4A++ - RetroBIOS

Type standalone
Classification Game engines
Source https://github.com/glKarin/com.n0n3m4.diii4a
Version 1.1.0harmattan72
Profiled 2026-08-11
Cores idtech4a++, idtech4amm, diii4a
Systems doom, doom3, doom3-bfg, quake, quake2, quake3, quake4, prey, wolfenstein3d, return-to-castle-wolfenstein, wolfenstein-enemy-territory, realrtcw, the-dark-mod, jedi-academy, jedi-outcast, medal-of-honor-allied-assault, urban-terror, enemy-territory-quake-wars, skin-deep, quadrilateral-cowboy, icarus-starship-command-simulator, hexen2, half-life, half-life-2, serious-sam
Author glKarin
Technical notes

Android package com.karin.idTech4Amm, arm64-v8a and armeabi-v7a, Android 4.4+, GPLv3, forked from n0n3m4's DIII4A. A Java launcher picks a game and a command line, then loads one of twenty-six engine libraries into the Q3E frontend, which owns the GL surface, the on-screen controls and the audio path. Another application starts a game directly through com.n0n3m4.q3e.Q3EMain with a game extra carrying the game token and a command extra carrying an argument vector that begins with game.arm. ref: README.md:13-26, 237-251, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:8-33, 91-116, 303, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:9, idTech4Amm/build.gradle:13-14, 23

Game data lives under a working directory, /sdcard/diii4a unless the preference names another, and each game reads a base folder inside it. With the standalone-directory preference on, which is the default, the base folder sits under a per-game subdirectory; with it off, games that are not marked always standalone read the base folder directly under the working directory. The Dark Mod, UZDOOM, FTEQW, ECWolf, Xash3D, Source and both Serious Sam entries are always standalone and keep their subdirectory either way. ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:89, 106, 233-254, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:147-202, 421, 443-461

Engine, standalone directory and base folder per game, in registration order: DOOM 3 (dante, doom3/base), Quake 4 (dante, quake4/q4base), Prey 2006 (dante, prey/preybase), Enemy Territory: QUAKE Wars (Splash Damage idTech4, etqw/etqwbase), DOOM 3 BFG (RBDOOM-3-BFG 1.4.0, doom3bfg/base), The Dark Mod 2.14 (darkmod), Skin Deep 1.0.4 (skindeep/base), Quadrilateral Cowboy 1.0.2602252 (qc/base), Icarus Starship Command Simulator 1.0.9 (icarus/base), Quake III Arena (ioquake3 1.36, quake3/baseq3), Return to Castle Wolfenstein (iortcw 1.51d, rtcw/main), Wolfenstein: Enemy Territory (ET: Legacy 2.83.2, etw/etmain), Jedi Academy (OpenJK 1.0.1.1, openja/base), Jedi Outcast (OpenJK 1.0.1.1, openjo/base), Medal of Honor: Allied Assault (OpenMOHAA 0.82.1, openmohaa/main), Urban Terror (Q3-UT4 4.3.4, urt/q3ut4), RealRTCW 5.43 (realrtcw/Main), Quake II (Yamagi 8.60, quake2/baseq2), Quake (Darkplaces, quake1/darkplaces/id1), UZDOOM 4.14.3 (uzdoom), Wolfenstein 3D (ECWolf 1.4.2, ecwolf), FTEQW 1.05 (fteqw), Xash3D 0.21 (xash/valve), Source Engine 1.16 (srceng/hl2), Serious Sam TFE 1.10.7 (serioussamtfe) and Serious Sam TSE 1.10.7 (serioussamtse). Every one is built in this configuration; the F-Droid flavour leaves out Xash3D and Source, and the idtech flavour leaves out those two and Serious Sam. DOOM 3 BFG carries a second library for its Vulkan renderer. ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EGame.java:17-291, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:204-230, Q3E/src/main/jni/CMakeLists.txt:33-60, 137-266

The retail data is what the user brings, and no engine here names its archives one by one. The idTech 4 lineage lists .pk4 in the game directory, DOOM 3 BFG lists .resources, Yamagi walks pak0 through pak99 for each of its four container suffixes and then globs the rest, and Serious Sam globs *.gro. What every id-derived engine does gate on is default.cfg inside those archives: an empty read is a fatal error, and only the Splash Damage build is compiled past the check. UZDOOM ends with "Cannot find a game IWAD" when no known IWAD is present, and ECWolf with "Can not find base game data. (.wl6, .wl1, .sdm, .sod, *.n3d)". The launcher carries a store or homepage link per game and mod so the data can be bought or downloaded. ref: doom3/neo/framework/FileSystem.cpp:2052, 2503, 3392-3400, Q3E/src/main/jni/doom3bfg/neo/framework/FileSystem.cpp:3001, 3173, Q3E/src/main/jni/darkmod/framework/FileSystem.cpp:2650-2657, Q3E/src/main/jni/quake3/code/qcommon/files.c:4161-4165, Q3E/src/main/jni/rtcw/SP/code/qcommon/files.c:4340-4344, Q3E/src/main/jni/jk/code/qcommon/files.cpp:3020, Q3E/src/main/jni/openmohaa/code/qcommon/files.cpp:4011, Q3E/src/main/jni/quake2/yquake2/src/common/filesystem.c:1801-1850, Q3E/src/main/jni/zdoom/src/d_iwad.cpp:738, Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:766, idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/GameResourceUrl.java:14-118

The Quake III lineage keeps id's release checksums for baseq3 pak0 through pak8 and missionpack pak0 through pak3, and an archive whose value disagrees only draws a console warning telling the user to re-copy from the CD or re-install the point release. Those numbers are a block checksum over the CRCs of the archive members, not a hash of the file, so they identify a release rather than validate a download. ref: Q3E/src/main/jni/quake3/code/qcommon/files.c:178-197, 3572-3690, Q3E/src/main/jni/quake3/code/qcommon/qcommon.h:592-593

UZDOOM reads the IWAD names it will accept from iwadinfo.txt inside game_support.pk3: the DOOM, DOOM II, Final DOOM, BFG and KEX re-releases, Freedoom, Heretic, Hexen, Strife, Blasphemer, Chex Quest, Action Doom 2, HacX, Harmony, Square, Delaweare and Return of the Triad, forty-nine names. The launcher itself names four of them as selectable data files, DOOM.WAD, DOOM2.WAD, freedoom1.wad and freedoom2.wad, because UZDOOM and ECWolf are the two games whose data is a file rather than a folder. ref: Q3E/src/main/jni/zdoom/src/d_iwad.cpp:287-297, 321-342, Q3E/src/main/jni/zdoom/src/version.h:100-102, idTech4Amm/src/main/java/com/karin/idTech4Amm/sys/Game.java:69-72, Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:710-713

Starting a game extracts that game's bundled resources first. A text file named idtech4amm.version is written beside them and compared on the next run, so an engine update replaces the copy and a user edit survives otherwise. The Dark Mod, DOOM 3 BFG, UZDOOM, Xash3D, Source, Enemy Territory, ECWolf, Skin Deep and ETQW are covered by this path; the bot, Rivensin and translation archives are extracted on request from the launcher instead. ref: Q3E/src/main/java/com/n0n3m4/q3e/Q3EMain.java:167, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:624-703, 921-940, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResource.java:12-47, Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:32-218

On-screen button images are read through a search path built from the working directory, the external files directory of the package, its internal data directory and the assets of the apk, plus every .zipak archive found in the first three. A file of the same name in any of them replaces the built-in image, and a folder under controls_theme/ becomes a named theme in the chooser, described by a description.txt that may be suffixed with a language tag. ref: Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:66-96, Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:236-241, 305-345, Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230, idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:149-179

30 files | 10 required, 20 optional | 28 in repo, 2 missing Categories: 9 BIOS, 21 game data

uzdoom.pk3 required in repo game_data bundled
UZDOOM engine resource archive

game_support.pk3 required in repo game_data bundled
UZDOOM IWAD definitions and per-game filters

game_widescreen_gfx.pk3 optional in repo game_data bundled
Widescreen replacements for the stock graphics

  • Path: uzdoom/game_widescreen_gfx.pk3
  • Size: 5.3 MB
  • SHA1: 9ff11fca1955...
  • MD5: 8ebf4d4a7b95...
  • Source: Q3E/src/main/jni/zdoom/src/d_main.cpp:2083
  • Searched by name and loaded only when the startup dialog leaves widescreen graphics enabled.

lights.pk3 optional in repo game_data bundled
Dynamic light definitions

brightmaps.pk3 optional in repo game_data bundled
Brightmap definitions

uzdoom.sf2 optional in repo game_data bundled
SoundFont for the MIDI devices

GENMIDI.GS.wopl optional in repo game_data bundled
OPL3 instrument bank

gs-by-papiezak-and-sneakernets.wopn optional in repo game_data bundled
OPN2 instrument bank

ecwolf.pk3 required in repo game_data bundled
ECWolf engine resource archive

glprogs.pk4 required in repo game_data bundled
The Dark Mod GLSL shader set rewritten for OpenGL ES

renderprogs.pk4 required in repo game_data bundled
DOOM 3 BFG shader set rewritten for OpenGL ES

glsl.pk4 required in repo game_data bundled
Skin Deep shader set rewritten for OpenGL ES

zzz_etqwbase.pk4 required in repo game_data bundled
ETQW shader set and megatexture patches

legacy_v2.83.2.pk3 required in repo game_data bundled
ET: Legacy mod archive matching the built engine

extras.pk3 required in repo game_data bundled
Xash3D touch controls, fonts and controller database

cs16client-extras.pk3 optional in repo game_data bundled
Counter-Strike 1.6 client resources for Xash3D

extras.zip required in repo game_data bundled
Source engine fonts and platform archive

d3_sabot_a7.pk4 optional in repo game_data bundled
Stupid Angry Bot definitions for DOOM 3 multiplayer

q4_sabot_a9.pk4 optional in repo game_data bundled
Stupid Angry Bot definitions for Quake 4 multiplayer

play_original_doom3_level.pk4 optional in repo game_data bundled
Rivensin patch restoring the original DOOM 3 levels

doom3_chinese_translation_doom3bfg.pk4 optional in repo game_data bundled
Chinese text and fonts for DOOM 3, taken from the BFG release

controls_theme.zipak optional in repo bundled
Button image themes carried in the apk

btn_jump.png optional in repo bundled
Default on-screen button images, 52 files

generic.json optional in repo bundled
Virtual keyboard layout

  • Path: keyboard/generic.json
  • Size: 10.0 KB
  • SHA1: 839c05a60c23...
  • MD5: ef9b27699a62...
  • Source: Q3E/src/main/java/com/n0n3m4/q3e/Q3EKeyboard.java:74
  • Read straight from the assets when the on-screen keyboard is built, without going through the external search path, so nothing outside the archive replaces it.

autoexec.cfg optional in repo
Console script the engine runs at startup

description.txt optional in repo
Blurb shown for a mod in the chooser

controller_map.txt optional in repo
Extra SDL controller mappings

controls_theme/<name>/btn_jump.png optional in repo
Button images of a user theme

gameaarch64.so optional missing
External idTech 4 mod game library

server.so optional missing
External Xash3D game libraries

Generated on 2026-08-23T16:12:06Z