From cd26b1f279575a7d0a44581edf69459e30c85a24 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 25 Jul 2025 01:39:59 +0500 Subject: [PATCH] engine: imagelib: img_quant: reduce used colors from 256 to 255, so last color in palette can be reserved for custom usage (like transparency in player decals) --- engine/client/cl_spray.c | 10 +++------- engine/common/imagelib/img_quant.c | 20 ++++++++++++++------ 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/engine/client/cl_spray.c b/engine/client/cl_spray.c index c5b2a241..22c64052 100644 --- a/engine/client/cl_spray.c +++ b/engine/client/cl_spray.c @@ -141,14 +141,10 @@ qboolean CL_ConvertImageToWAD3( const char *filename ) if( !quant || !quant->buffer || !quant->palette ) goto cleanup; - // remap palette index 255 to 254 to avoid transparency conflicts - for( i = 0; i < width * height; ++i ) + // set index 255 for transparent pixels in rgba images + if( image->type == PF_RGBA_32 ) { - if( quant->buffer[i] == 255 ) - quant->buffer[i] = 254; - - // set index 255 for transparent pixels in rgba images - if( image->type == PF_RGBA_32 ) + for( i = 0; i < width * height; ++i ) { if( image->buffer[i * 4 + 3] <= SPRAY_ALPHA_THRESHOLD ) quant->buffer[i] = 255; diff --git a/engine/common/imagelib/img_quant.c b/engine/common/imagelib/img_quant.c index 556ee995..536ae977 100644 --- a/engine/common/imagelib/img_quant.c +++ b/engine/common/imagelib/img_quant.c @@ -15,12 +15,13 @@ GNU General Public License for more details. #include "imagelib.h" +#define palettesize 256 +#define netsize 255 // number of colours used -#define netsize 256 // number of colours used -#define prime1 499 -#define prime2 491 -#define prime3 487 -#define prime4 503 +#define prime1 499 +#define prime2 491 +#define prime3 487 +#define prime4 503 #define minpicturebytes (3*prime4) // minimum size for input image @@ -446,7 +447,7 @@ rgbdata_t *Image_Quantize( rgbdata_t *pic ) learn(); unbiasnet(); - pic->palette = Mem_Malloc( host.imagepool, netsize * 3 ); + pic->palette = Mem_Malloc( host.imagepool, palettesize * 3 ); for( i = 0; i < netsize; i++ ) { @@ -455,6 +456,13 @@ rgbdata_t *Image_Quantize( rgbdata_t *pic ) pic->palette[i*3+2] = network[i][2]; // blue } + for( ; i < palettesize; i++ ) + { + pic->palette[i*3+0] = 0; + pic->palette[i*3+1] = 0; + pic->palette[i*3+2] = 0; + } + inxbuild(); for( i = 0; i < image.width * image.height; i++ )