From 10a614586e08d2f91ea7bb88a7f4da5ecf075486 Mon Sep 17 00:00:00 2001 From: JordanLongstaff Date: Fri, 2 Jan 2026 00:26:04 -0500 Subject: [PATCH 1/2] [Enhancement] Masks equippable in water --- mm/2s2h/BenGui/BenMenu.cpp | 3 +++ .../Enhancements/Masks/EquipWhileSwimming.cpp | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp diff --git a/mm/2s2h/BenGui/BenMenu.cpp b/mm/2s2h/BenGui/BenMenu.cpp index f104e64fb9..4c672f1018 100644 --- a/mm/2s2h/BenGui/BenMenu.cpp +++ b/mm/2s2h/BenGui/BenMenu.cpp @@ -1221,6 +1221,9 @@ void BenMenu::AddEnhancements() { AddSidebarEntry("Enhancements", "Items/Songs", 3); // Mask Enhancements AddWidget(path, "Masks", WIDGET_SEPARATOR_TEXT); + AddWidget(path, "Equippable While Swimming", WIDGET_CVAR_CHECKBOX) + .CVar("gEnhancements.Masks.EquipWhileSwimming") + .Options(CheckboxOptions().Tooltip("Human Link can equip any non-transformation mask while swimming.")); AddWidget(path, "Blast Mask has Powder Keg Force", WIDGET_CVAR_CHECKBOX) .CVar("gEnhancements.Masks.BlastMaskKeg") .Options(CheckboxOptions().Tooltip("Blast Mask can also destroy objects only the Powder Keg can.")); diff --git a/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp b/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp new file mode 100644 index 0000000000..0abe5a36ce --- /dev/null +++ b/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp @@ -0,0 +1,25 @@ +#include +#include "2s2h/GameInteractor/GameInteractor.h" +#include "2s2h/ShipInit.hpp" + +#define CVAR_NAME "gEnhancements.Masks.EquipWhileSwimming" +#define CVAR CVarGetInteger(CVAR_NAME, 0) + +static void RegisterEquipWhileSwimming() { + COND_VB_SHOULD(VB_USE_ITEM_CONSIDER_ITEM_ACTION, CVAR, { + PlayerItemAction itemAction = *va_arg(args, PlayerItemAction*); + if (itemAction >= PLAYER_IA_MASK_MIN && itemAction < PLAYER_IA_MASK_GIANT) { + *should = true; + } + }); + + COND_VB_SHOULD(VB_DISABLE_ITEM_UNDERWATER, CVAR, { + s32 item = va_arg(args, s32); + if (GET_PLAYER_FORM == PLAYER_FORM_HUMAN && item > ITEM_MASK_FIERCE_DEITY && item < ITEM_MASK_GIANT && + Player_GetEnvironmentalHazard(gPlayState) > PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) { + *should = false; + } + }); +} + +static RegisterShipInitFunc initFunc(RegisterEquipWhileSwimming, { CVAR_NAME }); From 480e62ae3c041eec42284bbc8485ae1c0cbc6dc9 Mon Sep 17 00:00:00 2001 From: JordanLongstaff Date: Fri, 2 Jan 2026 01:20:24 -0500 Subject: [PATCH 2/2] Format --- mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp b/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp index 0abe5a36ce..20ea8a5274 100644 --- a/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp +++ b/mm/2s2h/Enhancements/Masks/EquipWhileSwimming.cpp @@ -11,7 +11,7 @@ static void RegisterEquipWhileSwimming() { if (itemAction >= PLAYER_IA_MASK_MIN && itemAction < PLAYER_IA_MASK_GIANT) { *should = true; } - }); + }); COND_VB_SHOULD(VB_DISABLE_ITEM_UNDERWATER, CVAR, { s32 item = va_arg(args, s32); @@ -19,7 +19,7 @@ static void RegisterEquipWhileSwimming() { Player_GetEnvironmentalHazard(gPlayState) > PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) { *should = false; } - }); + }); } static RegisterShipInitFunc initFunc(RegisterEquipWhileSwimming, { CVAR_NAME });