DarkPlaces is a game engine based on the Quake 1 engine by id Software. It improves and builds upon the original 1996 engine by adding modern rendering features, and expanding upon the engine's native game code language QuakeC, as well as supporting additional map and model formats.
Developed by LadyHavoc. See CREDITS for a list of contributors.
Linux x86_64 builds are available in GitHub CI artifacts.
More complete builds are available in xonotic.org engine zips.
These support Windows, Linux and macOS, and include the current libraries needed for all features.
DarkPlaces supports many Quake-based games and you can select which it will run by renaming the executable so it's prefixed with the game's name, for example rogue-sdl.exe
, or by passing a cmdline argument
such as -rogue
. This changes various engine behaviours and cvar defaults to suit the game.
The supported list and related details are defined in com_game.c.
Mods which aren't listed there can be run with (for example) -game quake15
in which case DP will use the same behaviours and cvar defaults as for id1 Quake.
All of Quake's data access is through a hierarchical file system, the contents of the file system can be transparently merged from several sources.
The "base directory" is the path to the directory holding the quake.exe and all game directories. This can be overridden with the "-basedir" command line parm to allow code debugging in a different directory. The base directory is only used during filesystem initialization.
The "game directory" is the first tree on the search path and directory that
all generated files (savegames, screenshots, demos, config files) will be
saved to. This can be overridden with the "-game" command line parameter.
If multiple "-game
These instructions are adequate for Quake, but for Xonotic please refer to its wiki.
The minimum SDL version is 2.0.18 for Linux and 2.24.0 for Windows.
The supported compilers are GCC and Clang.
The following package names are for Debian, see below for Windows and Mac.
Build (mandatory): build-essential
libjpeg-dev
libsdl2-dev
Runtime (optional): libcurl
libpng
libfreetype6
libvorbisfile
Build (mandatory): build-essential
libjpeg-dev
zlib1g-dev
Runtime (optional): libcurl
libpng
pacman -S --needed gcc make mingw-w64-x86_64-{toolchain,libjpeg-turbo,libpng,libogg,libvorbis,SDL2}
xcode-select --install
brew install sdl2 libjpeg-turbo libpng libvorbis curl
From a terminal, in the engine's root directory, input make help
to list the targets.
To build the main executable, input make sdl-release
which creates the file called
darkplaces-sdl
or darkplaces-sdl.exe
(Windows).
If you get errors (that don't seem to be about missing dependencies) try make clean
before compiling, especially if you updated your system since the last time you compiled.
Not recommended due to poor support for C standards, and lack of maintenance.
DarkPlaces requires C11, so Windows SDK 10.0.20348.0 or later is needed.
To install it, run the Visual Studio Installer, click "Modify", click "Individual components", type "Windows SDK" in the search box, select the latest Windows SDK and de-select older versions.
You will also need "NuGet package manager" selected (to download SDL2 headers the first time you build).
Click "Modify" to apply the changes.
Open darkplaces-vs2019.sln
, select build type (Debug
or Release
) and platform (Win32
or x64
), and choose "Build Solution" from the "Build" menu to create files darkplaces-sdl2-vs2019.exe
and SDL2.dll
.
The Release build crashes. The Debug x64 build doesn't crash (but is rather slow) so this will be Fun for someone to debug.
To get a build suitable for playing you'll need to use MinGW GCC, or download the autobuild from Xonotic (see above).
Note that this requires a linux device or WSL2.
make emscripten-release
darkplaces-wasm.js
, wasm/index.html
, and wasm/autoexec.cfg
files to your web serverpak0.pak
and any other files into the same web server directoryFor the standalone version (single HTML file containing engine and data):
wasm/preload
(for example, pak0 from Quake would be in wasm/preload/id1/pak0.pak
)make emscripten-standalone
em_upload
in the darkplaces console (upload to /save if you want it to save across restarts)em_save
(note that if you embedded the game, you won't be able to save changes to /save/games
)DarkPlaces Contributing Guidelines