From 44228cef99b44575b1ad3ce98a89d0b8af63b7e3 Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 19 Apr 2009 15:57:34 +0000 Subject: [PATCH] fix sound spam issue with projectiles stuck on jumppads git-svn-id: svn://svn.icculus.org/nexuiz/trunk@6535 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/miscfunctions.qc | 9 +++++++++ data/qcsrc/server/w_crylink.qc | 1 + data/qcsrc/server/w_electro.qc | 2 +- data/qcsrc/server/w_grenadelauncher.qc | 12 ++++++------ data/qcsrc/server/w_hagar.qc | 1 + data/qcsrc/server/w_porto.qc | 2 +- data/qcsrc/server/w_seeker.qc | 2 +- 7 files changed, 20 insertions(+), 9 deletions(-) diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 0ff3d44d6..e22f3db60 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -1258,6 +1258,15 @@ float announce(entity player, string msg) } return FALSE; } +// use this one if you might be causing spam (e.g. from touch functions that might get called more than once per frame) +float spamsound(entity e, float chan, string samp, float vol, float atten) +{ + if(time > e.announcetime) + { + e.announcetime = time; + sound(e, chan, samp, vol, atten); + } +} void play2team(float t, string filename) { diff --git a/data/qcsrc/server/w_crylink.qc b/data/qcsrc/server/w_crylink.qc index 349194291..7ce600427 100644 --- a/data/qcsrc/server/w_crylink.qc +++ b/data/qcsrc/server/w_crylink.qc @@ -2,6 +2,7 @@ .entity realowner; +// NO bounce protection, as bounces are limited! void W_Crylink_Touch (void) { float finalhit; diff --git a/data/qcsrc/server/w_electro.qc b/data/qcsrc/server/w_electro.qc index ecfe2e188..4f9d3cc32 100644 --- a/data/qcsrc/server/w_electro.qc +++ b/data/qcsrc/server/w_electro.qc @@ -32,7 +32,7 @@ void W_Plasma_Touch (void) if (other.takedamage == DAMAGE_AIM) { W_Plasma_Explode (); } else { - sound (self, CHAN_PROJECTILE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/electro_bounce.wav", VOL_BASE, ATTN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; } } diff --git a/data/qcsrc/server/w_grenadelauncher.qc b/data/qcsrc/server/w_grenadelauncher.qc index 157aafd46..e5d1bae8b 100644 --- a/data/qcsrc/server/w_grenadelauncher.qc +++ b/data/qcsrc/server/w_grenadelauncher.qc @@ -44,17 +44,17 @@ void W_Grenade_Touch2 (void) float r; r = random() * 6; if(r < 1) - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce1.wav", VOL_BASE, ATTN_NORM); else if(r < 2) - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce2.wav", VOL_BASE, ATTN_NORM); else if(r < 3) - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce3.wav", VOL_BASE, ATTN_NORM); else if(r < 4) - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce4.wav", VOL_BASE, ATTN_NORM); else if(r < 5) - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce5.wav", VOL_BASE, ATTN_NORM); else - sound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CHAN_PROJECTILE, "weapons/grenade_bounce6.wav", VOL_BASE, ATTN_NORM); self.projectiledeathtype |= HITTYPE_BOUNCE; } } diff --git a/data/qcsrc/server/w_hagar.qc b/data/qcsrc/server/w_hagar.qc index ebf728282..5ed063a7f 100644 --- a/data/qcsrc/server/w_hagar.qc +++ b/data/qcsrc/server/w_hagar.qc @@ -1,3 +1,4 @@ +// NO bounce protection, as bounces are limited! void W_Hagar_Explode (void) { self.event_damage = SUB_Null; diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index 89c1f2b73..a7d82b6c5 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -96,7 +96,7 @@ void W_Porto_Touch (void) } else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP) { - sound(self, CHAN_PROJECTILE, "porto/bounce.wav", VOL_BASE, ATTN_NORM); + spamsound(self, CHAN_PROJECTILE, "porto/bounce.wav", VOL_BASE, ATTN_NORM); // just reflect self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal); self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal)); diff --git a/data/qcsrc/server/w_seeker.qc b/data/qcsrc/server/w_seeker.qc index 3b02de582..1c7b0aec1 100644 --- a/data/qcsrc/server/w_seeker.qc +++ b/data/qcsrc/server/w_seeker.qc @@ -335,7 +335,7 @@ void Seeker_Fire_Tag() missile.flags = FL_PROJECTILE; missile.velocity = w_shotdir * cvar("g_balance_seeker_tag_speed"); - missile.movetype = MOVETYPE_BOUNCEMISSILE; + missile.movetype = MOVETYPE_FLY; W_SetupProjectileVelocity(missile); missile.angles = vectoangles (missile.velocity); -- 2.39.2