From 02043af2f77e813b79c29836ccd0fd917bb6be56 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 18 Aug 2024 16:16:25 +0100 Subject: [PATCH 1/3] Do not corrupt spraycan cache when freeslotting custom skincolours My mistake gomen --- src/deh_lua.c | 2 +- src/deh_soc.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deh_lua.c b/src/deh_lua.c index 6c97cda93..224d0c010 100644 --- a/src/deh_lua.c +++ b/src/deh_lua.c @@ -143,7 +143,7 @@ static inline int lib_freeslot(lua_State *L) CONS_Printf("Skincolor SKINCOLOR_%s allocated.\n",word); FREE_SKINCOLORS[i] = Z_Malloc(strlen(word)+1, PU_STATIC, NULL); strcpy(FREE_SKINCOLORS[i],word); - skincolors[i].cache_spraycan = UINT16_MAX; + skincolors[SKINCOLOR_FIRSTFREESLOT+i].cache_spraycan = UINT16_MAX; numskincolors++; lua_pushinteger(L, SKINCOLOR_FIRSTFREESLOT + i); r++; diff --git a/src/deh_soc.c b/src/deh_soc.c index b0e7a473a..32475d0a6 100644 --- a/src/deh_soc.c +++ b/src/deh_soc.c @@ -334,7 +334,7 @@ void readfreeslots(MYFILE *f) CONS_Printf("Skincolor SKINCOLOR_%s allocated.\n",word); FREE_SKINCOLORS[i] = Z_Malloc(strlen(word)+1, PU_STATIC, NULL); strcpy(FREE_SKINCOLORS[i],word); - skincolors[i].cache_spraycan = UINT16_MAX; + skincolors[SKINCOLOR_FIRSTFREESLOT+i].cache_spraycan = UINT16_MAX; numskincolors++; break; } From 069c079f163b5a2864c7c7903b64a7d24b593327 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 18 Aug 2024 16:24:15 +0100 Subject: [PATCH 2/3] k_color: Fix support for more than 255 skincolors Resolves KartKrew/RingRacers#109 --- src/k_color.c | 10 +++++----- src/k_color.h | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/k_color.c b/src/k_color.c index 35ea3d6a8..dcf6e0fa7 100644 --- a/src/k_color.c +++ b/src/k_color.c @@ -53,11 +53,11 @@ UINT16 K_RainbowColor(tic_t time) } /*-------------------------------------------------- - void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor) + void K_RainbowColormap(UINT8 *dest_colormap, skincolornum_t skincolor) See header file for description. --------------------------------------------------*/ -void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor) +void K_RainbowColormap(UINT8 *dest_colormap, skincolornum_t skincolor) { INT32 i; RGBA_t color; @@ -193,7 +193,7 @@ static void K_IntermissionColormap(UINT8 *dest_colormap) } } - UINT16 skincolor = SKINCOLOR_INTERMISSION1; + skincolornum_t skincolor = SKINCOLOR_INTERMISSION1; const double blue_start = 3.0; const double blue_end = 5.0; const double green_buffer = 0.5; @@ -214,11 +214,11 @@ static void K_IntermissionColormap(UINT8 *dest_colormap) } /*-------------------------------------------------- - void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color) + void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, skincolornum_t color) See header file for description. --------------------------------------------------*/ -void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color) +void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, skincolornum_t color) { INT32 i; INT32 starttranscolor; diff --git a/src/k_color.h b/src/k_color.h index 2123b22e8..3d922ce5f 100644 --- a/src/k_color.h +++ b/src/k_color.h @@ -55,7 +55,7 @@ UINT8 K_ColorRelativeLuminance(UINT8 r, UINT8 g, UINT8 b); UINT16 K_RainbowColor(tic_t time); /*-------------------------------------------------- - void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor); + void K_RainbowColormap(UINT8 *dest_colormap, skincolornum_t skincolor); Generates a colormap to "colorize" all palette indicies to the provided skincolor. @@ -68,7 +68,7 @@ UINT16 K_RainbowColor(tic_t time); None --------------------------------------------------*/ -void K_RainbowColormap(UINT8 *dest_colormap, UINT8 skincolor); +void K_RainbowColormap(UINT8 *dest_colormap, skincolornum_t skincolor); /*-------------------------------------------------- UINT8 K_HitlagColorValue(RGBA_t color); @@ -100,7 +100,7 @@ UINT8 K_HitlagColorValue(RGBA_t color); void K_HitlagColormap(UINT8 *dest_colormap); /*-------------------------------------------------- - void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color); + void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, skincolornum_t color); Generates a translation colormap for Kart, to replace R_GenerateTranslationColormap in r_draw.c @@ -113,7 +113,7 @@ void K_HitlagColormap(UINT8 *dest_colormap); None --------------------------------------------------*/ -void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, UINT8 color); +void K_GenerateKartColormap(UINT8 *dest_colormap, INT32 skinnum, skincolornum_t color); /*-------------------------------------------------- From 69cc74ad8ee84d7b0b24bec8d7dd8ddd9beb1be8 Mon Sep 17 00:00:00 2001 From: toaster Date: Sun, 18 Aug 2024 20:00:33 +0100 Subject: [PATCH 3/3] Minimap directioning dot will use the correct skincolor even when set up for alternate remappable indices Resolves KartKrew/RingRacers#115 --- src/k_hud.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/k_hud.cpp b/src/k_hud.cpp index 3d66bf52f..be30fef75 100644 --- a/src/k_hud.cpp +++ b/src/k_hud.cpp @@ -4881,6 +4881,12 @@ static void K_drawKartMinimap(void) if (encoremode) ang = ANGLE_180 - ang; + if (skin && mobj->color && !mobj->colorized // relevant to redo + && skins[skin].starttranscolor != skins[0].starttranscolor) // redoing would have an affect + { + colormap = R_GetTranslationColormap(TC_DEFAULT, static_cast(mobj->color), GTC_CACHE); + } + K_drawKartMinimapIcon( interpx, interpy,