[nexuiz-commits] r6133 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Mar 13 08:21:49 EDT 2009


Author: div0
Date: 2009-03-13 08:21:49 -0400 (Fri, 13 Mar 2009)
New Revision: 6133

Modified:
   trunk/data/qcsrc/server/cl_weapons.qc
   trunk/data/qcsrc/server/cl_weaponsystem.qc
Log:
derive the shot origin automatically from the hand model; properly support shootfromcenter again


Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc	2009-03-13 10:53:41 UTC (rev 6132)
+++ trunk/data/qcsrc/server/cl_weapons.qc	2009-03-13 12:21:49 UTC (rev 6133)
@@ -325,7 +325,7 @@
 			sound (self, CHAN_WEAPON2, "weapons/weapon_switch.wav", VOL_BASE, ATTN_NORM);
 			self.weaponentity.state = WS_DROP;
 			// set up weapon switch think in the future, and start drop anim
-			weapon_thinkf(WFRAME_IDLE, cvar("g_balance_weaponswitchdelay"), w_clear);
+			weapon_thinkf(WFRAME_DONTCHANGE, cvar("g_balance_weaponswitchdelay"), w_clear);
 			weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
 #ifndef INDEPENDENT_ATTACK_FINISHED
 			}

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-03-13 10:53:41 UTC (rev 6132)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-03-13 12:21:49 UTC (rev 6133)
@@ -16,6 +16,7 @@
 .float antilag_debug;
 
 // VorteX: static frame globals
+float WFRAME_DONTCHANGE = -1;
 float WFRAME_FIRE1 = 0;
 float WFRAME_FIRE2 = 1;
 float WFRAME_IDLE = 2;
@@ -40,15 +41,21 @@
 	traceline(self.origin + self.view_ofs, self.origin + self.view_ofs + v_forward * MAX_SHOT_DISTANCE, MOVE_NOMONSTERS, self);
 	trueaimpoint = trace_endpos;
 
+	if(ent.weaponentity.movedir_x > 0)
+	{
+		vecs = ent.weaponentity.movedir;
+		vecs_y = -vecs_y;
+	}
+	else if (cvar("g_shootfromeye"))
+		vecs_y = vecs_z = 0;
+	else if (cvar("g_shootfromcenter"))
+		vecs_y = 0;
+
 	if(debug_shotorg != '0 0 0')
 		vecs = debug_shotorg;
+	
+	w_shotorg = ent.origin + ent.view_ofs + v_right * vecs_y + v_up * vecs_z;
 
-	if (cvar("g_shootfromeye"))
-		w_shotorg = ent.origin + ent.view_ofs;
-	else if (cvar("g_shootfromcenter"))
-		w_shotorg = ent.origin + ent.view_ofs + v_up * vecs_z;
-	else
-		w_shotorg = ent.origin + ent.view_ofs + v_right * vecs_y + v_up * vecs_z;
 	// now move the shotorg forward as much as requested if possible
 	traceline(w_shotorg, w_shotorg + v_forward * (vecs_x + nudge), MOVE_NORMAL, self);
 	w_shotorg = trace_endpos - v_forward * nudge;
@@ -271,6 +278,7 @@
 .vector weapon_morph4angles;
 .float  weapon_morph4time;
 .string weaponname;
+#define QCWEAPONANIMATION_ORIGIN(e) ((weapon_offset_x + e.view_ofs_x) * v_forward - (weapon_offset_y + e.view_ofs_y) * v_right + (weapon_offset_z + e.view_ofs_z) * v_up + weapon_adjust)
 
 void CL_Weaponentity_Think()
 {
@@ -350,14 +358,61 @@
 		else
 			self.model = "";
 
-		// check if an instant weapon switch occurred
-		if (qcweaponanimation)
-		if (self.state == WS_READY)
+		if(qcweaponanimation)
 		{
 			self.angles = '0 0 0';
 			makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
-			setorigin(self, weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust);
+			self.movedir = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.movedir_x += 30;
 		}
+		else
+		{
+			float idx;
+			idx = gettagindex(self, "shot");
+			if(!idx)
+			{
+				print("WARNING: the weapon ", self.model, " does not support the correct shot origin tag.\n");
+				idx = gettagindex(self, "bone02");
+			}
+			if(idx)
+			{
+				self.origin = '0 0 0';
+				self.angles = '0 0 0';
+				self.frame = 0;
+				self.viewmodelforclient = world;
+				self.movedir = gettaginfo(self, idx);
+				self.viewmodelforclient = self.owner;
+			}
+			else
+				self.movedir = '0 0 0';
+		}
+
+		self.view_ofs = '0 0 0';
+
+		if(cvar("g_shootfromcenter") || cvar("g_shootfromeye"))
+		if(self.movedir_x >= 0)
+		{
+			self.view_ofs_y = -self.movedir_y;
+			self.movedir_y = 0;
+		}
+
+		if(cvar("g_shootfromeye"))
+		{
+			self.movedir_z = 0;
+		}
+
+		// check if an instant weapon switch occurred
+		if (qcweaponanimation)
+		{
+			if (self.state == WS_READY)
+			{
+				self.angles = '0 0 0';
+				makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
+				setorigin(self, QCWEAPONANIMATION_ORIGIN(self));
+			}
+		}
+		else
+			setorigin(self, self.view_ofs);
 		// reset animstate now
 		self.wframe = WFRAME_IDLE;
 		self.weapon_morph0time = 0;
@@ -366,28 +421,6 @@
 		self.weapon_morph3time = 0;
 		self.weapon_morph4time = 0;
 		setanim(self, self.anim_idle, TRUE, FALSE, TRUE);
-
-		if(cvar("g_shootfromcenter") || cvar("g_shootfromeye"))
-		{
-			entity e;
-			e = spawn();
-			e.modelindex = self.modelindex;
-			float idx;
-			vector v;
-			idx = gettagindex(e, "shot");
-			if (!idx)
-				idx = gettagindex(e, "bone02");
-			if(idx)
-			{
-				v = gettaginfo(e, idx);
-				setorigin(self, '0 -1 0' * v_y);
-			}
-			else
-				setorigin(self, '0 0 0');
-			remove(e);
-		}
-		else
-			setorigin(self, '0 0 0');
 	}
 
 	tb = (self.effects & EF_TELEPORT_BIT);
@@ -419,7 +452,7 @@
 		if (qcweaponanimation)
 		{
 			makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
-			setorigin(self, weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust);
+			setorigin(self, QCWEAPONANIMATION_ORIGIN(self));
 		}
 	}
 	else if (self.state == WS_DROP)
@@ -429,7 +462,7 @@
 		if (qcweaponanimation)
 		{
 			makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
-			setorigin(self, weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust);
+			setorigin(self, QCWEAPONANIMATION_ORIGIN(self));
 		}
 	}
 	else if (self.state == WS_CLEAR)
@@ -439,7 +472,7 @@
 		if (qcweaponanimation)
 		{
 			makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0' + self.angles_z * '0 0 1');
-			setorigin(self, weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust);
+			setorigin(self, QCWEAPONANIMATION_ORIGIN(self));
 		}
 	}
 	else if (qcweaponanimation && time < self.owner.weapon_morph1time)
@@ -488,17 +521,17 @@
 			self.owner.weapon_morph1time   = time + t * 0.2;
 			self.owner.weapon_morph1angles = randomvec() * 3 + '-5 30 0';
 			makevectors(self.owner.weapon_morph1angles_x * '-1 0 0' + self.owner.weapon_morph1angles_y * '0 1 0' + self.owner.weapon_morph1angles_z * '0 0 1');
-			self.owner.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph2time   = time + t * 0.6;
 			self.owner.weapon_morph2angles = randomvec() * 3 + '-5 30 0';
 			makevectors(self.owner.weapon_morph2angles_x * '-1 0 0' + self.owner.weapon_morph2angles_y * '0 1 0' + self.owner.weapon_morph2angles_z * '0 0 1');
-			self.owner.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph3time   = time + t;
 			self.owner.weapon_morph3angles = '0 0 0';
 			makevectors(self.owner.weapon_morph3angles_x * '-1 0 0' + self.owner.weapon_morph3angles_y * '0 1 0' + self.owner.weapon_morph3angles_z * '0 0 1');
-			self.owner.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self);
 		}
 		else if (r < 0.2)
 		{
@@ -507,17 +540,17 @@
 			self.owner.weapon_morph1time   = time + t * 0.2;
 			self.owner.weapon_morph1angles = randomvec() * 3 + '30 -10 0';
 			makevectors(self.owner.weapon_morph1angles_x * '-1 0 0' + self.owner.weapon_morph1angles_y * '0 1 0' + self.owner.weapon_morph1angles_z * '0 0 1');
-			self.owner.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph2time   = time + t * 0.5;
 			self.owner.weapon_morph2angles = randomvec() * 3 + '30 -10 5';
 			makevectors(self.owner.weapon_morph2angles_x * '-1 0 0' + self.owner.weapon_morph2angles_y * '0 1 0' + self.owner.weapon_morph2angles_z * '0 0 1');
-			self.owner.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph3time   = time + t;
 			self.owner.weapon_morph3angles = '0 0 0';
 			makevectors(self.owner.weapon_morph3angles_x * '-1 0 0' + self.owner.weapon_morph3angles_y * '0 1 0' + self.owner.weapon_morph3angles_z * '0 0 1');
-			self.owner.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self);
 		}
 		else if (r < 0.3)
 		{
@@ -526,17 +559,17 @@
 			self.owner.weapon_morph1time   = time + t * 0.3;
 			self.owner.weapon_morph1angles = randomvec() * 6;
 			makevectors(self.owner.weapon_morph1angles_x * '-1 0 0' + self.owner.weapon_morph1angles_y * '0 1 0' + self.owner.weapon_morph1angles_z * '0 0 1');
-			self.owner.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph2time   = time + t * 0.7;
 			self.owner.weapon_morph2angles = randomvec() * 6;
 			makevectors(self.owner.weapon_morph2angles_x * '-1 0 0' + self.owner.weapon_morph2angles_y * '0 1 0' + self.owner.weapon_morph2angles_z * '0 0 1');
-			self.owner.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph3time   = time + t;
 			self.owner.weapon_morph3angles = '0 0 0';
 			makevectors(self.owner.weapon_morph3angles_x * '-1 0 0' + self.owner.weapon_morph3angles_y * '0 1 0' + self.owner.weapon_morph3angles_z * '0 0 1');
-			self.owner.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self);
 		}
 		else
 		{
@@ -545,23 +578,23 @@
 			self.owner.weapon_morph1time   = time + t * 0.2;
 			self.owner.weapon_morph1angles = randomvec() * 1;
 			makevectors(self.owner.weapon_morph1angles_x * '-1 0 0' + self.owner.weapon_morph1angles_y * '0 1 0' + self.owner.weapon_morph1angles_z * '0 0 1');
-			self.owner.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph2time   = time + t * 0.5;
 			self.owner.weapon_morph2angles = randomvec() * 1;
 			makevectors(self.owner.weapon_morph2angles_x * '-1 0 0' + self.owner.weapon_morph2angles_y * '0 1 0' + self.owner.weapon_morph2angles_z * '0 0 1');
-			self.owner.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self);
 
 			self.owner.weapon_morph3time   = time + t * 0.7;
 			self.owner.weapon_morph3angles = randomvec() * 1;
 			makevectors(self.owner.weapon_morph3angles_x * '-1 0 0' + self.owner.weapon_morph3angles_y * '0 1 0' + self.owner.weapon_morph3angles_z * '0 0 1');
-			self.owner.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+			self.owner.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self);
 		}
 
 		self.owner.weapon_morph4time   = time + t;
 		self.owner.weapon_morph4angles = '0 0 0';
 		makevectors(self.owner.weapon_morph4angles_x * '-1 0 0' + self.owner.weapon_morph4angles_y * '0 1 0' + self.owner.weapon_morph4angles_z * '0 0 1');
-		self.owner.weapon_morph4origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+		self.owner.weapon_morph4origin = QCWEAPONANIMATION_ORIGIN(self);
 
 	}
 
@@ -816,8 +849,13 @@
 	vector of, or, ou;
 	float restartanim;
 
-	if (fr == WFRAME_IDLE)
+	if(fr == WFRAME_DONTCHANGE)
+	{
+		fr = self.weaponentity.wframe;
 		restartanim = FALSE;
+	}
+	else if (fr == WFRAME_IDLE)
+		restartanim = FALSE;
 	else
 		restartanim = TRUE;
 
@@ -839,29 +877,29 @@
 				self.weapon_morph1angles = '0 0 0';
 				self.weapon_morph1time = time + t;
 				makevectors(self.weapon_morph1angles_x * '-1 0 0' + self.weapon_morph1angles_y * '0 1 0' + self.weapon_morph1angles_z * '0 0 1');
-				self.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+				self.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 
 				self.weapon_morph2angles = '0 0 0';
 				self.weapon_morph2time = time + t;
 				makevectors(self.weapon_morph2angles_x * '-1 0 0' + self.weapon_morph2angles_y * '0 1 0' + self.weapon_morph2angles_z * '0 0 1');
-				self.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+				self.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 
 				self.weapon_morph3angles = '0 0 0';
 				self.weapon_morph3time = time + t;
 				makevectors(self.weapon_morph3angles_x * '-1 0 0' + self.weapon_morph3angles_y * '0 1 0' + self.weapon_morph3angles_z * '0 0 1');
-				self.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+				self.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 
 				self.weapon_morph4angles = '0 0 0';
 				self.weapon_morph4time = time + t;
 				makevectors(self.weapon_morph4angles_x * '-1 0 0' + self.weapon_morph4angles_y * '0 1 0' + self.weapon_morph4angles_z * '0 0 1');
-				self.weapon_morph4origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+				self.weapon_morph4origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 
 				if (fr == WFRAME_FIRE1)
 				{
 					self.weapon_morph1angles = '5 0 0';
 					self.weapon_morph1time = time + t * 0.1;
 					makevectors(self.weapon_morph1angles_x * '-1 0 0' + self.weapon_morph1angles_y * '0 1 0' + self.weapon_morph1angles_z * '0 0 1');
-					self.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+					self.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 					self.weapon_morph4time = time + t + 1; // delay idle effect
 				}
 				else if (fr == WFRAME_FIRE2)
@@ -869,7 +907,7 @@
 					self.weapon_morph1angles = '10 0 0';
 					self.weapon_morph1time = time + t * 0.1;
 					makevectors(self.weapon_morph1angles_x * '-1 0 0' + self.weapon_morph1angles_y * '0 1 0' + self.weapon_morph1angles_z * '0 0 1');
-					self.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+					self.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 					self.weapon_morph4time = time + t + 1; // delay idle effect
 				}
 				else if (fr == WFRAME_RELOAD)
@@ -877,17 +915,17 @@
 					self.weapon_morph1time = time + t * 0.05;
 					self.weapon_morph1angles = '-10 40 0';
 					makevectors(self.weapon_morph1angles_x * '-1 0 0' + self.weapon_morph1angles_y * '0 1 0' + self.weapon_morph1angles_z * '0 0 1');
-					self.weapon_morph1origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+					self.weapon_morph1origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 
 					self.weapon_morph2time = time + t * 0.15;
 					self.weapon_morph2angles = '-10 40 5';
 					makevectors(self.weapon_morph2angles_x * '-1 0 0' + self.weapon_morph2angles_y * '0 1 0' + self.weapon_morph2angles_z * '0 0 1');
-					self.weapon_morph2origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+					self.weapon_morph2origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 		
 					self.weapon_morph3time = time + t * 0.25;
 					self.weapon_morph3angles = '-10 40 0';
 					makevectors(self.weapon_morph3angles_x * '-1 0 0' + self.weapon_morph3angles_y * '0 1 0' + self.weapon_morph3angles_z * '0 0 1');
-					self.weapon_morph3origin = weapon_offset_x * v_forward - weapon_offset_y * v_right + weapon_offset_z * v_up + weapon_adjust;
+					self.weapon_morph3origin = QCWEAPONANIMATION_ORIGIN(self.weaponentity);
 				}
 			}
 		}



More information about the nexuiz-commits mailing list