summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Dubé <serprex@users.noreply.github.com>2026-03-17 17:40:08 +0000
committerGitHub <noreply@github.com>2026-03-17 17:40:08 +0000
commite9ef09eee4b29d69c7422a0b0524064a2af9dd01 (patch)
tree79f44f00f3310b762d7c4d7dd907c768c3f66631
parentcefc9c02fa2bae8a4cd71019c397420d5064b2ad (diff)
Fix RBA gauntlet colors to match console (#6359)
Also fix tracker to show golden gauntlets while wearing glitched gauntlets, & don't crash save editor
-rw-r--r--soh/soh/Enhancements/debugger/debugSaveEditor.cpp7
-rw-r--r--soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp2
-rw-r--r--soh/src/code/z_player_lib.c11
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);