Merge PR 'sv_gameplayfix_stepmultipletimes 1: Prevent players moving too far/fast...
authorbones_was_here <bones_was_here@xa.org.au>
Sun, 16 Jan 2022 20:54:53 +0000 (06:54 +1000)
committerbones_was_here <bones_was_here@xa.org.au>
Sun, 16 Jan 2022 20:54:53 +0000 (06:54 +1000)
After the player made some horizontal progress, and before stepping up, it's necessary to recalculate the remaining time and distance for the move. Previously the step up made the player travel (up to) nearly the move's full distance, again.

https://github.com/DarkPlacesEngine/darkplaces/pull/10

branch: bones_was_here/stepup_distance
commits: 365e221966b15c24c6e2f4cbb6e619b0db443ebf

Signed-off-by: bones_was_here <bones_was_here@xa.org.au>
sv_phys.c

index 2e61888d5bba7b669f56e7bf3dd20874e32a5291..f2b515935fd2fd7707da4327e2fb9c4af32c35d3 100644 (file)
--- a/sv_phys.c
+++ b/sv_phys.c
@@ -1255,6 +1255,9 @@ static int SV_FlyMove (prvm_edict_t *ent, float time, qbool applygravity, float
 
                if (trace.fraction == 1)
                        break;
+
+               time_left *= 1 - trace.fraction;
+
                if (trace.plane.normal[2])
                {
                        if (trace.plane.normal[2] > 0.7)
@@ -1282,6 +1285,7 @@ static int SV_FlyMove (prvm_edict_t *ent, float time, qbool applygravity, float
                        trace_t steptrace3;
                        //Con_Printf("step %f %f %f : ", PRVM_serveredictvector(ent, origin)[0], PRVM_serveredictvector(ent, origin)[1], PRVM_serveredictvector(ent, origin)[2]);
                        VectorSet(steppush, 0, 0, stepheight);
+                       VectorScale(PRVM_serveredictvector(ent, velocity), time_left, push);
                        VectorCopy(PRVM_serveredictvector(ent, origin), org);
                        if(!SV_PushEntity(&steptrace, ent, steppush, false))
                        {
@@ -1334,8 +1338,6 @@ static int SV_FlyMove (prvm_edict_t *ent, float time, qbool applygravity, float
                        numplanes = 0;
                }
 
-               time_left *= 1 - trace.fraction;
-
                // clipped to another plane
                if (numplanes >= MAX_CLIP_PLANES)
                {