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

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Jan 15 08:45:25 EST 2009


Author: div0
Date: 2009-01-15 08:45:24 -0500 (Thu, 15 Jan 2009)
New Revision: 5544

Modified:
   trunk/data/qcsrc/client/Defs.qc
   trunk/data/qcsrc/client/Main.qc
   trunk/data/qcsrc/client/csqc_constants.qc
   trunk/data/qcsrc/client/interpolate.qc
   trunk/data/qcsrc/client/interpolate.qh
   trunk/data/qcsrc/client/progs.src
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/constants.qh
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/g_damage.qc
   trunk/data/qcsrc/server/progs.src
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_seeker.qc
Log:
handle RL, Seeker and Electro projectiles completely on the client, to prevent the "sound stays when packet loss" problem entirely


Modified: trunk/data/qcsrc/client/Defs.qc
===================================================================
--- trunk/data/qcsrc/client/Defs.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/Defs.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -151,6 +151,7 @@
 float		intermission;
 float		sb_showscores;
 .string		message;
+.float renderflags;
 // float		coop;
 // float		deathmatch;
 

Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/Main.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -506,6 +506,8 @@
 		Ent_WaypointSprite();
 	else if(self.enttype == ENT_CLIENT_RADARLINK)
 		Ent_RadarLink();
+	else if(self.enttype == ENT_CLIENT_PROJECTILE)
+		Ent_Projectile();
 	else
 		error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n"));
 	
@@ -542,6 +544,8 @@
 	}
 	else if(self.enttype == ENT_CLIENT_WAYPOINT)
 		Ent_RemoveWaypointSprite();
+	else if(self.enttype == ENT_CLIENT_PROJECTILE)
+		Ent_RemoveProjectile();
 
 	self.enttype = 0;
 	self.classname = "";

Modified: trunk/data/qcsrc/client/csqc_constants.qc
===================================================================
--- trunk/data/qcsrc/client/csqc_constants.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/csqc_constants.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -63,16 +63,16 @@
 const float		STAT_TIMELIMIT					= 236;
 
 // Sound Constants
-const float		CHAN_AUTO						= 0;
-const float		CHAN_WEAPON						= 1;
-const float		CHAN_VOICE						= 2;
-const float		CHAN_ITEM						= 3;
-const float		CHAN_BODY						= 4;
+//const float		CHAN_AUTO						= 0;
+//const float		CHAN_WEAPON						= 1;
+//const float		CHAN_VOICE						= 2;
+//const float		CHAN_ITEM						= 3;
+//const float		CHAN_BODY						= 4;
 
-const float		ATTN_NONE						= 0;
-const float		ATTN_NORM						= 1;
-const float		ATTN_IDLE						= 2;
-const float		ATTN_STATIC						= 3;
+//const float		ATTN_NONE						= 0;
+//const float		ATTN_NORM						= 1;
+//const float		ATTN_IDLE						= 2;
+//const float		ATTN_STATIC						= 3;
 
 // Quake-style Point Contents
 const float		CONTENT_EMPTY					= -1;

Modified: trunk/data/qcsrc/client/interpolate.qc
===================================================================
--- trunk/data/qcsrc/client/interpolate.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/interpolate.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -10,9 +10,17 @@
 
 	dt = time - self.itime1;
 
+	if(self.iflags & IFLAG_PREVALID)
+		self.iflags |= IFLAG_VALID;
+	else
+		self.iflags |= IFLAG_PREVALID;
+
 	self.iorigin1 = self.iorigin2;
 	self.iorigin2 = self.origin;
 
+	if(self.iflags & IFLAG_AUTOANGLES)
+		self.angles = vectoangles(self.iorigin2 - self.iorigin1);
+
 	if(self.iflags & IFLAG_ANGLES)
 	{
 		fixedmakevectors(self.angles);

Modified: trunk/data/qcsrc/client/interpolate.qh
===================================================================
--- trunk/data/qcsrc/client/interpolate.qh	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/interpolate.qh	2009-01-15 13:45:24 UTC (rev 5544)
@@ -1,6 +1,9 @@
 .float iflags;
 #define IFLAG_VELOCITY 1
 #define IFLAG_ANGLES 2
+#define IFLAG_AUTOANGLES 4
+#define IFLAG_VALID 8
+#define IFLAG_PREVALID 16
 
 // call this BEFORE reading an entity update
 void InterpolateOrigin_Undo();

Modified: trunk/data/qcsrc/client/progs.src
===================================================================
--- trunk/data/qcsrc/client/progs.src	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/client/progs.src	2009-01-15 13:45:24 UTC (rev 5544)
@@ -28,6 +28,7 @@
 hook.qc
 particles.qc
 laser.qc
+projectile.qc
 
 Main.qc
 View.qc

Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/common/constants.qh	2009-01-15 13:45:24 UTC (rev 5544)
@@ -54,6 +54,7 @@
 const float ENT_CLIENT_NAGGER = 9; // flags [votecalledvote]
 const float ENT_CLIENT_WAYPOINT = 10; // flags origin [team displayrule] [spritename] [spritename2] [spritename3] [lifetime maxdistance hideable]
 const float ENT_CLIENT_RADARLINK = 11; // flags [startorigin] [endorigin] [startcolor+16*endcolor]
+const float ENT_CLIENT_PROJECTILE = 12;
 
 const float SPRITERULE_DEFAULT = 0;
 const float SPRITERULE_TEAMPLAY = 1;
@@ -299,3 +300,47 @@
 #define SP_SUICIDES 2
 #define SP_SCORE 3
 // game mode specific indices are not in common/, but in server/scores_rules.qc!
+
+// this assignment must match menu/nexuiz/dialog_settings_misc.c!
+float	CHAN_AUTO				= 0;
+	// on world: announcers, ...                     INFO
+	// on players: item pickup                       ITEMS
+	// on entities: UNUSED
+float	CHAN_WEAPON				= 1; // Weapon fire
+	// on world: UNUSED
+	// on players: weapon firing                     WEAPONS
+	// on entities: turret firing                    WEAPONS
+float	CHAN_VOICE				= 2; // Voice/Radio
+	// on world: UNUSED
+	// on players: voice                             VOICE
+	// on entities: ambient                          AMBIENT
+float	CHAN_TRIGGER			= 3; // Triggers/Items
+	// on world: UNUSED
+	// on players: item pickup                       ITEMS
+	// on entities: platforms moving etc.            ITEMS
+float	CHAN_PROJECTILE			= 4; // Projectiles
+	// on world: UNUSED
+	// on players: projectiles hitting player        SHOTS
+	// on entities: projectiles                      SHOTS
+float	CHAN_WEAPON2			= 5; // Nex fire (separated as it is a very long sound)
+	// on world: UNUSED
+	// on players: weapon firing                     WEAPONS
+	// on entities: turret firing                    WEAPONS
+float	CHAN_PAIN				= 6; // Pain
+	// on world: UNUSED
+	// on players: pain                              PAIN
+	// on entities: projectiles flying               SHOTS
+float	CHAN_PLAYER				= 7; // Player body
+	// on world: UNUSED
+	// on players: player sounds                     PLAYER
+	// on entities: player sounds                    PLAYER
+
+float	ATTN_NONE				= 0;
+float	ATTN_MIN				= 0.015625;
+float	ATTN_NORM				= 0.5;
+float	ATTN_IDLE				= 2;
+float	ATTN_STATIC				= 3;
+float	ATTN_MAX   				= 3.984375;
+
+#define VOL_BASE 0.7
+#define VOL_BASEVOICE 1.0

Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/constants.qh	2009-01-15 13:45:24 UTC (rev 5544)
@@ -108,47 +108,6 @@
 float	TE_LAVASPLASH				= 10;
 float	TE_TELEPORT				= 11;
 
-// this assignment must match menu/nexuiz/dialog_settings_misc.c!
-float	CHAN_AUTO				= 0;
-	// on world: announcers, ...                     INFO
-	// on players: item pickup                       ITEMS
-	// on entities: UNUSED
-float	CHAN_WEAPON				= 1; // Weapon fire
-	// on world: UNUSED
-	// on players: weapon firing                     WEAPONS
-	// on entities: turret firing                    WEAPONS
-float	CHAN_VOICE				= 2; // Voice/Radio
-	// on world: UNUSED
-	// on players: voice                             VOICE
-	// on entities: ambient                          AMBIENT
-float	CHAN_TRIGGER			= 3; // Triggers/Items
-	// on world: UNUSED
-	// on players: item pickup                       ITEMS
-	// on entities: platforms moving etc.            ITEMS
-float	CHAN_PROJECTILE			= 4; // Projectiles
-	// on world: UNUSED
-	// on players: projectiles hitting player        SHOTS
-	// on entities: projectiles                      SHOTS
-float	CHAN_WEAPON2			= 5; // Nex fire (separated as it is a very long sound)
-	// on world: UNUSED
-	// on players: weapon firing                     WEAPONS
-	// on entities: turret firing                    WEAPONS
-float	CHAN_PAIN				= 6; // Pain
-	// on world: UNUSED
-	// on players: pain                              PAIN
-	// on entities: projectiles flying               SHOTS
-float	CHAN_PLAYER				= 7; // Player body
-	// on world: UNUSED
-	// on players: player sounds                     PLAYER
-	// on entities: player sounds                    PLAYER
-
-float	ATTN_NONE				= 0;
-float	ATTN_MIN				= 0.015625;
-float	ATTN_NORM				= 0.5;
-float	ATTN_IDLE				= 2;
-float	ATTN_STATIC				= 3;
-float	ATTN_MAX   				= 3.984375;
-
 float	UPDATE_GENERAL				= 0;
 float	UPDATE_STATIC				= 1;
 float	UPDATE_BINARY				= 2;

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/defs.qh	2009-01-15 13:45:24 UTC (rev 5544)
@@ -12,9 +12,6 @@
 #define BUTTON_CHAT   buttonchat
 #define BUTTON_USE    buttonuse
 
-#define VOL_BASE 0.7
-#define VOL_BASEVOICE 1.0
-
 // Globals
 
 string records_reply, lsmaps_reply, maplist_reply; // cached replies

Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/g_damage.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -784,6 +784,7 @@
 	{
 		self.velocity = self.velocity + self.damageforcescale * force;
 		self.flags = self.flags - (self.flags & FL_ONGROUND);
+		UpdateCSQCProjectile(self);
 	}
 	// apply damage
 	if (damage != 0)

Modified: trunk/data/qcsrc/server/progs.src
===================================================================
--- trunk/data/qcsrc/server/progs.src	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/progs.src	2009-01-15 13:45:24 UTC (rev 5544)
@@ -19,6 +19,8 @@
 ../common/mapinfo.qh
 ../common/util.qc
 
+csqcprojectile.qh
+
 portals.qh
 
 g_hook.qh
@@ -162,3 +164,5 @@
 monsters/fight.qc
 monsters/ai.qc
 monsters/m_monsters.qc
+
+csqcprojectile.qc

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/w_electro.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -45,6 +45,8 @@
 
 void W_Plasma_Touch (void)
 {
+	UpdateCSQCProjectile(self);
+
 	PROJECTILE_TOUCH_NOSOUND;
 	if (other.takedamage == DAMAGE_AIM) {
 		W_Plasma_Explode ();
@@ -155,7 +157,12 @@
 	proj.event_damage = W_Plasma_Damage;
 	proj.flags = FL_PROJECTILE;
 
-	sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
+	//sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
+
+	CSQCProjectile(proj);
+	proj.csqcprojectile_clientanimate = 1;
+	proj.gravity = 1;
+	proj.csqcprojectile_flysound = 1;
 }
 
 void spawnfunc_weapon_electro (void)

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -177,6 +177,9 @@
 				W_Rocket_RemoteExplode();
 		}
 	}
+
+	if(self.csqcprojectile_clientanimate == 0)
+		UpdateCSQCProjectile(self);
 }
 
 void W_Rocket_Touch (void)
@@ -242,9 +245,17 @@
 	missile.nextthink = time;
 	missile.cnt = time + cvar("g_balance_rocketlauncher_lifetime");
 	missile.effects = EF_LOWPRECISION;
-	sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
+	//sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
 	missile.flags = FL_PROJECTILE;
 
+	CSQCProjectile(missile);
+	if(cvar("g_balance_rocketlauncher_speedaccel") == 0 && cvar("g_laserguided_missiles") == 0)
+		missile.csqcprojectile_clientanimate = 1;
+	else
+		missile.csqcprojectile_clientanimate = 0; // we won't client animate if the missiles may behave weird
+	missile.gravity = 0;
+	missile.csqcprojectile_flysound = 2;
+
 	// muzzle flash for 1st person view
 	flash = spawn ();
 	flash.scale = 1.2;

Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc	2009-01-15 13:19:53 UTC (rev 5543)
+++ trunk/data/qcsrc/server/w_seeker.qc	2009-01-15 13:45:24 UTC (rev 5544)
@@ -364,13 +364,18 @@
 
 	missile.effects     = EF_FULLBRIGHT | EF_NOSHADOW | EF_LOWPRECISION;
 	missile.modelflags  = MF_TRACER3;
-	sound (missile, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
+	//sound (missile, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM); // csqc
 	missile.flags       = FL_PROJECTILE;
 
 	missile.velocity    = w_shotdir  * cvar("g_balance_seeker_tag_speed");
 	missile.movetype    = MOVETYPE_BOUNCEMISSILE;
 	W_SetupProjectileVelocity(missile);
 	missile.angles = vectoangles (missile.velocity);
+
+	CSQCProjectile(missile);
+	missile.csqcprojectile_clientanimate = 1;
+	missile.gravity = 0;
+	missile.csqcprojectile_flysound = 3;
 }
 
 




More information about the nexuiz-commits mailing list