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