Skip to content

Commit 541b98e

Browse files
committed
Fix mvd ents spawning with the wrong entity in certain cases.
1 parent ff1a229 commit 541b98e

File tree

2 files changed

+15
-11
lines changed

2 files changed

+15
-11
lines changed

engine/client/cl_demo.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,7 @@ qboolean CL_GetDemoMessage (void)
533533
int demopos = 0;
534534
int msglength;
535535
static float throttle;
536+
static qboolean newseq;
536537

537538
if (endofdemo)
538539
{
@@ -783,6 +784,7 @@ qboolean CL_GetDemoMessage (void)
783784
{
784785
if ((msecsadded || cls.netchan.incoming_sequence < 2) && olddemotime != demotime)
785786
{
787+
newseq = true;
786788
cls.netchan.frame_latency = 0;
787789
cls.netchan.last_received = realtime; // just to happy timeout check
788790
}
@@ -995,8 +997,9 @@ qboolean CL_GetDemoMessage (void)
995997

996998
if (cls.demoplayback == DPB_MVD)
997999
{
998-
if ((msecsadded || cls.netchan.incoming_sequence < 2) && olddemotime != demotime)
1000+
if (/*(msecsadded || cls.netchan.incoming_sequence < 2) && olddemotime != demotime ||*/ newseq)
9991001
{
1002+
newseq = false;
10001003
if (!(cls.fteprotocolextensions2 & PEXT2_REPLACEMENTDELTAS))
10011004
{
10021005
cls.netchan.incoming_sequence++;

engine/client/cl_pred.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,7 @@ short LerpAngles16(short to, short from, float frac)
611611

612612
void CL_CalcClientTime(void)
613613
{
614+
extern cvar_t cl_demospeed;
614615
if (!cls.state)
615616
{
616617
if (!cl.implicitpause)
@@ -649,6 +650,7 @@ void CL_CalcClientTime(void)
649650
else
650651
{ //funky magic drift logic. we be behind the most recent frame in order to attempt to cover network congestions (which is apparently common in germany).
651652
float min, max;
653+
float r;
652654

653655
// oldst = cl.servertime;
654656

@@ -659,14 +661,13 @@ void CL_CalcClientTime(void)
659661
if (max < min)
660662
max = min;
661663

664+
if (cls.demoplayback && cl_demospeed.value > 0 && cls.state == ca_active)
665+
r = cl_demospeed.value;
666+
else
667+
r = 1;
668+
662669
if (max)
663-
{
664-
extern cvar_t cl_demospeed;
665-
if (cls.demoplayback && cl_demospeed.value > 0 && cls.state == ca_active)
666-
cl.servertime += host_frametime*cl_demospeed.value;
667-
else
668-
cl.servertime += host_frametime;
669-
}
670+
cl.servertime += host_frametime*r;
670671
else
671672
cl.servertime = 0;
672673

@@ -681,7 +682,7 @@ void CL_CalcClientTime(void)
681682
}
682683
else
683684
{
684-
cl.servertime -= 0.02*(max - cl.servertime);
685+
cl.servertime -= 0.02*(max - cl.servertime)*r;
685686
if (cl.servertime < cl.time)
686687
cl.servertime = cl.time;
687688
}
@@ -695,12 +696,12 @@ void CL_CalcClientTime(void)
695696
}
696697
else if (cl.servertime < min-0.3)
697698
{
698-
cl.servertime += 0.02*(min - cl.servertime);
699+
cl.servertime += 0.02*(min - cl.servertime)*r;
699700
// Con_Printf("running really slow\n");
700701
}
701702
else
702703
{
703-
cl.servertime += 0.01*(min - cl.servertime);
704+
cl.servertime += 0.01*(min - cl.servertime)*r;
704705
// Con_Printf("running slow\n");
705706
}
706707
}

0 commit comments

Comments
 (0)