From 432fdce0e6f63debeb5310db1606dfe659946b11 Mon Sep 17 00:00:00 2001
From: divverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Wed, 10 Oct 2007 16:31:37 +0000
Subject: [PATCH] final speedhack fixes

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7625 d7cf8633-e32d-0410-b094-e92efae38249
---
 sv_phys.c | 1 +
 sv_user.c | 7 +------
 2 files changed, 2 insertions(+), 6 deletions(-)

diff --git a/sv_phys.c b/sv_phys.c
index 978768fe..362689f8 100644
--- 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:
diff --git a/sv_user.c b/sv_user.c
index 70d3bafc..a2fb80d8 100644
--- 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;
-- 
2.39.5