]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - phys.c
NudgeOutOfSolid: fix "random" failures on slightly inclined planes
[xonotic/darkplaces.git] / phys.c
diff --git a/phys.c b/phys.c
index 1e602a1ffbe72013669221e7c31bea1629f77cb8..bf6c525dd63a7c543e9f47d12d883ed63805c295 100644 (file)
--- a/phys.c
+++ b/phys.c
@@ -55,7 +55,10 @@ int PHYS_NudgeOutOfSolid(prvm_prog_t *prog, prvm_edict_t *ent)
                        else
                                stucktrace = CL_TraceBox(stuckorigin, stuckmins, stuckmaxs, stuckorigin, pass ? MOVE_WORLDONLY : MOVE_NOMONSTERS, ent, SV_GenericHitSuperContentsMask(ent), 0, 0, collision_extendmovelength.value, pass ? false : true, false, NULL, false);
 
-                       if (!stucktrace.bmodelstartsolid || stucktrace.startdepth >= 0)
+                       // Separation compared here to ensure a good location will be recognised reliably.
+                       if (-stucktrace.startdepth <= separation
+                       || (!stucktrace.bmodelstartsolid && !stucktrace.worldstartsolid)
+                       || (pass && !stucktrace.worldstartsolid))
                        {
                                // found a good location, use it
                                VectorCopy(stuckorigin, PRVM_serveredictvector(ent, origin));