From 6deff6d749868dc97a699ef362402af89ed77add Mon Sep 17 00:00:00 2001 From: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com> Date: Thu, 5 Mar 2026 22:07:06 +0000 Subject: [PATCH] Enforce mask select properly on completed (#6326) --- soh/soh/SohGui/SohMenuEnhancements.cpp | 6 ++++++ soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/soh/soh/SohGui/SohMenuEnhancements.cpp b/soh/soh/SohGui/SohMenuEnhancements.cpp index 831c889ae..8f5396a62 100644 --- a/soh/soh/SohGui/SohMenuEnhancements.cpp +++ b/soh/soh/SohGui/SohMenuEnhancements.cpp @@ -843,6 +843,12 @@ void SohMenu::AddMenuEnhancements() { .Options(CheckboxOptions().Tooltip("Turns Bunny Hood Invisible while still maintaining its effects.")); AddWidget(path, "Mask Select in Inventory", WIDGET_CVAR_CHECKBOX) .CVar(CVAR_ENHANCEMENT("MaskSelect")) + .PreFunc([](WidgetInfo& info) { + info.options->disabled = + OTRGlobals::Instance->gRandoContext->GetOption(RSK_MASK_QUEST).IsNot(RO_MASK_QUEST_VANILLA); + info.options->disabledTooltip = + "This setting is forcefully enabled when Mask Quest is Completed from the start or Shuffled"; + }) .Options(CheckboxOptions().Tooltip( "After completing the mask trading sub-quest, press A and any direction on the mask " "slot to change masks.")); diff --git a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index 7d9ae98c3..16cfd8742 100644 --- a/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/soh/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -322,7 +322,9 @@ void KaleidoScope_HandleItemCycleExtras(PlayState* play, u8 slot, bool canCycle, bool CanMaskSelect() { if (IS_RANDO) { - return (CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0) && Flags_GetRandomizerInf(RAND_INF_ZELDAS_LETTER) && + return ((CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0) || + Randomizer_GetSettingValue(RSK_MASK_QUEST) != RO_MASK_QUEST_VANILLA) && + Flags_GetRandomizerInf(RAND_INF_ZELDAS_LETTER) && Flags_GetInfTable(INFTABLE_SHOWED_ZELDAS_LETTER_TO_GATE_GUARD)) || Randomizer_GetSettingValue(RSK_MASK_QUEST) == RO_MASK_QUEST_SHUFFLE; } @@ -332,7 +334,8 @@ bool CanMaskSelect() { // * zelda's letter check: Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER) // * kak gate check: Flags_GetInfTable(INFTABLE_SHOWED_ZELDAS_LETTER_TO_GATE_GUARD) // and the mask quest is complete: Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_BUNNY_HOOD_FEE) - return CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0) && + return (CVarGetInteger(CVAR_ENHANCEMENT("MaskSelect"), 0) || + Randomizer_GetSettingValue(RSK_MASK_QUEST) != RO_MASK_QUEST_VANILLA) && Flags_GetEventChkInf(EVENTCHKINF_PAID_BACK_BUNNY_HOOD_FEE) && Flags_GetEventChkInf(EVENTCHKINF_OBTAINED_ZELDAS_LETTER) && Flags_GetInfTable(INFTABLE_SHOWED_ZELDAS_LETTER_TO_GATE_GUARD);