[nexuiz-commits] r7064 - in trunk/data/qcsrc: client server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Jun 20 17:10:42 EDT 2009
Author: div0
Date: 2009-06-20 17:10:41 -0400 (Sat, 20 Jun 2009)
New Revision: 7064
Modified:
trunk/data/qcsrc/client/casings.qc
trunk/data/qcsrc/client/damage.qc
trunk/data/qcsrc/client/gibs.qc
trunk/data/qcsrc/client/projectile.qc
trunk/data/qcsrc/server/cl_player.qc
trunk/data/qcsrc/server/csqcprojectile.qc
trunk/data/qcsrc/server/g_casings.qc
trunk/data/qcsrc/server/g_damage.qc
trunk/data/qcsrc/server/g_violence.qc
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/w_campingrifle.qc
trunk/data/qcsrc/server/w_common.qc
trunk/data/qcsrc/server/w_minstanex.qc
trunk/data/qcsrc/server/w_nex.qc
trunk/data/qcsrc/server/w_seeker.qc
trunk/data/qcsrc/server/w_shotgun.qc
trunk/data/qcsrc/server/w_uzi.qc
Log:
fix bot_sound_monopoly cvar
Modified: trunk/data/qcsrc/client/casings.qc
===================================================================
--- trunk/data/qcsrc/client/casings.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/client/casings.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -1,12 +1,13 @@
-float casecount;
-entity caselist;
-
-void Casing_Delete()
-{
- --casecount;
- remove(self);
-}
-
+float casecount;
+entity caselist;
+.float silent;
+
+void Casing_Delete()
+{
+ --casecount;
+ remove(self);
+}
+
void Casing_Draw()
{
if(self.move_flags & FL_ONGROUND)
@@ -35,6 +36,7 @@
return;
}
+ if(!self.silent)
if(!trace_ent || trace_ent.solid == SOLID_BSP)
{
if(vlen(self.velocity) > 50)
@@ -74,16 +76,18 @@
void Ent_Casing()
{
entity casing;
-
- if not(caselist)
- caselist = spawn();
- casing = RubbleNew(caselist);
- ++casecount;
- if(casecount >= cvar_or("cl_casings_maxcount",100))
- RubbleDrop(caselist,Casing_Delete);
+ if not(caselist)
+ caselist = spawn();
+ casing = RubbleNew(caselist);
+ ++casecount;
+ if(casecount >= cvar_or("cl_casings_maxcount",100))
+ RubbleDrop(caselist,Casing_Delete);
+
casing.state = ReadByte();
+ casing.silent = (casing.state & 0x80);
+ casing.state = (casing.state & 0x7F);
casing.origin_x = ReadCoord();
casing.origin_y = ReadCoord();
casing.origin_z = ReadCoord();
@@ -117,8 +121,8 @@
}
setsize(casing, '0 0 -1', '0 0 -1');
- }
- else
+ }
+ else
Casing_Delete();
}
Modified: trunk/data/qcsrc/client/damage.qc
===================================================================
--- trunk/data/qcsrc/client/damage.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/client/damage.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -1,12 +1,19 @@
+.float silent;
+
void Ent_DamageInfo()
{
float hittype, dmg, rad, edge, thisdmg, forcemul;
+ float issilent;
vector force, org, thisforce;
entity oldself;
oldself = self;
hittype = ReadShort();
+
+ issilent = (hittype & 0x8000);
+ hittype = (hittype & 0x7FFF);
+
org_x = ReadCoord();
org_y = ReadCoord();
org_z = ReadCoord();
@@ -59,6 +66,9 @@
//print("pushed ", ftos(num_for_edict(self)), " loose\n");
}
+ if(issilent)
+ self.silent = 1;
+
if(self.event_damage)
self.event_damage(thisdmg, hittype, org, thisforce);
}
@@ -92,39 +102,46 @@
case WEP_LASER:
org2 = org + backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1);
- sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_SHOTGUN:
org2 = org + backoff * 2;
pointparticles(particleeffectnum("shotgun_impact"), org2, backoff * 1000, 1);
- if(r < 0.05)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.1)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.2)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ {
+ if(r < 0.05)
+ sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.1)
+ sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.2)
+ sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ }
break;
case WEP_UZI:
org2 = org + backoff * 2;
pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1);
- if(r < 0.05)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.1)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.2)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ if(r < 0.05)
+ sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.1)
+ sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.2)
+ sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_GRENADE_LAUNCHER:
org2 = org + backoff * 12;
pointparticles(particleeffectnum("grenade_explode"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/grenade_impact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_ELECTRO:
org2 = org + backoff * 6;
if(secondary)
{
pointparticles(particleeffectnum("electro_ballexplode"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
else
{
@@ -132,12 +149,14 @@
{
// this is sent as "primary bounce" to distinguish it from secondary bounced balls
pointparticles(particleeffectnum("electro_combo"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/electro_impact_combo.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("electro_impact"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/electro_impact.wav", VOL_BASE, ATTN_NORM);
}
}
break;
@@ -146,33 +165,40 @@
if(secondary)
{
pointparticles(particleeffectnum("crylink_impact"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/crylink_impact2.wav", VOL_BASE, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("crylink_impactbig"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/crylink_impact.wav", VOL_BASE, ATTN_NORM);
}
break;
case WEP_NEX:
org2 = org + backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
- sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_HAGAR:
org2 = org + backoff * 6;
pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
- if (r<0.15)
- sound (self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
- else if (r<0.7)
- sound (self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
- else
- sound (self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ {
+ if (r<0.15)
+ sound(self, CHAN_PROJECTILE, "weapons/hagexp1.wav", VOL_BASE, ATTN_NORM);
+ else if (r<0.7)
+ sound(self, CHAN_PROJECTILE, "weapons/hagexp2.wav", VOL_BASE, ATTN_NORM);
+ else
+ sound(self, CHAN_PROJECTILE, "weapons/hagexp3.wav", VOL_BASE, ATTN_NORM);
+ }
break;
case WEP_ROCKET_LAUNCHER:
org2 = org + backoff * 12;
pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/rocket_impact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_PORTO:
print("Since when does Porto send DamageInfo?\n");
@@ -180,67 +206,83 @@
case WEP_MINSTANEX:
org2 = org + backoff * 6;
pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1);
- sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_HOOK:
org2 = org + backoff * 2;
pointparticles(particleeffectnum("hookbomb_explode"), org2, '0 0 0', 1);
- sound (self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/hookbomb_impact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_SEEKER:
org2 = org + backoff * 6;
if(secondary)
{
pointparticles(particleeffectnum("flac_explode"), org2, '0 0 0', 1);
- if (r<0.15)
- sound (self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM);
- else if (r<0.7)
- sound (self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM);
- else
- sound (self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM);
+ if(!issilent)
+ {
+ if (r<0.15)
+ sound(self, CHAN_PROJECTILE, "weapons/flacexp1.wav", 1, ATTN_NORM);
+ else if (r<0.7)
+ sound(self, CHAN_PROJECTILE, "weapons/flacexp2.wav", 1, ATTN_NORM);
+ else
+ sound(self, CHAN_PROJECTILE, "weapons/flacexp3.wav", 1, ATTN_NORM);
+ }
}
else
{
if(bounce)
{
pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
- if (r<0.15)
- sound (self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
- else if (r<0.7)
- sound (self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
- else
- sound (self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
+ if(!issilent)
+ {
+ if (r<0.15)
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp1.wav", 1, ATTN_NORM);
+ else if (r<0.7)
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp2.wav", 1, ATTN_NORM);
+ else
+ sound(self, CHAN_PROJECTILE, "weapons/tagexp3.wav", 1, ATTN_NORM);
+ }
}
else if(headshot)
{
- sound (self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/tag_impact.wav", 1, ATTN_NORM);
}
else
{
pointparticles(particleeffectnum("hagar_explode"), org2, '0 0 0', 1);
- if (r<0.15)
- sound (self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
- else if (r<0.7)
- sound (self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
- else
- sound (self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
+ if(!issilent)
+ {
+ if (r<0.15)
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp1.wav", 1, ATTN_NORM);
+ else if (r<0.7)
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp2.wav", 1, ATTN_NORM);
+ else
+ sound(self, CHAN_PROJECTILE, "weapons/seekerexp3.wav", 1, ATTN_NORM);
+ }
}
}
break;
case WEP_HLAC:
org2 = org + backoff * 6;
pointparticles(particleeffectnum("laser_impact"), org2, backoff * 1000, 1);
- sound (self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound(self, CHAN_PROJECTILE, "weapons/laserimpact.wav", VOL_BASE, ATTN_NORM);
break;
case WEP_CAMPINGRIFLE:
org2 = org + backoff * 2;
pointparticles(particleeffectnum("machinegun_impact"), org2, backoff * 1000, 1);
- if(r < 0.2)
- sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.4)
- sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
- else if(r < 0.5)
- sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ {
+ if(r < 0.2)
+ sound(self, CHAN_PROJECTILE, "weapons/ric1.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.4)
+ sound(self, CHAN_PROJECTILE, "weapons/ric2.wav", VOL_BASE, ATTN_NORM);
+ else if(r < 0.5)
+ sound(self, CHAN_PROJECTILE, "weapons/ric3.wav", VOL_BASE, ATTN_NORM);
+ }
break;
case WEP_TUBA:
break;
@@ -267,9 +309,9 @@
precache_sound("weapons/hookbomb_impact.wav");
precache_sound("weapons/laserimpact.wav");
precache_sound("weapons/neximpact.wav");
- precache_sound ("weapons/ric1.wav");
- precache_sound ("weapons/ric2.wav");
- precache_sound ("weapons/ric3.wav");
+ precache_sound("weapons/ric1.wav");
+ precache_sound("weapons/ric2.wav");
+ precache_sound("weapons/ric3.wav");
precache_sound("weapons/rocket_impact.wav");
precache_sound("weapons/seekerexp1.wav");
precache_sound("weapons/seekerexp2.wav");
Modified: trunk/data/qcsrc/client/gibs.qc
===================================================================
--- trunk/data/qcsrc/client/gibs.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/client/gibs.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -1,12 +1,13 @@
-float gibcount;
-entity giblist;
-
-void Gib_Delete()
-{
- --gibcount;
- remove(self);
-}
-
+float gibcount;
+entity giblist;
+.float silent;
+
+void Gib_Delete()
+{
+ --gibcount;
+ remove(self);
+}
+
string species_prefix(float specnum)
{
switch(specnum)
@@ -45,7 +46,8 @@
return;
}
- sound(self, CHAN_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
+ if(!self.silent)
+ sound(self, CHAN_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTN_NORM);
pointparticles(particleeffectnum(strcat(species_prefix(self.cnt), "blood")), self.origin + '0 0 1', '0 0 30', 10);
Gib_Delete();
@@ -74,26 +76,27 @@
R_AddEntity(self);
}
-void TossGib (string mdlname, vector org, vector vconst, vector vrand, float specnum, float destroyontouch)
+void TossGib (string mdlname, vector org, vector vconst, vector vrand, float specnum, float destroyontouch, float issilent)
{
entity gib;
- if not(giblist)
- giblist = spawn();
-
- // TODO remove some gibs according to cl_nogibs
- gib = RubbleNew(giblist);
- ++gibcount;
- if(gibcount >= cvar_or("cl_gibs_maxcount",100))
- RubbleDrop(giblist,Gib_Delete);
+ if not(giblist)
+ giblist = spawn();
- //gib = spawn();
+ // TODO remove some gibs according to cl_nogibs
+ gib = RubbleNew(giblist);
+ ++gibcount;
+ if(gibcount >= cvar_or("cl_gibs_maxcount",100))
+ RubbleDrop(giblist,Gib_Delete);
+ //gib = spawn();
+
gib.classname = "gib";
gib.move_movetype = MOVETYPE_BOUNCE;
gib.gravity = 1;
gib.solid = SOLID_CORPSE;
gib.cnt = specnum;
+ gib.silent = issilent;
setmodel (gib, mdlname); // precision set above
gib.skin = specnum;
@@ -120,6 +123,7 @@
float amount, type, specnum;
vector org, vel;
string specstr;
+ float issilent;
float c, gibfactor, randomvalue;
@@ -144,47 +148,49 @@
self.origin = org; // for the sounds
- specnum = (type & 0x78) / 8; // blood/gibmodel type: using four bits (0..15, bit indexes 3,4,5,6)
+ specnum = (type & 0x78) / 8; // blood/gibmodel type: using four bits (0..7, bit indexes 3,4,5)
+ issilent = (type & 0x40);
type = type & 0x87; // remove the species bits: bit 7 = gentle, bit 0,1,2 = kind of gib
specstr = species_prefix(specnum);
switch(type)
{
case 0x01:
- sound (self, CHAN_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM);
+ if(!issilent)
+ sound (self, CHAN_PAIN, "misc/gib.wav", VOL_BASE, ATTN_NORM);
if(prandom() < amount)
- TossGib ("models/gibs/eye.md3", org, vel, prandomvec() * 150, specnum, 0);
+ TossGib ("models/gibs/eye.md3", org, vel, prandomvec() * 150, specnum, 0, issilent);
new_te_bloodshower(particleeffectnum(strcat(specstr, "bloodshower")), org, 1200, amount);
if(prandom() < amount)
- TossGib ("models/gibs/bloodyskull.md3", org, vel, prandomvec() * 100, specnum, 0);
+ TossGib ("models/gibs/bloodyskull.md3", org, vel, prandomvec() * 100, specnum, 0, issilent);
for(c = 0; c < amount; ++c)
{
randomvalue = amount - c;
if(prandom() < randomvalue)
- TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90), specnum,0);
+ TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90), specnum,0);
+ TossGib ("models/gibs/arm.md3", org, vel, prandomvec() * (prandom() * 120 + 90), specnum,0, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel, prandomvec() * (prandom() * 120 + 80), specnum,0);
+ TossGib ("models/gibs/chest.md3", org + '0 0 -12', vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/smallchest.md3", org, vel, prandomvec() * (prandom() * 120 + 80), specnum,0);
+ TossGib ("models/gibs/smallchest.md3", org, vel, prandomvec() * (prandom() * 120 + 80), specnum,0, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0);
+ TossGib ("models/gibs/leg1.md3", org + '0 0 -5', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel, prandomvec() * (prandom() * 120 + 85), specnum,0);
+ TossGib ("models/gibs/leg2.md3", org + '0 0 -9', vel, prandomvec() * (prandom() * 120 + 85), specnum,0, issilent);
// these splat on impact
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1);
+ TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1);
+ TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1);
+ TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1, issilent);
if(prandom() < randomvalue)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1);
+ TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * 450, specnum,1, issilent);
}
break;
case 0x02:
@@ -192,7 +198,7 @@
break;
case 0x03:
if(prandom() < amount)
- TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * (prandom() * 30 + 20), specnum, 1); // TODO maybe adjust to more randomization?
+ TossGib ("models/gibs/chunk.mdl", org, vel, prandomvec() * (prandom() * 30 + 20), specnum, 1, issilent); // TODO maybe adjust to more randomization?
break;
case 0x81:
pointparticles(particleeffectnum("damage_dissolve"), org, vel, amount);
Modified: trunk/data/qcsrc/client/projectile.qc
===================================================================
--- trunk/data/qcsrc/client/projectile.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/client/projectile.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -15,6 +15,7 @@
.float cnt; // sound index
.float gravity;
.float snd_looping;
+.float silent;
void Projectile_DrawTrail(vector to)
{
@@ -166,6 +167,9 @@
void loopsound(entity e, float ch, string samp, float vol, float attn)
{
+ if(self.silent)
+ return;
+
sound(e, ch, samp, vol, attn);
e.snd_looping = 1;
}
@@ -250,6 +254,9 @@
{
self.cnt = ReadByte();
+ self.silent = (self.cnt & 0x80);
+ self.cnt = (self.cnt & 0x7F);
+
self.scale = 1;
switch(self.cnt)
{
Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/cl_player.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -276,7 +276,7 @@
void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
local float take, save;
- Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16);
+ Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
// damage resistance (ignore most of the damage from a bullet or similar)
damage = max(damage - 5, 1);
@@ -284,17 +284,20 @@
save = bound(0, damage * cvar("g_balance_armor_blockpercent"), self.armorvalue);
take = bound(0, damage - save, damage);
- if (save > 10)
- sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
- else if (take > 30)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
- else if (take > 10)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ {
+ if (save > 10)
+ sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ else if (take > 30)
+ sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ else if (take > 10)
+ sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM);
+ }
if (take > 50)
- Violence_GibSplash_At(hitloc, force * -0.1, 3, 1);
+ Violence_GibSplash_At(hitloc, force * -0.1, 3, 1, self, attacker);
if (take > 100)
- Violence_GibSplash_At(hitloc, force * -0.2, 3, 1);
+ Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, self, attacker);
if (!(self.flags & FL_GODMODE))
{
@@ -315,7 +318,7 @@
// view just above the floor
self.view_ofs = '0 0 4';
- Violence_GibSplash(self, 1, 1);
+ Violence_GibSplash(self, 1, 1, attacker);
self.modelindex = 0; // restore later
self.solid = SOLID_NOT; // restore later
}
@@ -349,8 +352,8 @@
d = inflictor.origin - self.origin;
f = (d * v_right) / vlen(d); // this is cos of angle of d and v_right!
force = v_right * vlen(force);
- Violence_GibSplash_At(ear1, force * -1, 2, bound(0, damage, 25) / 2 * (0.5 - 0.5 * f));
- Violence_GibSplash_At(ear2, force, 2, bound(0, damage, 25) / 2 * (0.5 + 0.5 * f));
+ Violence_GibSplash_At(ear1, force * -1, 2, bound(0, damage, 25) / 2 * (0.5 - 0.5 * f), self, attacker);
+ Violence_GibSplash_At(ear2, force, 2, bound(0, damage, 25) / 2 * (0.5 + 0.5 * f), self, attacker);
if(f > 0)
{
hitloc = ear1;
@@ -363,7 +366,7 @@
}
}
else
- Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16);
+ Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
if(g_arena)
if(numspawned < 2)
@@ -380,17 +383,20 @@
take = damage;
}
- if (save > 10)
- sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
- else if (take > 30)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
- else if (take > 10)
- sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
+ if(sound_allowed(MSG_BROADCAST, attacker))
+ {
+ if (save > 10)
+ sound (self, CHAN_PROJECTILE, "misc/armorimpact.wav", VOL_BASE, ATTN_NORM);
+ else if (take > 30)
+ sound (self, CHAN_PROJECTILE, "misc/bodyimpact2.wav", VOL_BASE, ATTN_NORM);
+ else if (take > 10)
+ sound (self, CHAN_PROJECTILE, "misc/bodyimpact1.wav", VOL_BASE, ATTN_NORM); // FIXME possibly remove them?
+ }
if (take > 50)
- Violence_GibSplash_At(hitloc, force * -0.1, 3, 1);
+ Violence_GibSplash_At(hitloc, force * -0.1, 3, 1, self, attacker);
if (take > 100)
- Violence_GibSplash_At(hitloc, force * -0.2, 3, 1);
+ Violence_GibSplash_At(hitloc, force * -0.2, 3, 1, self, attacker);
if (time > self.spawnshieldtime)
{
@@ -414,6 +420,7 @@
setanim(self, self.anim_pain2, FALSE, TRUE, TRUE);
}
+ if(sound_allowed(MSG_BROADCAST, attacker))
if(!DEATH_ISWEAPON(deathtype, WEP_LASER) || attacker != self || self.health < 2 * cvar("g_balance_laser_primary_damage") * cvar("g_balance_selfdamagepercent") + 1)
// exclude pain sounds for laserjumps as long as you aren't REALLY low on health and would die of the next two
{
@@ -467,6 +474,7 @@
defer_ClientKill_Now_TeamChange = FALSE;
if(sv_gentle < 1) // TODO make a "gentle" version?
+ if(sound_allowed(MSG_BROADCAST, attacker))
{
if(deathtype == DEATH_DROWN)
PlayerSound(playersound_drown, CHAN_PAIN, VOICETYPE_PLAYERSOUND);
Modified: trunk/data/qcsrc/server/csqcprojectile.qc
===================================================================
--- trunk/data/qcsrc/server/csqcprojectile.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/csqcprojectile.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -59,6 +59,8 @@
e.gravity = 0;
e.csqcprojectile_type = type;
+ if(!sound_allowed(MSG_BROADCAST, e))
+ type |= 0x80;
}
void UpdateCSQCProjectile(entity e)
Modified: trunk/data/qcsrc/server/g_casings.qc
===================================================================
--- trunk/data/qcsrc/server/g_casings.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/g_casings.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -12,13 +12,16 @@
return TRUE;
}
-void SpawnCasing(vector vel, float randomvel, vector ang, vector avel, float randomavel, float casingtype)
+void SpawnCasing(vector vel, float randomvel, vector ang, vector avel, float randomavel, float casingtype, entity casingowner)
{
entity e;
vector org;
org = self.origin + self.view_ofs + self.weaponentity.spawnorigin_x * v_forward - self.weaponentity.spawnorigin_y * v_right + self.weaponentity.spawnorigin_z * v_up;
+ if(!sound_allowed(MSG_BROADCAST, casingowner))
+ casingtype |= 0x80;
+
e = spawn();
e.state = casingtype;
e.origin = org;
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/g_damage.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -17,13 +17,16 @@
return TRUE;
}
-void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, float deathtype)
+void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad, vector force, float deathtype, entity dmgowner)
{
// TODO maybe call this from non-edgedamage too?
// TODO maybe make the client do the particle effects for the weapons and the impact sounds using this info?
entity e;
+ if(!sound_allowed(MSG_BROADCAST, dmgowner))
+ deathtype |= 0x8000;
+
e = spawn();
setorigin(e, org);
e.projectiledeathtype = deathtype;
@@ -972,9 +975,9 @@
else
force = normalize(force);
if(forceintensity >= 0)
- Damage_DamageInfo(blastorigin, coredamage, edgedamage, rad, forceintensity * force, deathtype);
+ Damage_DamageInfo(blastorigin, coredamage, edgedamage, rad, forceintensity * force, deathtype, attacker);
else
- Damage_DamageInfo(blastorigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype);
+ Damage_DamageInfo(blastorigin, coredamage, edgedamage, -rad, (-forceintensity) * force, deathtype, attacker);
}
RadiusDamage_EnemyDamageDone = 0;
Modified: trunk/data/qcsrc/server/g_violence.qc
===================================================================
--- trunk/data/qcsrc/server/g_violence.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/g_violence.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -11,7 +11,7 @@
}
// TODO maybe convert this to a TE?
-void Violence_GibSplash_At(vector org, vector dir, float type, float amount)
+void Violence_GibSplash_At(vector org, vector dir, float type, float amount, entity gibowner, entity attacker)
{
entity e;
@@ -21,6 +21,8 @@
e.state = type; // should stay smaller than 15
if(sv_gentle)
e.state |= 0x80; // "force gentle" bit
+ if(!sound_allowed(MSG_BROADCAST, gibowner) || !sound_allowed(MSG_BROADCAST, attacker))
+ e.state |= 0x40; // "silence" bit
e.state |= 8 * self.species; // gib type, ranges from 0 to 15
setorigin(e, org);
e.velocity = dir;
@@ -30,7 +32,7 @@
Net_LinkEntity(e, FALSE, 0.2, Violence_GibSplash_SendEntity);
}
-void Violence_GibSplash(entity source, float type, float amount)
+void Violence_GibSplash(entity source, float type, float amount, entity attacker)
{
- Violence_GibSplash_At(source.origin + source.view_ofs, source.velocity, type, amount);
+ Violence_GibSplash_At(source.origin + source.view_ofs, source.velocity, type, amount, source, attacker);
}
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -1127,26 +1127,23 @@
float sound_allowed(float dest, entity e)
{
// sounds from world may always pass
- if(!e)
+ for(;;)
{
- return TRUE;
+ if(e.owner)
+ e = e.owner;
+ else if(e.classname == "body")
+ e = e.enemy;
+ else
+ break;
}
// sounds to self may always pass
if(dest == MSG_ONE)
- {
if(e == msg_entity)
return TRUE;
- if(e.owner == msg_entity)
- return TRUE;
- }
// sounds by players can be removed
if(cvar("bot_sound_monopoly"))
- {
if(clienttype(e) == CLIENTTYPE_REAL)
return FALSE;
- if(clienttype(e.owner) == CLIENTTYPE_REAL)
- return FALSE;
- }
// anything else may pass
return TRUE;
}
@@ -2242,6 +2239,7 @@
{
pl.soundentity = spawn();
pl.soundentity.classname = "soundentity";
+ pl.soundentity.owner = pl;
setattachment(pl.soundentity, pl, "");
setmodel(pl.soundentity, "null");
}
Modified: trunk/data/qcsrc/server/w_campingrifle.qc
===================================================================
--- trunk/data/qcsrc/server/w_campingrifle.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_campingrifle.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -67,7 +67,7 @@
fireBallisticBullet(w_shotorg, w_shotdir, pSpread, pSpeed, pLifetime, pDamage, pHeadshotAddedDamage / pDamage, pForce, deathtype, EF_RED, 1, pBulletConstant);
if (cvar("g_casings") >= 2)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3);
+ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
self.campingrifle_bulletcounter = self.campingrifle_bulletcounter + 1;
}
Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_common.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -152,7 +152,7 @@
f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier
if(other.solid == SOLID_BSP)
- Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, self.dmg_force * normalize(self.velocity) * f, self.projectiledeathtype);
+ Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, self.dmg_force * normalize(self.velocity) * f, self.projectiledeathtype, self);
if(other && other != self.enemy)
{
@@ -216,7 +216,7 @@
{
float f;
f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier
- Damage_DamageInfo(self.origin, 0, 0, 0, self.dmg_force * normalize(self.velocity) * -f, self.projectiledeathtype);
+ Damage_DamageInfo(self.origin, 0, 0, 0, self.dmg_force * normalize(self.velocity) * -f, self.projectiledeathtype, self);
}
UpdateCSQCProjectile(self);
@@ -461,7 +461,7 @@
{
pointparticles(particleeffectnum("TE_KNIGHTSPIKE"),end,trace_plane_normal * 2500,1);
if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
- Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * force, dtype);
+ Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * force, dtype, self);
Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force);
//void(float effectnum, vector org, vector vel, float howmany) pointparticles = #337; // same as in CSQC
}
Modified: trunk/data/qcsrc/server/w_minstanex.qc
===================================================================
--- trunk/data/qcsrc/server/w_minstanex.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_minstanex.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -41,7 +41,7 @@
trailparticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, trace_endpos);
// flash and burn the wall
if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
- Damage_DamageInfo(trace_endpos, 10000, 0, 0, 800 * w_shotdir, WEP_MINSTANEX);
+ Damage_DamageInfo(trace_endpos, 10000, 0, 0, 800 * w_shotdir, WEP_MINSTANEX, self);
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
{
Modified: trunk/data/qcsrc/server/w_nex.qc
===================================================================
--- trunk/data/qcsrc/server/w_nex.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_nex.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -28,7 +28,7 @@
// flash and burn the wall
if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT))
- Damage_DamageInfo(trace_endpos, cvar("g_balance_nex_damage"), 0, 0, cvar("g_balance_nex_force") * w_shotdir, WEP_NEX);
+ Damage_DamageInfo(trace_endpos, cvar("g_balance_nex_damage"), 0, 0, cvar("g_balance_nex_force") * w_shotdir, WEP_NEX, self);
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo");
Modified: trunk/data/qcsrc/server/w_seeker.qc
===================================================================
--- trunk/data/qcsrc/server/w_seeker.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_seeker.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -255,7 +255,7 @@
{
//if(other==self.owner)
// return;
- Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE);
+ Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_BOUNCE, self);
remove (self);
}
@@ -286,7 +286,7 @@
te_knightspike(org2);
self.event_damage = SUB_Null;
- Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT);
+ Damage_DamageInfo(self.origin, 0, 0, 0, self.velocity, WEP_SEEKER | HITTYPE_HEADSHOT, self);
if (other.takedamage == DAMAGE_AIM && other.deadflag == DEAD_NO)
{
Modified: trunk/data/qcsrc/server/w_shotgun.qc
===================================================================
--- trunk/data/qcsrc/server/w_shotgun.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_shotgun.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -30,7 +30,7 @@
// casing code
if (cvar("g_casings") >= 1)
for (sc = 0;sc < ammoamount;sc = sc + 1)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 30) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 1);
+ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 30) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 1, self);
// muzzle flash for 1st person view
flash = spawn();
@@ -73,7 +73,7 @@
// casing code
if (cvar("g_casings") >= 1)
for (sc = 0;sc < ammoamount;sc = sc + 1)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 30) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 1);
+ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 30) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 1, self);
flash = spawn();
setmodel(flash, "models/uziflash.md3"); // precision set below
Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc 2009-06-20 20:33:40 UTC (rev 7063)
+++ trunk/data/qcsrc/server/w_uzi.qc 2009-06-20 21:10:41 UTC (rev 7064)
@@ -52,7 +52,7 @@
// casing code
if (cvar("g_casings") >= 2)
- SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3);
+ SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
}
// weapon frames
More information about the nexuiz-commits
mailing list