From bc44aaf54be9950e27ba2bc982e64cc478bc7879 Mon Sep 17 00:00:00 2001 From: TimeServ Date: Thu, 1 Dec 2005 22:36:01 +0000 Subject: [PATCH] stains are multiplicative instead of additive get rid of infokey usage in cl_ignore reduce sw stainmaps from int to unsigned char git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1657 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/cl_ignore.c | 6 ++-- engine/gl/gl_rsurf.c | 69 ++++++++++++++------------------------- engine/gl/glquake.h | 2 +- engine/sw/r_surf.c | 47 ++++++++++---------------- 4 files changed, 46 insertions(+), 78 deletions(-) diff --git a/engine/client/cl_ignore.c b/engine/client/cl_ignore.c index 1ee24ffe2..771020da3 100644 --- a/engine/client/cl_ignore.c +++ b/engine/client/cl_ignore.c @@ -63,7 +63,7 @@ int Player_NametoSlot(char *name) { int i; for (i = 0; i < MAX_CLIENTS; i++) { - if (cl.players[i].name[0] && !strncmp(Info_ValueForKey(cl.players[i].userinfo, "name"), name, 31)) + if (cl.players[i].name[0] && !strncmp(cl.players[i].name, name, MAX_SCOREBOARDNAME - 1)) return i; } return PLAYER_NAME_NOMATCH; @@ -74,7 +74,7 @@ int Player_SlottoId (int slot) { } char *Player_MyName (void) { - return Info_ValueForKey(cls.demoplayback ? cls.userinfo : cl.players[cl.playernum[0]].userinfo, "name"); + return cl.players[cl.playernum[0]].name; } @@ -395,7 +395,7 @@ void Ignore_Flood_Add(char *s) { qboolean Ignore_Message(char *s, int flags, int offset) { int slot, i, p, q, len; - char name[32]; + char name[MAX_SCOREBOARDNAME]; if (!ignore_mode.value && (flags & 2)) return false; diff --git a/engine/gl/gl_rsurf.c b/engine/gl/gl_rsurf.c index a2309915f..555c24707 100644 --- a/engine/gl/gl_rsurf.c +++ b/engine/gl/gl_rsurf.c @@ -84,25 +84,9 @@ void GLR_StainSurf (msurface_t *surf, float *parms) #define stain(x) \ \ - change = amm*parms[4+x]; \ - if (change < 0) \ - { if(change<-128)change=-128; \ - if (stainbase[(s)*3+x] < change) \ - {} \ - else if (stainbase[(s)*3+x] < 0) \ - stainbase[(s)*3+x] = change; \ - else \ - stainbase[(s)*3+x] += change; \ - } \ - else \ - { if(change>127)change=127; \ - if (stainbase[(s)*3+x] > change) \ - {} \ - else if (stainbase[(s)*3+x] > 0) \ - stainbase[(s)*3+x] = change; \ - else \ - stainbase[(s)*3+x] += change; \ - } + change = stainbase[(s)*3+x] + amm*parms[4+x]; \ + stainbase[(s)*3+x] = bound(0, change, 255); + @@ -292,7 +276,7 @@ void GLR_WipeStains(void) { if (!lightmap[i]) break; - memset(lightmap[i]->stainmaps, 0, sizeof(lightmap[i]->stainmaps)); + memset(lightmap[i]->stainmaps, 255, sizeof(lightmap[i]->stainmaps)); } } @@ -317,7 +301,7 @@ void GLR_LessenStains(void) return; time-=r_stainfadetime.value; - ammount = r_stainfadeammount.value; + ammount = 255 - r_stainfadeammount.value; surf = cl.worldmodel->surfaces; for (i=0 ; inumsurfaces ; i++, surf++) @@ -342,18 +326,13 @@ void GLR_LessenStains(void) { for (s=0 ; sstained=true; } - else if (*stain > ammount) //positive values reduce to 0 - { - *stain -= ammount; - surf->stained=true; - } - else //close to 0 or 0 already. - *stain = 0; + else //reset to 255 + *stain = 255; stain++; } @@ -1030,11 +1009,11 @@ store: b = *blb++; b >>= 7; - if (isstained) //do we need to add the stain? + if (isstained) // merge in stain { - r += *stain++; - g += *stain++; - b += *stain++; + r = (128+r*(*stain++)) >> 8; + g = (128+g*(*stain++)) >> 8; + b = (128+b*(*stain++)) >> 8; } cr = 0; @@ -1188,11 +1167,11 @@ store: b = *blb++; b >>= 7; - if (isstained) //do we need to add the stain? + if (isstained) // merge in stain { - r += *stain++; - g += *stain++; - b += *stain++; + r = (128+r*(*stain++)) >> 8; + g = (128+g*(*stain++)) >> 8; + b = (128+b*(*stain++)) >> 8; } cr = 0; @@ -1383,11 +1362,11 @@ store: b = *blb++; b >>= 7; - if (isstained) //do we need to add the stain? + if (isstained) // merge in stain { - r += *stain++; - g += *stain++; - b += *stain++; + r = (128+r*(*stain++)) >> 8; + g = (128+g*(*stain++)) >> 8; + b = (128+b*(*stain++)) >> 8; } cr = 0; @@ -1541,11 +1520,11 @@ store: b = *blb++; b >>= 7; - if (isstained) //do we need to add the stain? + if (isstained) // merge in stain { - r += *stain++; - g += *stain++; - b += *stain++; + r = (128+r*(*stain++)) >> 8; + g = (128+g*(*stain++)) >> 8; + b = (128+b*(*stain++)) >> 8; } cr = 0; diff --git a/engine/gl/glquake.h b/engine/gl/glquake.h index ddc252d8a..ccfb87bd8 100644 --- a/engine/gl/glquake.h +++ b/engine/gl/glquake.h @@ -349,7 +349,7 @@ int Mod_LoadBumpmapTexture(char *name, char *subpath); typedef struct glRect_s { unsigned char l,t,w,h; } glRect_t; -typedef char stmap; +typedef unsigned char stmap; typedef struct { qboolean modified; qboolean deluxmodified; diff --git a/engine/sw/r_surf.c b/engine/sw/r_surf.c index 521455564..808be6804 100644 --- a/engine/sw/r_surf.c +++ b/engine/sw/r_surf.c @@ -87,7 +87,8 @@ extern cvar_t r_stainfadeammount; #define LMBLOCK_HEIGHT 128 #define MAX_LIGHTMAPS 64 -int stainmaps[MAX_LIGHTMAPS*LMBLOCK_WIDTH*LMBLOCK_HEIGHT]; //added to lightmap for added (hopefully) speed. +typedef unsigned char stmap; +stmap stainmaps[MAX_LIGHTMAPS*LMBLOCK_WIDTH*LMBLOCK_HEIGHT]; //added to lightmap for added (hopefully) speed. int allocated[MAX_LIGHTMAPS][LMBLOCK_WIDTH]; //radius, x y z, a @@ -102,7 +103,7 @@ void SWR_StainSurf (msurface_t *surf, float *parms) float amm; mtexinfo_t *tex; - int *stainbase; + stmap *stainbase; smax = (surf->extents[0]>>4)+1; tmax = (surf->extents[1]>>4)+1; @@ -148,12 +149,8 @@ void SWR_StainSurf (msurface_t *surf, float *parms) dist = td + (sd>>1); if (dist < minlight) { - amm = (rad - dist); - if (stainbase[(s)]>0) - amm *= (255-stainbase[(s)])/255.0; - else - amm *= (255+stainbase[(s)])/255.0; - stainbase[(s)] += amm*parms[4]; + amm = stainbase[(s)] + (dist - rad)*parms[4]; + stainbase[(s)] = bound(0, amm, 255); surf->stained = true; } @@ -246,7 +243,7 @@ void SWR_AddStain(vec3_t org, float red, float green, float blue, float radius) void SWR_WipeStains(void) { - memset(stainmaps, 0, sizeof(stainmaps)); + memset(stainmaps, 255, sizeof(stainmaps)); } void SWR_LessenStains(void) @@ -256,7 +253,7 @@ void SWR_LessenStains(void) int smax, tmax; int s, t; - int *stain; + stmap *stain; int stride; int ammount; @@ -273,7 +270,7 @@ void SWR_LessenStains(void) return; time-=r_stainfadetime.value; - ammount = r_stainfadeammount.value; + ammount = 255 - r_stainfadeammount.value; surf = cl.worldmodel->surfaces; for (i=0 ; inumsurfaces ; i++, surf++) @@ -298,18 +295,13 @@ void SWR_LessenStains(void) { for (s=0 ; sstained=true; } - else if (*stain > ammount) //positive values reduce to 0 - { - *stain -= ammount; - surf->stained=true; - } - else //close to 0 or 0 already. - *stain = 0; + else //reset to 255. + *stain = 255; stain++; } @@ -812,10 +804,9 @@ void SWR_BuildLightMap (void) #ifdef SWSTAINS if (surf->stained) { - int *stain; + stmap *stain; int sstride; int x, y; - int quant; stain = stainmaps + surf->lightmaptexturenum*LMBLOCK_WIDTH*LMBLOCK_HEIGHT; stain += (surf->light_t * LMBLOCK_WIDTH + surf->light_s); @@ -828,10 +819,7 @@ void SWR_BuildLightMap (void) { for (y = 0; y < smax; y++, i++, stain++) { - quant = (int)blocklights[i]+*stain*128; - if (quant < 0) - quant = 0; - t = (255*256 - (quant)) >> (8 - VID_CBITS); + t = (255*256*256-128*256-(int)blocklights[i]*(*stain)) >> (16 - VID_CBITS); if (t < (1 << 6)) t = (1 << 6); @@ -904,7 +892,7 @@ void SWR_BuildLightMapRGB (void) #ifdef SWSTAINS if (surf->stained) { - int *stain; + stmap *stain; int sstride; int x, y; @@ -919,9 +907,10 @@ void SWR_BuildLightMapRGB (void) { for (y = 0; y < smax; y++, i+=3, stain++) { - r = (255*256-(int)blocklights[i]-*stain*128) >> (8 - VID_CBITS); - g = (255*256-(int)blocklights[i+1]-*stain*128) >> (8 - VID_CBITS); - b = (255*256-(int)blocklights[i+2]-*stain*128) >> (8 - VID_CBITS); + r = (255*256*256-128*256-(int)blocklights[i]*(*stain)) >> 16 - VID_CBITS; + g = (255*256*256-128*256-(int)blocklights[i+1]*(*stain)) >> 16 - VID_CBITS; + b = (255*256*256-128*256-(int)blocklights[i+2]*(*stain)) >> 16 - VID_CBITS; + #define MINL (1<<6) #define MAXL ((255*256) >> (8 - VID_CBITS))