From cbfb3cbbb346a86fcc5d61ba8ed91afad93ad4b5 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 2 Jan 2025 18:58:19 -0500 Subject: [PATCH] Fix case of trails not being drawn on CSQC models with unset alpha. That bug was found by Mario in https://gitlab.com/xonotic/xonotic-data.pk3dir/-/merge_requests/1410#note_2279399941 and was actually pre-existing even before the change, as it was passing 0 to both alpha and count modifiers. --- qcsrc/client/weapons/projectile.qc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/qcsrc/client/weapons/projectile.qc b/qcsrc/client/weapons/projectile.qc index eef49221d..a10b09df9 100644 --- a/qcsrc/client/weapons/projectile.qc +++ b/qcsrc/client/weapons/projectile.qc @@ -38,6 +38,10 @@ void Projectile_DrawTrail(entity this, vector to) if (from == to) from.z += 1; + // Note: alpha value 0 actually means 1 on entities. + // This can be relevant when coming from CSQCModel_Effects_Apply. + float a = (this.alpha == 0) ? 1 : this.alpha; + // TODO: Do we actually need alpha support? Consider removing this // support entirely and instead making necessary adjustments in // effectinfo. @@ -45,17 +49,17 @@ void Projectile_DrawTrail(entity this, vector to) // 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) + if (this.traileffect && a > 0) { float f = PARTICLES_DRAWASTRAIL; - if (this.alpha < 1) + if (a < 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) + particles_fade = pow(a, fade_power); + particles_alphamin = particles_alphamax = a / particles_fade; // == pow(a, 1 - fade_power) f |= PARTICLES_USEALPHA | PARTICLES_USEFADE; //LOG_INFOF("particle fade: %f alpha: %f", particles_fade, particles_alphamin); } -- 2.39.5