From 2600e47b6979cca00dd0eae4881001be7fdba92c Mon Sep 17 00:00:00 2001 From: Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com> Date: Thu, 24 Apr 2025 23:00:53 -0400 Subject: [PATCH] Add support for built-in mods and convert D-Pad to a built-in mod (#567) * Add embedded mod (using mm_recomp_draw_distance as an example). * Update runtime after merge * Experiment with removing the D-Pad. * Add event needed for dpad as mod, revert remaining changes in built-in patches for dpad * Add built-in dpad mod, add remaining event calls to input.c * Add built-in mods readme --------- Co-authored-by: Dario --- CMakeLists.txt | 21 + lib/N64ModernRuntime | 2 +- mods/BUILTIN_MODS.md | 6 + mods/mm_recomp_dpad_builtin.nrm | Bin 0 -> 136857 bytes patches/dpad.rgba32.bin | Bin 4096 -> 0 bytes patches/dpad.rgba32.png | Bin 955 -> 0 bytes patches/input.c | 1640 ++++--------------------------- patches/patches.h | 3 - patches/ui_patches.c | 4 +- src/main/main.cpp | 4 + 10 files changed, 212 insertions(+), 1468 deletions(-) create mode 100644 mods/BUILTIN_MODS.md create mode 100644 mods/mm_recomp_dpad_builtin.nrm delete mode 100644 patches/dpad.rgba32.bin delete mode 100644 patches/dpad.rgba32.png diff --git a/CMakeLists.txt b/CMakeLists.txt index 3978b06..5525958 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -388,6 +388,27 @@ endif() build_vertex_shader(Zelda64Recompiled "shaders/InterfaceVS.hlsl" "shaders/InterfaceVS.hlsl") build_pixel_shader(Zelda64Recompiled "shaders/InterfacePS.hlsl" "shaders/InterfacePS.hlsl") +# Embed all .nrm files in the "mods" directory +file(GLOB NRM_FILES "${CMAKE_SOURCE_DIR}/mods/*.nrm") + +set(GENERATED_NRM_SOURCES "") + +foreach(NRM_FILE ${NRM_FILES}) + get_filename_component(NRM_NAME ${NRM_FILE} NAME_WE) + set(OUT_C "${CMAKE_CURRENT_BINARY_DIR}/mods/${NRM_NAME}.c") + set(OUT_H "${CMAKE_CURRENT_BINARY_DIR}/mods/${NRM_NAME}.h") + + add_custom_command( + OUTPUT ${OUT_C} ${OUT_H} + COMMAND file_to_c ${NRM_FILE} ${NRM_NAME} ${OUT_C} ${OUT_H} + DEPENDS ${NRM_FILE} + ) + + list(APPEND GENERATED_NRM_SOURCES ${OUT_C}) +endforeach() + +target_sources(Zelda64Recompiled PRIVATE ${GENERATED_NRM_SOURCES}) + target_sources(Zelda64Recompiled PRIVATE ${SOURCES}) set_property(TARGET Zelda64Recompiled PROPERTY VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") diff --git a/lib/N64ModernRuntime b/lib/N64ModernRuntime index 4b57f50..02d797a 160000 --- a/lib/N64ModernRuntime +++ b/lib/N64ModernRuntime @@ -1 +1 @@ -Subproject commit 4b57f50722c0e7d9189f79a7cc525d51ba98c52a +Subproject commit 02d797aedc005cc55935f3423d19433599b933e9 diff --git a/mods/BUILTIN_MODS.md b/mods/BUILTIN_MODS.md new file mode 100644 index 0000000..82fc703 --- /dev/null +++ b/mods/BUILTIN_MODS.md @@ -0,0 +1,6 @@ +# Built-in Mods + +This folder contains mods that are built into the Zelda 64: Recompiled project. Built-in mods behave like normal mods but are present in a clean installation of the project. They can be updated or downgraded by placing the .nrm file for the mod in the appdata mods folder in the same way a normal mod would be, which overrides the built-in version with the manually installed version. + +The list of built-in mods is as follows: +* Majora's Mask: Recompiled D-Pad Mod - https://github.com/Zelda64Recomp/MMRecompDpadMod \ No newline at end of file diff --git a/mods/mm_recomp_dpad_builtin.nrm b/mods/mm_recomp_dpad_builtin.nrm new file mode 100644 index 0000000000000000000000000000000000000000..f02adbefa8e4c0f8aa7e25f957b67c4ac2fa7882 GIT binary patch literal 136857 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

Rn2Ha^9&WAgV4h%3 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 literal 0 HcmV?d00001 diff --git a/patches/dpad.rgba32.bin b/patches/dpad.rgba32.bin deleted file mode 100644 index cc0be75dc73f9ded3c63f3e3b7f290e9bcc9c4b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHKK}%v$7|paoEd&>euA-#15amjA5lMnc!C)ZOst5~9%36qv#0bPtic~Nn0#Omc zZT^53{eaoc9~cN`n4G2-esj-*8}B`JXh<0*dT@Bpr}sPe`|kP9z4rC}SJxezE&Tya z_T6nSGBTUZUaQsmczu0Mi9~`i7GpUawQB zRH9nZ=j!UCcG z*=&}Mj*cYQ+1dHvf5-J_`WN(9C=@7{%SqNATG-v)ebf5u^?KjP$jCi(E(f?xCR1a5 zeVwY+DrGX67XD~7N*<4g#>U2o_5TyYkD;NV7N}IJ?~KPQ>(9H1i3!0!yk0Ls=VGAm zzzxr-)oOHda?-*dkH=|kZH-(m7tPGf(ER+oBnILk_SDoA8I8tA#t$#$7hPUn(#_2c zmCI$J$IxdSs5$Zm_r=8p#bPnq+uNg!jSXR5;c!@ZcX)V6n8(@KnGlbU=Xca?Yio<_ zc02d*7k-QZ2fPjaEe6&bW05zwx3{-xWo3nymX^rp^9gmsJ8(k_$z+nw&(9?>5HAvm z2sLp!oh|&REj$&TCifQcXXFZ>2d@}-2MvgSD}N3I0&nJr4#d3t8MQb#IOsV))|}U! zbMyQD{(jH-p}StxKb=k!_E79&*h|EKw_t6dFRnj62h;-3Tz~i-<`@cvBryPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D15imsK~z{r?N{Au z8bK7ERqJ0g8i^t%4MHIo)!P>Ag?WPDO(B<|ui#ts83MU3^d`_p5ON_12_*p|iU~>7 zL=*ot+Gx)=?rzu3s=Fbj6!O8x?9R@f`OcX+XJ^^}hBR?Jha=)4Q8xs!U5HR9ln4X@ z-;&9sy<9FcyWK86nc(s9ksTc!v4ewyaj)0g84L#B#Yb~t65EAnHk*5qNW>lt2HD2O z2J`#G6q8e{svwJ=oTOd0;kz*=B*m&e-2~;KA&&L?RM9emX@B-<#N^N znSFJ2mFNFxgnBa#r_;$S77H_(Oc3L+TCFXc&Gv*era`t6;%jmtN^fp%eu%|ltX{8k zBTB$yOdgF!c@4iQ@N81L`z zv$eG~F5uzeLF}FYhTu8cYPHIZP+{Wv52GkR zlil6jO%cXXd=Pd#m!gDs0Q4&(hZgs0JFuaK?ktc1kJalBU{W|>6ov(0gKDKAq9H}Z z2n-9Llw_1n;@ux$lWO%Zf-C^L8DYdOzrDSkBGwOKhlk6{%gpQb%I5(@1J~$-0F1+0 zYuUm60hE!FVmaE~-4&2Nvp%UvDVzn?*Vp+jhFA~+sOa#?ks-xmaqd#UQ3y<@(->ru z1RRo)n0T#;a5&5vkHcy)4e!XsEH6o%9_GbJdRU!)_Oya&47?hoR7;yW$UkRi$|DxAaNn7pI_ z$}a%VDa^l!u31!`7Y$_r)?WJHs4*|(^I$j)UmC9h3<;nO#EZ%0<)!>(lZX%2bD&!Q zHW~hi@I43dAE2akHUOwjJUueafbN4FRk}Q-<2I$61w}`Th)y<}#n{hOH_pUYUlcF? dbNY|L*l%JkcM6m-KDz(_002ovPDHLkV1lNUvlsvX diff --git a/patches/input.c b/patches/input.c index 3acf7a2..f0c12f1 100644 --- a/patches/input.c +++ b/patches/input.c @@ -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,280 +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, -}; - -// D-Pad items - -#define EXTRA_ITEM_SLOT_COUNT 4 -#define TOTAL_SLOT_COUNT (3 + EXTRA_ITEM_SLOT_COUNT) -u8 extra_item_slot_statuses[EXTRA_ITEM_SLOT_COUNT]; -s16 extra_item_slot_alphas[EXTRA_ITEM_SLOT_COUNT]; -u8 extra_button_items[4][EXTRA_ITEM_SLOT_COUNT] = { - { ITEM_MASK_DEKU, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME }, - { ITEM_MASK_DEKU, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME }, - { ITEM_MASK_DEKU, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME }, - { ITEM_MASK_DEKU, ITEM_MASK_GORON, ITEM_MASK_ZORA, ITEM_OCARINA_OF_TIME }, -}; - -#define EQUIP_SLOT_EX_START ARRAY_COUNT(gSaveContext.buttonStatus) - -typedef enum { - EQUIP_SLOT_EX_DUP = EQUIP_SLOT_EX_START, - EQUIP_SLOT_EX_DLEFT, - EQUIP_SLOT_EX_DRIGHT, - EQUIP_SLOT_EX_DDOWN, -} EquipSlotEx; - -struct ExButtonMapping { - u32 button; - EquipSlotEx slot; -}; - -// These are negated to avoid a check where the game clamps the button to B if it's greater than -struct ExButtonMapping buttons_to_extra_slot[] = { - {BTN_DLEFT, -EQUIP_SLOT_EX_DLEFT}, - {BTN_DRIGHT, -EQUIP_SLOT_EX_DRIGHT}, - {BTN_DUP, -EQUIP_SLOT_EX_DUP}, - {BTN_DDOWN, -EQUIP_SLOT_EX_DDOWN}, -}; - -#undef BUTTON_ITEM_EQUIP -#undef GET_CUR_FORM_BTN_ITEM - -#define BUTTON_ITEM_EQUIP(form, button) (*get_button_item_equip_ptr((form), (button))) -#define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn))) -#define BUTTON_STATUS(btn) (*get_slot_status_ptr(btn)) - -// Analog to C_BTN_ITEM for extra item slots -#define EXTRA_BTN_ITEM(btn) \ - ((extra_item_slot_statuses[(btn) - EQUIP_SLOT_EX_START] != BTN_DISABLED) \ - ? BUTTON_ITEM_EQUIP(0, (btn)) \ - : ((gSaveContext.hudVisibility == HUD_VISIBILITY_A_B_C) ? BUTTON_ITEM_EQUIP(0, (btn)) : ITEM_NONE)) - - -void set_extra_item_slot_status(u8 status) { - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - extra_item_slot_statuses[i] = status; - } -} - -u8* get_slot_status_ptr(u32 slot) { - if (slot >= EQUIP_SLOT_EX_START) { - return &extra_item_slot_statuses[slot - EQUIP_SLOT_EX_START]; - } - else { - return &gSaveContext.buttonStatus[slot]; - } -} - -// Converts an ex slot index into the actual slot index. -u8 to_slot_index(u32 ex_slot) { - if (ex_slot < 3) { - return ex_slot + EQUIP_SLOT_C_LEFT; - } - else { - return ex_slot - 3 + EQUIP_SLOT_EX_START; - } -} - -u8* get_button_item_equip_ptr(u32 form, u32 button) { - if (button >= EQUIP_SLOT_EX_START) { - return &extra_button_items[form][button - EQUIP_SLOT_EX_START]; - } - else { - return &gSaveContext.save.saveInfo.equips.buttonItems[form][button]; - } -} - -// Return currently-pressed button, in order of priority D-Pad, B, CLEFT, CDOWN, CRIGHT. -RECOMP_PATCH EquipSlot func_8082FDC4(void) { - EquipSlot i; - - for (int extra_slot_index = 0; extra_slot_index < ARRAY_COUNT(buttons_to_extra_slot); extra_slot_index++) { - if (CHECK_BTN_ALL(sPlayerControlInput->press.button, buttons_to_extra_slot[extra_slot_index].button)) { - return (EquipSlot)buttons_to_extra_slot[extra_slot_index].slot; - } - } - - for (i = 0; i < ARRAY_COUNT(sPlayerItemButtons); i++) { - if (CHECK_BTN_ALL(sPlayerControlInput->press.button, sPlayerItemButtons[i])) { - break; - } - } - - return i; -} - -RECOMP_PATCH ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) { - if (slot >= EQUIP_SLOT_A) { - return ITEM_NONE; - } - - // @recomp Check for extra item slots. - if (slot <= -EQUIP_SLOT_EX_START) { - ItemId item = EXTRA_BTN_ITEM(-slot); - - // Ensure the item was valid and has been obtained. - if ((item != ITEM_NONE) && (INV_CONTENT(item) == item)) { - return item; - } - else { - return ITEM_NONE; - } - } - - if (slot == EQUIP_SLOT_B) { - ItemId item = Inventory_GetBtnBItem(play); - - if (item >= ITEM_FD) { - return item; - } - - if ((player->currentMask == PLAYER_MASK_BLAST) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_EXPLODE)) { - return ITEM_F0; - } - - if ((player->currentMask == PLAYER_MASK_BREMEN) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_MARCH)) { - return ITEM_F1; - } - - if ((player->currentMask == PLAYER_MASK_KAMARO) && (play->interfaceCtx.bButtonDoAction == DO_ACTION_DANCE)) { - return ITEM_F2; - } - - return item; - } - - if (slot == EQUIP_SLOT_C_LEFT) { - return C_BTN_ITEM(EQUIP_SLOT_C_LEFT); - } - - if (slot == EQUIP_SLOT_C_DOWN) { - return C_BTN_ITEM(EQUIP_SLOT_C_DOWN); - } - - // EQUIP_SLOT_C_RIGHT - - return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT); -} - -typedef struct struct_8085D910 { - /* 0x0 */ u8 unk_0; - /* 0x1 */ u8 unk_1; - /* 0x2 */ u8 unk_2; - /* 0x3 */ u8 unk_3; -} struct_8085D910; // size = 0x4 - -u16 D_8085D908[] = { - WEEKEVENTREG_30_80, // PLAYER_FORM_FIERCE_DEITY - WEEKEVENTREG_30_20, // PLAYER_FORM_GORON - WEEKEVENTREG_30_40, // PLAYER_FORM_ZORA - WEEKEVENTREG_30_10, // PLAYER_FORM_DEKU -}; -struct_8085D910 D_8085D910[] = { - { 0x10, 0xA, 0x3B, 0x3F }, - { 9, 0x32, 0xA, 0xD }, -}; - -bool func_808323C0(Player *this, s16 csId); -void func_80855218(PlayState *play, Player *this, struct_8085D910 **arg2); -void func_808550D0(PlayState *play, Player *this, f32 arg2, f32 arg3, s32 arg4); - -RECOMP_PATCH void Player_Action_86(Player *this, PlayState *play) { - struct_8085D910 *sp4C = D_8085D910; - s32 sp48 = false; - - func_808323C0(this, play->playerCsIds[PLAYER_CS_ID_MASK_TRANSFORMATION]); - sPlayerControlInput = play->state.input; - - Camera_ChangeMode(GET_ACTIVE_CAM(play), - (this->transformation == PLAYER_FORM_HUMAN) ? CAM_MODE_NORMAL : CAM_MODE_JUMP); - this->stateFlags2 |= PLAYER_STATE2_40; - this->actor.shape.rot.y = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000; - - func_80855218(play, this, &sp4C); - - if (this->av1.actionVar1 == 0x14) { - Play_EnableMotionBlurPriority(100); - } - - if (R_PLAY_FILL_SCREEN_ON != 0) { - R_PLAY_FILL_SCREEN_ALPHA += R_PLAY_FILL_SCREEN_ON; - if (R_PLAY_FILL_SCREEN_ALPHA > 255) { - R_PLAY_FILL_SCREEN_ALPHA = 255; - this->actor.update = func_8012301C; - this->actor.draw = NULL; - this->av1.actionVar1 = 0; - Play_DisableMotionBlurPriority(); - SET_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM]); - } - } - else if ((this->av1.actionVar1++ > ((this->transformation == PLAYER_FORM_HUMAN) ? 0x53 : 0x37)) || - ((this->av1.actionVar1 >= 5) && - (sp48 = - ((this->transformation != PLAYER_FORM_HUMAN) || CHECK_WEEKEVENTREG(D_8085D908[GET_PLAYER_FORM])) && - // @recomp Patched to also check for d-pad buttons for skipping the transformation cutscene. - CHECK_BTN_ANY(play->state.input[0].press.button, - BTN_CRIGHT | BTN_CLEFT | BTN_CDOWN | BTN_CUP | BTN_B | BTN_A | BTN_DRIGHT | BTN_DLEFT | BTN_DDOWN | BTN_DUP)))) { - R_PLAY_FILL_SCREEN_ON = 45; - R_PLAY_FILL_SCREEN_R = 220; - R_PLAY_FILL_SCREEN_G = 220; - R_PLAY_FILL_SCREEN_B = 220; - R_PLAY_FILL_SCREEN_ALPHA = 0; - - if (sp48) { - if (CutsceneManager_GetCurrentCsId() == this->csId) { - func_800E0348(Play_GetCamera(play, CutsceneManager_GetCurrentSubCamId(this->csId))); - } - - if (this->transformation == PLAYER_FORM_HUMAN) { - AudioSfx_StopById(NA_SE_PL_TRANSFORM_VOICE); - AudioSfx_StopById(NA_SE_IT_TRANSFORM_MASK_BROKEN); - } - else { - AudioSfx_StopById(NA_SE_PL_FACE_CHANGE); - } - } - - Player_PlaySfx(this, NA_SE_SY_TRANSFORM_MASK_FLASH); - } - - if (this->av1.actionVar1 >= sp4C->unk_0) { - if (this->av1.actionVar1 < sp4C->unk_2) { - Math_StepToF(&this->unk_B10[4], 1.0f, sp4C->unk_1 / 100.0f); - } - else if (this->av1.actionVar1 < sp4C->unk_3) { - if (this->av1.actionVar1 == sp4C->unk_2) { - Lib_PlaySfx_2(NA_SE_EV_LIGHTNING_HARD); - } - - Math_StepToF(&this->unk_B10[4], 2.0f, 0.5f); - } - else { - Math_StepToF(&this->unk_B10[4], 3.0f, 0.2f); - } - } - - if (this->av1.actionVar1 >= 0x10) { - if (this->av1.actionVar1 < 0x40) { - Math_StepToF(&this->unk_B10[5], 1.0f, 0.2f); - } - else if (this->av1.actionVar1 < 0x37) { - Math_StepToF(&this->unk_B10[5], 2.0f, 1.0f); - } - else { - Math_StepToF(&this->unk_B10[5], 3.0f, 0.55f); - } - } - - func_808550D0(play, this, this->unk_B10[4], this->unk_B10[5], (this->transformation == PLAYER_FORM_HUMAN) ? 0 : 1); -} - 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. @@ -595,7 +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) -// @recomp Patched to update status of extra buttons via set_extra_item_slot_status. +// @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); @@ -619,19 +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; - set_extra_item_slot_status(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; - set_extra_item_slot_status(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); @@ -640,11 +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; - set_extra_item_slot_status(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; @@ -654,16 +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; - set_extra_item_slot_status(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; @@ -675,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; } @@ -686,17 +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; - set_extra_item_slot_status(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) { @@ -713,10 +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; - set_extra_item_slot_status(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); @@ -736,18 +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; - set_extra_item_slot_status(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; @@ -760,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; } @@ -768,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. @@ -782,10 +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; - set_extra_item_slot_status(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); } @@ -800,10 +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; - set_extra_item_slot_status(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); @@ -870,18 +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; - set_extra_item_slot_status(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; - set_extra_item_slot_status(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 @@ -926,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; } } @@ -980,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 @@ -1027,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; } } @@ -1056,25 +776,25 @@ 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; - set_extra_item_slot_status(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 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 @@ -1091,42 +811,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; } } @@ -1142,33 +861,32 @@ 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; - set_extra_item_slot_status(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; + recomp_set_extra_item_slot_statuses(play, BTN_DISABLED); restoreHudVisibility = true; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } @@ -1196,15 +914,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); @@ -1212,25 +930,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) { @@ -1238,18 +956,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; } } @@ -1257,56 +975,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 @@ -1316,10 +1032,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) && @@ -1327,44 +1043,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; } } @@ -1378,9 +1094,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) { @@ -1393,9 +1109,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; } } } @@ -1411,1004 +1127,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) { } } - -/** - * Sets the button alphas to be dimmed for disabled buttons, or to the requested alpha for non-disabled buttons - */ -// @recomp Patched to also set extra slot alpha values. -RECOMP_PATCH void Interface_UpdateButtonAlphasByStatus(PlayState* play, s16 risingAlpha) { - InterfaceContext* interfaceCtx = &play->interfaceCtx; - - if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) || (gSaveContext.bButtonStatus == BTN_DISABLED)) { - if (interfaceCtx->bAlpha != 70) { - interfaceCtx->bAlpha = 70; - } - } else { - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - } - - if (gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] == BTN_DISABLED) { - if (interfaceCtx->cLeftAlpha != 70) { - interfaceCtx->cLeftAlpha = 70; - } - } else { - if (interfaceCtx->cLeftAlpha != 255) { - interfaceCtx->cLeftAlpha = risingAlpha; - } - } - - if (gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] == BTN_DISABLED) { - if (interfaceCtx->cDownAlpha != 70) { - interfaceCtx->cDownAlpha = 70; - } - } else { - if (interfaceCtx->cDownAlpha != 255) { - interfaceCtx->cDownAlpha = risingAlpha; - } - } - - if (gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] == BTN_DISABLED) { - if (interfaceCtx->cRightAlpha != 70) { - interfaceCtx->cRightAlpha = 70; - } - } else { - if (interfaceCtx->cRightAlpha != 255) { - interfaceCtx->cRightAlpha = risingAlpha; - } - } - - if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) { - if (interfaceCtx->aAlpha != 70) { - interfaceCtx->aAlpha = 70; - } - } else { - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - } - - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if (extra_item_slot_statuses[i] == BTN_DISABLED) { - if (extra_item_slot_alphas[i] != 70) { - extra_item_slot_alphas[i] = 70; - } - } - else { - if (extra_item_slot_alphas[i] != 255) { - extra_item_slot_alphas[i] = risingAlpha; - } - } - } -} - -/** - * Lower button alphas on the HUD to the requested value - * If (gSaveContext.hudVisibilityForceButtonAlphasByStatus), then instead update button alphas - * depending on button status - */ -// @recomp Patched to also set extra slot alpha values. -RECOMP_PATCH void Interface_UpdateButtonAlphas(PlayState* play, s16 dimmingAlpha, s16 risingAlpha) { - InterfaceContext* interfaceCtx = &play->interfaceCtx; - - if (gSaveContext.hudVisibilityForceButtonAlphasByStatus) { - Interface_UpdateButtonAlphasByStatus(play, risingAlpha); - return; - } - - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } -} - -// @recomp Patched to also set extra slot alpha values. -RECOMP_PATCH void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) { - InterfaceContext* interfaceCtx = &play->interfaceCtx; - s16 risingAlpha = 255 - dimmingAlpha; - - switch (gSaveContext.nextHudVisibility) { - case HUD_VISIBILITY_NONE: - case HUD_VISIBILITY_NONE_ALT: - case HUD_VISIBILITY_B: - if (gSaveContext.nextHudVisibility == HUD_VISIBILITY_B) { - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - } else { - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS_WITH_OVERWRITE: - // aAlpha is immediately overwritten in Interface_UpdateButtonAlphas - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - Interface_UpdateButtonAlphas(play, dimmingAlpha, risingAlpha + 0); - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - // aAlpha is immediately overwritten below - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_HEARTS_MAGIC_WITH_OVERWRITE: - Interface_UpdateButtonAlphas(play, dimmingAlpha, risingAlpha); - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - // aAlpha overwrites the value set in Interface_UpdateButtonAlphas - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE: - Interface_UpdateButtonAlphas(play, dimmingAlpha, risingAlpha); - - // aAlpha overwrites the value set in Interface_UpdateButtonAlphas - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (play->sceneId == SCENE_SPOT00) { - if (interfaceCtx->minimapAlpha < 170) { - interfaceCtx->minimapAlpha = risingAlpha; - } else { - interfaceCtx->minimapAlpha = 170; - } - } else if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED: - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - Interface_UpdateButtonAlphasByStatus(play, risingAlpha); - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS_MAGIC: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_B_ALT: - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_B_MINIMAP: - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if ((gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) || - (gSaveContext.bButtonStatus == ITEM_NONE)) { - if (interfaceCtx->bAlpha != 70) { - interfaceCtx->bAlpha = 70; - } - } else { - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - } - - if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS_MAGIC_WITH_OVERWRITE: - Interface_UpdateButtonAlphas(play, dimmingAlpha, risingAlpha); - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - // aAlpha overwrites the value set in Interface_UpdateButtonAlphas - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS_MAGIC_C: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->cLeftAlpha != 255) { - interfaceCtx->cLeftAlpha = risingAlpha; - } - - if (interfaceCtx->cDownAlpha != 255) { - interfaceCtx->cDownAlpha = risingAlpha; - } - - if (interfaceCtx->cRightAlpha != 255) { - interfaceCtx->cRightAlpha = risingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if (extra_item_slot_alphas[i] != 255) { - extra_item_slot_alphas[i] = risingAlpha; - } - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_ALL_NO_MINIMAP: - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->cLeftAlpha != 255) { - interfaceCtx->cLeftAlpha = risingAlpha; - } - - if (interfaceCtx->cDownAlpha != 255) { - interfaceCtx->cDownAlpha = risingAlpha; - } - - if (interfaceCtx->cRightAlpha != 255) { - interfaceCtx->cRightAlpha = risingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if (extra_item_slot_alphas[i] != 255) { - extra_item_slot_alphas[i] = risingAlpha; - } - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_B_C: - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->cLeftAlpha != 255) { - interfaceCtx->cLeftAlpha = risingAlpha; - } - - if (interfaceCtx->cDownAlpha != 255) { - interfaceCtx->cDownAlpha = risingAlpha; - } - - if (interfaceCtx->cRightAlpha != 255) { - interfaceCtx->cRightAlpha = risingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if (extra_item_slot_alphas[i] != 255) { - extra_item_slot_alphas[i] = risingAlpha; - } - } - - break; - - case HUD_VISIBILITY_B_MINIMAP: - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_HEARTS_MAGIC_MINIMAP: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP: - if ((interfaceCtx->bAlpha != 0) && (interfaceCtx->bAlpha > dimmingAlpha)) { - interfaceCtx->bAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_B_MAGIC: - if ((interfaceCtx->aAlpha != 0) && (interfaceCtx->aAlpha > dimmingAlpha)) { - interfaceCtx->aAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - break; - - case HUD_VISIBILITY_A_B: - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) { - interfaceCtx->minimapAlpha = dimmingAlpha; - } - - if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) { - interfaceCtx->magicAlpha = dimmingAlpha; - } - - if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) { - interfaceCtx->healthAlpha = dimmingAlpha; - } - - break; - - case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP: - if ((interfaceCtx->cLeftAlpha != 0) && (interfaceCtx->cLeftAlpha > dimmingAlpha)) { - interfaceCtx->cLeftAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cDownAlpha != 0) && (interfaceCtx->cDownAlpha > dimmingAlpha)) { - interfaceCtx->cDownAlpha = dimmingAlpha; - } - - if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) { - interfaceCtx->cRightAlpha = dimmingAlpha; - } - - // @recomp - for (int i = 0; i < EXTRA_ITEM_SLOT_COUNT; i++) { - if ((extra_item_slot_alphas[i] != 0) && (extra_item_slot_alphas[i] > dimmingAlpha)) { - extra_item_slot_alphas[i] = dimmingAlpha; - } - } - - if (interfaceCtx->bAlpha != 255) { - interfaceCtx->bAlpha = risingAlpha; - } - - if (interfaceCtx->aAlpha != 255) { - interfaceCtx->aAlpha = risingAlpha; - } - - if (interfaceCtx->minimapAlpha != 255) { - interfaceCtx->minimapAlpha = risingAlpha; - } - - if (interfaceCtx->magicAlpha != 255) { - interfaceCtx->magicAlpha = risingAlpha; - } - - if (interfaceCtx->healthAlpha != 255) { - interfaceCtx->healthAlpha = risingAlpha; - } - - break; - } - - if ((play->roomCtx.curRoom.behaviorType1 == ROOM_BEHAVIOR_TYPE1_1) && (interfaceCtx->minimapAlpha >= 255)) { - interfaceCtx->minimapAlpha = 255; - } -} - -INCBIN(dpad_icon, "dpad.rgba32.bin"); - -#define DPAD_W 18 -#define DPAD_H 18 - -#define DPAD_IMG_W 32 -#define DPAD_IMG_H 32 - -#define DPAD_DSDX (s32)(1024.0f * (float)(DPAD_IMG_W) / (DPAD_W)) -#define DPAD_DTDY (s32)(1024.0f * (float)(DPAD_IMG_H) / (DPAD_H)) - -#define DPAD_CENTER_X 40 -#define DPAD_CENTER_Y 84 - -#define ICON_IMG_SIZE 32 -#define ICON_SIZE 16 -#define ICON_DIST 14 - -#define ICON_DSDX (s32)(1024.0f * (float)(ICON_IMG_SIZE) / (ICON_SIZE)) -#define ICON_DTDY (s32)(1024.0f * (float)(ICON_IMG_SIZE) / (ICON_SIZE)) - -s32 dpad_item_icon_positions[4][2] = { - { 0, -ICON_DIST}, - { -ICON_DIST, 0 }, - { ICON_DIST, 0 }, - { 0, ICON_DIST - 2 } -}; - -Gfx* Gfx_DrawRect_DropShadow(Gfx* gfx, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, - s16 r, s16 g, s16 b, s16 a); - -void draw_dpad(PlayState* play) { - OPEN_DISPS(play->state.gfxCtx); - - gEXForceUpscale2D(OVERLAY_DISP++, 1); - gDPLoadTextureBlock(OVERLAY_DISP++, dpad_icon, G_IM_FMT_RGBA, G_IM_SIZ_32b, DPAD_IMG_W, DPAD_IMG_H, 0, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - - // Determine the maximum alpha of all the D-Pad items and use that as the alpha of the D-Pad itself. - int alpha = 0; - for (int i = 0; i < 4; i++) { - int cur_alpha = extra_item_slot_alphas[i]; - alpha = MAX(alpha, cur_alpha); - } - - // Check if none of the D-Pad items have been obtained and clamp the alpha to 70 if so. - bool item_obtained = false; - for (int i = 0; i < 4; i++) { - s32 item = extra_button_items[0][i]; - if ((item != ITEM_NONE) && (INV_CONTENT(item) == item)) { - item_obtained = true; - break; - } - } - - if (!item_obtained) { - alpha = MIN(alpha, 70); - } - - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - OVERLAY_DISP = Gfx_DrawRect_DropShadow(OVERLAY_DISP, DPAD_CENTER_X - (DPAD_W/2), DPAD_CENTER_Y - (DPAD_W/2), DPAD_W, DPAD_H, - DPAD_DSDX, DPAD_DTDY, - 255, 255, 255, alpha); - gEXForceUpscale2D(OVERLAY_DISP++, 0); - - CLOSE_DISPS(play->state.gfxCtx); -} - -bool dpad_item_icons_loaded = false; -u8 dpad_item_textures[4][ICON_IMG_SIZE * ICON_IMG_SIZE * 4] __attribute__((aligned(8))); - -void draw_dpad_icons(PlayState* play) { - InterfaceContext* interfaceCtx = &play->interfaceCtx; - - if (!dpad_item_icons_loaded) { - for (int i = 0; i < 4; i++) { - CmpDma_LoadFile(SEGMENT_ROM_START(icon_item_static_yar), extra_button_items[0][i], dpad_item_textures[i], sizeof(dpad_item_textures[i])); - } - - dpad_item_icons_loaded = true; - } - - OPEN_DISPS(play->state.gfxCtx); - - - gEXForceUpscale2D(OVERLAY_DISP++, 1); - gDPLoadTextureBlock(OVERLAY_DISP++, dpad_icon, G_IM_FMT_RGBA, G_IM_SIZ_32b, DPAD_IMG_W, DPAD_IMG_H, 0, - G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - - gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM); - - for (int i = 0; i < 4; i++) { - s32 item = extra_button_items[0][i]; - if ((item != ITEM_NONE) && (INV_CONTENT(item) == item)) { - gDPLoadTextureBlock(OVERLAY_DISP++, dpad_item_textures[i], G_IM_FMT_RGBA, G_IM_SIZ_32b, 32, 32, 0, G_TX_NOMIRROR | G_TX_WRAP, - G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); - gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, extra_item_slot_alphas[i]); - gSPTextureRectangle(OVERLAY_DISP++, - (dpad_item_icon_positions[i][0] + DPAD_CENTER_X - (ICON_SIZE/2)) * 4, (dpad_item_icon_positions[i][1] + DPAD_CENTER_Y - (ICON_SIZE/2)) * 4, - (dpad_item_icon_positions[i][0] + DPAD_CENTER_X + (ICON_SIZE/2)) * 4, (dpad_item_icon_positions[i][1] + DPAD_CENTER_Y + (ICON_SIZE/2)) * 4, - 0, - 0, 0, - ICON_DSDX, ICON_DTDY); - } - } - - gEXForceUpscale2D(OVERLAY_DISP++, 0); - - CLOSE_DISPS(play->state.gfxCtx); -} - typedef struct { /* 0x0 */ s8 x; /* 0x1 */ s8 y; diff --git a/patches/patches.h b/patches/patches.h index a93a6fd..ec31b88 100644 --- a/patches/patches.h +++ b/patches/patches.h @@ -92,9 +92,6 @@ typedef enum { "\t.popsection\n"); \ extern u8 identifier[] -void draw_dpad(PlayState* play); -void draw_dpad_icons(PlayState* play); - void View_ApplyInterpolate(View* view, s32 mask, bool reset_interpolation_state); void set_camera_skipped(bool skipped); diff --git a/patches/ui_patches.c b/patches/ui_patches.c index 0177611..87dcfdd 100644 --- a/patches/ui_patches.c +++ b/patches/ui_patches.c @@ -487,10 +487,8 @@ RECOMP_PATCH void Interface_Draw(PlayState* play) { Magic_DrawMeter(play); - // @recomp Draw the D-Pad and its item icons as well as the autosave icon if the game is unpaused. + // @recomp Draw the autosave icon if the game is unpaused. if (pauseCtx->state != PAUSE_STATE_MAIN) { - draw_dpad(play); - draw_dpad_icons(play); draw_autosave_icon(play); } diff --git a/src/main/main.cpp b/src/main/main.cpp index c20660f..f703b0d 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -38,6 +38,8 @@ #include "../../patches/sound.h" #include "../../patches/misc_funcs.h" +#include "mods/mm_recomp_dpad_builtin.h" + #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include @@ -617,6 +619,8 @@ int main(int argc, char** argv) { recomp::register_game(game); } + recomp::mods::register_embedded_mod("mm_recomp_dpad_builtin", { (const uint8_t*)(mm_recomp_dpad_builtin), std::size(mm_recomp_dpad_builtin)}); + REGISTER_FUNC(recomp_get_window_resolution); REGISTER_FUNC(recomp_get_target_aspect_ratio); REGISTER_FUNC(recomp_get_target_framerate);