CoD4 sv_fps and timing/events issues


Once upon a time when there was CAL they wanted the sv_fps set to a certain value where by doing so it completely messed up the timing of the events on my server. I spend lots and lots of hours trying to figure out what went wrong in my server.cfg and I finally stumbled upon this article after I determined that the issue was in having sv_fps enabled at a custom value. Here is the article hope it comes in handy:

sv_fps on CoD4
November 16th, 2007

Running servers with sv_fps 30 is stupid, because sv_fps is used for physics, etc. also, there are timing issues with events no longer happening on exact frame boundaries, but rather events happening a frame too late.

Here’s my post on the CAL Forums.

You can’t fix a majority of the problems with scripting, you’d need engine source to properly fix it, instead of using bandaids (scripting)

When you raise sv_fps to 30, quite a few things happen, and there are more downsides to raising it than upsides.. also; there are more issues with it being anything other than 20.. I just post the signifigant ones.

– Physics get whacky. Some/most/all physics that are hard coded to sv_fps 20 wake up too early/too late. They can be fixed, but they won’t be as accurate as they would be with it being 20, since 30 doesn’t divide evenly. Timers are the most common thing to get broken.. Any animations that are controlled server side can also be broken.

– G_RunFrame() is called at 33.3ms intervals on the server. Sometimes, it will get called a frame or 2 late, or 2 early, because of rounding errors.

– Prediction gets fubared, since the built-in engine lag of 50ms is reduced to 33ms, which means there isn’t as much data to predict/interpolate for. High pingers notice this more than low pingers (you can even debug prediction errors to see for yourself)

– Antilag is affected, but nobody uses it because it’s broken. I think IW used/uses a point release from ID with busted antilag.

I’ve always told people to stick with using sv_fps of 20, because things are hard coded around it, and fixing them gets messy.