summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2014-11-28 12:33:59 +0300
committerAndrey Nazarov <skuller@skuller.net>2014-12-01 23:04:37 +0300
commit2ea3dac6baa883430fc64916549347d6d39ee5ec (patch)
tree874c93160868938e7c1a46843725ecd69222be92 /src
parent653d52fdc3c6b9b43ccea234bedb76b12d809db2 (diff)
Properly initialize key client frames on begin.
Make sure that when using variable server FPS, cl.keyframe and cl.oldkeyframe structures are valid on client begin even if the first server frame is not a key frame. Fixes initial lerping problems that may occur until the first key frame arrives.
Diffstat (limited to 'src')
-rw-r--r--src/client/entities.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/client/entities.c b/src/client/entities.c
index fa28f11..82a08ff 100644
--- a/src/client/entities.c
+++ b/src/client/entities.c
@@ -232,14 +232,25 @@ static void entity_event(int number)
static void set_active_state(void)
{
+ cls.state = ca_active;
+
cl.serverdelta = Q_align(cl.frame.number, CL_FRAMEDIV);
cl.time = cl.servertime = 0; // set time, needed for demos
#if USE_FPS
cl.keytime = cl.keyservertime = 0;
+ cl.keyframe = cl.frame; // initialize keyframe to make sure it's valid
#endif
- cls.state = ca_active;
+
+ // initialize oldframe so lerping doesn't hurt anything
cl.oldframe.valid = qfalse;
+ cl.oldframe.ps = cl.frame.ps;
+#if USE_FPS
+ cl.oldkeyframe.valid = qfalse;
+ cl.oldkeyframe.ps = cl.keyframe.ps;
+#endif
+
cl.frameflags = 0;
+
if (cls.netchan) {
cl.initialSeq = cls.netchan->outgoing_sequence;
}