From 998823db32c82b987b475998a6c7d179f1196737 Mon Sep 17 00:00:00 2001 From: toaster Date: Thu, 24 Jul 2025 19:29:51 +0100 Subject: [PATCH] Fix "_Profile" relevantskin option - Gets closest statted character if yours is not yet unlocked - Accounts for default skin color (previously was mildly broken in this case) --- src/p_setup.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/p_setup.cpp b/src/p_setup.cpp index a51c33e2b..a200652d2 100644 --- a/src/p_setup.cpp +++ b/src/p_setup.cpp @@ -120,6 +120,7 @@ #include "k_credits.h" #include "k_objects.h" #include "p_deepcopy.h" +#include "k_color.h" // K_ColorUsable // Replay names have time #if !defined (UNDER_CE) @@ -8046,7 +8047,7 @@ static void P_ShuffleTeams(void) static void P_InitPlayers(void) { - INT32 i, skin = -1, follower = -1, col = -1; + INT32 i, skin = -1, follower = -1, col = SKINCOLOR_NONE; // Make sure objectplace is OFF when you first start the level! OP_ResetObjectplace(); @@ -8063,10 +8064,19 @@ static void P_InitPlayers(void) if (strcmp(mapheaderinfo[gamemap-1]->relevantskin, "_PROFILE") == 0) { profile_t *p = PR_GetProfile(cv_ttlprofilen.value); - if (p) + if (p && !netgame) { skin = R_SkinAvailable(p->skinname); - col = p->color; + + if (!R_SkinUsable(g_localplayers[0], skin, false)) + { + skin = GetSkinNumClosestToStats(skins[skin].kartspeed, skins[skin].kartweight, skins[skin].flags, false); + } + + if (K_ColorUsable(static_cast(p->color), false, true) == true) + { + col = p->color; + } } } else @@ -8109,7 +8119,7 @@ static void P_InitPlayers(void) if (skin != -1) { SetPlayerSkinByNum(i, skin); - players[i].skincolor = (col >= 0 && col < numskincolors) ? col : skins[skin].prefcolor; + players[i].skincolor = (col != SKINCOLOR_NONE) ? col : skins[skin].prefcolor; players[i].followerskin = follower; if (follower != -1)