r5835 - in trunk/data: qcsrc/client qcsrc/common qcsrc/server scripts

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Feb 11 09:26:53 EST 2009


Author: div0
Date: 2009-02-11 09:26:52 -0500 (Wed, 11 Feb 2009)
New Revision: 5835

Modified:
   trunk/data/qcsrc/client/Main.qc
   trunk/data/qcsrc/client/particles.qc
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/w_common.qc
   trunk/data/scripts/shaderlist.txt
Log:
bullets with g_antilag_bullets now have some poor excuse of a trail. Warning, it crashes DP :P


Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/qcsrc/client/Main.qc	2009-02-11 14:26:52 UTC (rev 5835)
@@ -998,6 +998,10 @@
 			Net_ReadSpawn();
 			bHandled = true;
 			break;
+		case TE_CSQC_ZCURVEPARTICLES:
+			Net_ReadZCurveParticles();
+			bHandled = true;
+			break;
 		default:
 			// No special logic for this temporary entity; return 0 so the engine can handle it
 			bHandled = false;

Modified: trunk/data/qcsrc/client/particles.qc
===================================================================
--- trunk/data/qcsrc/client/particles.qc	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/qcsrc/client/particles.qc	2009-02-11 14:26:52 UTC (rev 5835)
@@ -189,3 +189,48 @@
 	else
 		self.draw = Draw_Snow;
 }
+
+void zcurveparticles(float effectnum, vector start, vector end, float end_dz, float depth)
+{
+	// end_dz:
+	//   IF IT WERE A STRAIGHT LINE, it'd end end_dz above end
+
+	vector mid;
+	mid = (start + end) * 0.5;
+
+	end_dz *= 0.25;
+	mid_z += end_dz;
+
+	--depth;
+	if(depth < 0 || normalize(mid - start) * normalize(end - start) > 0.999999)
+	// TODO make this a variable threshold
+	// currently: 0.081 degrees
+	// 0.99999 would be 0.256 degrees and is visible
+	{
+		trailparticles(world, effectnum, start, end);
+	}
+	else
+	{
+		zcurveparticles(effectnum, start, mid, end_dz, depth);
+		zcurveparticles(effectnum, mid, end, end_dz, depth);
+	}
+}
+
+void Net_ReadZCurveParticles()
+{
+	vector start, end;
+	float end_dz;
+	float effectnum;
+
+	effectnum = ReadShort();
+
+	start_x = ReadCoord();
+	start_y = ReadCoord();
+	start_z = ReadCoord();
+	end_x = ReadCoord();
+	end_y = ReadCoord();
+	end_z = ReadCoord();
+	end_dz = ReadCoord();
+
+	zcurveparticles(effectnum, start, end, end_dz, 5); // at most 32 segments
+}

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/qcsrc/common/constants.qh	2009-02-11 14:26:52 UTC (rev 5835)
@@ -45,6 +45,7 @@
 const float TE_CSQC_PICTURE = 100;
 const float TE_CSQC_RACE = 101;
 const float TE_CSQC_SPAWN = 102;
+const float TE_CSQC_ZCURVEPARTICLES = 103;
 
 const float RACE_NET_CHECKPOINT_HIT_QUALIFYING = 0; // byte checkpoint, short time, short recordtime, string recordholder
 const float RACE_NET_CHECKPOINT_CLEAR = 1;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2009-02-11 14:26:52 UTC (rev 5835)
@@ -1967,3 +1967,35 @@
 	else
 		return FALSE;
 }
+
+void zcurveparticles(float effectno, vector start, vector end, float end_dz)
+{
+	WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
+	WriteByte(MSG_BROADCAST, TE_CSQC_ZCURVEPARTICLES);
+	WriteShort(MSG_BROADCAST, effectno);
+	WriteCoord(MSG_BROADCAST, start_x);
+	WriteCoord(MSG_BROADCAST, start_y);
+	WriteCoord(MSG_BROADCAST, start_z);
+	WriteCoord(MSG_BROADCAST, end_x);
+	WriteCoord(MSG_BROADCAST, end_y);
+	WriteCoord(MSG_BROADCAST, end_z);
+	WriteCoord(MSG_BROADCAST, end_dz);
+}
+
+void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, vector vel)
+{
+	float end_dz;
+	vector vecxy, velxy;
+
+	vecxy = end - start; vecxy_z = 0;
+	velxy = vel;         velxy_z = 0;
+
+	if(vlen(velxy) < 0.000001 * fabs(vel_z))
+	{
+		trailparticles(world, effectno, start, end);
+		return;
+	}
+
+	end_dz = vlen(vecxy) / vlen(velxy) * vel_z - (end_z - start_z);
+	zcurveparticles(effectno, start, end, end_dz);
+}

Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/qcsrc/server/w_common.qc	2009-02-11 14:26:52 UTC (rev 5835)
@@ -192,6 +192,10 @@
 	float maxdist;
 	float E0_m, Es_m;
 
+	// outside the world? forget it
+	if(self.origin_x > world.maxs_x || self.origin_y > world.maxs_y || self.origin_z > world.maxs_z || self.origin_x < world.mins_x || self.origin_y < world.mins_y || self.origin_z < world.mins_z)
+		return 0;
+
 	// E(s) = E0 - constant * s, constant = area of bullet circle * material constant / mass
 	v0 = vlen(vel);
 
@@ -315,7 +319,27 @@
 
 		for(;;)
 		{
+			// DP tracetoss is stupid and always traces in 0.05s
+			// ticks. This makes it trace in 0.05*0.125s ticks
+			// instead.
+			vector v0;
+			float g0;
+			v0 = self.velocity;
+			g0 = self.gravity;
+			self.velocity = self.velocity * 0.125;
+			self.gravity *= 0.125 * 0.125;
+			trace_fraction = 0;
 			tracetoss(self, oldself);
+			self.velocity = v0;
+			self.gravity = g0;
+
+			zcurveparticles_from_tracetoss(particleeffectnum("TR_VORESPIKE"), self.origin, trace_endpos, self.velocity);
+			if(trace_fraction == 1)
+				break;
+				// won't hit anything anytime soon (DP's
+				// tracetoss does 200 tics of, here,
+				// 0.05*0.125s, that is, 1.25 seconds
+
 			other = trace_ent;
 			dt = vlen(trace_endpos - self.origin) / vlen(self.velocity); // this is only approximate!
 			setorigin(self, trace_endpos);

Modified: trunk/data/scripts/shaderlist.txt
===================================================================
--- trunk/data/scripts/shaderlist.txt	2009-02-11 13:58:31 UTC (rev 5834)
+++ trunk/data/scripts/shaderlist.txt	2009-02-11 14:26:52 UTC (rev 5835)
@@ -52,3 +52,5 @@
 turrets
 tznex01
 water
+caverna
+hlac




More information about the nexuiz-commits mailing list