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