Tweaking for Dummies
Ever wonder why some people appear to be able to shoot at you through trees before you even see them? Check out what you can do by tweaking various Client VARiableS (aka CVARs). Keep in mind that this screenies shows what is possible if there are NO limits placed on the tweaking. Thanks to Johann for a significant portion of this "how-to" write up which has been heavily edited and paraphrased here and there. If you want more references, check out some of these sites
What is a CVAR and what do they do?
CVARs are variables that affect how your game is viewed and played. Just keep in mind that there are other CVARs such as cg_drawcrosshairs, mp_playertype, or cg_teamchatlines that are totally configurable, but don't necessarily make targets stand out better or eliminate shadows. In this article, we'll only focus on variables which affect frame rates, visuals, and some game action. Here's an example of what you can do with CVARs
Public config vs. a very tweaked configs (Ice)
OK, everyone take a deep breath. As I just mentioned, this is what is possible if there are NO limits placed on what you can tweak. Realistically, all leagues that I have played in (CAL, TWL, STA) have drawn up a list of cvars and the range of values they feel are appropriate. Additionally, just about every server I've played on set some sort of limits on the values they think are "fair" (very subjective term here). Here's an example of 3 configs - pub, match (CAL), and unlimited - to show the vast difference in visual quality between an unlimited config and what CAL lets me do. I should also note that I DO NOT have my CAL config maxed out, but it is still a good example.
Public vs. CAL vs. unlimited configs (Assault)
CVARs, when altered, as you have obviously seen, can limit or increase the visual quality of how textures and models are rendered in the game. When a CVAR is tweaked so as to limit/lower the quality, it usually increases the frame rate (FPS = frames per second) and that means smoother game-play; more snapshots of the map as you see it are drawn. So with a frame rate of 135, there are 135 frames being drawn in one second. Some low end computers with older hardware (ie graphics card, processor, etc.), can be very challenged to generate even minimal FPS. This in turn can make for a very choppy game. Obviously, the higher the FPS, the smoother the game and is easier for the eyes to process info compared to the twitching one's eyes can do with a frame rate of 10 FPS. Tweakers tend to tweak CVARs that greatly affect FPS because their hardware can't reach reasonable FPS with default settings; hence, their lack of capable hardware warrants them to alter the game's default graphics in order to make it playable. But even then, they can't achieve that much of a boost in FPS without taking CVAR values to extreme.
Isn't this considered to be cheating?
Nope, at least not in my opinion. CVAR tweaking is available to anyone who can open a configuration file, copy, and paste - this is simply not rocket science limited to the upper strata of l33t players. Furthermore, in my version of the world, server admins set the rules. They set boundaries around what they consider to be acceptable play (CVAR limits, use of profanity, mods used, mod settings, etc). To enforce their game standards, they have a couple of tools (WAB, RCON, Punkbuster, personal presence etc) with which to "police" and moderate their server, I stress their. As players, we have two obligations: 1) play nice according to their rules and 2) if you don't like the rules, then leave and find another server more to your liking.
So what does this mean to the tweaker? Each server admin will set the range of "acceptable" CVAR values for their server and use Punkbuster to control observation of the limits. Players are allowed to modify CVAR values within those limits, but no more. Tweakers who find the stated limits unacceptable, simply get to find another server. Cheating? Hardly - it's just a matter of knowing the rules and exercising your choice to accept them or not - on a server by server basis.
OK, so what does each CVAR do?
Here's a quick and dirty guide. I've classified a couple of the most common CVARs according to what they do for you:
CVARs such as the following increase FPS by drawing less of the intended map or less objects (the less you have to draw, the faster your rates). Weaker computers can get a needed boost by eliminating unncessarily drawn items:
r_picmip (default 1) [high picmip alone eliminates tree limbs]
r_picmip2 (default 2)
r_mode (default 3) [changes screen resolution]
r_rmse (default 0) [note: r_rmse used by itself just changes the level of detail in textures (first screenie) but when used with r_picmip > 4, and r_rmse > 120, tree limbs go away. This is restricted by most leagues]
r_subdivisions (default 0) [adjusts the granularity of faces drawn in curved surfaces]
r_lodbias (default 0) [adjusts level of detail]
r_texturebits (default 16 or 32)
r_colorbits (default 16 or 32)
r_dynamiclights (default 1) [can be turned on and off from the in-game menu]
cg_marktime (default 1250) [can be turned on and off from the in-game menu]
cg_brassTime (default 1250) [can be turned on and off from the in-game menu]
cg_gibs (default 1)
cg_drawgun (default 1) [can be turned on and off from the in-game menu]
cg_shadows (default 1)
cg_simpleitems (default 0) [causes 3d items to be rendered as 2d stencils]
Remove Map Elements
Then there are cvars that remove elements from the map. Many of these are restricted by the leagues and most servers simply because they remove elements that were not intended to be removed:
r_uifullscreen 1 (default 0) [will remove fog on some maps. However on tram and some custom maps, which use fogclipping, it won't be useful. test it and you will see why]
r_fastsky (default 0) [can be turned on and off from the in-game menu, also improves FPS]
r_drawsun (default 1) [can be turned on and off from the in-game menu]
cg_wolfparticles (default 1) [can be turned on and off from the in-game menu, also improves FPS]
Increase Brightness and Eliminate shadows
these below will increase brightness and help eliminate shadows. Sometime older monitors are very dark and some tweaking of visual CVARs can help make the game playable.
r_gamma (default 1.3 - in game max value 2.0)
r_intensity (default 1)
r_mapoverbrightbits (default 2)
r_overbrightbits (default 1)
r_vertexlight (default 0)
There are also other variables that people will tweak such as:
cg_fov (default 90) [usually increased to widen the field of view (FOV) - some players tend to use around 110, or their personal preference]
cg_bobpitch (default 0.002)
cg_bobroll (default 0.002)
cg_bobup (default 0.005)
s_mixahead (default 0.20) - lower values improve FPS at the cost of some sound choppiness
CVAR Experiments - Comparion of 5 Configs (Ice)
To see what actual effect various CVAR combinations had on my system, I tested 5 configs for comparison sake and also tested two other variables: ui_fullscreen and r_rmse:
- Default settings. This is what RTCW looks like out of the box with the one exception of changing screensize from 640 x 480 to 1156 x 864
- Max settings allowed within the Setup menu (Lightmap off, brightness slider all the way to the left)
- Evenbalance recommended limits. Fairly restrictive. This is my public server config.
- CAL cvar limits. (r_subdivisions 999; r_color/texturebits 16; r_picmip 3; r_ignorehwgamma 1; r_gamma 4; r_intensity 2.7; r_mapoverbrightbits 3). These limits have also been adopted by TWL and STA. This is my match config.
- Extreme config. picmip, gamma, and intensity jacked way up - not legal in any known league.
If you look at my config settings, you'll see that I really haven't maxed out all of the settings, but I have them set where I like them while still being in compliance with the limits. For pub play, I keep lightmap on, even though vertex lighting isn't a restricted setting.
What do I need to tweak to remove screen elements
Here you go. I experimented around a bit with various screen elements and here's what I came up with. I'm missing a couple, but this should take care of most elements:
What's Punkbuster and what does it have to do with CVARs?
Punkbuster, if told to in the server.cfg, can restrict any cvar. And there are some cvars that don't affect graphics or FPS that people can manipulate so as to avoid bobbing (like when shooting a sniper rifle). Each server admin can config enable Punkbuster to check each player to ensure their settings are within an acceptable" CVAR limit.
The way Punkbuster checks all this, is that each server has it's own settings, or server.cfg (configuration file). And if a server has Punkbuster enabled, then ONLY clients with Punkbuster enabled also on their end can join that server. Otherwise, if Punkbuster were not enabled on client-side, then they would be rejected by the server so long as it has Punkbuster enabled.
Within the configuration files are code that tells Punkbuster what settings to check each client for. If a client doesn't meet the ranges, then punkbuster might at best warn before kicking the client. If the client does not change the values in error (which usually requires a video restart - type /vid_restart in console to do so), then Punkbuster will kick the client for unaccepted settings.
Not all servers run same settings. That's why it's important to find out if 1) the server you are playing on has Punkbuster enabled (a good thing IMO), 2) What are the restrictions listed for that particular server, and 3) are those restrictions acceptable to you.
So with every server running their own cvar limits, how do you find out if your settings are compliant? The command you want is pb_cvarlist. You can either drop the console and type in pb_cvarlist or you can bind a key like this (bind x "pb_cvarlist"). Once you enter the command, you should see the following in the console:
You can see that it tells me that I have no violations. If there are problems, you will see the following:
In this case, it tells me that three of my cvar settings are in violation and specifies each one with (violation) after the name of the cvar (take a look at r_gamma, r_mapoverbrightbits, and r_overbrightbits). It also tells me what my current setting is and the range that it must be inside or outside of.
You can always look at server configs, when posted, to view the CVAR limits set on each server. Hopefully, you'll see something like this (taken from the CAL-Open server config link):
pb_sv_cvar com_maxfps out 0.000001 40
pb_sv_cvar m_pitch out -0.015 0.015
pb_sv_cvar m_yaw in 0.022
pb_sv_cvar cg_shadows in 0 1
pb_sv_cvar cl_freelook in 1
pb_sv_cvar r_rmse in 0 0
pb_sv_cvar cg_fov in 90 120
pb_sv_cvar r_intensity in 0 6
You'll see that each line is formatted like:
pb_sv_cvar [name of CVAR] [in/out] [X to Y]
What it's telling you is that that [name of CVAR] must be either INside of X to Y or OUTside of X to Y. Failure to comply with these limits will result in you being kicked.
A good rule of thumb, if you are hopping on an unknown server, is to ensure that more restrictive settings (I use the Evenbalance config limits) would load no matter what so as to avoid punkbuster warnings before I could check the restrictions. Then, check the punkbuster limits of that server, using the pb_cvarlist command and then if you can use higher settings, press a key that would toggle between my pub and competition settings (look at my scripting section to see how you can set this up as a script and a bind). Each time I changed settings, the game would do a vid_restart (video restart) to make them take effect.
Here are a couple more links: