idTech4A++ - RetroBIOS¶
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
- Path:
uzdoom/uzdoom.pk3 - Size: 2.9 MB
- SHA1:
dd2364da2cc8... - MD5:
d3f231863ee2... - Source:
Q3E/src/main/jni/zdoom/src/version.h:100,Q3E/src/main/jni/zdoom/src/d_main.cpp:3707-3713,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:94-103 - Named by BASEWAD and searched before anything else; a miss ends the process with "Cannot find uzdoom.pk3". Carries the hex font, the widget resources and the script definitions the engine needs before a game is chosen. Copied out of the apk with the rest of the UZDOOM resource directory.
game_support.pk3 required in repo game_data bundled
UZDOOM IWAD definitions and per-game filters
- Path:
uzdoom/game_support.pk3 - Size: 2.3 MB
- SHA1:
cccab57d1d1b... - MD5:
64d976172bae... - Source:
Q3E/src/main/jni/zdoom/src/version.h:102,Q3E/src/main/jni/zdoom/src/d_main.cpp:3744-3746,Q3E/src/main/jni/zdoom/src/d_iwad.cpp:321-342,Q3E/src/main/jni/zdoom/src/d_iwad.cpp:738 - Named by OPTIONALWAD and opened as the second file of the IWAD manager. It holds the IWADINFO lump, so without it no IWAD is recognised and startup ends on "Cannot find a game IWAD" even when the WAD is in place. Also carries the per-game filter trees keyed by IWAD identity.
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
- Path:
uzdoom/lights.pk3 - Size: 23.5 KB
- SHA1:
19ad73cae23b... - MD5:
5e5977e018d3... - Source:
Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2075,Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1138,idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:558 - Searched by name on the user choice recorded at first start, and offered a second time as a launcher switch that appends it to the file list.
brightmaps.pk3 optional in repo game_data bundled
Brightmap definitions
- Path:
uzdoom/brightmaps.pk3 - Size: 240.4 KB
- SHA1:
ccb1fb093dc1... - MD5:
302fd7cffd2b... - Source:
Q3E/src/main/jni/zdoom/src/d_main.cpp:2066-2081,Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:1140,idTech4Amm/src/main/java/com/n0n3m4/DIII4A/GameLauncher.java:565 - Loaded on the same choice and the same launcher switch as the light definitions.
uzdoom.sf2 optional in repo game_data bundled
SoundFont for the MIDI devices
- Path:
uzdoom/soundfonts/uzdoom.sf2 - Size: 3.1 MB
- SHA1:
4394193fb95c... - MD5:
f306ebc541a4... - Source:
Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:220,Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:258,Q3E/src/main/jni/zdoom/src/common/audio/music/i_soundfont.cpp:335-370 - Collected by scanning a
soundfontsdirectory added to the search paths of the config file; every .sf2 and zipped GUS patch set found there becomes a menu entry.
GENMIDI.GS.wopl optional in repo game_data bundled
OPL3 instrument bank
- Path:
uzdoom/fm_banks/GENMIDI.GS.wopl - Size: 116.0 KB
- SHA1:
538d220d87b8... - MD5:
29570afc6cce... - Source:
Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221,Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:259 - Collected from an
fm_banksdirectory added to the search paths beside the soundfont directory, for the OPL synthesiser.
gs-by-papiezak-and-sneakernets.wopn optional in repo game_data bundled
OPN2 instrument bank
- Path:
uzdoom/fm_banks/gs-by-papiezak-and-sneakernets.wopn - Size: 268.4 KB
- SHA1:
eaca5d7a9fe1... - MD5:
4978fd39a6d7... - Source:
Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:221,Q3E/src/main/jni/zdoom/src/gameconfigfile.cpp:259 - Collected from the same
fm_banksdirectory, for the OPN2 synthesiser.
ecwolf.pk3 required in repo game_data bundled
ECWolf engine resource archive
- Path:
ecwolf/ecwolf.pk3 - Size: 180.7 KB
- SHA1:
d327b48f83d9... - MD5:
d9dcd91db4a0... - Source:
Q3E/src/main/jni/ecwolf/src/version.h:12,Q3E/src/main/jni/ecwolf/src/wl_iwad.cpp:604,Q3E/src/main/jni/ecwolf/src/wl_main.cpp:1294-1307,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:186-195 - Platforms: lakka, retroarch, retrobat, retrodeck, retropie, romm
- Named by MAIN_PK3 and passed to the game selector with the program directory; failing to open it ends the process with "Could not open ecwolf.pk3!". It holds the IWADINFO rules that identify which Wolfenstein data set is present, the palettes and the actor definitions. This build reads it from disk after extraction, unlike the libretro core which compiles it in.
glprogs.pk4 required in repo game_data bundled
The Dark Mod GLSL shader set rewritten for OpenGL ES
- Size: 96.1 KB
- SHA1:
2651f1eff178... - MD5:
3155df291027... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:83-92,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:705-722,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:391 - Unpacked into the standalone directory as
glslprogs/, the tree the renderer compiles its programs from. Version-stamped with the engine release so a Dark Mod update replaces it.
renderprogs.pk4 required in repo game_data bundled
DOOM 3 BFG shader set rewritten for OpenGL ES
- Size: 218.2 KB
- SHA1:
ab89141b5772... - MD5:
7edee35e1e53... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:72-81,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:768-787,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:393 - Unpacked into
base/renderprogs/beside the game resources. The shipped BFG data carries the desktop HLSL set, which this build cannot use.
glsl.pk4 required in repo game_data bundled
Skin Deep shader set rewritten for OpenGL ES
- Size: 50.4 KB
- SHA1:
87f0f5ec3db3... - MD5:
b94d15df5bf7... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:197-206,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:726-745,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:399 - Unpacked into
base/glsl/and stamped with the game version.
zzz_etqwbase.pk4 required in repo game_data bundled
ETQW shader set and megatexture patches
- Size: 132.9 KB
- SHA1:
0d4dee46085c... - MD5:
2f5c49dca499... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:208-217,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:747-766,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:400 - Unpacked into the ETQW base folder. The name sorts last so the entries override the ones the retail archives carry.
legacy_v2.83.2.pk3 required in repo game_data bundled
ET: Legacy mod archive matching the built engine
- Path:
etw/legacy/legacy_v2.83.2.pk3 - Size: 29.6 MB
- SHA1:
f156945f7054... - MD5:
ea838df0911a... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:175-184,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:845-868,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:397 - Copied into the
legacyfolder, the mod the engine runs by default; the retail Enemy Territory data inetmainstays the user's to supply. The file name is built from the engine version, so a Legacy update lands under a new name.
extras.pk3 required in repo game_data bundled
Xash3D touch controls, fonts and controller database
- Path:
xash/extras.pk3 - Size: 1.4 MB
- SHA1:
971249b94cb6... - MD5:
1a65bf279b96... - Source:
Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1376-1378,Q3E/src/main/jni/xash3d/xash3d-fwgs/engine/platform/sdl2/joy_sdl2.c:346,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:142-151 - Mounted ahead of every game directory from the path in XASH3D_EXTRAS_PAK1. It carries the touch-control textures the mobile build draws and the gamecontrollerdb.txt the SDL joystick layer reads through the virtual filesystem.
cs16client-extras.pk3 optional in repo game_data bundled
Counter-Strike 1.6 client resources for Xash3D
- Path:
xash/cs16client-extras.pk3 - Size: 12.4 MB
- SHA1:
ab0c9f66e9e9... - MD5:
15bf94e95c94... - Source:
Q3E/src/main/jni/xash3d/xash3d-fwgs/filesystem/filesystem.c:1380-1382,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:153-162,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:815-843,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:412 - Extracted right after the base extras and mounted the same way, for the cs16 and cs16_yapb server classes the launcher offers.
extras.zip required in repo game_data bundled
Source engine fonts and platform archive
- Size: 14.4 MB
- SHA1:
388bfce5ba83... - MD5:
15944b906860... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:164-173,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:895-919,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:396 - Unpacked into
files/under the Source standalone directory. It carries the DejaVu, Droid Sans Fallback, Itim and Liberation faces the engine substitutes for the Windows fonts, and extras_dir.vpk.
d3_sabot_a7.pk4 optional in repo game_data bundled
Stupid Angry Bot definitions for DOOM 3 multiplayer
- Path:
doom3/base/zzz_idTech4Amm_d3_sabot_a7.pk4 - Size: 2.3 MB
- SHA1:
8179522bcd5a... - MD5:
494bd9601fc8... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:48-58,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:129-140,README.md:256-259 - Extracted on request into the current mod folder under a name prefixed to sort last. It holds the defs, scripts and multiplayer AAS files the bot commands need. A second entry repacks only the
maps/tree into zzz_idTech4Amm_d3_sabot_a7_aas.pk4 for users who already have the mod.
q4_sabot_a9.pk4 optional in repo game_data bundled
Stupid Angry Bot definitions for Quake 4 multiplayer
- Path:
quake4/q4base/zzz_idTech4Amm_q4_sabot_a9.pk4 - Size: 20.2 MB
- SHA1:
a3af9251c6a2... - MD5:
710997decddd... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:36-46,Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:116-127,README.md:256-259 - The Quake 4 counterpart, extracted the same way, with the same maps-only variant written as zzz_idTech4Amm_q4_sabot_a9_aas.pk4.
play_original_doom3_level.pk4 optional in repo game_data bundled
Rivensin patch restoring the original DOOM 3 levels
- Path:
doom3/rivensin/zzz_idTech4Amm_play_original_doom3_level.pk4 - Size: 16.5 KB
- SHA1:
de368e97ca86... - MD5:
214e3daebf5d... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:60-70 - Extracted on request into the
rivensinmod folder, the one patch tied to a named mod rather than to whichever mod is selected.
doom3_chinese_translation_doom3bfg.pk4 optional in repo game_data bundled
Chinese text and fonts for DOOM 3, taken from the BFG release
- Path:
doom3/base/doom3_chinese_translation_doom3bfg.pk4 - Size: 4.9 MB
- SHA1:
8c06159ab101... - MD5:
4fa638d0accd... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EPatchResourceManager.java:105-114,README.md:37,README.md:168-169 - Copied into the DOOM 3 base folder on request. It pairs with the wide-character language and BFG font support compiled into the engine.
controls_theme.zipak optional in repo bundled
Button image themes carried in the apk
- Size: 3.0 MB
- SHA1:
5be92df9e748... - MD5:
9f6f5073fda9... - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGlobals.java:230,Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:44,Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:102,Q3E/src/main/java/com/n0n3m4/q3e/karin/KFDManager.java:113-129,Q3E/src/main/java/com/n0n3m4/q3e/karin/KFileDescriptor.java:56,Q3E/src/main/java/com/n0n3m4/q3e/karin/KFileDescriptor.java:102 - Read in place from the assets, never extracted. Archives with this suffix are folded into the search path wherever they are found, and the
controls_theme/folders inside become named entries in the theme chooser; this one carries the cs16-client and source-engine sets.
btn_jump.png optional in repo bundled
Default on-screen button images, 52 files
- Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:348-370,idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:167-177 - Read from the assets root when the theme is the built-in one. The set covers the alphabet, the digits and the named actions the games bind, and any of the 52 names can be replaced by putting a file of the same name in one of the external search paths.
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
- Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EInterface.java:722-836,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:63-88,idTech4Amm/src/main/java/com/karin/idTech4Amm/ConfigEditorActivity.java:103 - Executed by the id-derived engines from the mod folder and from the base folder. The launcher lists both positions next to the config file each game writes for itself, DoomConfig.cfg, Quake4Config.cfg, preyconfig.cfg, q3config.cfg, wolfconfig.cfg, Darkmod.cfg, uzdoom.ini and the rest, and opens any of them in its editor. The config files are written by the engines; this one only ever comes from the user.
description.txt optional in repo
Blurb shown for a mod in the chooser
- Source:
idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/ChooseGameModFunc.java:242-251,Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:330-341 - Read from the root of a mod folder when the mod list is built and shown under the folder name with its size. The control theme chooser reads a file of the same name from a theme folder, there with an optional language suffix.
controller_map.txt optional in repo
Extra SDL controller mappings
- Source:
Q3E/src/main/jni/deplibs/SDL2/src/joystick/SDL_gamecontroller.c:1873-1884,Q3E/src/main/jni/deplibs/SDL2/src/joystick/SDL_gamecontroller.c:1890-1916,Q3E/src/main/jni/deplibs/SDL2/include/SDL_version.h:59-61,Q3E/src/main/jni/CMakeLists.txt:90-102,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:430,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameConstants.java:454-461 - SDL builds this path from the internal storage directory of the package when SDL_GAMECONTROLLERCONFIG_FILE is unset, which it is here, and reads it while the game controller subsystem starts, after the compiled-in mappings and before the ones the environment carries. It reaches the six games the app runs on SDL, Xash3D, Source, ECWolf, Skin Deep, Quadrilateral Cowboy and Icarus; the other engines take input from the Q3E frontend instead. The SDL2 tree under deplibs is what the build compiles, version 2.32.5.
controls_theme/<name>/btn_jump.png optional in repo
Button images of a user theme
- Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EContextUtils.java:305-345,idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/SetupControlsThemeFunc.java:136-179 - A folder under
controls_theme/in any search path, or inside a.zipakthere, appears in the chooser under its own name and its images replace the built-in ones. Adescription.txtbeside them, optionally suffixed with a language tag, supplies the name, author and description the chooser shows.
gameaarch64.so optional missing
External idTech 4 mod game library
- Aliases:
gamearm.so - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:342-372,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:429-434,idTech4Amm/src/main/java/com/n0n3m4/DIII4A/launcher/AddExternalLibraryFunc.java:71-86,README.md:229-233,README.md:241-251 - Looked for in the mod folder of DOOM 3, Quake 4, Prey or ETQW when the external-library preference is on, copied to a private cache and named to the engine through harm_fs_gameLibPath. The suffix follows the running architecture, gameaarch64.so on arm64 and gamearm.so on armv7. Without it the engine keeps the game code built into the apk. The launcher also accepts a full path to any libxxxxx.so instead.
server.so optional missing
External Xash3D game libraries
- Aliases:
client.so,menu.so - Source:
Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:373-414,Q3E/src/main/java/com/n0n3m4/q3e/Q3EGameHelper.java:445-475 - Read from
lib/<arch>/inside the Xash3D mod folder when the external-library preference is on, copied to the private cache and passed as the dll, clientlib and menulib parameters with gamelibdir pointing at the cache. The three default names are used unless the command line names others, and any further libraries in the folder are copied alongside.
Generated on 2026-08-23T16:12:06Z