diff --git a/polymer/eduke32/build/include/hightile.h b/polymer/eduke32/build/include/hightile.h index 0d6ec01fe..23df40208 100644 --- a/polymer/eduke32/build/include/hightile.h +++ b/polymer/eduke32/build/include/hightile.h @@ -35,6 +35,32 @@ typedef struct texcachepic_t } texcachepicture; hicreplctyp * hicfindsubst(int picnum, int palnum, int skybox); -#define HICEFFECTMASK (1|2|4|8) + +// texcacheheader cachead.flags bits +enum +{ + CACHEAD_NONPOW2 = 1, + CACHEAD_HASALPHA = 2, + CACHEAD_COMPRESSED = 4, +}; + +// hicreplctyp hicr->flags bits +enum +{ + HICR_NOSAVE = 1, + + HICR_NOCOMPRESS = 16, +}; + +// hictinting[].f / gloadtile_hi() and daskinloader() arg bits +enum +{ + HICTINT_GRAYSCALE = 1, + HICTINT_INVERT = 2, + HICTINT_COLORIZE = 4, + HICTINT_USEONART = 8, + + HICEFFECTMASK = (1|2|4|8), +}; #endif diff --git a/polymer/eduke32/build/include/polymost.h b/polymer/eduke32/build/include/polymost.h index da8695281..2cbfd3604 100644 --- a/polymer/eduke32/build/include/polymost.h +++ b/polymer/eduke32/build/include/polymost.h @@ -94,6 +94,28 @@ static inline int32_t fogpal_shade(const sectortype *sec, int32_t shade) return sec->fogpal ? 0 : shade; } +// Flags of the argument of various functions +enum { + DAMETH_CLAMPED = 4, + + DAMETH_NOCOMPRESS = 4096, + DAMETH_HI = 8192, +}; + +// DAMETH_CLAMPED -> PTH_CLAMPED conversion +#define TO_PTH_CLAMPED(dameth) ((((dameth)&4))>>2) + +// pthtyp pth->flags bits +enum { + PTH_CLAMPED = 1, + PTH_HIGHTILE = 2, + PTH_SKYBOX = 4, + PTH_HASALPHA = 8, + PTH_HASFULLBRIGHT = 16, + + PTH_INVALIDATED = 128, +}; + typedef struct pthtyp_t { struct pthtyp_t *next; diff --git a/polymer/eduke32/build/src/mdsprite.c b/polymer/eduke32/build/src/mdsprite.c index 98a9d39b8..2183d0798 100644 --- a/polymer/eduke32/build/src/mdsprite.c +++ b/polymer/eduke32/build/src/mdsprite.c @@ -624,20 +624,20 @@ static int32_t daskinloader(int32_t filh, intptr_t *fptr, int32_t *bpl, int32_t tcol.g = cptr[rpptr[x].g]; tcol.r = cptr[rpptr[x].r]; - if (effect & 1) + if (effect & HICTINT_GRAYSCALE) { // greyscale tcol.b = max(tcol.b, max(tcol.g, tcol.r)); tcol.g = tcol.r = tcol.b; } - if (effect & 2) + if (effect & HICTINT_INVERT) { // invert tcol.b = 255-tcol.b; tcol.g = 255-tcol.g; tcol.r = 255-tcol.r; } - if (effect & 4) + if (effect & HICTINT_COLORIZE) { // colorize tcol.b = min((int32_t)(tcol.b)*b/64,255); @@ -782,7 +782,7 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf) { osizx = cachead.xdim; osizy = cachead.ydim; - hasalpha = (cachead.flags & 2) ? 1 : 0; + hasalpha = (cachead.flags & CACHEAD_HASALPHA) ? 1 : 0; if (pal < (MAXPALOOKUPS - RESERVEDPALS)) m->usesalpha = hasalpha; //kclose(filh); // FIXME: uncomment when cache1d.c is fixed @@ -890,7 +890,8 @@ int32_t mdloadskin(md2model_t *m, int32_t number, int32_t pal, int32_t surf) if (xsiz == pow2long[j]) { i |= 1; } if (ysiz == pow2long[j]) { i |= 2; } } - cachead.flags = (i!=3) | (hasalpha ? 2 : 0); + cachead.flags = (i!=3)*CACHEAD_NONPOW2 | (hasalpha ? CACHEAD_HASALPHA : 0); + /// OSD_Printf("Caching \"%s\"\n",fn); texcache_writetex(fn, picfillen, pal<<8, hicfxmask(pal), &cachead); @@ -2167,7 +2168,7 @@ static int32_t md3draw(md3model_t *m, const spritetype *tspr) bglEnable(GL_TEXTURE_2D); pc[0] = pc[1] = pc[2] = ((float)(numshades-min(max((globalshade * shadescale)+m->shadeoff,0),numshades)))/((float)numshades); - if (!(hictinting[globalpal].f&4)) + if (!(hictinting[globalpal].f & HICTINT_COLORIZE)) { if (!(m->flags&1) || (((unsigned)owner < MAXSPRITES) && sector[sprite[owner].sectnum].floorpal!=0)) { diff --git a/polymer/eduke32/build/src/polymer.c b/polymer/eduke32/build/src/polymer.c index 3c46b9ebc..35ef748dd 100644 --- a/polymer/eduke32/build/src/polymer.c +++ b/polymer/eduke32/build/src/polymer.c @@ -1034,7 +1034,7 @@ void polymer_drawrooms(int32_t daposx, int32_t daposy, int32_t da // if it's not a skybox, make the sky parallax // DEFAULT_ARTSKY_ANGDIV is computed from eyeballed values // need to recompute it if we ever change the max horiz amplitude - if (!pth || !(pth->flags & 4)) + if (!pth || !(pth->flags & PTH_SKYBOX)) skyhoriz *= curskyangmul; bglMatrixMode(GL_MODELVIEW); @@ -3874,7 +3874,7 @@ static void polymer_drawsky(int16_t tilenum, char palnum, int8_t shade) pth = texcache_fetch(tilenum,0,0,0); drawingskybox = 0; - if (pth && (pth->flags & 4)) + if (pth && (pth->flags & PTH_SKYBOX)) polymer_drawskybox(tilenum, palnum, shade); else polymer_drawartsky(tilenum, palnum, shade); @@ -3924,7 +3924,7 @@ static void polymer_drawartsky(int16_t tilenum, char palnum, int8_t shad glcolors[i][0] = glcolors[i][1] = glcolors[i][2] = getshadefactor(shade); - if (pth && (pth->flags & 2)) + if (pth && (pth->flags & PTH_HIGHTILE)) { if (pth->palnum != palnum) { @@ -4015,7 +4015,7 @@ static void polymer_drawskybox(int16_t tilenum, char palnum, int8_t shad color[0] = color[1] = color[2] = getshadefactor(shade); - if (pth && (pth->flags & 2)) + if (pth && (pth->flags & PTH_HIGHTILE)) { if (pth->palnum != palnum) { @@ -4247,7 +4247,7 @@ static void polymer_drawmdsprite(spritetype *tspr) // If that palette has a highpalookup, we'll never use tinting. We might use // alternate skins if they exist later, though. - if (!usinghighpal && !(hictinting[tspr->pal].f&4)) + if (!usinghighpal && !(hictinting[tspr->pal].f & HICTINT_COLORIZE)) { if (!(m->flags&1) || (!(tspr->owner >= MAXSPRITES) && sector[sprite[tspr->owner].sectnum].floorpal!=0)) { @@ -4739,7 +4739,7 @@ static void polymer_getbuildmaterial(_prmaterial* material, int16_t tile material->diffusemodulation[2] = (GLubyte)(getshadefactor(shade) * 0xFF); - if (pth->flags & 2) + if (pth->flags & PTH_HIGHTILE) { if (pth->palnum != pal) { @@ -4769,7 +4769,7 @@ static void polymer_getbuildmaterial(_prmaterial* material, int16_t tile } // PR_BIT_GLOW_MAP - if (r_fullbrights && pth->flags & 16) + if (r_fullbrights && pth->flags & PTH_HASFULLBRIGHT) material->glowmap = pth->ofb->glpic; } diff --git a/polymer/eduke32/build/src/polymost.c b/polymer/eduke32/build/src/polymost.c index 1fcae4670..3455672fd 100644 --- a/polymer/eduke32/build/src/polymost.c +++ b/polymer/eduke32/build/src/polymost.c @@ -253,7 +253,7 @@ static inline int32_t gltexmayhavealpha(int32_t dapicnum, int32_t dapalnum) for (pth=texcache.list[j]; pth; pth=pth->next) if (pth->picnum == dapicnum && pth->palnum == dapalnum) - return ((pth->flags&8) != 0); + return ((pth->flags&PTH_HASALPHA) != 0); return 1; } @@ -264,11 +264,12 @@ void gltexinvalidate(int32_t dapicnum, int32_t dapalnum, int32_t dameth) pthtyp *pth; for (pth=texcache.list[j]; pth; pth=pth->next) - if (pth->picnum == dapicnum && pth->palnum == dapalnum && (pth->flags & 1) == ((dameth&4)>>2)) + if (pth->picnum == dapicnum && pth->palnum == dapalnum && + (pth->flags & PTH_CLAMPED) == TO_PTH_CLAMPED(dameth)) { - pth->flags |= 128; - if (pth->flags & 16) - pth->ofb->flags |= 128; + pth->flags |= PTH_INVALIDATED; + if (pth->flags & PTH_HASFULLBRIGHT) + pth->ofb->flags |= PTH_INVALIDATED; } } @@ -286,9 +287,9 @@ void gltexinvalidatetype(int32_t type) { if (type == INVALIDATE_ALL || (type == INVALIDATE_ART && pth->hicr == NULL)) { - pth->flags |= 128; - if (pth->flags & 16) - pth->ofb->flags |= 128; + pth->flags |= PTH_INVALIDATED; + if (pth->flags & PTH_HASFULLBRIGHT) + pth->ofb->flags |= PTH_INVALIDATED; } } } @@ -331,7 +332,7 @@ void gltexapplyprops(void) { bind_2d_texture(pth->glpic); - if (r_fullbrights && pth->flags & 16) + if (r_fullbrights && pth->flags & PTH_HASFULLBRIGHT) bind_2d_texture(pth->ofb->glpic); } } @@ -398,7 +399,7 @@ void polymost_glreset() for (pth=texcache.list[i]; pth;) { next = pth->next; - if (pth->flags & 16) // fullbright textures + if (pth->flags & PTH_HASFULLBRIGHT) { bglDeleteTextures(1,&pth->ofb->glpic); Bfree(pth->ofb); @@ -756,10 +757,10 @@ static void fixtransparency(int32_t dapicnum, coltype *dapic, int32_t daxsiz, in void uploadtexture(int32_t doalloc, int32_t xsiz, int32_t ysiz, int32_t intexfmt, int32_t texfmt, coltype *pic, int32_t tsizx, int32_t tsizy, int32_t dameth) { int32_t x2, y2, j, js=0; - const int32_t hi = (dameth&8192)?1:0; - const int32_t nocompress = (dameth&4096)?1:0; + const int32_t hi = (dameth & DAMETH_HI) ? 1 : 0; + const int32_t nocompress = (dameth & DAMETH_NOCOMPRESS) ? 1 : 0; - dameth &= ~(8192|4096); + dameth &= ~(DAMETH_HI|DAMETH_NOCOMPRESS); if (gltexmaxsize <= 0) { @@ -879,7 +880,7 @@ static void texture_setup(int32_t dameth) bglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, glanisotropy); } - if (!(dameth&4)) + if (!(dameth & DAMETH_CLAMPED)) { bglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, !tile_is_sky(dapic) ? GL_REPEAT: (glinfo.clamptoedge?GL_CLAMP_TO_EDGE:GL_CLAMP)); @@ -949,7 +950,7 @@ int32_t gloadtile_art(int32_t dapic, int32_t dapal, int32_t dashade, int32_t dam int32_t dacol; int32_t x2 = (x < tsizx) ? x : x-tsizx; - if ((dameth&4) && (x >= tsizx || y >= tsizy)) //Clamp texture + if ((dameth & DAMETH_CLAMPED) && (x >= tsizx || y >= tsizy)) //Clamp texture { wpptr->r = wpptr->g = wpptr->b = wpptr->a = 0; continue; @@ -1009,7 +1010,7 @@ int32_t gloadtile_art(int32_t dapic, int32_t dapal, int32_t dashade, int32_t dam pth->palnum = dapal; pth->shade = dashade; pth->effects = 0; - pth->flags = ((dameth&4)>>2) | (hasalpha<<3); + pth->flags = TO_PTH_CLAMPED(dameth) | (hasalpha*PTH_HASALPHA); pth->hicr = NULL; if (hasfullbright && !fullbrightloadingpass) @@ -1022,7 +1023,7 @@ int32_t gloadtile_art(int32_t dapic, int32_t dapal, int32_t dashade, int32_t dam if (!pth->ofb) return 1; - pth->flags |= (1<<4); + pth->flags |= PTH_HASFULLBRIGHT; if (gloadtile_art(dapic, dapal, 0, dameth, pth->ofb, 1)) return 1; @@ -1087,7 +1088,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp { tsizx = cachead.xdim; tsizy = cachead.ydim; - hasalpha = (cachead.flags & 2) ? 0 : 255; + hasalpha = (cachead.flags & CACHEAD_HASALPHA) ? 0 : 255; } else { @@ -1181,20 +1182,22 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp tcol.r = cptr[rpptr[x].r]; tcol.a = rpptr[x].a; hasalpha &= rpptr[x].a; - if (effect & 1) + if (effect & HICTINT_GRAYSCALE) { // greyscale tcol.b = max(tcol.b, max(tcol.g, tcol.r)); tcol.g = tcol.r = tcol.b; } - if (effect & 2) + + if (effect & HICTINT_INVERT) { // invert tcol.b = 255-tcol.b; tcol.g = 255-tcol.g; tcol.r = 255-tcol.r; } - if (effect & 4) + + if (effect & HICTINT_COLORIZE) { // colorize tcol.b = min((int32_t)((tcol.b)*r)/64,255); @@ -1209,7 +1212,7 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp } } - if ((!(dameth&4)) || (facen)) //Duplicate texture pixels (wrapping tricks for non power of 2 texture sizes) + if ((!(dameth & DAMETH_CLAMPED)) || facen) //Duplicate texture pixels (wrapping tricks for non power of 2 texture sizes) { if (xsiz > tsizx) //Copy left to right { @@ -1233,9 +1236,9 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp Bfree(picfil); picfil = 0; if (tsizx>>r_downsize <= tilesizx[dapic] || tsizy>>r_downsize <= tilesizy[dapic]) - hicr->flags |= 17; + hicr->flags |= (HICR_NOCOMPRESS + HICR_NOSAVE); - if (glinfo.texcompr && glusetexcompr && !(hicr->flags & 1)) + if (glinfo.texcompr && glusetexcompr && !(hicr->flags & HICR_NOSAVE)) intexfmt = (hasalpha == 255) ? GL_COMPRESSED_RGB_ARB : GL_COMPRESSED_RGBA_ARB; else if (hasalpha == 255) intexfmt = GL_RGB; @@ -1244,7 +1247,8 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp bglBindTexture(GL_TEXTURE_2D,pth->glpic); fixtransparency(-1, pic,tsizx,tsizy,xsiz,ysiz,dameth); - uploadtexture(doalloc,xsiz,ysiz,intexfmt,texfmt,pic,-1,tsizy,dameth|8192|(hicr->flags & 16?4096:0)); + uploadtexture(doalloc,xsiz,ysiz,intexfmt,texfmt,pic,-1,tsizy, + dameth | DAMETH_HI | (hicr->flags & HICR_NOCOMPRESS ? DAMETH_NOCOMPRESS : 0)); } // precalculate scaling parameters for replacement @@ -1264,21 +1268,23 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp Bfree(pic); pic=NULL; if (tsizx>>r_downsize <= tilesizx[dapic] || tsizy>>r_downsize <= tilesizy[dapic]) - hicr->flags |= (16+1); + hicr->flags |= (HICR_NOCOMPRESS + HICR_NOSAVE); pth->picnum = dapic; pth->effects = effect; - pth->flags = ((dameth&4)>>2) + 2 + ((facen>0)<<2); if (hasalpha != 255) pth->flags |= 8; + pth->flags = TO_PTH_CLAMPED(dameth) + PTH_HIGHTILE + (facen>0)*PTH_SKYBOX; + if (hasalpha != 255) + pth->flags |= PTH_HASALPHA; pth->skyface = facen; pth->hicr = hicr; - if (glinfo.texcompr && glusetexcompr && glusetexcache && !(hicr->flags & 1)) + if (glinfo.texcompr && glusetexcompr && glusetexcache && !(hicr->flags & HICR_NOSAVE)) if (!gotcache) { int32_t j, x; // save off the compressed version - if (hicr->flags & 16) cachead.quality = 0; + if (hicr->flags & HICR_NOCOMPRESS) cachead.quality = 0; else cachead.quality = r_downsize; cachead.xdim = tsizx>>cachead.quality; cachead.ydim = tsizy>>cachead.quality; @@ -1289,7 +1295,12 @@ int32_t gloadtile_hi(int32_t dapic,int32_t dapalnum, int32_t facen, hicreplctyp if (xsiz == pow2long[j]) { x |= 1; } if (ysiz == pow2long[j]) { x |= 2; } } - cachead.flags = (x!=3) | (hasalpha != 255 ? 2 : 0) | (hicr->flags&16 ? 8 : 0); // handle nocompress + + // handle nocompress: + cachead.flags = (x!=3)*CACHEAD_NONPOW2 | + (hasalpha != 255 ? CACHEAD_HASALPHA : 0) | + (hicr->flags & HICR_NOCOMPRESS ? 8 : 0); + /// OSD_Printf("Caching \"%s\"\n", fn); texcache_writetex(fn, picfillen+(dapalnum<<8), dameth, effect, &cachead); @@ -1441,7 +1452,7 @@ void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method) return; } - if (r_fullbrights && pth->flags & 16) + if (r_fullbrights && pth->flags & PTH_HASFULLBRIGHT) if (indrawroomsandmasks) { if (!fullbrightdrawingpass) @@ -1505,7 +1516,7 @@ void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method) if (glowpth && glowpth->hicr && (glowpth->hicr->palnum == GLOWPAL)) polymost_setupglowtexture(&texunits, glowpth ? glowpth->glpic : 0); - if (pth && (pth->flags & 2)) + if (pth && (pth->flags & PTH_HIGHTILE)) { hackscx = pth->scalex; hackscy = pth->scaley; @@ -1589,9 +1600,9 @@ void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method) // tinting happens only to hightile textures, and only if the texture we're // rendering isn't for the same palette as what we asked for - if (!(hictinting[globalpal].f&4)) + if (!(hictinting[globalpal].f & HICTINT_COLORIZE)) { - if (pth && (pth->flags & 2)) + if (pth && (pth->flags & PTH_HIGHTILE)) { if (pth->palnum != globalpal) { @@ -1608,7 +1619,7 @@ void drawpoly(double *dpx, double *dpy, int32_t n, int32_t method) } } // hack: this is for drawing the 8-bit crosshair recolored in polymost - else if (hictinting[globalpal].f & 8) + else if (hictinting[globalpal].f & HICTINT_USEONART) { pc[0] *= (float)hictinting[globalpal].r / 255.0; pc[1] *= (float)hictinting[globalpal].g / 255.0; @@ -4866,7 +4877,7 @@ int32_t polymost_drawtilescreen(int32_t tilex, int32_t tiley, int32_t wallnum, i else ratio = dimen/scy; } - if (!pth || (pth->flags & 8)) + if (!pth || (pth->flags & PTH_HASALPHA)) { bglDisable(GL_TEXTURE_2D); bglBegin(GL_TRIANGLE_FAN); diff --git a/polymer/eduke32/build/src/texcache.c b/polymer/eduke32/build/src/texcache.c index 55ab7c493..569bc738b 100644 --- a/polymer/eduke32/build/src/texcache.c +++ b/polymer/eduke32/build/src/texcache.c @@ -58,13 +58,15 @@ pthtyp *texcache_fetch(int32_t dapicnum, int32_t dapalnum, int32_t dashade, int3 { if (pth->picnum == dapicnum && pth->palnum == si->palnum && (si->palnum>0 ? 1 : (pth->effects == hictinting[dapalnum].f)) && - (pth->flags & (1+2+4)) == (((dameth&4)>>2)+2+((drawingskybox>0)<<2)) && + (pth->flags & (PTH_CLAMPED + PTH_HIGHTILE + PTH_SKYBOX)) + == (TO_PTH_CLAMPED(dameth) + PTH_HIGHTILE + (drawingskybox>0)*PTH_SKYBOX) && (drawingskybox>0 ? (pth->skyface == drawingskybox) : 1) ) { - if (pth->flags & 128) + if (pth->flags & PTH_INVALIDATED) { - pth->flags &= ~128; + pth->flags &= ~PTH_INVALIDATED; + if (gloadtile_hi(dapicnum,dapalnum,drawingskybox,si,dameth,pth,0, (si->palnum>0) ? 0 : hictinting[dapalnum].f)) // reload tile { @@ -86,12 +88,13 @@ pthtyp *texcache_fetch(int32_t dapicnum, int32_t dapalnum, int32_t dashade, int3 for (i = (GLTEXCACHEADSIZ - 1); i >= 0; i--) for (pth2=texcache.list[i]; pth2; pth2=pth2->next) { - if ((pth2->hicr) && (pth2->hicr->filename) && (Bstrcasecmp(pth2->hicr->filename, si->filename) == 0)) + if (pth2->hicr && pth2->hicr->filename && Bstrcasecmp(pth2->hicr->filename, si->filename) == 0) { Bmemcpy(pth, pth2, sizeof(pthtyp)); pth->picnum = dapicnum; - pth->flags = ((dameth&4)>>2) + 2 + ((drawingskybox>0)<<2); - if (pth2->flags & 8) pth->flags |= 8; //hasalpha + pth->flags = TO_PTH_CLAMPED(dameth) + PTH_HIGHTILE + (drawingskybox>0)*PTH_SKYBOX; + if (pth2->flags & PTH_HASALPHA) + pth->flags |= PTH_HASALPHA; pth->hicr = si; pth->next = texcache.list[j]; @@ -119,12 +122,13 @@ tryart: // load from art for (pth=texcache.list[j]; pth; pth=pth->next) if (pth->picnum == dapicnum && pth->palnum == dapalnum && pth->shade == dashade && - (pth->flags & (1+2)) == ((dameth&4)>>2) + (pth->flags & (PTH_CLAMPED+PTH_HIGHTILE)) == TO_PTH_CLAMPED(dameth) ) { - if (pth->flags & 128) + if (pth->flags & PTH_INVALIDATED) { - pth->flags &= ~128; + pth->flags &= ~PTH_INVALIDATED; + if (gloadtile_art(dapicnum,dapalnum,dashade,dameth,pth,0)) return NULL; //reload tile (for animations) } diff --git a/polymer/eduke32/build/src/util/cacheinfo.c b/polymer/eduke32/build/src/util/cacheinfo.c index 893ad3fcc..b4913adea 100644 --- a/polymer/eduke32/build/src/util/cacheinfo.c +++ b/polymer/eduke32/build/src/util/cacheinfo.c @@ -1,3 +1,5 @@ +// XXX: This program is not in sync with EDuke32 (e.g. texcacheheader type). + #include #include #include diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index c50c65008..39dc6e1aa 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -3358,7 +3358,7 @@ void G_SetCrosshairColor(int32_t r, int32_t g, int32_t b) #ifdef USE_OPENGL // XXX: this makes us also load all hightile textures tinted with the crosshair color! Bmemcpy(&hictinting[CROSSHAIR_PAL], &CrosshairColors, sizeof(palette_t)); - hictinting[CROSSHAIR_PAL].f = 9; + hictinting[CROSSHAIR_PAL].f = HICTINT_USEONART | HICTINT_GRAYSCALE; #endif invalidatetile(CROSSHAIR, -1, -1); }