From 1f53694b2f3b592b594fbd574ae16271a12ffe0c Mon Sep 17 00:00:00 2001 From: div0 Date: Wed, 11 Feb 2009 15:32:12 +0000 Subject: [PATCH] add a somewhat working tr_bullet trail effect to make antilagged bullets visible git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5837 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/effectinfo.txt | 10 +++++++++- data/qcsrc/client/particles.qc | 21 +++++++++++++++------ data/qcsrc/client/projectile.qc | 4 ++++ data/qcsrc/server/miscfunctions.qc | 5 +++-- data/qcsrc/server/w_common.qc | 2 +- 5 files changed, 32 insertions(+), 10 deletions(-) diff --git a/data/effectinfo.txt b/data/effectinfo.txt index 608a168f5..1d3e86bc8 100644 --- a/data/effectinfo.txt +++ b/data/effectinfo.txt @@ -3152,4 +3152,12 @@ velocityoffset 0 0 80 velocityjitter 256 256 256 - +// bullet trail (somewhat like a tracer) +effect tr_bullet +trailspacing 16 +type spark +color 0x800000 0xFF8020 +alpha 256 256 10240 +size 2 2 +stretchfactor 0.3 +velocitymultiplier 1 diff --git a/data/qcsrc/client/particles.qc b/data/qcsrc/client/particles.qc index f0793792d..b2a9e5bcd 100644 --- a/data/qcsrc/client/particles.qc +++ b/data/qcsrc/client/particles.qc @@ -190,7 +190,8 @@ void Ent_RainOrSnow() self.draw = Draw_Snow; } -void zcurveparticles(float effectnum, vector start, vector end, float end_dz, float depth) +entity zcurve; +void zcurveparticles(float effectnum, vector start, vector end, float end_dz, float speed, float depth) { // end_dz: // IF IT WERE A STRAIGHT LINE, it'd end end_dz above end @@ -207,12 +208,13 @@ void zcurveparticles(float effectnum, vector start, vector end, float end_dz, fl // currently: 0.081 degrees // 0.99999 would be 0.256 degrees and is visible { - trailparticles(world, effectnum, start, end); + zcurve.velocity = speed * normalize(end - start); + trailparticles(zcurve, effectnum, start, end); } else { - zcurveparticles(effectnum, start, mid, end_dz, depth); - zcurveparticles(effectnum, mid, end, end_dz, depth); + zcurveparticles(effectnum, start, mid, end_dz, speed, depth); + zcurveparticles(effectnum, mid, end, end_dz, speed, depth); } } @@ -220,7 +222,13 @@ void Net_ReadZCurveParticles() { vector start, end; float end_dz; - float effectnum; + float effectnum, speed; + + if(!zcurve) + { + zcurve = spawn(); + zcurve.classname = "zcurve"; + } effectnum = ReadShort(); @@ -231,6 +239,7 @@ void Net_ReadZCurveParticles() end_y = ReadCoord(); end_z = ReadCoord(); end_dz = ReadCoord(); + speed = ReadShort() * 16; - zcurveparticles(effectnum, start, end, end_dz, 5); // at most 32 segments + zcurveparticles(effectnum, start, end, end_dz, speed, 5); // at most 32 segments } diff --git a/data/qcsrc/client/projectile.qc b/data/qcsrc/client/projectile.qc index adfcb35bd..d580d0b63 100644 --- a/data/qcsrc/client/projectile.qc +++ b/data/qcsrc/client/projectile.qc @@ -59,6 +59,10 @@ void Projectile_DrawTrail(vector to) case PROJECTILE_HAGAR_BOUNCING: trailparticles(self, particleeffectnum("TR_GRENADE"), from, to); break; + case PROJECTILE_BULLET: + case PROJECTILE_BULLET_GLOWING: + trailparticles(self, particleeffectnum("tr_bullet"), from, to); + break; default: break; } diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 9489be88f..738ffda76 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -1968,7 +1968,7 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f return FALSE; } -void zcurveparticles(float effectno, vector start, vector end, float end_dz) +void zcurveparticles(float effectno, vector start, vector end, float end_dz, float spd) { WriteByte(MSG_BROADCAST, SVC_TEMPENTITY); WriteByte(MSG_BROADCAST, TE_CSQC_ZCURVEPARTICLES); @@ -1980,6 +1980,7 @@ void zcurveparticles(float effectno, vector start, vector end, float end_dz) WriteCoord(MSG_BROADCAST, end_y); WriteCoord(MSG_BROADCAST, end_z); WriteCoord(MSG_BROADCAST, end_dz); + WriteShort(MSG_BROADCAST, spd / 16); } void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, vector vel) @@ -1997,5 +1998,5 @@ void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, ve } end_dz = vlen(vecxy) / vlen(velxy) * vel_z - (end_z - start_z); - zcurveparticles(effectno, start, end, end_dz); + zcurveparticles(effectno, start, end, end_dz, vlen(vel)); } diff --git a/data/qcsrc/server/w_common.qc b/data/qcsrc/server/w_common.qc index 9b401c829..9e943c27f 100644 --- a/data/qcsrc/server/w_common.qc +++ b/data/qcsrc/server/w_common.qc @@ -333,7 +333,7 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f self.velocity = v0; self.gravity = g0; - zcurveparticles_from_tracetoss(particleeffectnum("TR_VORESPIKE"), self.origin, trace_endpos, self.velocity); + zcurveparticles_from_tracetoss(particleeffectnum("tr_bullet"), self.origin, trace_endpos, self.velocity); if(trace_fraction == 1) break; // won't hit anything anytime soon (DP's -- 2.39.2