From 9efc4689790dbaafd8a88588b35fa4a2a1b81db4 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Sat, 15 Nov 2025 17:17:34 +0100 Subject: [PATCH] Updated item toggles menu Invinc is animated on the title screen, superring now gets locked out Small odds code cleanup since the landmine's result is finally gone --- src/d_main.cpp | 2 +- src/k_items.c | 51 +++++++++++++++++++++----------------------------- src/m_menu.c | 38 ++++++++++++++++++++++++------------- 3 files changed, 47 insertions(+), 44 deletions(-) diff --git a/src/d_main.cpp b/src/d_main.cpp index 28380aab8..d0e3d13c4 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -94,7 +94,7 @@ #define ASSET_HASH_TEXTURES_KART 0xb4211b2f32b6a291 #define ASSET_HASH_CHARS_KART 0x1e68a3e01aa5c68b #define ASSET_HASH_MAPS_KART 0x38558ed00da41ce9 -#define ASSET_HASH_MAIN_PK3 0xc60298b5561908c7 +#define ASSET_HASH_MAIN_PK3 0x3f0509a0ec4bffd7 #define ASSET_HASH_MAPPATCH_PK3 0xd4d4ce4a090d5473 #define ASSET_HASH_BONUSCHARS_KART 0x60e6f13d822a7461 #ifdef USE_PATCH_FILE diff --git a/src/k_items.c b/src/k_items.c index 8462dbb82..cd0661914 100644 --- a/src/k_items.c +++ b/src/k_items.c @@ -200,8 +200,10 @@ patch_t *K_GetCachedItemPatch(kartitemtype_e type, boolean tiny, UINT8 amount) if (graphics->numpatches == 0) return missingpat; + tic_t timer = G_GamestateUsesLevel() ? leveltime : finalecount; + if (item->flags & KIF_ANIMATED) - return graphics->patches[(leveltime % (graphics->numpatches*3)) / 3]; + return graphics->patches[(timer % (graphics->numpatches*3)) / 3]; else return graphics->patches[CLAMP(amount - 1, 0, graphics->numpatches - 1)]; } @@ -695,6 +697,24 @@ static INT32 GetItemOdds(kartroulette_t *roulette, kartresult_t *result, UINT8 * } } + // TODO: convert into uniqueodds functions (what happened to "already shrunk"?) + if (result->type == KITEM_SHRINK) + { + if (!K_IsKartItemAlternate(KITEM_SHRINK)) + { + if (roulette->pingame-1 <= roulette->pexiting) + newodds = 0; + } + else + { + if (roulette->rival) + { + // Rival bot or already shrunk. DON'T roll another. + newodds = 0; + } + } + } + if (result->unique_odds[oddstable]) { // This item has unique odds! @@ -706,35 +726,6 @@ static INT32 GetItemOdds(kartroulette_t *roulette, kartresult_t *result, UINT8 * newodds = uoddsfunc(newodds, roulette, result, forceme); //CONS_Printf("OK!\n"); } - else - { - switch (result->type) - { - // Alt. Invin. odds are handled in its odds function - // So are SPB odds - case KITEM_LANDMINE: - // au revoir - newodds = 0; - break; - case KITEM_SHRINK: - if (!K_IsKartItemAlternate(KITEM_SHRINK)) - { - if (roulette->pingame-1 <= roulette->pexiting) - newodds = 0; - } - else - { - if (roulette->rival) - { - // Rival bot or already shrunk. DON'T roll another. - newodds = 0; - } - } - break; - default: - break; - } - } // In very small matches, remove the stupid bottom half item limiter if (roulette->pingame < 6) diff --git a/src/m_menu.c b/src/m_menu.c index 1e8e49656..89caf29b7 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8347,6 +8347,10 @@ INT32 MR_SetupMonitorToggles(INT32 choice) { item->argument = 0; item->patch = result->cvar->name; + if (kartitems[result->type].altcvar != NULL) + item->tooltip = "Press BACKSPACE to swap variants."; + else if (result->type == KITEM_SUPERRING && cv_kartrings.value == 0) + item->tooltip = "Rings must be enabled in Gameplay Mods!"; } } @@ -8376,7 +8380,7 @@ void MD_DrawMonitorToggles(void) INT32 i, translucent; const kartresult_t *result = K_GetKartResult(currentMenu->menuitems[itemOn].patch); const char *displayname; - boolean hasalt; // ha, salt! (has alt) + //boolean hasalt; // ha, salt! (has alt) if (result != NULL && kartitems[result->type].altcvar != NULL && kartitems[result->type].altcvar->value == 1) result = K_GetKartResultAlt(result->cvar->name, true); @@ -8430,7 +8434,11 @@ void MD_DrawMonitorToggles(void) kartresult_t *result = K_GetKartResult(currentMenu->menuitems[thisitem].patch); kartitem_t *item = &kartitems[result->type]; - boolean enabled = K_ItemResultEnabled(result); + boolean enabled = result->cvar->value == 1; + + if (result->type == KITEM_SUPERRING && cv_kartrings.value == 0) + enabled = false; + translucent = enabled ? 0 : V_TRANSLUCENT; if (enabled) @@ -8457,8 +8465,6 @@ void MD_DrawMonitorToggles(void) y = currentMenu->y+(spacing/4); } - hasalt = false; - switch (currentMenu->menuitems[itemOn].argument) { case 2: @@ -8487,7 +8493,11 @@ void MD_DrawMonitorToggles(void) { displayname = result->displayname; kartitem_t *item = &kartitems[result->type]; - boolean enabled = K_ItemResultEnabled(result); + boolean enabled = result->cvar->value == 1; + + if (result->type == KITEM_SUPERRING && cv_kartrings.value == 0) + enabled = false; + translucent = enabled ? 0 : V_TRANSLUCENT; if (enabled) @@ -8507,7 +8517,6 @@ void MD_DrawMonitorToggles(void) if (item->altcvar != NULL) { - hasalt = true; translucent = item->altcvar->value == 1 ? 0 : V_TRANSLUCENT; V_DrawScaledPatch(onx-1, ony-2, translucent, W_CachePatchName("K_ALTITM", PU_CACHE)); } @@ -8520,11 +8529,7 @@ void MD_DrawMonitorToggles(void) V_DrawCenteredString(BASEVIDWIDTH/2, currentMenu->y, MENUCAPS|highlightflags, va("* %s *", displayname)); - if (hasalt) - V_DrawThinString(8, - BASEVIDHEIGHT - 12, - highlightflags | V_ALLOWLOWERCASE | V_SNAPTOBOTTOM | V_SNAPTOLEFT, - "Press BACKSPACE to swap variants"); + M_DrawMenuTooltips(); } INT32 MR_HandleMonitorToggles(INT32 choice) @@ -8603,8 +8608,15 @@ INT32 MR_HandleMonitorToggles(INT32 choice) } else if (result != NULL) { - S_StartSound(NULL, sfx_s1ba); - CV_AddValue(result->cvar, 1); + if (result->type == KITEM_SUPERRING && cv_kartrings.value == 0) + { + S_StartSound(NULL, sfx_s231); + } + else + { + S_StartSound(NULL, sfx_s1ba); + CV_AddValue(result->cvar, 1); + } } break;