From e9ef09eee4b29d69c7422a0b0524064a2af9dd01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Tue, 17 Mar 2026 17:40:08 +0000 Subject: [PATCH] Fix RBA gauntlet colors to match console (#6359) Also fix tracker to show golden gauntlets while wearing glitched gauntlets, & don't crash save editor --- soh/soh/Enhancements/debugger/debugSaveEditor.cpp | 7 +++++-- .../randomizer/randomizer_item_tracker.cpp | 2 +- soh/src/code/z_player_lib.c | 11 +++++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index a4f3a7a55..f823d99f6 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1204,7 +1204,9 @@ void DrawUpgrade(const std::string& categoryName, int32_t categoryId, const std: ImGui::PushID(categoryName.c_str()); PushStyleCombobox(THEME_COLOR); ImGui::AlignTextToFramePadding(); - if (ImGui::BeginCombo("##upgrade", names[CUR_UPG_VALUE(categoryId)].c_str())) { + auto value = (size_t)CUR_UPG_VALUE(categoryId); + auto name = value < names.size() ? names[value].c_str() : "Glitched"; + if (ImGui::BeginCombo("##upgrade", name)) { for (size_t i = 0; i < names.size(); i++) { if (ImGui::Selectable(names[i].c_str())) { Inventory_ChangeUpgrade(categoryId, i); @@ -1225,7 +1227,8 @@ void DrawUpgradeIcon(const std::string& categoryName, int32_t categoryId, const ImGui::PushID(categoryName.c_str()); PushStyleButton(Colors::DarkGray); - uint8_t item = items[CUR_UPG_VALUE(categoryId)]; + auto value = (size_t)CUR_UPG_VALUE(categoryId); + uint8_t item = value < items.size() ? items[value] : ITEM_NONE; if (item != ITEM_NONE) { const ItemMapEntry& slotEntry = itemMapping[item]; if (ImGui::ImageButton(slotEntry.name.c_str(), diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 52f4ada14..c95394eee 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -862,7 +862,7 @@ void DrawItem(ItemTrackerItem item) { case ITEM_BRACELET: case ITEM_GAUNTLETS_SILVER: case ITEM_GAUNTLETS_GOLD: - actualItemId = CUR_UPG_VALUE(UPG_STRENGTH) == 3 ? ITEM_GAUNTLETS_GOLD + actualItemId = CUR_UPG_VALUE(UPG_STRENGTH) >= 3 ? ITEM_GAUNTLETS_GOLD : CUR_UPG_VALUE(UPG_STRENGTH) == 2 ? ITEM_GAUNTLETS_SILVER : ITEM_BRACELET; hasItem = CUR_UPG_VALUE(UPG_STRENGTH) > 0; diff --git a/soh/src/code/z_player_lib.c b/soh/src/code/z_player_lib.c index 85964d457..34750ed2c 100644 --- a/soh/src/code/z_player_lib.c +++ b/soh/src/code/z_player_lib.c @@ -1019,6 +1019,11 @@ Color_RGB8 sTunicColors[] = { Color_RGB8 sGauntletColors[] = { { 255, 255, 255 }, { 254, 207, 15 }, + // #region SOH [RBA] values matching OOB reads on N64 + { 0, 0, 6 }, + { 2, 89, 24 }, + { 6, 2, 90 }, + { 96, 6, 2 }, }; Gfx* sBootDListGroups[][2] = { @@ -1098,13 +1103,11 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL color = &sGauntletColors[strengthUpgrade - 2]; if (strengthUpgrade == PLAYER_STR_SILVER_G && CVarGetInteger(CVAR_COSMETIC("Gloves.SilverGauntlets.Changed"), 0)) { - sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.SilverGauntlets.Value"), - sGauntletColors[PLAYER_STR_SILVER_G - 2]); + sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.SilverGauntlets.Value"), *color); color = &sTemp; } else if (strengthUpgrade == PLAYER_STR_GOLD_G && CVarGetInteger(CVAR_COSMETIC("Gloves.GoldenGauntlets.Changed"), 0)) { - sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.GoldenGauntlets.Value"), - sGauntletColors[PLAYER_STR_GOLD_G - 2]); + sTemp = CVarGetColor24(CVAR_COSMETIC("Gloves.GoldenGauntlets.Value"), *color); color = &sTemp; } gDPSetEnvColor(POLY_OPA_DISP++, color->r, color->g, color->b, 0);