r4959 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Nov 1 08:07:50 EDT 2008


Author: div0
Date: 2008-11-01 08:07:50 -0400 (Sat, 01 Nov 2008)
New Revision: 4959

Modified:
   trunk/data/qcsrc/server/g_casings.qc
   trunk/data/qcsrc/server/g_hook.qc
   trunk/data/qcsrc/server/g_triggers.qc
   trunk/data/qcsrc/server/g_violence.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/w_crylink.qc
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
   trunk/data/qcsrc/server/w_hagar.qc
   trunk/data/qcsrc/server/w_hlac.qc
   trunk/data/qcsrc/server/w_hook.qc
   trunk/data/qcsrc/server/w_laser.qc
   trunk/data/qcsrc/server/w_porto.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_seeker.qc
Log:
factor out noimpact checks, make ALL projectiles use the anti-skygrapple workaround; make trigger_hurt no longer hurt projectiles (as that sucks)


Modified: trunk/data/qcsrc/server/g_casings.qc
===================================================================
--- trunk/data/qcsrc/server/g_casings.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/g_casings.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -1,10 +1,7 @@
 void casingtouch()
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
+
 	if (other.solid == SOLID_BSP)
 	if (vlen(self.velocity) >= 50)
 	if (time >= self.attack_finished_single)

Modified: trunk/data/qcsrc/server/g_hook.qc
===================================================================
--- trunk/data/qcsrc/server/g_hook.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/g_hook.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -258,11 +258,9 @@
 
 void GrapplingHookTouch (void)
 {
-	if (other == self.owner)
+	if(SUB_OwnerCheck())
 		return;
-	// altered for Nexuiz
-	//else if (pointcontents (self.origin) == CONTENT_SKY)
-	else if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+	if(SUB_NoImpactCheck())
 	{
 		RemoveGrapplingHook(self.owner);
 		return;

Modified: trunk/data/qcsrc/server/g_triggers.qc
===================================================================
--- trunk/data/qcsrc/server/g_triggers.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/g_triggers.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -365,28 +365,33 @@
 void trigger_hurt_touch()
 {
 	// only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu)
-	if (!other.owner)
+	if (other.iscreature)
 	{
-		if (other.items & IT_KEY1 || other.items & IT_KEY2)	// reset flag
+		if (other.takedamage)
+		if (other.triggerhurttime < time)
 		{
 			EXACTTRIGGER_TOUCH;
-			other.pain_finished = min(other.pain_finished, time + 2);
+			other.triggerhurttime = time + 1;
+			Damage (other, self, self, self.dmg, DEATH_HURTTRIGGER, other.origin, '0 0 0');
 		}
-		else if (other.classname == "rune")			// reset runes
+	}
+	else
+	{
+		if (!other.owner)
 		{
-			EXACTTRIGGER_TOUCH;
-			other.nextthink = min(other.nextthink, time + 1);
+			if (other.items & IT_KEY1 || other.items & IT_KEY2)	// reset flag
+			{
+				EXACTTRIGGER_TOUCH;
+				other.pain_finished = min(other.pain_finished, time + 2);
+			}
+			else if (other.classname == "rune")			// reset runes
+			{
+				EXACTTRIGGER_TOUCH;
+				other.nextthink = min(other.nextthink, time + 1);
+			}
 		}
 	}
 
-	if (other.takedamage)
-	if (other.triggerhurttime < time)
-	{
-		EXACTTRIGGER_TOUCH;
-		other.triggerhurttime = time + 1;
-		Damage (other, self, self, self.dmg, DEATH_HURTTRIGGER, other.origin, '0 0 0');
-	}
-
 	return;
 };
 

Modified: trunk/data/qcsrc/server/g_violence.qc
===================================================================
--- trunk/data/qcsrc/server/g_violence.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/g_violence.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -24,7 +24,7 @@
 
 void GibTouch ()
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+	if(SUB_NoImpactCheck())
 	{
 		SUB_VanishOrRemove(self);
 		return;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -1595,3 +1595,33 @@
 {
 	return trace_hits_box(start, end, thmi - ma, thma - mi);
 }
+
+float SUB_NoImpactCheck()
+{
+	if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+		return 1;
+	if(other == world && self.size != '0 0 0')
+	{
+		vector tic;
+		tic = self.velocity * sys_ticrate;
+		tic = tic + normalize(tic) * vlen(self.maxs - self.mins);
+		traceline(self.origin - tic, self.origin + tic, MOVE_NORMAL, self);
+		if(trace_fraction >= 1)
+		{
+			dprint("Odd... did not hit...?\n");
+		}
+		else if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+		{
+			dprint("Detected and prevented the sky-grapple bug.\n");
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+#define SUB_OwnerCheck() (other == self.owner)
+
+#define PROJECTILE_TOUCH do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { remove(self); return; } } while(0)
+const string STR_MISC_NULL_WAV = "misc/null.wav";
+#define PROJECTILE_TOUCH_NOSOUND do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { sound (self, CHAN_PROJECTILE, STR_MISC_NULL_WAV, VOL_BASE, ATTN_NORM); remove(self); return; } } while(0)

Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_crylink.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -7,11 +7,7 @@
 {
 	float finalhit;
 	float f;
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 	pointparticles(particleeffectnum("crylink_impactbig"), self.origin, '0 0 0', 1);
 	finalhit = ((self.cnt <= 0) || (other.takedamage != DAMAGE_NO));
 	if(finalhit)
@@ -37,11 +33,7 @@
 {
 	float finalhit;
 	float f;
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 	pointparticles(particleeffectnum("crylink_impact"), self.origin, '0 0 0', 1);
 	finalhit = ((self.cnt <= 0) || (other.takedamage != DAMAGE_NO));
 	if(finalhit)

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_electro.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -42,12 +42,7 @@
 
 void W_Plasma_Touch (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH_NOSOUND;
 	if (other.takedamage == DAMAGE_AIM) {
 		W_Plasma_Explode ();
 	} else {
@@ -58,14 +53,7 @@
 
 void W_Plasma_TouchExplode (void)
 {
-	entity o;
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
-		remove(self);
-		return;
-	}
-	o = self.owner;
+	PROJECTILE_TOUCH_NOSOUND;
 	W_Plasma_Explode ();
 }
 

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -38,21 +38,13 @@
 
 void W_Grenade_Touch1 (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 	W_Grenade_Explode ();
 }
 
 void W_Grenade_Touch2 (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 	if (other.takedamage == DAMAGE_AIM)
 	{
 		self.use ();

Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_hagar.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -40,24 +40,13 @@
 
 void W_Hagar_Touch (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
-	if (other == self.owner)
-		return;
-
+	PROJECTILE_TOUCH;
 	self.use ();
 }
 
 void W_Hagar_Touch2 (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 
 	if(self.cnt > 0 || other.takedamage == DAMAGE_AIM) {
 		self.use();

Modified: trunk/data/qcsrc/server/w_hlac.qc
===================================================================
--- trunk/data/qcsrc/server/w_hlac.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_hlac.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -5,15 +5,8 @@
 	vector org2;
 	vector normal;
 
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 
-	if (other == self.owner)
-		return;
-
 	normal = trace_plane_normal;
 	dir = normalize (self.owner.origin - self.origin);
 	org2 = findbetterlocation (self.origin, 8);
@@ -34,15 +27,8 @@
 	vector org2;
 	vector normal;
 
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 
-	if (other == self.owner)
-		return;
-
 	normal = trace_plane_normal;
 	dir = normalize (self.owner.origin - self.origin);
 	org2 = findbetterlocation (self.origin, 8);

Modified: trunk/data/qcsrc/server/w_hook.qc
===================================================================
--- trunk/data/qcsrc/server/w_hook.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_hook.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -14,11 +14,7 @@
 
 void W_Hook_Touch2 (void)
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 	self.use();
 }
 

Modified: trunk/data/qcsrc/server/w_laser.qc
===================================================================
--- trunk/data/qcsrc/server/w_laser.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_laser.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -6,15 +6,8 @@
 	vector org2;
 	vector normal;
 
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH;
 
-	if (other == self.owner)
-		return;
-
 	normal = trace_plane_normal;
 	dir = normalize (self.owner.origin - self.origin);
 	org2 = findbetterlocation (self.origin, 8);

Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_porto.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -72,6 +72,8 @@
 {
 	vector norm;
 
+	// do not use PROJECTILE_TOUCH here
+
 	if(other.classname == "portal")
 		return; // handled by the portal
 

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -182,12 +182,7 @@
 {
 	if(self.owner && self.owner.lastrocket == self)
 		self.owner.lastrocket = world;
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		sound (self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
-		remove(self);
-		return;
-	}
+	PROJECTILE_TOUCH_NOSOUND;
 	W_Rocket_Explode ();
 }
 

Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc	2008-11-01 11:46:33 UTC (rev 4958)
+++ trunk/data/qcsrc/server/w_seeker.qc	2008-11-01 12:07:50 UTC (rev 4959)
@@ -25,13 +25,7 @@
 
 void Seeker_Missile_Touch()
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
-    if (other == self.owner)
-        return;
+	PROJECTILE_TOUCH;
 
     Seeker_Missile_Explode();
 }
@@ -290,13 +284,7 @@
     vector dir;
     vector org2;
 
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
-    if (other == self.owner)
-        return;
+	PROJECTILE_TOUCH;
 
     dir     = normalize (self.owner.origin - self.origin);
     org2    = findbetterlocation (self.origin, 8);
@@ -355,6 +343,7 @@
 
     setmodel (missile, "models/laser.mdl"); // TODO make this seeker specific
     setorigin (missile, w_shotorg);
+    setsize (missile, '0 0 0', '0 0 0');
 
     missile.effects     = EF_FULLBRIGHT | EF_NOSHADOW | EF_LOWPRECISION;
     missile.modelflags  = MF_TRACER3;
@@ -391,13 +380,7 @@
 
 void Seeker_Flac_Touch()
 {
-	if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-	{
-		remove(self);
-		return;
-	}
-    if (other == self.owner)
-        return;
+	PROJECTILE_TOUCH;
 
     Seeker_Flac_Explode();
 }




More information about the nexuiz-commits mailing list