r5886 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Feb 17 09:46:54 EST 2009


Author: div0
Date: 2009-02-17 09:46:54 -0500 (Tue, 17 Feb 2009)
New Revision: 5886

Modified:
   trunk/data/qcsrc/server/cl_weaponsystem.qc
   trunk/data/qcsrc/server/constants.qh
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/extensions.qh
   trunk/data/qcsrc/server/t_teleporters.qc
   trunk/data/qcsrc/server/w_electro.qc
Log:
make use of EF_TELEPORT_BIT for weapon animation


Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-02-17 14:46:54 UTC (rev 5886)
@@ -254,6 +254,7 @@
 .string weaponname;
 void CL_Weaponentity_Think()
 {
+	float tb;
 	self.nextthink = time;
 	if (intermission_running)
 		self.frame = WFRAME_IDLE;
@@ -277,13 +278,13 @@
 		else
 			self.model = "";
 	}
+
+	tb = (self.effects & EF_TELEPORT_BIT);
 	self.effects = self.owner.effects | EF_LOWPRECISION;
-	self.effects = self.effects - (self.effects & (EF_FULLBRIGHT)); // can mask team color, so get rid of it
+	self.effects &~= EF_FULLBRIGHT; // can mask team color, so get rid of it
+	self.effects &~= EF_TELEPORT_BIT;
+	self.effects |= tb;
 
-	if (self.owner.teleport_time)
-		// owner is currently being teleported, so don't apply EF_NODRAW otherwise the viewmodel would "blink"
-		self.effects &~= EF_NODRAW;
-
 	if(self.owner.alpha != 0)
 		self.alpha = self.owner.alpha;
 	else
@@ -553,7 +554,13 @@
 	if (fr >= 0)
 	{
 		if (self.weaponentity != world)
+		{
+			if(fr == WFRAME_FIRE1 || fr == WFRAME_FIRE2)
+			{
+				BITXOR_ASSIGN(self.weaponentity.effects, EF_TELEPORT_BIT);
+			}
 			self.weaponentity.frame = fr;
+		}
 	}
 
 	if(self.weapon_think == w_ready && func != w_ready && self.weaponentity.state == WS_RAISE)

Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/constants.qh	2009-02-17 14:46:54 UTC (rev 5886)
@@ -119,7 +119,7 @@
 float	EF_BRIGHTLIGHT				= 4;
 float	EF_DIMLIGHT				= 8;
 
-#define EFMASK_CHEAP (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NODRAW | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE)
+#define EFMASK_CHEAP (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NODRAW | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT)
 
 float	MSG_BROADCAST				= 0; // unreliable
 float	MSG_ONE					= 1; // reliable

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/defs.qh	2009-02-17 14:46:54 UTC (rev 5886)
@@ -532,3 +532,7 @@
 void ClientData_Touch(entity e);
 
 vector debug_shotorg; // if non-zero, overrides the shot origin of all weapons
+
+// the QC VM sucks
+#define BITXOR(v,b)        ((v) + (b) - 2 * ((v) & (b)))
+#define BITXOR_ASSIGN(v,b) ((v) += ((b) - 2 * ((v) & (b))))

Modified: trunk/data/qcsrc/server/extensions.qh
===================================================================
--- trunk/data/qcsrc/server/extensions.qh	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/extensions.qh	2009-02-17 14:46:54 UTC (rev 5886)
@@ -183,6 +183,16 @@
 //description:
 //entity emits bouncing sparkles in every direction
 
+//DP_EF_TELEPORT_BIT
+//idea: id software
+//darkplaces implementation: div0
+//effects bit:
+float   EF_TELEPORT_BIT = 2097152;
+//description:
+//when toggled, interpolation of the entity is skipped for one frame. Useful for teleporting.
+//to toggle this bit in QC, you can do:
+//  self.effects += (EF_TELEPORT_BIT - 2 * (self.effects & EF_TELEPORT_BIT));
+
 //DP_ENT_ALPHA
 //idea: Nehahra
 //darkplaces implementation: LordHavoc

Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/t_teleporters.qc	2009-02-17 14:46:54 UTC (rev 5886)
@@ -64,6 +64,7 @@
 	player.angles = to_angles;
 	player.fixangle = TRUE;
 	player.velocity = to_velocity;
+	BITXOR_ASSIGN(player.effects, EF_TELEPORT_BIT);
 
 	UpdateCSQCProjectile(player);
 
@@ -72,10 +73,6 @@
 		if(player.takedamage && player.deadflag == DEAD_NO && !g_race)
 			tdeath(player, teleporter, telefragger, telefragmin, telefragmax);
 
-		// hide myself a tic
-		player.effects = player.effects | EF_NODRAW;
-		player.teleport_time = time + cvar("sys_ticrate");
-
 		// player no longer is on ground
 		player.flags &~= FL_ONGROUND;
 

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2009-02-17 14:46:38 UTC (rev 5885)
+++ trunk/data/qcsrc/server/w_electro.qc	2009-02-17 14:46:54 UTC (rev 5886)
@@ -138,6 +138,12 @@
 	proj.event_damage = W_Plasma_Damage;
 	proj.flags = FL_PROJECTILE;
 
+	entity p2;
+	p2 = spawn();
+	copyentity(proj, p2);
+	setmodel(p2, "models/ebomb.mdl");
+	setsize(p2, proj.mins, proj.maxs);
+
 	CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound
 }
 




More information about the nexuiz-commits mailing list