[nexuiz-commits] r6779 - in trunk/data/qcsrc: client server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed May 27 08:31:48 EDT 2009


Author: div0
Date: 2009-05-27 08:31:47 -0400 (Wed, 27 May 2009)
New Revision: 6779

Modified:
   trunk/data/qcsrc/client/View.qc
   trunk/data/qcsrc/server/cl_weaponsystem.qc
Log:
keep shot origins outside walls (maybe fixes a bug dokujisan found)


Modified: trunk/data/qcsrc/client/View.qc
===================================================================
--- trunk/data/qcsrc/client/View.qc	2009-05-26 16:57:39 UTC (rev 6778)
+++ trunk/data/qcsrc/client/View.qc	2009-05-27 12:31:47 UTC (rev 6779)
@@ -210,7 +210,7 @@
 {
 	float nudge = 1; // added to traceline target and subtracted from result
 	vector vecs, trueaimpoint, w_shotorg;
-	vector mi, ma;
+	vector mi, ma, dv;
 
 	mi = ma = '0 0 0';
 
@@ -244,8 +244,13 @@
 	else
 		vecs = '0 0 0';
 
-	w_shotorg = view_origin + view_right * vecs_y + view_up * vecs_z;
+	dv = view_right * vecs_y + view_up * vecs_z;
+	w_shotorg = view_origin + dv;
 
+	// move the vecs sideways as much as requested if possible
+	traceline(view_origin, w_shotorg + normalize(dv) * nudge, MOVE_NORMAL, trueaim);
+	w_shotorg = trace_endpos - normalize(dv) * nudge;
+
 	// now move the vecs forward as much as requested if possible
 	traceline(w_shotorg, w_shotorg + view_forward * (vecs_x + nudge), MOVE_NORMAL, trueaim); // FIXME this MOVE_NORMAL part will misbehave a little in csqc
 	w_shotorg = trace_endpos - view_forward * nudge;

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-05-26 16:57:39 UTC (rev 6778)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-05-27 12:31:47 UTC (rev 6779)
@@ -108,7 +108,7 @@
 	float nudge = 1; // added to traceline target and subtracted from result
 	local vector trueaimpoint;
 	local float oldsolid;
-	vector vecs;
+	vector vecs, dv;
 	oldsolid = ent.dphitcontentsmask;
 	ent.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
 	traceline(ent.origin + ent.view_ofs, ent.origin + ent.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, ent);
@@ -127,8 +127,13 @@
 	if(debug_shotorg != '0 0 0')
 		vecs = debug_shotorg;
 	
-	w_shotorg = ent.origin + ent.view_ofs + v_right * vecs_y + v_up * vecs_z;
+	dv = v_right * vecs_y + v_up * vecs_z;
+	w_shotorg = ent.origin + ent.view_ofs + dv;
 
+	// move the vecs sideways as much as requested if possible
+	traceline(ent.origin + ent.view_ofs, w_shotorg + normalize(dv) * nudge, MOVE_NORMAL, ent);
+	w_shotorg = trace_endpos - normalize(dv) * nudge;
+
 	// now move the shotorg forward as much as requested if possible
 	traceline(w_shotorg, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, ent);
 	w_shotorg = trace_endpos - v_forward * nudge;



More information about the nexuiz-commits mailing list