diff --git a/src/r_draw.c b/src/r_draw.c index 4710a93c2f3290c9611f9f55238faf4c10c35ad0..4bf50cf286f7fad423133ac5f806ef09db74647e 100644 --- a/src/r_draw.c +++ b/src/r_draw.c @@ -125,7 +125,7 @@ INT32 R_SkinTranslationToCacheIndex(INT32 translation) } } -static INT32 CacheIndexToSkin(INT32 index) +INT32 R_CacheIndexToSkinTranslation(INT32 index) { switch (index) { @@ -140,6 +140,19 @@ static INT32 CacheIndexToSkin(INT32 index) } } +boolean R_IsSkinTranslationRemappable(INT32 translation) +{ + switch (translation) + { + case TC_METALSONIC: + case TC_ALLWHITE: + case TC_DASHMODE: + return false; + default: + return true; + } +} + CV_PossibleValue_t Color_cons_t[MAXSKINCOLORS+1]; /** \brief Initializes the translucency tables used by the Software renderer. @@ -567,7 +580,7 @@ UINT8* R_GetTranslationColormap(INT32 skinnum, skincolornum_t color, UINT8 flags colorcache_t *cache = translationtablecache[i][color]; if (cache) { - R_GenerateTranslationColormap(cache->colors, CacheIndexToSkin(i), color, starttranscolor); + R_GenerateTranslationColormap(cache->colors, R_CacheIndexToSkinTranslation(i), color, starttranscolor); R_UpdateTranslationRemaps(color, i); } } diff --git a/src/r_draw.h b/src/r_draw.h index d5c5b4e25d36ba375d365a2d13f0ba5fab19e3f3..bfcf09fab070d046cdf48ac6e8d8fbb9df2f0b2a 100644 --- a/src/r_draw.h +++ b/src/r_draw.h @@ -90,6 +90,8 @@ enum }; INT32 R_SkinTranslationToCacheIndex(INT32 translation); +INT32 R_CacheIndexToSkinTranslation(INT32 index); +boolean R_IsSkinTranslationRemappable(INT32 translation); // Amount of colors in the palette #define NUM_PALETTE_ENTRIES 256 diff --git a/src/r_translation.c b/src/r_translation.c index 41087e272502b0809a287d0ec1a75d618281bb91..9fa76272a4d7fe32be6a4be8e8b4a0e92205852a 100644 --- a/src/r_translation.c +++ b/src/r_translation.c @@ -1146,7 +1146,9 @@ UINT8 *R_GetTranslationRemap(int id, skincolornum_t skincolor, INT32 skinnum) static void R_UpdateTranslation(remaptable_t *tr, skincolornum_t skincolor, INT32 cache_index) { - if (!tr->num_sources || !tr->skincolor_remaps || !tr->skincolor_remaps[cache_index]) + if (skincolor == SKINCOLOR_NONE + || !R_IsSkinTranslationRemappable(R_CacheIndexToSkinTranslation(cache_index)) + || !tr->num_sources || !tr->skincolor_remaps || !tr->skincolor_remaps[cache_index]) return; colorcache_t *cache = tr->skincolor_remaps[cache_index][skincolor - 1];