it.solid = it.railgunhitsolidbackup;
});
- // spawn a temporary explosion entity for RadiusDamage calls
- //explosion = spawn();
-
// Find all players the beam passed close by (even those hit)
float length = vlen(endpoint - start);
entity pseudoprojectile = NULL;
// nearest point on the beam
vector beampos = start + dir * bound(0, (it.origin - start) * dir, length);
- float f = bound(0, 1 - vlen(beampos - it.origin) / 512, 1);
- if(f <= 0)
- continue;
-
if(!pseudoprojectile)
pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume
+
msg_entity = it;
- soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASE * f, ATTEN_NONE);
+ // we want this to be very loud when close but fall off quickly -> using max base volume and high attenuation
+ soundtoat(MSG_ONE, pseudoprojectile, beampos, CH_SHOTS, SND(NEXWHOOSH_RANDOM()), VOL_BASEVOICE, ATTEN_IDLE);
});
if(pseudoprojectile)
delete(pseudoprojectile);
{
// removal from the list is handled below
- // get the details we need to call the damage function
- vector hitloc = it.railgunhitloc;
-
float foff = ExponentialFalloff(mindist, maxdist, halflifedist, it.railgundistance);
float ffs = ExponentialFalloff(mindist, maxdist, forcehalflifedist, it.railgundistance);
// apply the damage
if (it.takedamage)
- Damage (it, this, this, bdamage * foff, deathtype, weaponentity, hitloc, it.railgunforce * ffs);
-
- // create a small explosion to throw gibs around (if applicable)
- //setorigin(explosion, hitloc);
- //RadiusDamage (explosion, this, 10, 0, 50, NULL, NULL, 300, deathtype);
+ Damage(it, this, this, bdamage * foff, deathtype, weaponentity, it.railgunhitloc, it.railgunforce * ffs);
it.railgunhitloc = '0 0 0';
it.railgunhitsolidbackup = SOLID_NOT;