From 863d638908be98322112adeb00170c985cfeab42 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Mon, 30 Dec 2024 13:06:29 -0500 Subject: [PATCH] Skip projectile alpha math if it'd be a NOP. Also, comment why it works the way it is, and what it'd take to possibly remove it. --- qcsrc/client/weapons/projectile.qc | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index 893d53ae5..eef49221d 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -38,11 +38,31 @@ void Projectile_DrawTrail(entity this, vector to) if (from == to) from.z += 1; - if (this.traileffect) + // TODO: Do we actually need alpha support? Consider removing this + // support entirely and instead making necessary adjustments in + // effectinfo. + // + // Right now (2024-12-30), only Crylink can generate alpha via + // fade_rate/fade_time, and only PROJECTILE_PORTO_* set a fixed alpha + // (and reuse the Arc's TE_WIZSPIKE). + if (this.traileffect && this.alpha > 0) { - particles_alphamin = particles_alphamax = particles_fade = sqrt(this.alpha); + float f = PARTICLES_DRAWASTRAIL; + if (this.alpha < 1) + { + // Do some of the fading using particle count, and some of it using alpha. + // Fading by particle count is less smooth but also cheaper to render. + // A higher power here performs more of the fading using particle count. + const float fade_power = 0.5; + particles_fade = pow(this.alpha, fade_power); + particles_alphamin = particles_alphamax = this.alpha / particles_fade; // == pow(this.alpha, 1 - fade_power) + f |= PARTICLES_USEALPHA | PARTICLES_USEFADE; + //LOG_INFOF("particle fade: %f alpha: %f", particles_fade, particles_alphamin); + } + //else + // LOG_INFOF("particle fade skipped"); entity eff = REGISTRY_GET(Effects, this.traileffect); - boxparticles(particleeffectnum(eff), this, from, to, this.velocity, this.velocity, 1, PARTICLES_USEALPHA | PARTICLES_USEFADE | PARTICLES_DRAWASTRAIL); + boxparticles(particleeffectnum(eff), this, from, to, this.velocity, this.velocity, 1, f); } } -- 2.39.5