Home

Awesome

🌋 vkQuake + C3

vkQuake is a port of id Software's Quake using Vulkan instead of OpenGL for rendering. It is based on the popular QuakeSpasm and QuakeSpasm-Spiked ports and runs all mods compatible with QuakeSpasm like Arcane Dimensions.

Compared to QuakeSpasm vkQuake also features a software Quake like underwater effect, has better color precision, generates mipmap for water surfaces at runtime and has native support for anti-aliasing and AF. Due to the port using Vulkan and other optimizations it can also achieve much better frame rates. Code ported from QuakeSpasm-Spiked makes it possible to run the game at over 72FPS without breaking physics.

It adds a small amount of C3 code converted from the C code to demonstrate C ABI compatibility.

Using C3

Currently the Makefile assumes the presence of C3 in ~/bin/c3/ and it only actually compiles a single C3 file. This is tested and works on MacOS. Other platforms should be similar.

Installation

Windows

Copy all files inside the vkquake-<version>_win64 or vkquake-<version>_win32 folder in the zip to the Quake base directory. Overwrite any existing files. Afterward to run the game just execute vkQuake.exe.

Linux

Copy all files inside the vkquake-<version>-linux64 folder in the tar archive to the Quake base directory. Overwrite any existing files. Run vkquake.AppImage.

Note: Make sure all data files are lowercase, e.g. "id1", not "ID1" and "pak0.pak", not "PAK0.PAK". Some distributions of the game have upper case file names, e.g. from GOG.com.

Vulkan

vkQuake shows basic usage of the API. For example it demonstrates render passes & sub passes, pipeline barriers & synchronization, compute shaders, push & specialization constants, CPU/GPU parallelism and memory pooling.

Building

Windows

Prerequisites:

Start Git Bash and clone the vkQuake repo:

git clone https://github.com/Novum/vkQuake.git

Visual Studio

Install Visual Studio Community with Visual C++ component.

Open the Visual Studio solution, Windows\VisualStudio\vkquake.sln, select the desired configuration and platform, then build the solution.

MinGW

Setup your MinGW-w64 environment, e.g. using w64devkit or MSYS2.

Build 32 bit (x86) vkQuake:

cd vkQuake/Quake
make -f Makefile.w32

Build 64 bit (x64) vkQuake:

cd vkQuake/Quake
make -f Makefile.w64

If you are on Linux and want to cross-compile for Windows, see the build_cross_win??.sh scripts.

Linux

Make sure that both your GPU and your GPU driver supports Vulkan.

To compile vkQuake, first install the build dependencies:

Ubuntu:

apt-get install git make gcc libsdl2-dev libvulkan-dev libvorbis-dev libmad0-dev libx11-xcb-dev

Arch Linux:

pacman -S git flac glibc libgl libmad libvorbis libx11 sdl2 vulkan-validation-layers

* Please note that for vkquake > v0.50, you will need at least v1.0.12.0 of libvulkan-dev (See #55).

Then clone the vkQuake repo:

git clone https://github.com/Novum/vkQuake.git

Now go to the Quake directory and compile the executable:

cd vkQuake/Quake
make

Note

vkQuake 0.97 and later requires at least SDL2 2.0.6 with enabled Vulkan support. The precompiled versions in some of the distribution repositories (e.g. Ubuntu) do not currently ship with Vulkan support. You will therefore need to compile it from source. Make sure you have libvulkan-dev installed before running configure.

MacOS

To compile vkQuake, first install the build dependencies with Homebrew:

brew install molten-vk vulkan-headers sdl2 libvorbis flac mad

Then clone the vkQuake repo:

git clone https://github.com/Novum/vkQuake.git

Now go to the Quake directory and compile the executable:

cd vkQuake/Quake
make

Usage

Quake has 4 episodes that are split into 2 files:

These files aren't free to distribute, but pak0.pak is sufficient to run the game and it's freely available via the shareware version of Quake. Use 7-Zip or a similar file archiver to extract quake106.zip/resource.1/ID1/PAK0.PAK. Alternatively, if you own the game, you can obtain both .pak files from its install media.

Now locate your vkQuake executable, i.e. vkQuake.exe on Windows or vkquake on Ubuntu. You need to create an id1 directory next to that and copy pak0.pak there, e.g.:

Then vkQuake is ready to play.

Optional - Music / Soundtrack

The original quake had a great soundtrack by Nine Inch Nails. Unfortunately, the Steam version does not come with the soundtrack files. The GOG-provided files need to be converted before they are ready for use. In general, you'll just need to move a "music" folder to the correct location within your vkQuake installation (.e.g /usr/share/quake/id1/music). Most Quake engines play nicest with soundtracks placed in the id1/music subfolder vs. sound\cdtracks

QuakeSpasm, the engine vkQuake is derived from, supports OGG, MP3, FLAC, and WAV audio formats. The Linux version of QuakeSpasm/VkQuake requires external libraries: libogg or libvorbis for OGG support, libmad or libmpg123 for MP3, and libflac for FLAC. If you already have a setup that works for the engine you're currently using, then you don't necessarily have to change it.

To convert the WAV files to FLAC, run this command with libflac and sox installed in a directory containing the WAV files:

for f in *.wav; do sox "$f" "${f%.wav}.flac"; done

Generally, the below setup works for multiple engines, including Quakespasm/vkQuake:

See more: Quake Soundtrack Solutions (Steam Community)