final speedhack fixes
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 10 Oct 2007 16:31:37 +0000 (16:31 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Wed, 10 Oct 2007 16:31:37 +0000 (16:31 +0000)
git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7625 d7cf8633-e32d-0410-b094-e92efae38249

sv_phys.c
sv_user.c

index 978768f..362689f 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -2115,6 +2115,7 @@ void SV_Physics_ClientEntity(prvm_edict_t *ent)
                                SV_AddGravity (ent);
                        SV_CheckStuck (ent);
                        SV_WalkMove (ent);
+                       host_client->cmd.time = max(host_client->cmd.time, sv.time); // ignore client movement data for anything before NOW
                }
                break;
        case MOVETYPE_TOSS:
index 70d3baf..a2fb80d 100644 (file)
--- a/sv_user.c
+++ b/sv_user.c
@@ -629,13 +629,8 @@ void SV_ExecuteClientMoves(void)
                        }
                }
                // now copy the new move
+               sv_readmoves[sv_numreadmoves-1].time = max(sv_readmoves[sv_numreadmoves-1].time, host_client->cmd.time); // prevent backstepping of time
                host_client->cmd = sv_readmoves[sv_numreadmoves-1];
-               host_client->cmd.time = max(host_client->cmd.time, sv.time);
-                       // physics will run up to sv.time, so allow no predicted moves
-                       // before that otherwise, there is a speedhack by turning
-                       // prediction on and off repeatedly on client side because the
-                       // engine would run BOTH client and server physics for the same
-                       // time
                host_client->movesequence = 0;
                // make sure that normal physics takes over immediately
                host_client->clmovement_skipphysicsframes = 0;