This client aims to be fully compatible with original baseq3 and other mods while trying to be fast, reliable and bug-free.
It is based on ioquake3-r1160 (latest non-SDL revision) with upstream patches and many custom improvements.

Common changes/additions:

Client-specific changes/additions: Server-specific changes/additions:

\in_minimize

cvar that specifies hotkey for fast minimize/restore main windows, set values in form
  \in_minimize "ctrl+z"
  \in_minimize "lshift+ralt+\"
  or so then do \in_restart to apply changes.


Fast client downloads

Usually downloads are slow in Q3 because all downloaded data is requested/received from game server directly. So called `download redirection' allows very fast downloads because game server just tells you from where you should download all required mods/maps etc. - it can be internet or local http/ftp server
So what you need:



Fast client-initiated downloads

You can easy download pk3 files you need from any ftp/http/etc resource via following commands:
\download filename[.pk3]
\dlmap mapname[.pk3]

\dlmap is the same as \download but also will check for map existence

cl_dlURL cvar must point to download location, where (optional) %1 pattern will be replaced by \download|dlmap command argument (filename/mapmane) and HTTP header may be analysed to obtain destination filename

For example:

  1) If cl_dlURL is http://127.0.0.1 and you type \download promaps.pk3 -   resulting download url will be http://127.0.0.1/promaps.pk3
  2) If cl_dlURL is http://127.0.0.1/%1 and you type \dlmap dm17 -   resulting download url will be http://127.0.0.1/dm17
  Also in this case HTTP-header will be analysed and resulting filename may be changed

To stop download just specify '-' as argument:

  \dlmap -

cl_dlDirectory cvar specifies where to save downloaded files:

  0 - save in current game directory
  1 - save in fs_basegame (baseq3) directory


Built-in URL-filter

There is ability to launch Quake3 1.32e client directly from your browser by just clicking on URL that contains q3a:// instead of usual http:// or ftp:// protocol headers

What you need to do:



Condifional shader stages

Optional "if"-"elif"-"else" keywords can be used to control which shaders stages can be loaded depending from some cvar values.
For example, old shader:
console
{
 nopicmip
 nomipmaps
 {
  map image1.tga
  blendFunc blend
  tcmod scale 1 1
  }
}
New shader:
console
{
 nopicmip
 nomipmaps
 if ( $r_vertexLight == 1 && $r_dynamicLight )
 {
  map image1.tga
  blendFunc blend
  tcmod scale 1 1
 }
 else
 {
  map image2.tga
  blendFunc add
  tcmod scale 1 1
 }
}
lvalue-only conditions are supported, count of conditions inside if()/elif() is not limited


Redurect captured video to ffmpeg input pipe

In order to use this functionality you need to install ffmpeg package (on linux) or put ffmpeg binary near quake3e executable (on windows).

Use \cl_aviPipeFormat to control encoder parameters passed to ffmpeg, see ffmpeg documentation for details, default value is set according to YouTube recommendations:
-preset medium -crf 23 -vcodec libx264 -flags +cgop -pix_fmt yuv420p -bf 2 -codec:a aac -strict -2 -b:a 160k -r:a 22050 -movflags faststart
If you need higher bitrate - decrease -crf parameter, if you need better compression at cost of cpu time - set -preset to slow or slower.

And since ffmpeg can utilize all available CPU cores for faster encoding - make sure you have \com_affinityMask set to 0.


Arbitrary resolution rendering

Use \r_renderWidth and \r_renderHeight cvars to set persistant rendering resolution, i.e. game frame will be rendered at this resolution and later upscaled/downscaled to window size set by either \r_mode or \r_modeFullscreen cvars.
Cvar \r_renderScale controls upscale/downscale behavior: It may be useful if you want to render and record 4k+ video on HD display or if you're preferring playing at low resolution but your monitor or GPU driver can't set video|scaling mode properly.


High-Quality Bloom

Requires \r_fbo 1, available operation modes via \r_bloom cvar: \r_bloom_threshold - color level to extract to bloom texture, default is 0.6

\r_bloom_threshold_mode - color extraction mode:
\r_bloom_modulate - modulate extracted color:
\r_bloom_intensity - final bloom blend factor, default is 0.5

\r_bloom_passes - count of downsampled passes (framebuffers) to blend on final bloom image, default is 5

\r_bloom_blend_base - 0-based, topmost downsampled framebuffer to use for final image, high values can be used for stronger haze effect, results in overall weaker intensity

\r_bloom_filter_size - filter size of Gaussian Blur effect for each pass, bigger filter size means stronger and wider blur, lower value are faster, default is 6

\r_bloom_reflection - bloom lens reflection effect, value is an intensity factor of the effect, negative value means blend only reflection and skip main bloom texture


End Of Document