[nexuiz-commits] r6197 - in trunk/data/qcsrc: client server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Mar 17 04:04:47 EDT 2009
Author: div0
Date: 2009-03-17 04:04:33 -0400 (Tue, 17 Mar 2009)
New Revision: 6197
Modified:
trunk/data/qcsrc/client/projectile.qc
trunk/data/qcsrc/server/csqcprojectile.qc
trunk/data/qcsrc/server/csqcprojectile.qh
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/sv_main.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
Log:
fix some serious csqcprojectile bugs (regarding collisions with bmodels).
Now there is some visible jitter that wasn't there before wehn they're lying on a bmodel, but they no longer do the wrong thing.
Modified: trunk/data/qcsrc/client/projectile.qc
===================================================================
--- trunk/data/qcsrc/client/projectile.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/client/projectile.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -200,10 +200,17 @@
f = ReadByte();
self.count = (f & 0x80);
self.iflags = (self.iflags & IFLAG_INTERNALMASK) | IFLAG_AUTOANGLES | IFLAG_ANGLES;
- self.move_flags &~= FL_ONGROUND;
self.solid = SOLID_TRIGGER;
//self.effects = EF_NOMODELFLAGS;
+ // this should make collisions with bmodels more exact, but it leads to
+ // projectiles no longer being able to lie on a bmodel
+ self.move_nomonsters = MOVE_WORLDONLY;
+ if(f & 0x40)
+ self.move_flags |= FL_ONGROUND;
+ else
+ self.move_flags &~= FL_ONGROUND;
+
if(!self.move_time)
{
// for some unknown reason, we don't need to care for
Modified: trunk/data/qcsrc/server/csqcprojectile.qc
===================================================================
--- trunk/data/qcsrc/server/csqcprojectile.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/csqcprojectile.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -7,6 +7,9 @@
if(self.csqcprojectile_clientanimate)
sf |= 0x80; // client animated, not interpolated
+ if(self.flags & FL_ONGROUND)
+ sf |= 0x40;
+
WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
WriteByte(MSG_ENTITY, sf);
@@ -31,6 +34,16 @@
return 1;
}
+.vector csqcprojectile_oldorigin;
+void CSQCProjectile_Check(entity e)
+{
+ if(e.csqcprojectile_clientanimate)
+ if(e.flags & FL_ONGROUND)
+ if(e.origin != e.csqcprojectile_oldorigin)
+ UpdateCSQCProjectile(e);
+ e.csqcprojectile_oldorigin = e.origin;
+}
+
void CSQCProjectile(entity e, float clientanimate, float type, float docull)
{
Net_LinkEntity(e, docull, 0, CSQCProjectile_SendEntity);
@@ -51,5 +64,17 @@
void UpdateCSQCProjectile(entity e)
{
if(e.SendEntity == CSQCProjectile_SendEntity)
- e.SendFlags |= 1; // send new origin data
+ {
+ // send new origin data
+ e.SendFlags |= 1;
+ }
}
+
+void UpdateCSQCProjectileNextFrame(entity e)
+{
+ if(e.SendEntity == CSQCProjectile_SendEntity)
+ {
+ // send new origin data
+ e.NextFrameSendFlags |= 1;
+ }
+}
Modified: trunk/data/qcsrc/server/csqcprojectile.qh
===================================================================
--- trunk/data/qcsrc/server/csqcprojectile.qh 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/csqcprojectile.qh 2009-03-17 08:04:33 UTC (rev 6197)
@@ -2,3 +2,5 @@
void CSQCProjectile(entity e, float clientanimate, float type, float docull);
void UpdateCSQCProjectile(entity e);
+void UpdateCSQCProjectileNextFrame(entity e);
+void CSQCProjectile_Check(entity e);
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/defs.qh 2009-03-17 08:04:33 UTC (rev 6197)
@@ -551,3 +551,5 @@
.float wasplayer;
float servertime, serverprevtime, serverframetime;
+
+.float NextFrameSendFlags;
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -1797,8 +1797,7 @@
#define SUB_OwnerCheck() (other && (other == self.owner))
-#define PROJECTILE_TOUCH do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { remove(self); return; } } while(0)
-#define PROJECTILE_TOUCH_NOSOUND do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { stopsound(self, CHAN_PAIN); remove(self); return; } } while(0)
+#define PROJECTILE_TOUCH do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { remove(self); return; } if(trace_ent && trace_ent.solid > SOLID_TRIGGER) UpdateCSQCProjectileNextFrame(self); } while(0)
float MAX_IPBAN_URIS = 16;
Modified: trunk/data/qcsrc/server/sv_main.qc
===================================================================
--- trunk/data/qcsrc/server/sv_main.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/sv_main.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -140,6 +140,15 @@
dprint_load(); // load dprint status from cvar
+ entity e;
+ for(e = world; (e = findflags(e, NextFrameSendFlags, 0xFFFFFF)); )
+ {
+ e.SendFlags |= e.NextFrameSendFlags;
+ e.NextFrameSendFlags = 0;
+ }
+ for(e = world; (e = findfloat(e, csqcprojectile_clientanimate, 1)); )
+ CSQCProjectile_Check(e);
+
if(RedirectionThink())
return;
Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/w_crylink.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -25,8 +25,6 @@
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
//self.scale = 1 + self.cnt;
-
- UpdateCSQCProjectile(self);
}
void W_Crylink_Touch2 (void)
@@ -52,8 +50,6 @@
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
// self.scale = 1 + 1 * self.cnt;
-
- UpdateCSQCProjectile(self);
}
void W_Crylink_Attack (void)
Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/w_electro.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -35,9 +35,6 @@
sound (self, CHAN_PROJECTILE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
-
- if(trace_ent && trace_ent.solid > SOLID_TRIGGER) // CSQC doesn't know about these entities well enough
- UpdateCSQCProjectile(self);
}
void W_Plasma_TouchExplode (void)
Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -57,9 +57,6 @@
sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM);
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
-
- if(trace_ent && trace_ent.solid > SOLID_TRIGGER) // CSQC doesn't know about these entities well enough
- UpdateCSQCProjectile(self);
}
void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc 2009-03-16 13:40:48 UTC (rev 6196)
+++ trunk/data/qcsrc/server/w_hagar.qc 2009-03-17 08:04:33 UTC (rev 6197)
@@ -33,9 +33,6 @@
self.owner = world;
self.projectiledeathtype |= HITTYPE_BOUNCE;
}
-
- if(trace_ent && trace_ent.solid > SOLID_TRIGGER) // CSQC doesn't know about these entities well enough
- UpdateCSQCProjectile(self);
}
void W_Hagar_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
More information about the nexuiz-commits
mailing list