Add event needed for dpad as mod, revert remaining changes in built-in patches for dpad

This commit is contained in:
Mr-Wiseguy 2025-04-23 02:03:16 -04:00
parent e970e85882
commit f2901d73bc

View file

@ -8,6 +8,7 @@
RECOMP_DECLARE_EVENT(recomp_before_first_person_aiming_update_event(PlayState* play, Player* this, bool in_free_look, RecompAimingOverideMode* recomp_aiming_override_mode));
RECOMP_DECLARE_EVENT(recomp_after_first_person_aiming_update_event(PlayState* play, Player* this, bool in_free_look));
RECOMP_DECLARE_EVENT(recomp_set_extra_item_slot_statuses(PlayState* play, s32 enabled));
s32 func_80847190(PlayState* play, Player* this, s32 arg2);
s16 func_80832754(Player* this, s32 arg1);
@ -296,13 +297,6 @@ RECOMP_PATCH void func_8083A98C(Actor* thisx, PlayState* play2) {
Camera_ChangeMode(Play_GetCamera(play, CAM_ID_MAIN), camMode);
}
u32 sPlayerItemButtons[] = {
BTN_B,
BTN_CLEFT,
BTN_CDOWN,
BTN_CRIGHT,
};
bool no_bow_epona_fix = false;
// @recomp_export void recomp_set_no_bow_epona_fix(bool new_val): Set whether to enable the fix for getting on Epona without a bow.
@ -328,16 +322,7 @@ u16 func_801A5100(void);
#define AT_H_AND_D (play->sceneId == SCENE_BOWLING)
#define H_AND_D_FIX_ACTIVE (h_and_d_no_sword_fix && AT_H_AND_D)
// TODO: These can just be reverted back to the original code.
#define TOTAL_SLOT_COUNT 3
#define BUTTON_STATUS(btn) gSaveContext.buttonStatus[btn]
// Converts an ex slot index into the actual slot index.
u8 to_slot_index(u32 ex_slot) {
return ex_slot + EQUIP_SLOT_C_LEFT;
}
// @recomp Patched to call event for extra item slot mods.
RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
Player* player = GET_PLAYER(play);
@ -361,17 +346,19 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
if ((player->transformation == PLAYER_FORM_DEKU) && CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
gSaveContext.hudVisibilityForceButtonAlphasByStatus = true;
if (play->sceneId == SCENE_BOWLING) {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
}
} else if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_ENABLED;
} else if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
recomp_set_extra_item_slot_statuses(play, BTN_ENABLED);
}
Interface_SetHudVisibility(HUD_VISIBILITY_B_MAGIC);
@ -380,10 +367,11 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_BOMB) &&
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_BOMBCHU)) {
gSaveContext.hudVisibilityForceButtonAlphasByStatus = true;
BUTTON_STATUS(EQUIP_SLOT_B) = BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B);
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_ENABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B);
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
recomp_set_extra_item_slot_statuses(play, BTN_ENABLED);
if (play->sceneId == SCENE_BOWLING) {
if (CURRENT_DAY == 1) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMBCHU;
@ -393,15 +381,16 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
}
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
} else {
// @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix.
if (EPONA_FIX_ACTIVE) {
if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_BOW) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
@ -413,7 +402,7 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
// @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix.
if (EPONA_FIX_ACTIVE) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B);
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
}
@ -424,16 +413,17 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
// @recomp_use_export_var no_bow_epona_fix: If the B button does not contain a sword, don't disable the UI.
if (!EPONA_FIX_ACTIVE || BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) < ITEM_SWORD_KOKIRI ||
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) > ITEM_SWORD_GILDED) {
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
}
}
}
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED && BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED && BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
if (play->transitionMode != TRANS_MODE_OFF) {
@ -450,9 +440,10 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
} else if (play->unk_1887C >= 2) {
Interface_SetHudVisibility(HUD_VISIBILITY_B);
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if (ON_EPONA) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
@ -472,17 +463,18 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
}
if (h_and_d_no_sword_fix) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
} else {
// @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix.
if (EPONA_FIX_ACTIVE) {
if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_BOW) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
@ -495,7 +487,7 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
// @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix.
if (EPONA_FIX_ACTIVE) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B);
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE;
}
@ -503,10 +495,10 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
}
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
// @recomp_use_export_var no_bow_epona_fix: Don't enable the B button unless it is being used for the bow.
if (!no_bow_epona_fix || BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
// @recomp_use_export_var no_bow_epona_fix: Don't restore hud visibility from Epona without a sword.
@ -517,9 +509,10 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
// @recomp_use_export_var no_bow_epona_fix: If the B button does not contain the bow, don't disable the UI.
if ((!no_bow_epona_fix || BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOW) && !H_AND_D_FIX_ACTIVE) {
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
}
@ -534,9 +527,10 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
} else if (play->unk_1887C >= 2) {
Interface_SetHudVisibility(HUD_VISIBILITY_B);
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_08_01)) {
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if (ON_EPONA) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
@ -603,16 +597,18 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) {
(gSaveContext.save.entrance == ENTRANCE(WATERFALL_RAPIDS, 1)) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
// Beaver race minigame
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if ((gSaveContext.save.entrance == ENTRANCE(GORON_RACETRACK, 1)) &&
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF)) {
// Goron race minigame
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
recomp_set_extra_item_slot_statuses(play, BTN_DISABLED);
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP);
} else if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
// Related to pictograph
@ -657,53 +653,50 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
MessageContext* msgCtx = &play->msgCtx;
InterfaceContext* interfaceCtx = &play->interfaceCtx;
Player* player = GET_PLAYER(play);
s16 e;
s16 i;
s16 restoreHudVisibility = false;
if (CHECK_EVENTINF(EVENTINF_41)) {
// Related to swamp boat (non-minigame)?
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if ((GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != MSGMODE_NONE)) {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
} else {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
if (sPictoState == PICTO_BOX_STATE_OFF) {
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_90_20)) {
// Fishermans's jumping minigame
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
if (BUTTON_STATUS(i) == BTN_ENABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
}
Interface_SetHudVisibility(HUD_VISIBILITY_B);
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_82_08)) {
// Swordsman's log minigame
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
if (BUTTON_STATUS(i) == BTN_ENABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
}
@ -711,45 +704,42 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
} else if (CHECK_WEEKEVENTREG(WEEKEVENTREG_84_20)) {
// Related to moon child
if (player->currentMask == PLAYER_MASK_FIERCE_DEITY) {
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if ((GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_FIERCE_DEITY) ||
((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK))) {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
} else {
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
}
}
} else {
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) && (GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_ZORA)) {
if (BUTTON_STATUS(i) != BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
} else {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
}
} else if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 6)) {
// Unknown cutscene
for (e = 0; e < EQUIP_SLOT_C_RIGHT; e++) {
s16 i = to_slot_index(e);
if (BUTTON_STATUS(i) == BTN_ENABLED) {
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (CHECK_EVENTINF(EVENTINF_34)) {
// Deku playground minigame
@ -758,21 +748,20 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT;
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
} else {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
restoreHudVisibility = true;
}
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
if (BUTTON_STATUS(i) == BTN_ENABLED) {
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
}
@ -787,24 +776,24 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_DEKU_NUT) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_DEKU_NUT;
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
restoreHudVisibility = true;
}
} else if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_ENABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
} else if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_ENABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
restoreHudVisibility = true;
}
if (restoreHudVisibility) {
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
}
} else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) &&
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_DEKU_NUT)) {
// Nuts on B (as Deku Link)
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_FD;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
} else if ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
(Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) {
// Swimming underwater
@ -821,42 +810,41 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
restoreHudVisibility = true;
}
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
}
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_MASK_ZORA) {
if (Player_GetEnvironmentalHazard(play) == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) {
if (!((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK))) {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
} else {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
} else {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (BUTTON_STATUS(i) == BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_ENABLED;
} else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_ENABLED;
restoreHudVisibility = true;
}
}
@ -872,32 +860,31 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
}
} else if (player->stateFlags1 & PLAYER_STATE1_200000) {
// First person view
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_LENS_OF_TRUTH) {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
} else {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (player->stateFlags1 & PLAYER_STATE1_2000) {
// Hanging from a ledge
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_LEFT) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_DOWN) = BTN_DISABLED;
BUTTON_STATUS(EQUIP_SLOT_C_RIGHT) = BTN_DISABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
restoreHudVisibility = true;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
}
@ -925,15 +912,15 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU)) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
}
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_ENABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) =
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_ENABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] =
ITEM_SWORD_KOKIRI + GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) - EQUIP_VALUE_SWORD_KOKIRI;
}
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = BUTTON_STATUS(EQUIP_SLOT_B);
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
@ -941,25 +928,25 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
restoreHudVisibility = true;
} else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) {
if (interfaceCtx->bButtonDoAction != 0) {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
}
}
} else if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NONE) {
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
}
} else {
if (BUTTON_STATUS(EQUIP_SLOT_B) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
}
}
} else if (interfaceCtx->restrictions.bButton != 0) {
@ -967,18 +954,18 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMB) ||
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_BOMBCHU)) {
if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) == EQUIP_VALUE_SWORD_NONE) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
}
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = BUTTON_STATUS(EQUIP_SLOT_B);
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = gSaveContext.buttonStatus[EQUIP_SLOT_B];
if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NONE) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
}
restoreHudVisibility = true;
}
if (BUTTON_STATUS(EQUIP_SLOT_B) != BTN_DISABLED) {
BUTTON_STATUS(EQUIP_SLOT_B) = BTN_DISABLED;
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
restoreHudVisibility = true;
}
}
@ -986,56 +973,54 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
// C buttons
if (GET_PLAYER_FORM == player->transformation) {
for (e = 0; e < TOTAL_SLOT_COUNT; e++) {
s16 i = to_slot_index(e);
for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) {
// Individual C button
if (!gPlayerFormItemRestrictions[GET_PLAYER_FORM][GET_CUR_FORM_BTN_ITEM(i)]) {
// Item not usable in current playerForm
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (player->actor.id != ACTOR_PLAYER) {
// Currently not playing as the main player
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (player->currentMask == PLAYER_MASK_GIANT) {
// Currently wearing Giant's Mask
if (GET_CUR_FORM_BTN_ITEM(i) != ITEM_MASK_GIANT) {
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (BUTTON_STATUS(i) == BTN_DISABLED) {
} else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
} else if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_GIANT) {
// Giant's Mask is equipped
if (play->sceneId != SCENE_INISIE_BS) {
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (BUTTON_STATUS(i) == BTN_DISABLED) {
} else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
} else if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_MASK_FIERCE_DEITY) {
// Fierce Deity's Mask is equipped
// @recomp_use_export_var fd_anywhere: Allow the player to use the Fierce Deity's Mask anywhere if mods enable it.
if (!fd_anywhere && (play->sceneId != SCENE_MITURIN_BS) && (play->sceneId != SCENE_HAKUGIN_BS) &&
if ((play->sceneId != SCENE_MITURIN_BS) && (play->sceneId != SCENE_HAKUGIN_BS) &&
(play->sceneId != SCENE_SEA_BS) && (play->sceneId != SCENE_INISIE_BS) &&
(play->sceneId != SCENE_LAST_BS)) {
if (BUTTON_STATUS(i) != BTN_DISABLED) {
BUTTON_STATUS(i) = BTN_DISABLED;
if (gSaveContext.buttonStatus[i] != BTN_DISABLED) {
gSaveContext.buttonStatus[i] = BTN_DISABLED;
restoreHudVisibility = true;
}
} else if (BUTTON_STATUS(i) == BTN_DISABLED) {
} else if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
} else {
// End of special item cases. Apply restrictions to buttons
@ -1045,10 +1030,10 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
(GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (interfaceCtx->restrictions.tradeItems == 0) {
if (((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MOONS_TEAR) &&
@ -1056,44 +1041,44 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_BOTTLE) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_OBABA_DRINK)) ||
(GET_CUR_FORM_BTN_ITEM(i) == ITEM_OCARINA_OF_TIME)) {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
if (interfaceCtx->restrictions.masks != 0) {
if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) {
if (!BUTTON_STATUS(i)) { // == BTN_ENABLED
if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (interfaceCtx->restrictions.masks == 0) {
if ((GET_CUR_FORM_BTN_ITEM(i) >= ITEM_MASK_DEKU) &&
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
if (interfaceCtx->restrictions.pictoBox != 0) {
if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) {
if (!BUTTON_STATUS(i)) { // == BTN_ENABLED
if (!gSaveContext.buttonStatus[i]) { // == BTN_ENABLED
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
} else if (interfaceCtx->restrictions.pictoBox == 0) {
if (GET_CUR_FORM_BTN_ITEM(i) == ITEM_PICTOGRAPH_BOX) {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
restoreHudVisibility = true;
}
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
@ -1107,9 +1092,9 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
(GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) {
if (BUTTON_STATUS(i) == BTN_ENABLED) {
if ((gSaveContext.buttonStatus[i] == BTN_ENABLED)) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_DISABLED;
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
}
} else if (interfaceCtx->restrictions.all == 0) {
@ -1122,9 +1107,9 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) {
(GET_CUR_FORM_BTN_ITEM(i) <= ITEM_MASK_GIANT)) &&
(GET_CUR_FORM_BTN_ITEM(i) != ITEM_PICTOGRAPH_BOX)) {
if (BUTTON_STATUS(i) == BTN_DISABLED) {
if ((gSaveContext.buttonStatus[i] == BTN_DISABLED)) {
restoreHudVisibility = true;
BUTTON_STATUS(i) = BTN_ENABLED;
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
}