Following these instructions will help improve your gameplay experience with this server, most importantly involving hit registry. These instructions apply for most people. If you have a decent broadband connection, these settings should be optimal for you, and they shouldn’t hurt you at all for playing on other servers.
- Open the console.
- To enable the console, hit Escape. Go to Options –> Keyboard –> Advanced. Check “Enable Developer Console”.
- To open the console, hit the backtick ( ` ) key. It’s the key with the tilde ( ~ ) on it, above Tab, next to 1.
- Type the following commands individually. Hit Enter after each command.
- cl_cmdrate 101
- cl_updaterate 101
- cl_interp 0
- cl_interp_ratio 1
- fps_max 121
- Close the console (the same way you opened it).
You may want to put the above commands in your configs, because cl_interp often gets reset when the game is reloaded. The simplest way is to put all 4 commands in a text file, one on each line. Rename the text file to autoexec.cfg and put it in your Counter-Strike: Source config directory. An example of this location for many people is C:\Program Files (x86)\Steam\steamapps\johnsmith\counter-strike source\cstrike\cfg. Make sure you have “Hide extensions for known file types” unchecked in Windows’ “Folder Options” –> “View” tab.
How To Know It’s Working Right
To verify the above settings and make tweaks if necessary, do the following:
- Open the console (as explained above).
- Type net_graph 3 . Hit Enter. Close the console.
- Look at the network graph at the bottom-right of your screen. If your lerp is 10.0 ms, you’ve very likely entered the correct commands as described above. If not, try again.
- Keep an eye on choke and loss in the network graph. Play a round or two, keeping a mental note of both of them. Pay special attention to encounters with enemy players, especially when you near groups of them.
- If you had any loss, at all, go back into the console and enter the command cl_interp_ratio 2 . Your loss won’t go away, but you’ll have a more ideal setting to compensate for it. If your loss is really high (consistently 2 or above or spiking to even higher numbers regularly), get a better connection.
- If you had a choke greater than about 5 at any point, or your choke is consistently higher than 0, go back into the console and enter the command cl_updaterate 90. If your choke goes down to good levels, you’re good. If not, keep lowering it (increments of 10 are good) until it does. If your choke never goes down to reasonable levels, get a better connection.
- If you want to get rid of the network graph, open the console. Type net_graph 0 and hit Enter.
Why Do This At All?
This server runs at a 100 tickrate. This means it updates 100 times every second with new information about what’s going on in the game. Most servers run at 66 tick, as this is the rate Valve forces Counter-Strike: Source to normally run at, the same as all other Orange Box Source engine games. We use a plugin to allow this server to run at 100 tick.
Because our server runs at a higher tickrate than the default, it always has more up-to-date information to work with about who hit who, where each person is, where they were hit, etc. By using the right settings, you’ll have a much better gameplay experience because your shots will register more accurately, and the game should feel smoother in general.
Why Those Specific Settings? (Technical)
cl_cmdrate and cl_updaterate
The server can process up to 100 updates per second. With a cl_cmdrate of 100, your game client will send the server 100 snapshots of information about its current situation every second. With cl_updaterate 100, the server will give your client 100 updates about the rest of the game every second. Any lower would be using less than the full potential the server and your game can use to make decisions. Any higher would be pointless, as the server can process a maximum of 100 updates a second.
cl_interp sets the minimum value for your client-side linear interpolation (LERP). Setting it to 0 disables the minimum, allowing cl_interp_ratio to manage your LERP value.
The game calculates your client-side linear interpolation (LERP) based on the following formula: Interp_Ratio/Update_Rate. If your cl_interp value is greater than this value, it will be used instead. It uses the actual values, taking into account limits the server puts on you client, not necessarily exactly based on your cl_updaterate and cl_interp_ratio. For example, if your update rate is 100, and your interp. ratio is 1, your LERP will be 1/100, or 0.01 seconds (10ms). By default, a Counter-Strike: Source client runs at an update rate of 20 snapshots per second (assuming the server doesn’t have sv_minupdaterate set to something higher, as we do). It also has a default cl_interp of 0.1 (100ms). Since 20 snapshots per second means there is a snapshot sent to your client every 50ms in this case, a LERP of 100ms means that in addition to the current snapshot, there are always 2 extra snapshots your client keeps around to interpolate between in case it loses one. For someone with a lame connection (one that has packet loss between the client and the server, shown as “loss” in net_graph 3), this is a pretty safe setting. If you lose a packet, it won’t be too big of a deal, because your client can interpolate between the other 2 snapshots in order to show you something reasonable on your screen. This default setting corresponds to a cl_interp_ratio of 2.
If you were to run the default of cl_interp 0.1 while running with an update rate of 100, your client would be saving 10 extra snapshots instead of the default 2. This is way overkill, and if you had 10 loss (10 lost snapshots per second), you’d be pretty well screwed anyway, and LERP would be the last of your problems. If you set your cl_interp_ratio to 2, you’ll always have 2 extra snapshots (20ms LERP at 100 update rate) to work with.
Since most people don’t have loss (and if you have loss, you should probably be getting a better connection anyway), most people will have the best experience with cl_interp_ratio 1. This means you only have 1 snapshot to work with in the case 1 is lost. Since 2 snapshots are required to interpolate between in cases, this means that your client will have no interpolation delay at the expense of not being resilient in the case your connection does actually get loss. As this concept is hard to understand/explain, it may be helpful to study the graphic in the Entity interpolation section of the Source Multiplayer Networking article on the Valve Developer Community.
In short, set cl_interp_ratio to 1 if you don’t have loss. Set it to 2 if you do have loss.