Q2PRO is an enhanced Quake 2 client and server for Windows and Linux. Supported features include:


Q2PRO doesn’t have releases. It is always recommended to use the latest nightly build linked below. These builds are regenerated automatically once a commit is made into the git repository.

Linux client binaries are not provided. Users are advised to build from source. See INSTALL file inside the source tarball for instructions.

Archived builds

For historical and testing purposes, some older builds are available here.


Latest development source code can be obtained from Q2PRO github.com page. You can also report issues you have with the latest code there. This site also hosts a local mirror of the git repository.


For building Q2PRO on Linux, BSD and similar systems please consult the INSTALL file inside source tarball.

Windows version of Q2PRO can be built with MinGW-w64 cross-compiler on a POSIX-compatible system.


MinGW-w64 cross-compiler is available in recent versions of all major Linux distributions. A Q2PRO SDK for MinGW-w64 has been prepared that includes all additional libraries Q2PRO uses in precompiled form. It also contains scripts for rebuilding those libraries from source, should you ever need that.

To install MinGW-w64 on Debian or Ubuntu, use the following command:

apt-get install mingw-w64

Follow these steps to check out and build Q2PRO for Windows using MinGW-w64:

wget https://skuller.net/q2pro/q2pro-mgw-sdk.tar.gz
tar zxf q2pro-mgw-sdk.tar.gz
git clone https://git.skuller.net/q2pro q2pro.git
cd q2pro.git
cp ../q2pro-mgw-sdk/config .config
# review .config
make strip

Before typing ‘make’ you may need to adjust the build time configuration file (‘.config’), especially if your compiler name does not have ‘i686-w64-mingw32-’ prefix.


Check your ‘gl_modulate’ setting. Q2PRO defaults this to 1, while other clients may have different default values.

Q2PRO is very well suited for playing with vertical sync on. In fact, it is recommended to enable vertical sync for smooth, tearing-less rendering. Assuming you have ‘cl_async’ enabled, it is important to set ‘r_maxfps’ correctly. It should be set equal or slightly lower than the vertical refresh frequency of your monitor (typically 60 Hz for LCD monitors). You can check your current movement FPS by executing ‘echo $cl_mps’ command. When configured properly, it should be equal to your ‘cl_maxfps’ setting.

This is a harmless effect caused by protocol 36 attempting to reduce outbound traffic and sending packets with frequency limited by ‘cl_maxpackets’, instead of ‘cl_maxfps’ used by other protocols. Since default value of ‘cl_maxpackets’ is 30 (lower than typical ‘cl_maxfps’ value), server miscalculates your ping to be slightly higher. This does not affect your gameplay experience in any way: events like pressing ‘+attack’ are instantly pushed to the server. Ideally, server should be configured to use improved ping calculation method that uses minimal network latency instead of average latency to avoid possible confusion. (This is now the default in latest Q2PRO server).

Those who used OpenAL sound system with R1Q2 client may find that Q2PRO sound is different in OpenAL mode. This is expected, because R1Q2 and Q2PRO use different OpenAL sound attenuation models. Q2PRO tries to mimic original Quake 2 software sound as close as possible, whereas R1Q2 uses custom model that makes sounds from plats and doors hearable at greater distances than normal. Q2PRO will not support this sound model because it contradicts its goal to be gameplay-wise identical to original Quake 2.