From: terencehill <piuntn@gmail.com>
Date: Mon, 24 Jul 2017 15:27:51 +0000 (+0200)
Subject: Reduce stepwalk height when there's an obstacle (e.g. a very low ceiling) above curre... 
X-Git-Tag: xonotic-v0.8.5~2378^2~121
X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=e9497e95824804373e4ea578092ab9c1f4b571fd;p=xonotic%2Fxonotic-data.pk3dir.git

Reduce stepwalk height when there's an obstacle (e.g. a very low ceiling) above current position
---

diff --git a/qcsrc/server/bot/default/navigation.qc b/qcsrc/server/bot/default/navigation.qc
index 8710c4c2a..cf7181dc5 100644
--- a/qcsrc/server/bot/default/navigation.qc
+++ b/qcsrc/server/bot/default/navigation.qc
@@ -424,10 +424,27 @@ bool tracewalk(entity e, vector start, vector m1, vector m2, vector end, float e
 				tracebox(org + stepheightvec, m1, m2, move + stepheightvec, movemode, e);
 				if (trace_fraction < 1 || trace_startsolid)
 				{
-					tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
-					if (trace_fraction < 1 || trace_startsolid)
+					if (trace_startsolid) // hit ceiling above org
 					{
-						vector v = trace_endpos - jumpstepheightvec + jumpheight_vec;
+						// reduce stepwalk height
+						tracebox(org, m1, m2, org + stepheightvec, movemode, e);
+						tracebox(trace_endpos, m1, m2, move + eZ * (trace_endpos.z - move.z), movemode, e);
+					}
+					else //if (trace_fraction < 1)
+					{
+						tracebox(org + jumpstepheightvec, m1, m2, move + jumpstepheightvec, movemode, e);
+						if (trace_startsolid) // hit ceiling above org
+						{
+							// reduce jumpstepwalk height
+							tracebox(org, m1, m2, org + jumpstepheightvec, movemode, e);
+							tracebox(trace_endpos, m1, m2, move + eZ * (trace_endpos.z - move.z), movemode, e);
+						}
+					}
+
+					if (trace_fraction < 1)
+					{
+						vector v = trace_endpos;
+						v.z = org.z + jumpheight_vec.z;
 						if(navigation_checkladders(e, v, m1, m2, end, end2, movemode))
 						{
 							if(autocvar_bot_debug_tracewalk)