Q2PRO

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

Security

Many forks of Quake 2 engine are focused mostly on server side security and contain fixes only for bugs that are directly exploitable over the network. Q2PRO attempts to improve this situation and additionally fixes multiple vulnerabilities present in filesystem code and various file format parsing routines. This is extremly important as any multiplayer Quake 2 client is put under direct control of the server once connected. Unlike other popular clients, Q2PRO will do its best to prevent malicious or compromized server from uploading a crafted BSP or PAK file on your machine and then executing arbitrary code from it.

Downloads

While there are no immediate plans for a new stable release, nightly builds of the latest development source code are available. These builds are regenerated automatically once a commit is made into the git repository.

Development

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.

Building

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

For building Windows version of Q2PRO there are two options: MinGW-w64 2.0.x and Visual C++ 10.0.

MinGW-w64

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 http://skuller.net/q2pro/q2pro-mgw-sdk.tar.gz
tar zxf q2pro-mgw-sdk.tar.gz
git clone git://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.

Visual C++

An easy way to obtain Visual C++ 10.0 compiler is to install Windows SDK 7.1.

Visual Studio 2010 Express Edition also includes Visual C++. Visual Studio 2010 needs to be updated to Service Pack 1 to be able to work with Q2PRO sources from the IDE. Command line build should work with or without Service Pack.

A Q2PRO SDK for Visual C++ has been prepared that includes .sln and .vcxproj files and all additional libraries Q2PRO uses in precompiled form. It also contains scripts for rebuilding those libraries from source, should you ever need that.

Follow these steps to build Q2PRO for Windows using Visual C++:

  1. Download and extract the Q2PRO SDK for Visual C++ into the root of Q2PRO source tree.
  2. Open the Windows SDK command prompt and type ‘setenv /Release /x86 /xp’.
  3. Change directory to the root of Q2PRO source tree and type ‘msbuild q2pro.sln’.
  4. Generated executable and PDB files should be now ready in ‘Release’ directory.

Note that the proper Q2PRO version string should be manually defined in ‘VC/inc/config.h’ file before building. Users of Git for Windows can run the supplied ‘update-vc10-version.sh’ script from Git shell to patch ‘config.h’ with the correct version string. This needs to be repeated after each ‘git pull’ invocation.

FAQ

Check your ‘intensity’ and ‘gl_modulate’ settings. Q2PRO defaults both variables to 1, while other clients may have different default values for them.

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. On Windows, it should be set exactly equal to the vertical refresh frequency of your monitor (typically 60 Hz for LCD monitors). On Linux, automatic synchronization is supported, you can simply set ‘cl_async’ to 2 and leave ‘r_maxfps’ alone. 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 your 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).