From e970e8588264f78f47e42e8020e562ee0bfc2b1d Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 22 Apr 2025 21:31:24 -0300 Subject: [PATCH] Experiment with removing the D-Pad. --- patches/dpad.rgba32.bin | Bin 4096 -> 0 bytes patches/dpad.rgba32.png | Bin 955 -> 0 bytes patches/input.c | 1289 +-------------------------------------- patches/patches.h | 3 - patches/ui_patches.c | 4 +- 5 files changed, 11 insertions(+), 1285 deletions(-) delete mode 100644 patches/dpad.rgba32.bin delete mode 100644 patches/dpad.rgba32.png 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..1235cea 100644 --- a/patches/input.c +++ b/patches/input.c @@ -303,273 +303,6 @@ u32 sPlayerItemButtons[] = { 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 +328,16 @@ 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. +// 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_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; Player* player = GET_PLAYER(play); @@ -624,14 +366,12 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); } } 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); } Interface_SetHudVisibility(HUD_VISIBILITY_B_MAGIC); @@ -644,7 +384,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); if (play->sceneId == SCENE_BOWLING) { if (CURRENT_DAY == 1) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMBCHU; @@ -657,7 +396,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); } else { // @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix. if (EPONA_FIX_ACTIVE) { @@ -689,7 +427,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE); } } @@ -716,7 +453,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP); } else if (ON_EPONA) { Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP); @@ -741,7 +477,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); } else { // @recomp_use_export_var no_bow_epona_fix: Part of the no bow Epona fix. if (EPONA_FIX_ACTIVE) { @@ -785,7 +520,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE); } @@ -803,7 +537,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP); } else if (ON_EPONA) { Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP); @@ -873,7 +606,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); 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)) { @@ -881,7 +613,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart1(PlayState* play) { 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); Interface_SetHudVisibility(HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP); } else if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) { // Related to pictograph @@ -1068,7 +799,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) { 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); } } else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) && (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_DEKU_NUT)) { @@ -1168,7 +898,6 @@ RECOMP_PATCH void Interface_UpdateButtonsPart2(PlayState* play) { 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); restoreHudVisibility = true; Interface_SetHudVisibility(HUD_VISIBILITY_ALL); } @@ -1411,1004 +1140,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); }