Get the idTech3 engine running with game data in a few steps.
Get the latest release from Releases. Download the archive for your platform:
| Platform | Archive |
|---|---|
| Linux x86_64 | idtech3-<tag>-linux-x86_64.zip |
| Linux ARM64 (aarch64) | idtech3-<tag>-linux-aarch64.zip |
| Linux ARMv7 | idtech3-<tag>-linux-armv7.zip |
| Windows x64 (MSVC) | idtech3-<tag>-windows-msvc-x86_64.zip |
| Windows ARM64 (MSVC) | idtech3-<tag>-windows-msvc-arm64.zip |
| Windows x64 (MinGW) | idtech3-<tag>-windows-gcc-x86_64.zip |
| macOS Apple Silicon | idtech3-<tag>-macos-aarch64.zip |
| Android arm64-v8a | idtech3-<tag>-android-arm64-v8a.zip |
| Android armeabi-v7a | idtech3-<tag>-android-armeabi-v7a.zip |
Binaries are built by CI when a release is published; allow 15–30 minutes after publishing for all platform archives to appear.
Extract the archive. You should see:
idtech3(oridtech3.exeon Windows) - game clientidtech3_server(oridtech3_server.exe) - dedicated server- Linux:
idtech3_vulkan.so/idtech3_opengl.so- renderer plugins (when built withUSE_RENDERER_DLOPEN) - Windows (MSYS2/MinGW zip from CI): same
.exenames plus several.dllfiles (SDL2, OpenAL Soft viaOpenAL32.dll+soft_oal.dll, MinGW runtime). Keep them in the same folder as the executables. OpenAL does not require a separate Creative/OpenAL installer for these builds. - Windows (MSVC zip, x64): CI may ship OpenAL Soft router DLLs next to the
.exe(OpenAL32.dll+soft_oal.dll+OpenAL-Soft-COPYING.txt) for users who run a CMake/MinGW-style client build linked against OpenAL, or who drop in an OpenAL-linkedidtech3.exe. The stock MSVCquake3e.vcxprojclient does not compile insnd_backend_openal.c, so out of the box it uses WASAPI / DirectSound (win_snd.c,s_driver/s_openalhas no effect there). Windows MSVC ARM64 zips omit the OpenAL Soft bundle: upstream *openal-soft -bin.zip has no WinARM64soft_oal.dll, and the MSVC client is not an OpenAL build—use WASAPI (default on Win7+) or DirectSound for audio.
The engine needs game data (maps, textures, sounds). You must provide a compatible game base, for example:
Smallest valid tree (bootstrap / tech demo): at least one .pk3 under base/ (or your fs_basegame folder) that contains default.cfg and loads as a non-empty archive—see MINIMAL_GAME_SHELL.md.
- Quake III Arena - copy or symlink the
baseq3folder from your Q3A installation into the engine directory - Open Arena or other Q3-based games - same idea: the engine expects a
baseq3(orbase) folder with.pk3files
Typical layout:
idtech3/
├── idtech3
├── idtech3_server
├── idtech3_vulkan.so
├── idtech3_opengl.so
└── baseq3/ ← your game data
├── pak0.pk3
├── pak1.pk3
└── ...
Client (requires display and GPU):
./idtech3Dedicated server:
./idtech3_server +set dedicated 1 +set com_hunkMegs 128If you build the engine from this repository, you can use the idtech3_demo config mod without editing C code:
./examples/demo_game/build_demo_pack.sh- buildsidtech3_demo.pk3- Put your licensed game
.pk3files underexamples/demo_skeleton/base/ - Copy the
.pk3toexamples/demo_skeleton/idtech3_demo/idtech3_demo.pk3, or run./examples/demo_skeleton/setup_demo_layout.sh - From the repo root:
./scripts/run_demo.sh
Full walkthrough, baseq3 layouts, and troubleshooting: examples/demo_skeleton/README.md.
The default renderer is Vulkan. To use OpenGL instead:
./idtech3 +set cl_renderer openglPBR (Physically Based Rendering) is on by default when using Vulkan with FBO. Ensure r_fbo 1 (default) and r_pbr 1 (default). If PBR is disabled at startup, the console will show why (e.g. "requires r_fbo 1"). Use vid_restart after changing these.
Optional Forward+ scaffolding (Vulkan, advanced): r_forwardPlus 1 (default 0, latched; vid_restart to toggle) enables GPU light records + per-tile compute cull and optional PBR debug/shade cvars—see RENDERERS.md and the pipeline audit FORWARD_PLUS_PIPELINE_AUDIT.md. When many lights overlap a tile, r_forwardPlusLuminanceSort (default 1) keeps the brightest by RGB sum up to r_forwardPlusMaxPerTile.
When running under Steam on Steam Deck, the engine auto-detects the device and loads base/steamdeck.cfg (gamepad enabled, Vulkan, 60 FPS cap). Ensure steamdeck.cfg exists in your base folder. Build with -DUSE_STEAM=ON -DSTEAMWORKS_SDK=/path/to/sdk for full Steam API support.
For full compatibility (Vulkan + video codecs), run the setup script before building:
./scripts/setup_rpi_full.sh
./scripts/compile_engine.sh vulkan
./release/run_vulkan.shSee ARM_RASPBERRY_PI.md for details.
- "No game data" - Ensure
baseq3/(orbase/) exists with at least one.pk3file. - Black screen / no render - Try OpenGL:
+set cl_renderer opengl - Solid color / dark brown / dark green / no UI - Ensure FBO is enabled:
+set r_fbo 1and runvid_restart. If still broken, tryr_exposure_auto 0,r_volumetricFog 0, thenvid_restart. As last resort,r_fbo 0disables HDR/post-processing. - Missing libraries - On Linux, install SDL2, OpenAL, and Vulkan drivers for your GPU. On Windows, if you copied only
idtech3.exeout of a MinGW build folder, restore the accompanying.dllfiles from the same archive or re-run./scripts/stage_mingw_runtime_dlls.sh binfrom an MSYS2 MINGW64 shell after copying binaries intobin/. - Native game DLLs not found - The engine looks under
baseq3/baseinmodules/andvm/(and the gamedir root as a legacy fallback). It tries several basename patterns per slot (ui.so/ui.x86_64.dll/uix86_64.dll, etc.) and alternate logical names for some VMs. If a module exists only inside a.pk3, enablecom_nativeLibraryExtractPk3(1 by default): the engine copies it tovm/native_cache/under your game home path, then loads it. If load still fails, run with+set com_nativeLibraryDebug 1to print the full path and the OS loader error for each attempt. Details: ARCHITECTURE.md#native-game-modules-vm.