mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-25 21:31:37 +00:00
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
This commit is contained in:
parent
79d122b3cf
commit
bc44aaf54b
4 changed files with 46 additions and 78 deletions
|
@ -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;
|
||||
|
|
|
@ -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 ; i<cl.worldmodel->numsurfaces ; i++, surf++)
|
||||
|
@ -342,18 +326,13 @@ void GLR_LessenStains(void)
|
|||
{
|
||||
for (s=0 ; s<smax ; s++)
|
||||
{
|
||||
if (*stain < -ammount) //negative values increase to 0
|
||||
if (*stain < ammount) //eventually decay to 255
|
||||
{
|
||||
*stain += ammount;
|
||||
surf->stained=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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ; i<cl.worldmodel->numsurfaces ; i++, surf++)
|
||||
|
@ -298,18 +295,13 @@ void SWR_LessenStains(void)
|
|||
{
|
||||
for (s=0 ; s<smax ; s++)
|
||||
{
|
||||
if (*stain < -ammount) //negative values increase to 0
|
||||
if (*stain < ammount)
|
||||
{
|
||||
*stain += ammount;
|
||||
surf->stained=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))
|
||||
|
||||
|
|
Loading…
Reference in a new issue