Yay, you found out the secrit location to download the sauce code from!
Right, urm, now what? Yeah, good question.
Urm.
Welcome to the building guide for FTEQW, as there are many systems supported, there is a number of ways to build the engine.
This should cover most, if not all the supported systems and methods.
- Repo Layout
- Compiling
- Easy Build Bot System (Linux)
- Windows Systems (cygwin)
- Linux/BSD Systems
- Android (FTEDroid) with cygwin
- Browser (emscripten)
- FTEQCC
- FTEIMG
- FTEIQM
- FTEQTV
- Plugins
-
.github/workflows:Github Actions source files. -
documentation:General help and introduction. -
engine:FTEQW game engine itself. Both client and dedicated server. -
engine/release:The Makefile writes its release-build binaries here. Intermediate files are contained within a sub-directory. -
engine/debug:The Makefile writes its debug-build binaries here. Intermediate files are contained within a sub-directory. -
fteqtv:The QTV proxy server program. -
plugins:several optional plugins that do various interesting things, though not so interesting. -
q3asm2:Spike's quick hack at a QVM Assembler which is not horribly slow. Ignore it. -
quakec:Various QuakeC mods. Some interesting, some not. -
quakec/basemod:TimeServ's attempt to bugfix and modify vanilla Quake. -
quakec/csaddon:In-game CSQC-controlled editors. Currently contains the camquake featureset (thanks Jogi), rtlights editor, terrain editor ui, particle editor. -
quakec/csqctest:Spike's CSQC sample mod. Originally created as a feature testbed for the CSQC API. Useful as a reference/sample, but you perhaps don't want to use it as a base. -
specs:Modder/Advanced documentation and samples.
Compiling FTEQW is straightforward once you have the bare minimum of build dependencies (see Dependencies.md for more info).
For the binaries hosted here, we choose to statically link against many of the dependencies for portability reasons, while also linking against recent versions of libc for security reasons.
All binaries hosted here were built inside the engine dir of the src tree using GNU make, aka gmake.
You have the choice of two build systems:
- Make
- CMake
This guide will show commands for both.
If you want to set up a Linux box that cross-compiles each target with your own private customisations, then you can run the build_setup.sh script to set up which targets you wish to support.
You can then just run the build_wip.sh script any time your code changes to have it rebuild every target you previously picked.
The setup script will install android+emscripten dependancies for you, so you're likely to find this an easier way to deal with those special targets.
-
The Android SDK can be a big download, while installing emscripten may require several hours to compile clang and about 40gb of disk space if emscripten doesn't provide prebuilt stuff for your distro.
-
The script can also be run from cygwin, but does not support compiling for Linux then.
If you want to compile a Win64 build in cygwin, it should be as simple as:
make makelibs FTE_TARGET=win64
make gl-rel FTE_TARGET=win64
or to compile using the msvc toolchain that comes with Visual Studio, install the vcpkg depencies listed in the root of the repo using vcpkg the build using CMake:
# set VCPKG_DIR to wherever you've cloned VCPKG...
call "%VCPKG_DIR%\bootstrap-vcpkg.bat" -disableMetrics
"%VCPKG_DIR%\vcpkg.exe" install --triplet x64-windows --x-manifest-root="%FTEQW_DIR%"
cmake --build --preset windows-vs2026-full-allbuild
The preset used above presumes VS2026. If you can compile with a different generator, feel free to submit a new preset for it in CMakePresets.json.
You only should need gcc and make installed in cygwin for this.
It's currently not recommended to build using MSYS2, due to issues with zlib.
It's usually as straight-forward as:
make makelibs
make m-rel
or
TODO
-
You can also change
FTE_TARGETto bewin32,SDL2and on Linux systemslinux32andlinux64. -
On BSD, you don't need to pass anything specific, but they should also compile the
linuxtargets as well as theSDL2target fine. -
Not building with
makelibswill attempt to dynamically link against your system-level versions of dependencies. Sometimes you want this, sometimes you don't. You definitely want that if you're trying to link against the Steam runtime.
make vk-rel
make gl-rel
make glcl-rel
make mingl-rel
make mcl-rel
make d3d-rel
The phone port requires the Android SDk and can be compiled with the following command:
make droid-rel PATH=C:\Cygwin\bin\ DROID_SDK_PATH=/path/to/android-sdk DROID_NDK_PATH=/path/to/android-ndk-r7 ANT=/path/to/apache-ant-1.8.2/bin/ant JAVATOOL="/path/to/jdk1.7.0_02/bin/" DROID_ARCH="armeabi x86" -j4 DROID_PACKSU=/path/to/pak0.pak
or
-DFTE_ENGINE_FTEDROID=TRUE
On Linux/Unix systems you can omit the PATH, ANT, and JAVATOOL parts as they should already be in the path.
The DROID_PACKSU part is used to include the PAK file within the android package. Ideally you would use a PK3 file instead.
Also you would use something that will not violate id Software's copyright. THIS IS AN EXAMPLE ONLY. You can omit the setting entirely if you require the user to provide their own packages.
Finally, install the FTEDroid.apk file on your Android device which should be located under the release folder.
-
There is no way to install the package with a different name at this time.
-
Touchscreen controls are built-in.
-
The APK looks for game data under:
Android/data/com.fteqw/files
-
Configs may be located at:
/fte
or
sdcard/fte
make FTE_TARGET=web web-rel
or
-DFTE_PLUG_CEF=TRUE
make qcc-rel
or
-DFTE_TOOL_QCC=TRUE
make qccgui-rel
or
-DFTE_TOOL_QCCGUI=TRUE
TODO
or
-DFTE_TOOL_QCVM=TRUE
make sv-rel
or
FTE_ENGINE_SERVER_ONLY=TRUE
make master-rel
or
-DFTE_TOOL_MASTER=TRUE
make imgtool-rel
or
-DFTE_TOOL_IMAGE=TRUE
make iqm-rel
or
-DFTE_TOOL_IQM=TRUE
make qtv-rel
or
-DFTE_TOOL_QTV=TRUE
make httpserver
or
-DFTE_TOOL_HTTPSV=TRUE
To build all currently stable plugins, it's as simple as:
make plugins-rel
or
TODO
You can specify which plugins get compiled by passing PLUGINS_NATIVE as an example:
make plugins-rel NATIVE_PLUGINS="ffmpeg bullet irc"
or
-DFTE_PLUG_FFMPEG=TRUE
-DFTE_PLUG_BULLET=TRUE
-DFTE_PLUG_IRC=TRUE
The list of available plugins:
Important
Some plugins will require additional dependencies or flags on some systems, see Dependencies.md for more info.
- Bullet Physics
Provides Rigid Body Physics.
bullet
-DFTE_PLUG_BULLET=TRUE
- Call of Duty (1 & 2) Format Support
Provides compatability with Call Of Duty's file formats.
cod
-DFTE_PLUG_COD=TRUE
- EzHUD
Provides compat with ezquake's hud scripts.
ezhud
-DFTE_PLUG_EZHUD=TRUE
- FFMPEG Video Decoding & RTMP Streaming
Provides support for more audio formats, as well as video playback and better capture support.
ffmpeg
-DFTE_PLUG_FFMPEG=TRUE
- GnuTLS
Provides GnuTLS support for dtls/tls/https support. The crypto library that is actually used is controlled via the tls_provider cvar.
gnutls
-DFTE_PLUG_GNUTLS=TRUE
- Half-Life 2
Adds support for reading various file formats used by Half-Life 2.
hl2
-DFTE_PLUG_HL2=TRUE
- IRC
Allows you to chat on IRC without tabbing out.
irc
-DFTE_PLUG_IRC=TRUE
- libcef(Browser) Plugin
This plugin provides support for an in-game web browser.
libcef
-DFTE_PLUG_CEF=TRUE
- Name Maker Plugin
Provides a lame UI for selecting arbitrary non-ascii glyphs as part of your nickname.
namemaker
-DFTE_PLUG_NAMEMAKER=TRUE
- MPQ Archive Plugin
Adds support for reading .mpq files (Diablo 1 + 2, World of Warcraft).
mpq
-DFTE_PLUG_MPQ=TRUE
- ODE Physics
Provides Rigid Body Physics behaviours.
ode
-DFTE_PLUG_ODE=TRUE
- OpenSSL
Provides OpenSSL support for dtls/tls/https support. The crypto library that is actually used is controlled via the tls_provider cvar.
openssl
-DFTE_PLUG_OPENSSL=TRUE
- OpenXR Support
Provides support for Virtual Reality headsets and input devices.
openxr
-DFTE_PLUG_OPENXR=TRUE
- Quaddicted Map Database (Quake Injector)
Provides easy access to the quaddicted map database. Once installed you can use eg 'map qi_dopa:start' to begin playing dopa, or load it via the menus.
qi
-DFTE_PLUG_QI=TRUE
- Quake 3 Game Logic and VM Support
Provides compatability with Quake3's gamecode.
quake3
-DFTE_PLUG_QUAKE3=TRUE
- TerrainGen Plugin
A lame example plugin for randomised terrain generation.
terraingen
-DFTE_PLUG_TERRAINGEN=TRUE
- Timidity Plugin
Provides support for playback of midi files.
timidity
-DFTE_PLUG_TIMIDITY=TRUE
- XMPP/Jabber Protocol Support
XMPP/Jabber instant messenger plugin for chatting without tabbing out.
xmpp
-DFTE_PLUG_XMPP=TRUE
- X11 Display Server (Standalone)
Provides a primitive X11 server in the form of a video decoder plugin.
x11server
-DFTE_PLUG_X11SV=TRUE