Ex_interp and Counterstrike 1.6
Bear in mind I am creating this article with the target of explaining this in the simplest possible way, so as to benefit you as a gamer without flooding you with incomprehensible info!
What is ex_interp anyway?
The way ex_interp is meant to work is like this. Firstly Interp means interpolation. So, basically it “interpolates” packets of data coming in to your pc/net connection. This was introduced so that people with crappy connections would still be able to play the game.
The interpolation occurs like this : lets say 10 frames (video frames or packets of data) are displayed on your computer. if you have ex_interp at 0.1 then only 4 frames will be “real” frames, and the rest will be guessed.
so it will be like this (RF = real frame; GF = guessed frame) : RF GF GF RF GF GF RF GF GF RF etc.
The reason it does this is to compensate for your shitty connection, so that what you see on your screen is nice and smooth. As far as I understand, with the older versions of the Netcode (older HL/CS, pre 1.3 I think.), the LPB (low ping bastard) would have a great time, because he would be displaying every frame he is provided, and seeing that he has a good connection he is getting loads of frames, whereas HPB (high ping bastard) would get fewer frames, and the screen would be jerky, and the gameplay not easy.
So now if you change your ex_interp to a lower value, say 0.01. This will change the sequence to 8/10 frames are real. RF RF GF RF RF GF RF RF GF etc.
These figures etc. aren’t precise and the scenario might not be entirely accurate, but at least explains basically what is happening.
But isn’t ex_interp a h4x config command?
ex_interp is NOT a cheat/h4x in Counterstrike 1.6. It is not possible to set your ex_interp to a h4x setting!(explanation below) Now the reason this was a h4x command before (in CS 1.5) was because of a little bug in the code, you could set your interp to a VERY low number, even though your connection doesn’t allow for it (plus the server always assumed that ex_interp was set at 0.1 even if you set it lower which has obvious implications!) and this made the hitboxes incorrectly presented and created a benefit for the “ex_interp configger”. With 1.6, this has been fixed, hence you getting a mesage (when trying to change your ex_interp to 0.01) saying your setting has been set to 16ms or 15ms or whatever. This is because your cl_updaterate is too low for 0.01. But it is best to set it to 0.01, because Half-Life/Counterstrike then automatically sets it to the lowest possible setting for your updaterate (which also happens to be the best setting.). Try setting cl_updaterate to 60, then setting ex_interp to 0.01, you will get an error, and a message saying that it has been set to 16ms. Now try setting your cl_updaterate to 100, then type ex_interp 0.01. It will allow you to do this, without giving an error message.
My suggestion would be to set your cl_updaterate, cl_cmdrate and rate to the optimal that your connection can handle (ideal would be cl_updaterate 101, cl_cmdrate 101, and rate 20000 without choke or loss). Once you have achieved the optimal for your connection, regardless of your cl_updaterate, set your ex_interp to 0.01. Counterstrike will then set it to whatever is the lowest it can go, given you cl_updaterate. The equation is as follows (for the restriction of the lowest interp for your updaterate) 1/cl_updaterate = lowest possible interp value.
A little note here, if you like your Counterstrike to be more “arcadey”, in other words smooth with no jitter, then I suggest leaving your ex_interp setting to 0.1. But if you want increased accuracy (the bullets hits where you aim), then set ex_interp to the lower setting.
I have created a small tool to give you the best rates according to your net connection : Config Tool for CS 1.6
At this time, the servers lock the ex_interp to be between 0.1 and 0.05 (so 0.05 is the lowest you can go). But I am guessing that this will be changed at a later stage. Original documentation on HL netcode for counterstrike 1.6 said that it will allow it to go down to 0.01, so I assume that this will be changed at some point. But regardless, 0.05 is still a much better setting that 0.1 (on an average, half decent connection of course!!)
The ex_interp setting has been set to a minimum of 0.05 (since final release of 1.6)