idTech engine games For Android. An idTech games runtime libraries collection on Android
Latest version:
1.1.0harmattan58(natasha)
Latest update:
2024-10-29
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 |
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 | 2.8.1 | 1.1 | |
RealRTCW | RealRTCW | 5.0 | 1.1 |
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.
- Add
RealRTCW
(ver 5.0) support, game standalone directory namedrealrtcw
, game data directory namedMain
. More view in RealRTCW. - Fix light bar indicator of player's HUD by
darkness257
on The Dark Mod, now setuptdm_lg_weak
to 1 automatically. More view in The Darkmod light bar indicator bug. - Support create desktop shortcut for games or current command on
Option
menu of launcher. - Fix stencil shadow with
cg_shadows
= 2 on Quake 3. - Improve stencil shadow with
cg_shadows
= 2 on RealRTCW.
- 新增
真·重返德军总部
(ver 5.0)支持, 游戏独立文件夹名为etw
, 游戏数据文件夹为Main
. 更多详情RealRTCW. - The Dark Mod修复玩家HUD上的亮度指示条 by
darkness257
, 当前自动设置tdm_lg_weak
为1. 更多详情The Darkmod light bar indicator bug. - 启动器
Option
菜单增加以游戏或当前命令行来创建桌面快捷方式. - 修复雷神之锤3的模板阴影当
cg_shadows
= 2. - 改进真·重返德军总部的模板阴影当
cg_shadows
= 2.
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/
- ARCHIVE = save to/load from config file
- FIXED = can't change in game
- READONLY = readonly, always can't change
- INIT = only setup on boot command
- ISSUE = maybe has bugs
- DEBUG = only for developer debug and test
- DISABLE = only for disable something and keep original source code
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 | 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_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"
For playing Quake 4(jmarshall 's Quake4Doom). Now can play all levels, but some levels has bugs.
- 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
- idTech4A++ using std libc's malloc/free in Mem_Alloc/Mem_Free in idlib/Heap.cpp
- idTech4A++ force using generic SIMD, not compile all SIMD of processor in all platform(TODO: enable them on windows/Linux)
- _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).
If want to port 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.
And for keeping original DOOM3 source file structures, for all new source files, I put them on a new folder, and in these folder has same directory structure with DOOM3(e.g. framework, renderer, idlib...).
- _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
Because BSE
not open-source, so I default supply a NULL
implement and a uncompleted but working implement with DOOM3 Particle/Fx system(using macros _RAVEN_FX
marked).
Define macro MOD_BOTS
will compile SABot a7(from DOOM3) mod source code for bot support in multiplayer-game.
Define macro _MOD_FULL_BODY_AWARENESS
will compile Full-body-awareness support.
Define macro _MOD_VIEW_BODY
will compile view-body support.
- _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
Define macro _MOD_FULL_BODY_AWARENESS
will compile Full-body-awareness support.
- _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"
}
- 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
}
- 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
}
- Source in
assets/source
folder in APK file. - Using
exportGLSLShaderSource
command can export GLSL shaders.
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.
- Baidu网盘: https://pan.baidu.com/s/1hXvKmrajAACfcCj9_ThZ_w 提取码:
pyyj
- Baidu贴吧: BEYONDK2000
- F-Droid(different signature)
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
- openal-soft
- openssl
- opus
- pugixml
- soil
- sqlite
- stb
Library(Binary)
- ffmpeg-mobile