[
Click here for printable/downloadable version]
Hmm where to start. The R1Q2 client is primarily designed for me as something I want to use over regular Q2. The odd features (eg location support) get added if demand is heavy enough, but you aren't going to see winamp controls, mirc auto away features, etc in the considerable future.
R1Q2 is not an anti-cheat client. I've seen several people and messages on forums thinking R1Q2 by itself is an anti-cheat client. It is not, however recent versions now support the
r1ch.net anticheat module when used on supported servers.
cl_async (fps / physics / jumping / packet rate / etc)One of the largest changes in the client is the separation of the network and rendering rate. Unlike other clients, R1Q2 accomplishes this by sampling input for several frames and generating one network packet. This avoids the hackyness exhibited in other clients that rely on Q2's packet loss recovery features to lower the network rate, however it also creates some more. The cvar cl_async controls this new asynchronous FPS behaviour, set cl_async 0 will use standard FPS identical to how Quake II 3.20 works.
With cl_async 1, cl_maxfps will control the NETWORK packet rate - ie how many packets/sec you send to the server. r_maxfps controls how many FRAMES are rendered per second at a maximum. You should never need to adjust r_maxfps, but try cl_maxfps 30 or other similar values in order to save bandwidth and server CPU time if possible.
Using a lower cl_maxfps will cause a few issues, notably: physics exploits such as crate jumping will not work, jump height when launching off ramps will be lower and prediction misses when climbing stairs can occur. For the vast majority of mods you shouldn't really experience a problem unless you're one of these people who run cl_maxfps 200 or something silly. For mods where jumping is crucial, eg the Q2 Jump mod, the cl_async cvar can be set to 0 to restore original Q2 "one packet per frame" behaviour.
Even when running a lower cl_maxfps, important events such as weapon firing or sending a command will still cause a packet to be sent immediately if cl_instantpacket 1 is set (default). This will cause you to go slightly above the cl_maxfps packet rate at times but gives you the latency benefit as if you were running cl_async 0.
If you use a joystick or keyboard to control the view, you will want to use cl_async 0 and cl_maxfps 90 or so as the cl_async 1 code currently does not work very well with anything other than mouse input for controlling the view.
Note that if you use R1GL with R1Q2, you may find your frame rate is capped at 60 (vsync). This is because R1GL correctly applies the default "gl_swapinterval 1" cvar which controls this behavior, whereas 3.20 ref_gl did not. Use gl_swapinterval 0 to allow for rendering with no waiting for buffer swaps.
SecurityAnother important but somewhat "unnoticable" change are the plethora of security improvements. Your client can no longer be hijacked by malicious packets from remote users, commands such as record, condump, etc are made safer in that they won't write outside the Q2 directory, the client won't crash hard on bad/corrupted data from the server and a whole lot more improvements that you hopefully will never notice but work to protect you.
Location ReportingLocation reporting using $$loc_here for current location and $$loc_there for where you are looking in a chat message or any console command will work, .loc files are loaded from mod/maps/mapname.loc, then if not found, mod/locs/mapname.loc (from the mod dir) and are in a format compatible with most other clients. addloc / saveloc commands are available to create .loc files. Note that saveloc will not work if your .loc file is in a pak file. You can use bash-style curly brackets to do forced expansion of these meta-variables where it would otherwise fail, eg say "I'm at [$$loc_here]" won't work, say "I'm at [${$loc_here}]" is the correct way. Note that location metavars won't be expanded in messagemode / messagemode2. You may also set the cl_default_location cvar, if no .loc files are loaded from the current map then the contents of cl_default_location will be sent in place of $$loc_here.
*.pak file loadingPak file loading: R1Q2 will load ALL *.pak files! Be careful with this if you have unwanted pak files lying around as "dontloadme.pak" or similar. pak0-pakX are loaded first, then the remaining *.pak files are loaded in alphabetical order. Remember, the last pak file to be loaded will be used when searching for files, for example pak10.pak will override files in pak9.pak and newweapons.pak will override anything in pak10.pak
DirectInput MouseDirectInput mouse support is available with m_directinput 1. This will give a much smoother mouse response and completely fixes the issue of mouse acceleration on Windows 2000 or higher. You may need to play with the sensitivity cvar after turning on DirectInput as it samples slightly differently. If you don't wish to use DirectInput, m_fixaccel exists to enable the somewhat-ineffective mouse acceleration fix for Windows 2000+. With DirectInput, MOUSE1 through MOUSE8 can be bound, without DirectInput, up to MOUSE5. You can also use m_directinput 2 to enable "immediate" sampling mode with DirectInput if you have issues with m_directinput 1. The mouse behaviour when switching in and out of Q2 with Alt+Tab is also fixed so that it won't keep snapping your mouse all over the place.
DirectInput KeyboardDirectInput keyboard support available in the latest versions. Use in_dinputkeyboard to turn it on and off. I've attempted to re-create the keyboard repeat speed/delay settings similar to the "normal" keyboard input so it shouldn't be too different at all. DInput keyboard fixes the problem of Windows seemingly delaying sending input messages to Q2 during heavy CPU usage, this resulted in sticky or delayed keyboard input. You can use k_repeatrate and k_repeatdelay (both in milliseconds) to set the key repeat behaviour in DirectInput mode.
messagemode (chat) improvementsMessagemode and messagemode2 support an argument which will be used as default text in the text entry box. Eg bind u "messagemode2 I'm at" will bring up the "say_team: I'm at " when you hit it. The chat buffer also stores the previous messages you sent so you can use UP/DOWN key to go through them.
R1Q2 Protocol (protocol 35)When connected to R1Q2 servers, a new protocol is able to be used which gives several improvements: faster free-flying observer movement, bandwidth savings on entity updates, support for much faster connection process thanks to zlib and a generic compressed packet format for faster auto downloading and receiving larger than 1400 bytes worth of entity updates at once. The qport cvar is changed to a single byte on R1Q2 protocol in order to reduce outgoing bandwidth usage. If you have multiple players behind a single IP, be sure they each use a unique qport value that is between 0 and 255. Use cl_protocol 34 to revert to the standard Q2 protocol if you have issues with the new protocol.
Sounds and OpenALSounds are able to be loaded at 44Khz with s_khz 44. Be aware that Q2 sounds are mostly in 22khz format and upsampling to 44 khz will use a lot more memory and may cause stuttering if new sounds are loaded mid-game (whether this happens depends on whether mod precaches sounds properly). Experimental support for OpenAL 3D positional audio is implemented and requires the
OpenAL runtimes. Use s_initsound 2 to enable, see below for all the cvars to control it.
Filesystem CachingFile system speedups! R1Q2 maintains a binary tree of pak file contents so when looking for a file only a few lookups have to be done as opposed to scanning the entire pak file. A filesystem cache is also maintained, files that have previously been requested have their location stored in a separate binary tree allowing for fast future access. You can use the fs_cache cvar to control the level of caching - fs_cache 0 disables it completely. See below for more info on how fs_cache works. Be aware that if you modify a file on disk that has been cached by R1Q2, subsequent accesses will likely fail.
Misc thingsToggle command can be used to toggle a cvar between 0/1 or a user specified list of options. Eg bind u toggle cl_gun, bind u toggle cl_maxfps 30 60 90.
Console buffer size doubled, command buffer sized up to 32k so loading large configs shouldn't be a problem. Current local time displayed in the console. Commands, aliases and cvars are stored in binary trees for faster internal lookups and are also case sensitive.
Various error conditions are drawn in text during gameplay on the middle left of the screen. These can give you an indication of a network condition well before the phonejack appears. Set scr_showturtle 0 to disable these.
Command completion is configurable how you like it - cl_cmdcomplete will determine which method to use. 0 uses standard Q2, 1 will use ProQuake (tab completes current command, hitting again will cycle to next match) and 2 will display a list of all matching cvars and commands similar to Quake 3. Default is 2.
When the client is minimized or in the background it will no longer consume 100% CPU as it will only do work when receiving packets so typically will drop to 10 fps.
Particle count increased to 16384. This should fix problems of disappearing railgun trails and other lost particle effects during heavy activity.
R1Q2 will only regard a client as something that falls under the CS_MAXCLIENTS configstring. This allows some badly designed mods which overload the CS_PLAYERSKINS indexes to work without causing hitches every time they update a configstring as normally this would invoke an attempted client load and/or auto downloading. Similarly, R1Q2 counts the maximum number of lightstyles sent by a server and won't loop through all 256 maximum entries each frame.
Improved networking functions - listen servers will no longer crash when a client drops on Win2000+, IPX code has been completely removed and better error handling added as well as some speedups and merging common code with linux functions. The client will also no longer bind to port 27910 unless it is actually running a server as well.
Xania style railtrail is available with cl_railtrail. Two special cvars, cl_beginmapcmd and cl_endmapcmd can be set to perform commands like screenshot at end of map - eg
set cl_endmapcmd "screenshot". cl_autorecord will automatically record a demo at the start of a map. For those of you looking for a transparent console, you will need
R1GL and a
transparent console PNG/TGA (put this pak in your baseq2 dir). There is no cvar to control transparency, R1GL uses the alpha from the 32 bit image in order to remain compatible with Q2 3.20.