r5576 - in trunk/data/qcsrc: client common server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Jan 16 14:59:05 EST 2009


Author: div0
Date: 2009-01-16 14:59:00 -0500 (Fri, 16 Jan 2009)
New Revision: 5576

Modified:
   trunk/data/qcsrc/client/movetypes.qc
   trunk/data/qcsrc/client/movetypes.qh
   trunk/data/qcsrc/client/projectile.qc
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/csqcprojectile.qc
   trunk/data/qcsrc/server/w_common.qc
   trunk/data/qcsrc/server/w_crylink.qc
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
Log:
the next batch of weapons using the new projectile code: grenade launcher, electro, crylink, mg, sg, camping rifle


Modified: trunk/data/qcsrc/client/movetypes.qc
===================================================================
--- trunk/data/qcsrc/client/movetypes.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/movetypes.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -17,6 +17,12 @@
 
 void _Movetype_Impact(entity oth) // SV_Impact
 {
+	if(self.move_moveflags & MOVEFLAG_STOPONIMPACT)
+	{
+		// don't CLIP the velocity, but stop ENTIRELY
+		self.velocity = '0 0 0';
+		self.avelocity = '0 0 0';
+	}
 }
 
 void _Movetype_LinkEdict(float touch_triggers) // SV_LinkEdict

Modified: trunk/data/qcsrc/client/movetypes.qh
===================================================================
--- trunk/data/qcsrc/client/movetypes.qh	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/movetypes.qh	2009-01-16 19:59:00 UTC (rev 5576)
@@ -5,6 +5,7 @@
 .vector move_angles;
 .vector move_velocity;
 .vector move_avelocity;
+.float move_moveflags;
 
 void Movetype_Physics(float matchserver);
 
@@ -24,3 +25,5 @@
 float MOVETYPE_FAKEPUSH = 13;
 
 float	FL_ONGROUND				= 512;
+
+float MOVEFLAG_STOPONIMPACT = 1;

Modified: trunk/data/qcsrc/client/projectile.qc
===================================================================
--- trunk/data/qcsrc/client/projectile.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/client/projectile.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -21,14 +21,25 @@
 
 	switch(self.cnt)
 	{
-		case PROJECTILE_ELECTRO:
-			break; // electro uses no trail
 		case PROJECTILE_ROCKET:
-			trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin); // rocket
+			trailparticles(self, particleeffectnum("TR_ROCKET"), oldorg, self.origin);
 			break;
 		case PROJECTILE_TAG:
-			trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin); // seeker
+			trailparticles(self, particleeffectnum("TR_VORESPIKE"), oldorg, self.origin);
 			break;
+		case PROJECTILE_ELECTRO_BEAM:
+			trailparticles(self, particleeffectnum("TR_NEXUIZPLASMA"), oldorg, self.origin);
+			break;
+		case PROJECTILE_GRENADE:
+			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
+			if(!(self.move_flags & FL_ONGROUND))
+				self.angles -= '750 0 0' * time;
+			break;
+		case PROJECTILE_GRENADE_BOUNCING:
+			trailparticles(self, particleeffectnum("TR_KNIGHTSPIKE"), oldorg, self.origin);
+			if(!(self.move_flags & FL_ONGROUND))
+				self.angles += '100 150 100' * time;
+			break;
 		default:
 			break;
 	}
@@ -106,20 +117,19 @@
 	if(f & 2)
 	{
 		self.modelindex = ReadShort();
+
 		if(f & 0x40)
-		{
 			self.scale = ReadByte() / 16.0;
-			self.effects = ReadShort();
-			self.effects |= 65536 * ReadByte();
-		}
 		else
-		{
 			self.scale = 1;
-			self.effects = 0;
-		}
 
-		self.cnt = ReadShort();
+		self.cnt = ReadByte();
 
+		self.mins = '0 0 0';
+		self.maxs = '0 0 0';
+		self.move_movetype = MOVETYPE_TOSS;
+		self.move_moveflags = MOVEFLAG_STOPONIMPACT;
+
 		switch(self.cnt)
 		{
 			case PROJECTILE_ELECTRO:
@@ -128,24 +138,30 @@
 				self.mins = '0 0 -3';
 				self.maxs = '0 0 -3';
 				self.move_movetype = MOVETYPE_BOUNCE;
+				self.move_moveflags = 0;
 				break;
 			case PROJECTILE_ROCKET:
 				loopsound(self, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
 				self.mins = '-3 -3 -3';
 				self.maxs = '3 3 3';
-				self.move_movetype = MOVETYPE_TOSS;
 				break;
 			case PROJECTILE_TAG:
 				loopsound(self, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
 				self.mins = '-2 -2 -2';
 				self.maxs = '2 2 2';
-				self.move_movetype = MOVETYPE_TOSS;
 				break;
-			default:
+			case PROJECTILE_GRENADE:
 				self.mins = '0 0 0';
 				self.maxs = '0 0 0';
-				self.move_movetype = MOVETYPE_TOSS;
 				break;
+			case PROJECTILE_GRENADE_BOUNCING:
+				self.mins = '0 0 -3';
+				self.maxs = '0 0 -3';
+				self.move_movetype = MOVETYPE_BOUNCE;
+				self.move_moveflags = 0;
+				break;
+			default:
+				break;
 		}
 	}
 

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/common/constants.qh	2009-01-16 19:59:00 UTC (rev 5576)
@@ -357,3 +357,8 @@
 float PROJECTILE_ELECTRO = 1;
 float PROJECTILE_ROCKET = 2;
 float PROJECTILE_TAG = 3;
+float PROJECTILE_BULLET = 4;
+float PROJECTILE_CRYLINK = 5;
+float PROJECTILE_ELECTRO_BEAM = 6;
+float PROJECTILE_GRENADE = 7;
+float PROJECTILE_GRENADE_BOUNCING = 8;

Modified: trunk/data/qcsrc/server/csqcprojectile.qc
===================================================================
--- trunk/data/qcsrc/server/csqcprojectile.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/csqcprojectile.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -7,7 +7,7 @@
 	if(self.csqcprojectile_clientanimate)
 		sf |= 0x80; // client animated, not interpolated
 
-	if((self.scale != 0 && self.scale != 1) || self.effects != 0)
+	if(self.scale != 0 && self.scale != 1)
 		sf |= 0x40; // scale used
 
 	WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE);
@@ -32,12 +32,8 @@
 	{
 		WriteShort(MSG_ENTITY, self.modelindex);
 		if(sf & 0x40)
-		{
 			WriteByte(MSG_ENTITY, bound(0, self.scale / 16.0, 255));
-			WriteShort(MSG_ENTITY, self.effects & 65535);
-			WriteByte(MSG_ENTITY, floor(self.effects / 65536));
-		}
-		WriteShort(MSG_ENTITY, self.csqcprojectile_type);
+		WriteByte(MSG_ENTITY, self.csqcprojectile_type);
 	}
 
 	return 1;

Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_common.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -170,6 +170,8 @@
 		pointparticles(particleeffectnum("shotgun_impact"), self.origin, normalize(self.velocity) * 1000, 1);
 	else
 		pointparticles(particleeffectnum("machinegun_impact"), self.origin, normalize(self.velocity) * 1000, 1);
+	
+	UpdateCSQCProjectile(self);
 }
 
 // a fake logarithm function
@@ -291,6 +293,8 @@
 	proj.projectiledeathtype = dtype;
 
 	proj.oldvelocity = proj.velocity;
+
+	CSQCProjectile(proj, TRUE, PROJECTILE_BULLET);
 }
 
 void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer)

Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_crylink.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -1,5 +1,4 @@
 .float gravity;
-const vector proj_color = '1 1 1';
 
 .entity realowner;
 
@@ -28,6 +27,8 @@
 	self.owner = world;
 	self.projectiledeathtype |= HITTYPE_BOUNCE;
 	//self.scale = 1 + self.cnt;
+
+	UpdateCSQCProjectile(self);
 }
 
 void W_Crylink_Touch2 (void)
@@ -55,6 +56,8 @@
 	self.owner = world;
 	self.projectiledeathtype |= HITTYPE_BOUNCE;
 //	self.scale = 1 + 1 * self.cnt;
+
+	UpdateCSQCProjectile(self);
 }
 
 void W_Crylink_Attack (void)
@@ -121,7 +124,9 @@
 
 		proj.effects = EF_LOWPRECISION;
 		proj.flags = FL_PROJECTILE;
-		proj.colormod = proj_color;
+
+		CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK);
+
 		counter = counter + 1;
 	}
 }
@@ -171,7 +176,9 @@
 
 		proj.effects = EF_LOWPRECISION;
 		proj.flags = FL_PROJECTILE;
-		proj.colormod = proj_color;
+
+		CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK);
+
 		counter = counter + 1;
 	}
 }

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_electro.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -116,6 +116,8 @@
 
 	//sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
 	//sounds bad
+
+	CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM);
 }
 
 void W_Electro_Attack2()

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2009-01-16 18:43:50 UTC (rev 5575)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2009-01-16 19:59:00 UTC (rev 5576)
@@ -67,6 +67,9 @@
 			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)
@@ -109,10 +112,11 @@
 	gren.touch = W_Grenade_Touch1;
 	gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_primary_speed") + v_up * cvar("g_balance_grenadelauncher_primary_speed_up");
 	W_SetupProjectileVelocity(gren);
-	gren.avelocity_x = random () * -500 - 500;
 
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;
+
+	CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE);	
 }
 
 void W_Grenade_Attack2 (void)
@@ -150,10 +154,11 @@
 	gren.event_damage = W_Grenade_Damage;
 	gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_secondary_speed") + v_up * cvar("g_balance_grenadelauncher_secondary_speed_up");
 	W_SetupProjectileVelocity(gren);
-	gren.avelocity = '100 150 100';
 
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;
+
+	CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING);	
 }
 
 void spawnfunc_weapon_grenadelauncher (void)




More information about the nexuiz-commits mailing list