idTech engine games For Android. An idTech games runtime libraries collection on Android
Latest version:
1.1.0harmattan59(natasha)
Latest update:
2024-11-20
Arch:
arm64 armv7-a
Platform:
Android 4.4+
License:
GPLv3
idTech4's feature
- Linux/Windows(MinGW/MSVC(without editor)) build
- multi-threading renderer
- png/dds texture image, jpeg/png/bmp/dds format of screenshot
- obj/dae format static model
- pure soft shadow with shadow-mapping
- soft shadow with stencil-shadow and translucent stencil shadow
- lighting model: Phong/Blinn-phong/PBR/Ambient(no-lighting)
- debug render tools support with programming render pipeline
- OpenGLES2.0/OpenGLES3.0
- OpenAL(soft) and EFX Reverb
- DOOM3(with full body awareness mod)
- Quake4(with bot mod, full body awareness mod) and Raven's idTech4 engine
- Prey(2006)(with full body awareness mod) and HumanHead's idTech4 engine
Build DOOM3/Quake4/Prey(2006) mod for Android idTech4A++
DOOM 3 & RoE SDK
Quake 4 SDK
Prey(2006) SDK
Compare with other OpenGLES rendering version of DOOM3
Feature | idTech4A++ | Other |
---|---|---|
Multi-threading | Support (but can't switch in gaming) |
d3es-multithread support (and support switch in gaming) |
New stage shader (heatHaze, heatHazeWithMask, heatHazeWithMaskAndVertex, colorProcess) |
Yes | - |
TexGen shader | Yes | - |
Shadow mapping for pure soft shadow | Yes | - |
Soft/Translucent stencil shadow | Yes (Soft stencil shadow only support on OpenGLES3.1+) |
- |
OpenGL ES version | 2.0 and 3.0+ (point light shadow mapping shader use cubemap on OpenGLES2.0, use texture array on OpenGLES3.0+) |
2.0(3.0+ compat) |
No lighting | Yes (And support switch in gaming by set harm_r_lightingModel to 0) |
Yes |
Debug render tools | Yes (need to set harm_r_renderToolsMultithread to 1 if with multi-threading) |
- |
PBR lighting model | Yes (using idtech4_pbr. But specular textures are not RMAO format in idTech4 game data) |
- |
Support games
Game | Engine | Version | OpenGL ES version | Mods |
---|---|---|---|---|
DOOM III | n0n3m4's dante | - | 2.0/3.0 | [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 | Hardqore |
Prey(2006) | n0n3m4's dante | - | 2.0/3.0 | |
DOOM 3 BFG(Classic DOOM 1&2) | RBDOOM-3-BFG | 1.4.0 (The last OpenGL renderer version) |
3.0 | |
The Dark Mod | Dark Mod | 2.12 | 3.2 (require geometry shader support) |
|
Return to Castle Wolfenstein | iortcw | - | 1.1 | |
Quake III Arena | ioquake3 | - | 1.1 | Quake III Team Arena |
Quake II | Yamagi Quake II | - | 1.1/3.2 | ctf rogue xatrix zaero |
Quake I | Darkplaces | - | 2.0 | |
GZDOOM | GZDOOM 64bits | - | 3.2 | |
Wolfenstein: Enemy Territory | ET: Legacy Omni-Bot support | 2.8.1 | 1.1 | |
RealRTCW | RealRTCW | 5.0 | 1.1 |
<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80">
Or download the latest APK from the Releases Section.
Tag with -free
only for F-Droid update.
Feature | Github | F-Droid |
---|---|---|
Ouya TV | Yes | No |
Source code in apk | Yes | No |
Testing version(Non-release. Automatic CI building By Github actions when pushing commits)
- idTech4A++ for Android: Android testing.
- DOOM 3/Quake 4/Prey(2006) for Windows x64: Windows x64 testing.
Omni-Bot
in Wolfenstein: Enemy Territory.cg_shadows
= 2 in Wolfenstein: Enemy Territory.harm_r_useHighPrecision
) in DOOM 3/Quake 4/Prey.Phobos(for Dhewm3)
mod of DOOM3 support, game data directory named tfphobos
(d3xp and dhewm3 compatibility patch required). More view in Doom 3: Phobos and Doom 3: Phobos - dhewm3 compatibility patch.Omni-Bot
支持.cg_shadows
= 2.harm_r_useHighPrecision
).Because more support games, it cause all game mods data directory put on a shared folder, them maybe have same name, and diffcult to view/manage. So application default enable Standalone game directory
since version 1.1.0harmattan57, and you can also disable it on launcher settings.
If enable Standalone game directory
, game data directory should put on Standalone game directory
itself(e.g.).
Games of
Standalone game directory
and folder name:
- DOOM III: doom3/
- Quake 4: quake4/
- Prey(2006): prey/
- Quake I: quake1/
- Quake II: quake2/
- Quake III: quake3/
- Return to Castle Wolfenstein: rtcw/
- DOOM 3 BFG: doom3bfg/
- Wolfenstein - Enemy Territory: etw/
- RealRTCW: realrtcw/
Games of always force
Standalone game directory
:
- The Dark Mod: darkmod/
- GZDOOM: gzdoom/
CVar | Type | Default | Description | Flag | Range | Scope | Remark | Platform |
---|---|---|---|---|---|---|---|---|
harm_r_openglVersion | String | GLES3.0 | OpenGL version | INIT | GLES2, GLES3.0 | Engine/Renderer | setup with launcher on Android | Windows, Linux |
harm_r_multithread | Bool | 1 | Multithread backend | INIT | Engine/Renderer | setup with launcher on Android | Windows, Linux | |
harm_r_clearVertexBuffer | Integer | 2 | Clear vertex buffer on every frame | ARCHIVE, FIXED | 0, 1, 2 | Engine/Renderer | 0 = not clear(original); 1 = only free VBO memory; 2 = free VBO memory and delete VBO handle(only without multi-threading, else same as 1) |
All |
harm_r_maxAllocStackMemory | Integer | 524288 | Control allocate temporary memory when load model data | ARCHIVE | Engine/Renderer | For load large model, because stack memory is limited on OS. 0 = Always heap; Negative = Always stack; Positive = Max stack memory limit(If less than this byte value, call alloca in stack memory, else call malloc /calloc in heap memory) |
All | |
harm_r_shaderProgramDir | String | Setup external OpenGLES2 GLSL shader program directory path | ARCHIVE | Engine/Renderer | empty is glslprogs(default) | All | ||
harm_r_shaderProgramES3Dir | String | Setup external OpenGLES3 GLSL shader program directory path | ARCHIVE | Engine/Renderer | empty is glsl3progs(default) | All | ||
harm_r_shadowCarmackInverse | Bool | 0 | Stencil shadow using Carmack-Inverse | ARCHIVE | Engine/Renderer | All | ||
harm_r_lightingModel | Integer | 1 | Lighting model when draw interactions | ARCHIVE | 0, 1, 2, 3 | Engine/Renderer | 1 = Phong(default); 2 = Blinn-Phong; 3 = PBR; 0 = Ambient(no lighting) |
All |
harm_r_specularExponent | Float | 3.0 | Specular exponent in Phong interaction lighting model | ARCHIVE | >= 0.0 | Engine/Renderer | All | |
harm_r_specularExponentBlinnPhong | Float | 12.0 | Specular exponent in Blinn-Phong interaction lighting model | ARCHIVE | >= 0.0 | Engine/Renderer | All | |
harm_r_specularExponentPBR | Float | 5.0 | Specular exponent in PBR interaction lighting model | ARCHIVE | >= 0.0 | Engine/Renderer | All | |
harm_r_normalCorrectionPBR | Float | 1.0 | Vertex normal correction in PBR interaction lighting model | ARCHIVE | [0.0 - 1.0] | Engine/Renderer | 1 = pure using bump texture; 0 = pure using vertex normal; 0.0 - 1.0 = bump texture harm_r_normalCorrectionPBR + vertex normal (1 - harm_r_normalCorrectionPBR) |
All |
r_maxFps | Integer | 0 | Limit maximum FPS. | ARCHIVE | >= 0 | Engine/Renderer | 0 = unlimited | All |
r_screenshotFormat | Integer | 0 | Screenshot format | ARCHIVE | 0, 1, 2, 3, 4 | Engine/Renderer | 0 = TGA (default), 1 = BMP, 2 = PNG, 3 = JPG, 4 = DDS |
All |
r_screenshotJpgQuality | Integer | 75 | Screenshot quality for JPG images | ARCHIVE | [0 - 100] | Engine/Renderer | All | |
r_screenshotPngCompression | Integer | 3 | Compression level when using PNG screenshots | ARCHIVE | [0 - 9] | Engine/Renderer | All | |
r_useShadowMapping | Bool | 0 | use shadow mapping instead of stencil shadows | ARCHIVE | All | Engine/Renderer | All | |
harm_r_shadowMapAlpha | Float | 1.0 | shadow's alpha in shadow mapping | ARCHIVE | [0.0 - 1.0] | Engine/Renderer | All | |
harm_r_shadowMapJitterScale | Float | 2.5 | scale factor for jitter offset | ARCHIVE | Engine/Renderer | All | ||
r_forceShadowMapsOnAlphaTestedSurfaces | Bool | 0 | render performed material shadow in shadow mapping | ARCHIVE, ISSUE | Engine/Renderer | 0 = same shadowing as with stencil shadows, 1 = ignore noshadows for alpha tested materials |
All | |
harm_r_shadowMapLightType | Integer | 0 | debug light type mask in shadow mapping | DEBUG | 0, 1, 2, 3, 4, 5, 6, 7 | Engine/Renderer | 1 = parallel; 2 = point; 4 = spot |
All |
harm_r_shadowMapDepthBuffer | Integer | 0 | render depth to color or depth texture in OpenGLES2.0 | INIT, DEBUG | 0, 1, 2, 3, 4 | Engine/Renderer | 0 = Auto; 1 = depth texture; 2 = color texture's red; 3 = color texture's rgba |
All |
harm_r_shadowMapNonParallelLightUltra | Bool | 0 | non parallel light allow ultra quality shadow map texture | Engine/Renderer | max texture size is 2048x2048 | All | ||
harm_r_shadowMapLod | Integer | -1 | force using shadow map LOD | -1, 0, 1, 2, 3, 4 | Engine/Renderer | -1 = auto | All | |
r_shadowMapFrustumFOV | Float | 90 | oversize FOV for point light side matching | Engine/Renderer | All | |||
harm_r_stencilShadowTranslucent | Bool | 0 | enable translucent shadow in stencil shadow | ARCHIVE | Engine/Renderer | All | ||
harm_r_stencilShadowAlpha | Float | 1.0 | translucent shadow's alpha in stencil shadow | ARCHIVE | [0.0 - 1.0] | Engine/Renderer | All | |
harm_r_stencilShadowCombine | Bool | 0 | combine local and global stencil shadow | ARCHIVE, ISSUE | Engine/Renderer | All | ||
harm_r_stencilShadowSoft | Bool | 0 | enable soft stencil shadow | ARCHIVE | only OpenGLES3.1+ | Engine/Renderer | All | |
harm_r_stencilShadowSoftBias | Float | -1 | soft stencil shadow sampler BIAS | ARCHIVE | Engine/Renderer | -1 to automatic; 0 = disable; positive = value | All | |
harm_r_stencilShadowSoftCopyStencilBuffer | Bool | 0 | copy stencil buffer directly for soft stencil shadow | ARCHIVE | 0 = copy depth buffer and bind and renderer stencil buffer to texture directly 1 = copy stencil buffer to texture directly |
Engine/Renderer | All | |
harm_r_autoAspectRatio | Integer | 1 | automatic setup aspect ratio of view | ARCHIVE | 0, 1, 2 | Engine/Renderer | 0 = manual 1 = force setup r_aspectRatio to -1 2 = automatic setup r_aspectRatio to 0,1,2 by screen size |
Android |
harm_r_renderToolsMultithread | Bool | 0 | Enable render tools debug with GLES in multi-threading | ARCHIVE | Engine/Renderer | All | ||
r_useETC1 | Bool | 0 | use ETC1 compression | INIT | Engine/Renderer | All | ||
r_useETC1cache | Bool | 0 | use ETC1 compression | INIT | Engine/Renderer | All | ||
r_useDXT | Bool | 0 | use DXT compression if possible | INIT | Engine/Renderer | All | ||
r_useETC2 | Bool | 0 | use ETC2 compression instead of RGBA4444 | INIT | Engine/Renderer | Only for OpenGLES3.0+ | All | |
r_noLight | Bool | 0 | lighting disable hack | INIT | Engine/Renderer | 1 = disable lighting(not allow switch, must setup on command line) | All | |
harm_r_useHighPrecision | Bool | Android = 0; Other = 1 | Use high precision float on GLSL shade | INIT | Engine/Renderer | All | ||
harm_fs_gameLibPath | String | Setup game dynamic library | ARCHIVE | Engine/Framework | Android | |||
harm_fs_gameLibDir | String | Setup game dynamic library directory path | ARCHIVE | Engine/Framework | Android | |||
harm_com_consoleHistory | Integer | 2 | Save/load console history | ARCHIVE | 0, 1, 2 | Engine/Framework | 0 = disable; 1 = loading in engine initialization, and saving in engine shutdown; 2 = loading in engine initialization, and saving in every e executing |
All |
r_scaleMenusTo43 | Bool | 0 | Scale menus, fullscreen videos and PDA to 4:3 aspect ratio | ARCHIVE | Engine/GUI | All | ||
s_driver | String | AudioTrack | sound driver | ARCHIVE | AudioTrack, OpenSLES | Engine/Sound | sound if without OpenAL on Android | Android |
harm_s_OpenSLESBufferCount | Integer | 3 | Audio buffer count for OpenSLES | ARCHIVE | >= 3 | Engine/Sound | min is 3, only for if without OpenAL and use OpenSLES on Android | Android |
harm_s_useAmplitudeDataOpenAL | Bool | 0 | Use amplitude data on OpenAL | DISABLE, ISSUE | Engine/Sound | It cause large shake | All | |
harm_in_smoothJoystick | Bool | 0 | Enable smooth joystick | Engine/Input | Automatic setup initial value by Android layer | Android | ||
harm_g_normalizeMovementDirection | Integer | -1 | Re-normalize player/walker movement direction | ARCHIVE | -1, 0, > 0 | Game/DOOM3 | 0 = disable; -1 = automcatic; >0 = max degree | Android |
harm_pm_fullBodyAwareness | Bool | 0 | Enables full-body awareness | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_fullBodyAwarenessOffset | Vector3 String | 0 0 0 | Full-body awareness offset(<forward-offset> <side-offset> <up-offset>) | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_fullBodyAwarenessHeadJoint | String | Head | Set head joint when without head model in full-body awareness | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_fullBodyAwarenessFixed | Bool | 0 | Do not attach view position to head in full-body awareness | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_fullBodyAwarenessHeadVisible | Bool | 0 | Do not suppress head in full-body awareness | ARCHIVE | Game/DOOM3 | All | ||
harm_ui_showViewBody | Bool | 0 | Show view body | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_fullBodyAwarenessFirstPerson | Bool | 0 | Enable first person view in full-body awareness | ARCHIVE | Game/DOOM3 | All | ||
harm_pm_doubleJump | Bool | 0 | Enable double-jump | ARCHIVE | Game/DOOM3/Rivensin | All | ||
harm_pm_autoForceThirdPerson | Bool | 1 | Force set third person view after game level load end | ARCHIVE | Game/DOOM3/Rivensin | All | ||
harm_pm_preferCrouchViewHeight | Float | 32 | Set prefer crouch view height in Third-Person | ARCHIVE | >= 0 | Game/DOOM3/Rivensin | suggest 32 - 39, less or equals 0 to disable | All |
harm_g_normalizeMovementDirection | Integer | -1 | Re-normalize player/walker movement direction | ARCHIVE | -1, 0, > 0 | Game/Quake4 | 0 = disable; -1 = automcatic; >0 = max degree | Android |
harm_pm_fullBodyAwareness | Bool | 0 | Enables full-body awareness | ARCHIVE | Game/Quake4 | All | ||
harm_pm_fullBodyAwarenessOffset | Vector3 String | 0 0 0 | Full-body awareness offset(<forward-offset> <side-offset> <up-offset>) | ARCHIVE | Game/Quake4 | All | ||
harm_pm_fullBodyAwarenessHeadJoint | String | head_channel | Set head joint when without head model in full-body awareness | ARCHIVE | Game/Quake4 | All | ||
harm_pm_fullBodyAwarenessFixed | Bool | 0 | Do not attach view position to head in full-body awareness | ARCHIVE | Game/Quake4 | All | ||
harm_pm_fullBodyAwarenessHeadVisible | Bool | 0 | Do not suppress head in full-body awareness | ARCHIVE | Game/Quake4 | All | ||
harm_pm_fullBodyAwarenessFirstPerson | Bool | 0 | Enable first person view in full-body awareness | ARCHIVE | Game/Quake4 | All | ||
harm_ui_showViewBody | Bool | 0 | Show view body | ARCHIVE | Game/Quake4 | All | ||
harm_g_autoGenAASFileInMPGame | Bool | 1 | For bot in Multiplayer-Game, if AAS file load fail and not exists, server can generate AAS file for Multiplayer-Game map automatic | ARCHIVE | Game/Quake4 | All | ||
harm_g_vehicleWalkerMoveNormalize | Bool | 1 | Re-normalize vehicle walker movement | ARCHIVE | Game/Quake4 | Only for smooth jotstick on DIII4A | Android | |
harm_gui_defaultFont | String | chain | Default font name | ARCHIVE | chain, lowpixel, marine, profont, r_strogg, strogg | Engine/Quake4/GUI | It will be available in next running | All |
harm_si_autoFillBots | Bool | 1 | Automatic fill bots after map loaded in multiplayer game | ARCHIVE | >=0 | Game/Quake4 | 0 = disable; other number = bot num | All |
harm_si_botLevel | Integer | 0 | Bot level | ARCHIVE | [0 - 8] | Game/Quake4 | 0 = auto; 1 - 8 = difficult level | All |
harm_g_mutePlayerFootStep | Bool | 0 | Mute player's footstep sound | ARCHIVE | Game/Quake4 | All | ||
harm_g_normalizeMovementDirection | Integer | -1 | Re-normalize player/walker movement direction | ARCHIVE | -1, 0, > 0 | Game/Prey | 0 = disable; -1 = automcatic; >0 = max degree | Android |
harm_pm_fullBodyAwareness | Bool | 0 | Enables full-body awareness | ARCHIVE | Game/Prey | All | ||
harm_pm_fullBodyAwarenessOffset | Vector3 String | 0 0 0 | Full-body awareness offset(<forward-offset> <side-offset> <up-offset>) | ARCHIVE | Game/Prey | All | ||
harm_pm_fullBodyAwarenessHeadJoint | String | neck | Set head joint when without head model in full-body awareness | ARCHIVE | Game/Prey | All | ||
harm_pm_fullBodyAwarenessFixed | Bool | 0 | Do not attach view position to head in full-body awareness | ARCHIVE | Game/Prey | All | ||
harm_pm_fullBodyAwarenessHeadVisible | Bool | 0 | Do not suppress head in full-body awareness | ARCHIVE | Game/Prey | All | ||
harm_ui_translateAlienFont | String | fonts | Setup font name for automatic translate alien font text of GUI |
ARCHIVE | fonts, fonts/menu, "" | Engine/Prey/GUI | empty to disable | All |
harm_ui_translateAlienFontDistance | Float | 200 | Setup max distance of GUI to view origin for enable translate alien font text |
ARCHIVE | Engine/Prey/GUI | 0 = disable; -1 = always; positive: distance value |
All | |
harm_ui_subtitlesTextScale | Float | 0.32 | Subtitles's text scale | ARCHIVE | Engine/Prey/GUI | <= 0 to unset | All | |
harm_r_skipHHBeam | Bool | 0 | Skip beam model render | DEBUG | Engine/Prey/Renderer | All |
Command | Description | Usage | Scope | Remark | Platform |
---|---|---|---|---|---|
exportGLSLShaderSource | export GLSL shader source to filesystem | Engine/Renderer | Only export shaders of using OpenGLES2.0 or OpenGLES3.0 | All | |
printGLSLShaderSource | print internal GLSL shader source | Engine/Renderer | Only print shaders of using OpenGLES2.0 or OpenGLES3.0 | All | |
exportDevShaderSource | export internal original C-String GLSL shader source for developer | Engine/Renderer | Export all shaders of OpenGLES2.0 and OpenGLES3.0 | All | |
reloadGLSLprograms | reloads GLSL programs | Engine/Renderer | All | ||
convertImage | convert image format | Engine/Renderer | All | ||
r_multithread | print multi-threading state | Engine/Renderer | Only for tell user r_multithread is not a cvar | All | |
glConfig | print OpenGL config | Engine/Renderer | print glConfig variable | All | |
botRunAAS | compiles an AAS file for a map for Quake 4 multiplayer-game | Game/Quake4 | Only for generate bot aas file if map has not aas file | All | |
addBot | adds a new bot | Game/Quake4 | need SABotA9 files | All | |
removeBot | removes bot specified by id (0,15) | Game/Quake4 | need SABotA9 files | All | |
addbots | adds multiplayer bots batch | Game/Quake4 | need SABotA9 files | All | |
fillbots | fill bots | Game/Quake4 | need SABotA9 files | All | |
sabot | debug SaBot info | Game/Quake4 | need SABotA9 files | All |
- Putting PC Prey game data file to
preybase
folder and START directly.- Some problems solution: e.g. using cvar
harm_ui_translateAlienFont
to 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.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"
- Putting PC Quake 4 game data file to
q4base
folder and START directly.- Suggest to extract Quake 4 patch resource to
q4base
game data folder first(in menuOther
->Extract resource
).
SABot a9 mod
multiplayer-game map aas files and bot scripts(for bots in multiplayer-game).
- Particle system: Now is not work(Quake4 using new advanced
BSE
particle system, it not open-source,jmarshall
has realized and added by decompilingETQW
's BSE binary file, also see jmarshall23/Quake4BSE), but it not work yet. Now implementing a OpenBSE with DOOM3 original FX/Particle system, some effects can played, but has incorrect render.- Entity render: Some game entities render incorrect.
- Added SABot a7 mod support.
- Extract
q4base/sabot_a9.pk4
file in apk to Quake4 game data folder, it includes some defs, scripts and MP game map AAS file.- 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 AAS file tomaps/mp
folder(botaas32).- Set
harm_si_autoFillBots
to 1 for automatic fill bots when start MP game.- Execute
addbots
for add multiplayer bot.- Execute
fillbots
for auto fill multiplayer bots.
Game
Mod
Other
- _MULTITHREAD: Add multithread support for rendering.
- _USING_STB: Using stb header for jpeg/png/dds texture image and jpeg/png/bmp/dds screenshot support.
- _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_IMPROVE
first.- _MINIZ: Using miniz instead of zlib, using minizip instead of DOOM3's UnZip(Disabled).
- _USING_STB_OGG: Using stb_vorbis instead of libogg and libvorbis(Disabled).
Quake4
or Prey(2006)
to PC or other platform of based on DOOM3
engine open-source version, because DIII4A based on Android platform and OpenGLES, so has some differences with original version. But I mark some macros in source as patches at all changes, although must find these macros in source code and manual use these patches._RAVEN
, _QUAKE4
is patches macros, find them in DIII4A
source code.raven
folder.
- _RAVEN: for compile
core engine (DOOM3 source code)
andidlib (DOOM3 source code)
.- _QUAKE4: for compile
game (Q4SDK source code)
library.- Build core engine: define macro
_RAVEN
,_RAVEN_FX(OpenBSE if need, unnecessary)
- Build game library: define macro
_RAVEN
,_QUAKE4
About
BSE
Because
BSE
not open-source, so I default supply aNULL
implement and a uncompleted but working implement with DOOM3 Particle/Fx system(using macros_RAVEN_FX
marked).About
BOT
Define macro
MOD_BOTS
will compile SABot a7(from DOOM3) mod source code for bot support in multiplayer-game.About
Full body awareness support
Define macro
_MOD_FULL_BODY_AWARENESS
will compile Full-body-awareness support. Define macro_MOD_VIEW_BODY
will compile view-body support.
_HUMANHEAD
, _PREY
is patches macros, find them in DIII4A
source code.humanhead
folder.
- _HUMANHEAD: for compile
core engine (DOOM3 source code)
andidlib (DOOM3 source code)
.- _PREY: for compile
game (PreySDK source code)
library.- Build core engine: define macro
_HUMANHEAD
- Build game library: define macro
_HUMANHEAD
,_PREY
, and original SDK macrosHUMANHEAD
About
Full body awareness support
Define macro
_MOD_FULL_BODY_AWARENESS
will compile Full-body-awareness support.
__ANDROID__
.
- _OPENSLES: Add OpenSLES support for sound.
- REQUIRE ALSA, zlib, X11, EGL
- ./cmake_linux_build_doom3_quak4_prey.sh
- REQUIRE SDL2, cURL, zlib: vcpkg install SDL2 curl
- Setup your vcpkg.cmake path
- cmake_msvc_build_doom3_quak4_prey.bat
- Copy OpenAL32.dll from vcpkg package path to binary path: vcpkg install OpenAL-Soft
- Declaration player_viewbody
entityDef player_viewbody { // default name is player_viewbody, or setup in player entity with property 'player_viewbody' "spawnclass" "idViewBody" "body_model" "player_model_torso_and_lower_body" // body's md5 model: animations's name same as player model: string "body_offset" "-15 0 0" // extras model offset: vector <forward right up>, default = 0 0 0 "body_allChannel" "0" // play animation with all channels, else only play with legs channel: bool, default = 1 "body_usePlayerModel" "0" // use player model and not use 'body_model': bool, default = 0 // "anim run_forward" "walk_forward" // override model animation name: string, "anim <model animation name>" "<replace animation name>"
// Hide surface only for Quake4
"body_hidesurfaces" "shader_head,shader_toast" // hide surface names, separate by ',': string
"hidesurface1" "shader_arm" // hide surface name by entity property: string, hidesurfaceXXX
"hidesurface5" "shader_neck"
"hidesurface6" "shader_hand"
}
> 2. DOOM3's player view body model declaration(animations name same as idPlayer's model)
// DOOM3 view body model example: model player_model_torso_and_lower_body { offset (0 0 0) model models/md5/player_model_torso_and_lower_body.md5mesh
// loop anims: idle models/md5/player_model_torso_and_lower_body/idle.md5anim run_forward models/md5/player_model_torso_and_lower_body/run_forward.md5anim run_backwards models/md5/player_model_torso_and_lower_body/run_backwards.md5anim run_strafe_left models/md5/player_model_torso_and_lower_body/run_strafe_left.md5anim run_strafe_right models/md5/player_model_torso_and_lower_body/run_strafe_right.md5anim walk models/md5/player_model_torso_and_lower_body/walk.md5anim walk_backwards models/md5/player_model_torso_and_lower_body/walk_backwards.md5anim walk_strafe_left models/md5/player_model_torso_and_lower_body/walk_strafe_left.md5anim walk_strafe_right models/md5/player_model_torso_and_lower_body/walk_strafe_right.md5anim crouch models/md5/player_model_torso_and_lower_body/crouch.md5anim crouch_walk models/md5/player_model_torso_and_lower_body/crouch_walk.md5anim crouch_walk_backwards models/md5/player_model_torso_and_lower_body/crouch_walk_backwards.md5anim fall models/md5/player_model_torso_and_lower_body/fall.md5anim
// single anims: crouch_down models/md5/player_model_torso_and_lower_body/crouch_down.md5anim crouch_up models/md5/player_model_torso_and_lower_body/crouch_up.md5anim run_jump models/md5/player_model_torso_and_lower_body/run_jump.md5anim jump models/md5/player_model_torso_and_lower_body/jump.md5anim hard_land models/md5/player_model_torso_and_lower_body/hard_land.md5anim soft_land models/md5/player_model_torso_and_lower_body/soft_land.md5anim }
> 3. Quake4's player view body model declaration(animations name same as idPlayer's model)
// Quake4 view body model example: model player_model_torso_and_lower_body { offset (0 0 0) model models/md5/player_model_torso_and_lower_body.md5mesh
// loop anims: idle models/md5/player_model_torso_and_lower_body/idle.md5anim run_forward models/md5/player_model_torso_and_lower_body/run_forward.md5anim run_backwards models/md5/player_model_torso_and_lower_body/run_backwards.md5anim run_strafe_left models/md5/player_model_torso_and_lower_body/run_strafe_left.md5anim run_strafe_right models/md5/player_model_torso_and_lower_body/run_strafe_right.md5anim walk_forward models/md5/player_model_torso_and_lower_body/walk_forward.md5anim walk_backwards models/md5/player_model_torso_and_lower_body/walk_backwards.md5anim walk_left models/md5/player_model_torso_and_lower_body/walk_left.md5anim walk_right models/md5/player_model_torso_and_lower_body/walk_right.md5anim crouch models/md5/player_model_torso_and_lower_body/crouch.md5anim crouch_walk models/md5/player_model_torso_and_lower_body/crouch_walk.md5anim crouch_walk_backward models/md5/player_model_torso_and_lower_body/crouch_walk_backward.md5anim fall models/md5/player_model_torso_and_lower_body/fall.md5anim
// single anims: crouch_down models/md5/player_model_torso_and_lower_body/crouch_down.md5anim crouch_up models/md5/player_model_torso_and_lower_body/crouch_up.md5anim run_jump models/md5/player_model_torso_and_lower_body/run_jump.md5anim jump models/md5/player_model_torso_and_lower_body/jump.md5anim hard_land models/md5/player_model_torso_and_lower_body/hard_land.md5anim soft_land models/md5/player_model_torso_and_lower_body/soft_land.md5anim }
----------------------------------------------------------------------------------
### About:
* Source in `assets/source` folder in APK file.
* Using `exportGLSLShaderSource` command can export GLSL shaders.
----------------------------------------------------------------------------------
### Branch:
> `master`:
> * /idTech4Amm: frontend source
> * /Q3E /Q3E/src/main/jni/doom3: game source
> * /CHECK_FOR_UPDATE.json: Check for update config JSON
> `free`:
> * For F-Droid pure free version.
> `package`:
> * /screenshot: screenshot pictures
> * /source: Reference source
> * /pak: Game resource
> `n0n3m4_original_old_version`:
> * Original old `n0n3m4` version source.
----------------------------------------------------------------------------------
### Extras download:
* [Baidu网盘: https://pan.baidu.com/s/1hXvKmrajAACfcCj9_ThZ_w](https://pan.baidu.com/s/1hXvKmrajAACfcCj9_ThZ_w) 提取码: `pyyj`
* [Baidu贴吧: BEYONDK2000](https://tieba.baidu.com/p/6825594793)
* [F-Droid(different signature)](https://f-droid.org/packages/com.karin.idTech4Amm/)
----------------------------------------------------------------------------------
### Open source licence
> Game engine
* DOOM 3: GPLv3
* Quake4 SDK
* Prey SDK
* RBDOOM-3-BFG
* TheDarkMod
* ioq3
* iortcw
* yQuake2
* Darkplaces
* GZDOOM
* ETLegacy
* RealRTCW
> Library(Source)
* cJSON
* curl: The curl license
* etc2comp
* flac: GNU Free Documentation License / GNU GENERAL PUBLIC LICENSE Version 2 / GNU LESSER GENERAL PUBLIC LICENSE Version 2.1 / BSD-3-Clause license
* fluidsynth
* freetype: The FreeType License / The GNU General Public License version 2
* iconv
* irrxml
* libjpeg
* libogg
* libpng
* libsndfile
* libvorbis
* lua
* mbedtls
* miniz
* minizip
* mp3lame
* mpg123
* oboe
* Omni-Bot
* openal-soft
* openssl
* opus
* pugixml
* soil
* sqlite
* stb
> Library(Binary)
* ffmpeg-mobile
----------------------------------------------------------------------------------