r5481 - in trunk/data/qcsrc: menu/nexuiz server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Jan 10 10:05:50 EST 2009
Author: div0
Date: 2009-01-10 10:05:47 -0500 (Sat, 10 Jan 2009)
New Revision: 5481
Modified:
trunk/data/qcsrc/menu/nexuiz/dialog_settings_audio.c
trunk/data/qcsrc/server/arena.qc
trunk/data/qcsrc/server/constants.qh
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/t_plats.qc
trunk/data/qcsrc/server/w_electro.qc
trunk/data/qcsrc/server/w_rocketlauncher.qc
trunk/data/qcsrc/server/w_seeker.qc
Log:
svc_stopsound; make sure exploding projectiles ALWAYS get their sound removed even if there is packet loss
Modified: trunk/data/qcsrc/menu/nexuiz/dialog_settings_audio.c
===================================================================
--- trunk/data/qcsrc/menu/nexuiz/dialog_settings_audio.c 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/menu/nexuiz/dialog_settings_audio.c 2009-01-10 15:05:47 UTC (rev 5481)
@@ -72,7 +72,7 @@
me.TR(me);
me.TDempty(me, 0.2);
s = makeNexuizDecibelsSlider(-20, 0, 0.5, "snd_entchannel4volume");
- makeMulti(s, "snd_playerchannel4volume");
+ makeMulti(s, "snd_playerchannel4volume snd_entchannel6volume");
me.TD(me, 1, 0.8, e = makeNexuizSliderCheckBox(-1000000, 1, s, "Shots:"));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "volume", "0");
Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/arena.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -89,7 +89,7 @@
}
else if(self.flags & FL_PROJECTILE) // remove any projectiles left
{
- sound(self, CHAN_PROJECTILE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+ stopsound(self, CHAN_PROJECTILE);
remove(self);
}
else if(self.isdecor)
Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/constants.qh 2009-01-10 15:05:47 UTC (rev 5481)
@@ -135,7 +135,7 @@
float CHAN_PAIN = 6; // Pain
// on world: UNUSED
// on players: pain PAIN
- // on entities: UNUSED
+ // on entities: projectiles flying SHOTS
float CHAN_PLAYER = 7; // Player body
// on world: UNUSED
// on players: player sounds PLAYER
@@ -159,11 +159,11 @@
#define EFMASK_CHEAP (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NODRAW | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE)
-float MSG_BROADCAST = 0;
-float MSG_ONE = 1;
-float MSG_ALL = 2;
-float MSG_INIT = 3;
-float MSG_ENTITY = 5;
+float MSG_BROADCAST = 0; // unreliable
+float MSG_ONE = 1; // reliable
+float MSG_ALL = 2; // reliable
+float MSG_INIT = 3; // initialization
+float MSG_ENTITY = 5; // csqc
// Deathtypes (weapon deathtypes are the IT_* constants below)
// NOTE: when adding death types, please add an explanation to Docs/spamlog.txt too.
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -1068,15 +1068,52 @@
void(entity e, float chan, string samp, float vol, float atten) sound = #8;
float precache_sound_index (string s) = #19;
+#define SND_VOLUME 1
+#define SND_ATTENUATION 2
+#define SND_LARGEENTITY 8
+#define SND_LARGESOUND 16
+
void soundtoat(float dest, entity e, vector o, float chan, string samp, float vol, float atten)
{
- WriteByte(dest, 6);
- WriteByte(dest, 27); // all bits except SND_LOOPING
- WriteByte(dest, vol * 255);
- WriteByte(dest, atten * 64);
- WriteEntity(dest, e);
- WriteByte(dest, chan);
- WriteShort(dest, precache_sound_index(samp));
+ float entno, idx;
+ entno = num_for_edict(e);
+ idx = precache_sound_index(samp);
+
+ float sflags;
+ sflags = 0;
+
+ atten = floor(atten * 64);
+ vol = floor(vol * 255);
+
+ if(vol != 255)
+ sflags |= SND_VOLUME;
+ if(atten != 64)
+ sflags |= SND_ATTENUATION;
+ if(entno >= 8192)
+ sflags |= SND_LARGEENTITY;
+ if(idx >= 256)
+ sflags |= SND_LARGESOUND;
+
+ WriteByte(dest, SVC_SOUND);
+ WriteByte(dest, sflags);
+ if(sflags & SND_VOLUME)
+ WriteByte(dest, vol * 255);
+ if(sflags & SND_ATTENUATION)
+ WriteByte(dest, atten);
+ if(sflags & SND_LARGEENTITY)
+ {
+ WriteShort(dest, entno);
+ WriteByte(dest, chan);
+ }
+ else
+ {
+ WriteShort(dest, entno * 8 + chan);
+ }
+ if(sflags & SND_LARGESOUND)
+ WriteShort(dest, idx);
+ else
+ WriteByte(dest, idx);
+
WriteCoord(dest, o_x);
WriteCoord(dest, o_y);
WriteCoord(dest, o_z);
@@ -1091,7 +1128,42 @@
{
soundtoat(MSG_BROADCAST, e, o, chan, samp, vol, atten);
}
+void stopsoundto(float dest, entity e, float chan)
+{
+ float entno;
+ entno = num_for_edict(e);
+ if(entno >= 8192)
+ {
+ float idx, sflags;
+ idx = precache_sound_index("misc/null.wav");
+ sflags = SND_LARGEENTITY;
+ if(idx >= 256)
+ sflags |= SND_LARGESOUND;
+ WriteByte(dest, SVC_SOUND);
+ WriteByte(dest, sflags);
+ WriteShort(dest, entno);
+ WriteByte(dest, chan);
+ if(sflags & SND_LARGESOUND)
+ WriteShort(dest, idx);
+ else
+ WriteByte(dest, idx);
+ WriteCoord(dest, e.origin_x);
+ WriteCoord(dest, e.origin_y);
+ WriteCoord(dest, e.origin_z);
+ }
+ else
+ {
+ WriteByte(dest, SVC_STOPSOUND);
+ WriteShort(dest, entno * 8 + chan);
+ }
+}
+void stopsound(entity e, float chan)
+{
+ stopsoundto(MSG_BROADCAST, e, chan); // unreliable, gets there fast
+ stopsoundto(MSG_ALL, e, chan); // in case of packet loss
+}
+
void play2(entity e, string filename)
{
//stuffcmd(e, strcat("play2 ", filename, "\n"));
@@ -1662,8 +1734,7 @@
#define SUB_OwnerCheck() (other && (other == self.owner))
#define PROJECTILE_TOUCH do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { remove(self); return; } } while(0)
-const string STR_MISC_NULL_WAV = "misc/null.wav";
-#define PROJECTILE_TOUCH_NOSOUND do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { sound (self, CHAN_PROJECTILE, STR_MISC_NULL_WAV, VOL_BASE, ATTN_NORM); remove(self); return; } } while(0)
+#define PROJECTILE_TOUCH_NOSOUND do { if(SUB_OwnerCheck()) return; if(SUB_NoImpactCheck()) { stopsound(self, CHAN_PAIN); remove(self); return; } } while(0)
float MAX_IPBAN_URIS = 16;
Modified: trunk/data/qcsrc/server/t_plats.qc
===================================================================
--- trunk/data/qcsrc/server/t_plats.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/t_plats.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -246,7 +246,7 @@
self.nextthink = self.ltime + self.wait;
if(self.noise != "")
- sound(self, CHAN_TRIGGER, STR_MISC_NULL_WAV, VOL_BASE, ATTN_IDLE);
+ stopsoundto(MSG_BROADCAST, self, CHAN_TRIGGER); // send this as unreliable only, as the train will resume operation shortly anyway
};
void train_next()
Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/w_electro.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -22,6 +22,7 @@
RadiusDamage (self, self.owner, cvar("g_balance_electro_primary_damage"), cvar("g_balance_electro_primary_edgedamage"), cvar("g_balance_electro_primary_radius"), world, cvar("g_balance_electro_primary_force"), self.projectiledeathtype, other);
}
+ stopsound (self, CHAN_PAIN);
sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
remove (self);
@@ -111,8 +112,7 @@
setmodel(proj, "models/elaser.mdl"); // precision set above
setsize(proj, '0 0 0', '0 0 0');
- // LordHavoc: disabled because no one likes this sound and it sometimes never stops due to packet loss
- //sound (proj, CHAN_PROJECTILE, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
+ sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
}
void W_Electro_Attack2()
@@ -151,9 +151,6 @@
proj.health = cvar("g_balance_electro_secondary_health");
proj.event_damage = W_Plasma_Damage;
proj.flags = FL_PROJECTILE;
-
- // LordHavoc: disabled because no one likes this sound and it sometimes never stops due to packet loss
- //sound (proj, CHAN_PROJECTILE, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM);
}
void spawnfunc_weapon_electro (void)
Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -4,6 +4,7 @@
void W_Rocket_Explode (void)
{
vector org2;
+ stopsound(self, CHAN_PAIN);
sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
org2 = findbetterlocation (self.origin, 16);
@@ -241,7 +242,7 @@
missile.nextthink = time;
missile.cnt = time + cvar("g_balance_rocketlauncher_lifetime");
missile.effects = EF_LOWPRECISION;
- sound (missile, CHAN_PROJECTILE, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ sound (missile, CHAN_PAIN, "weapons/rocket_fly.wav", VOL_BASE, ATTN_NORM);
missile.flags = FL_PROJECTILE;
// muzzle flash for 1st person view
Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc 2009-01-09 23:04:37 UTC (rev 5480)
+++ trunk/data/qcsrc/server/w_seeker.qc 2009-01-10 15:05:47 UTC (rev 5481)
@@ -308,6 +308,7 @@
te_knightspike(org2);
self.event_damage = SUB_Null;
+ stopsound (self, CHAN_PAIN);
sound (self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
@@ -363,7 +364,7 @@
missile.effects = EF_FULLBRIGHT | EF_NOSHADOW | EF_LOWPRECISION;
missile.modelflags = MF_TRACER3;
- sound (missile, CHAN_PROJECTILE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
+ sound (missile, CHAN_PAIN, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTN_NORM);
missile.flags = FL_PROJECTILE;
missile.velocity = w_shotdir * cvar("g_balance_seeker_tag_speed");
More information about the nexuiz-commits
mailing list