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