summaryrefslogtreecommitdiff
path: root/mm/src/code
diff options
context:
space:
mode:
authorinspectredc <78732756+inspectredc@users.noreply.github.com>2024-05-09 15:58:52 +0100
committerGarrett Cox <garrettjcox@gmail.com>2024-05-22 09:05:04 -0500
commitad478cfc594ec8820bda726b3dc5fffe2df65e30 (patch)
treebcea98a74768141b8f812373abeb939116e6d770 /mm/src/code
parent1d5d9be0694e0ee6886925ca81929900e7047c9a (diff)
DPad Items (#228)
* Initial Dpad * remove old hud stuff * and comment * s.. * add dpad equip macro back in * fix inputs * fix equipping (hopefully all) * finish some todos * add 2s2h asset header * check dpad macro * remove 2s2h_assets * re-add empty texture * use correct struct for default dpad equips * dpad save stuff * fix item offering, use correct equip offset values * finally figure out unk_154 and fix mask equipping * avoid ugly code * add necessary condition * correct save names for dpad items/slots * remove todos and sort out suggestions and rename cvar * func standardise renaming * Add dpad to hud presets * dpad save migration
Diffstat (limited to 'mm/src/code')
-rw-r--r--mm/src/code/z_camera.c18
-rw-r--r--mm/src/code/z_game_over.c6
-rw-r--r--mm/src/code/z_message.c12
-rw-r--r--mm/src/code/z_message_nes.c8
-rw-r--r--mm/src/code/z_parameter.c1063
-rw-r--r--mm/src/code/z_player_lib.c50
-rw-r--r--mm/src/code/z_sram_NES.c39
7 files changed, 1182 insertions, 14 deletions
diff --git a/mm/src/code/z_camera.c b/mm/src/code/z_camera.c
index 4d08584b6..9b8cb8eb1 100644
--- a/mm/src/code/z_camera.c
+++ b/mm/src/code/z_camera.c
@@ -4477,6 +4477,9 @@ s32 Camera_KeepOn3(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R)) {
@@ -5536,6 +5539,9 @@ s32 Camera_Unique0(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) ||
@@ -5560,6 +5566,9 @@ s32 Camera_Unique0(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) ||
@@ -6047,6 +6056,9 @@ s32 Camera_Demo2(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R)) &&
@@ -6783,6 +6795,9 @@ s32 Camera_Special8(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) ||
@@ -6950,6 +6965,9 @@ s32 Camera_Special9(Camera* camera) {
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CDOWN) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CLEFT) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_CRIGHT) ||
+ // #region 2S2H [Dpad]
+ CHECK_BTN_DPAD(CONTROLLER1(&camera->play->state)->press.button) ||
+ // #endregion
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_Z) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_L) ||
CHECK_BTN_ALL(CONTROLLER1(&camera->play->state)->press.button, BTN_R) ||
diff --git a/mm/src/code/z_game_over.c b/mm/src/code/z_game_over.c
index 003f5dd7b..0487f3214 100644
--- a/mm/src/code/z_game_over.c
+++ b/mm/src/code/z_game_over.c
@@ -61,6 +61,12 @@ void GameOver_Update(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
+ // #region 2S2H
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ // #endregion
gSaveContext.buttonStatus[EQUIP_SLOT_A] = BTN_ENABLED;
gSaveContext.hudVisibilityForceButtonAlphasByStatus = false;
gSaveContext.nextHudVisibility = HUD_VISIBILITY_IDLE;
diff --git a/mm/src/code/z_message.c b/mm/src/code/z_message.c
index aff05b005..becbe0695 100644
--- a/mm/src/code/z_message.c
+++ b/mm/src/code/z_message.c
@@ -14,9 +14,7 @@
#include "assets/interface/message_texture_static/message_texture_static.h"
#include <string.h>
-// #region 2S2H [Port] Asset tables we can pull from instead of from ROM
-#define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture"
-static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture;
+#include "2s2h_assets.h"
const char* gBombersNotebookPhotos[] = {
gBombersNotebookPhotoAnjuTex,
@@ -2883,7 +2881,13 @@ void Message_Decode(PlayState* play) {
decodedBufPos--;
} else if (curChar == 0x22E) {
digits[0] = digits[1] = digits[2] = 0;
- digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+ // #region 2S2H [Dpad]
+ if (IS_HELD_DPAD(player->heldItemButton)) {
+ digits[3] = gItemPrices[DPAD_GET_CUR_FORM_BTN_ITEM(HELD_ITEM_TO_DPAD(player->heldItemButton))];
+ } else {
+ digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+ }
+ // #endregion
while (digits[3] >= 1000) {
digits[0]++;
diff --git a/mm/src/code/z_message_nes.c b/mm/src/code/z_message_nes.c
index dec1e3160..d1cc054e2 100644
--- a/mm/src/code/z_message_nes.c
+++ b/mm/src/code/z_message_nes.c
@@ -1564,7 +1564,13 @@ void Message_DecodeNES(PlayState* play) {
decodedBufPos--;
} else if (curChar == 0xDE) {
digits[0] = digits[1] = digits[2] = 0;
- digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+ // #region 2S2H [Dpad]
+ if (IS_HELD_DPAD(player->heldItemButton)) {
+ digits[3] = gItemPrices[DPAD_GET_CUR_FORM_BTN_ITEM(HELD_ITEM_TO_DPAD(player->heldItemButton))];
+ } else {
+ digits[3] = gItemPrices[GET_CUR_FORM_BTN_ITEM(player->heldItemButton)];
+ }
+ // #endregion
while (digits[3] >= 1000) {
digits[0]++;
diff --git a/mm/src/code/z_parameter.c b/mm/src/code/z_parameter.c
index 2bba67637..5fe645d16 100644
--- a/mm/src/code/z_parameter.c
+++ b/mm/src/code/z_parameter.c
@@ -10,6 +10,8 @@
#include "interface/do_action_static/do_action_static.h"
#include "misc/story_static/story_static.h"
+#include "2s2h_assets.h"
+
#include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h"
#include "overlays/actors/ovl_En_Mm3/z_en_mm3.h"
#include "interface/week_static/week_static.h"
@@ -19,10 +21,6 @@
#include "2s2h_assets.h"
#include "Enhancements/GameInteractor/GameInteractor.h"
-// #region 2S2H [Port] Asset tables we can pull from instead of from ROM
-#define dgEmptyTexture "__OTR__textures/virtual/gEmptyTexture"
-static const ALIGN_ASSET(2) char gEmptyTexture[] = dgEmptyTexture;
-
// 2S2H [Port] This was originally static but needs to be global so it can be accessed in z_kaleido_collect, z_kaleido_debug, and z_kaleido_draw.
const char* sCounterTextures[] = {
gCounterDigit0Tex, gCounterDigit1Tex, gCounterDigit2Tex, gCounterDigit3Tex, gCounterDigit4Tex, gCounterDigit5Tex,
@@ -322,6 +320,50 @@ Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 text
return gfx;
}
+// #region 2S2H [Dpad]
+Gfx* Gfx_DrawTexRectIA16_DropShadow(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft,
+ s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy, s16 r, s16 g, s16 b,
+ s16 a) {
+ s16 dropShadowAlpha = a;
+
+ if (a > 100) {
+ dropShadowAlpha = 100;
+ }
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, 0, 0, 0, dropShadowAlpha);
+
+ gDPLoadTextureBlock(gfx++, texture, G_IM_FMT_IA, G_IM_SIZ_16b, textureWidth, textureHeight, 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);
+
+ // #region 2S2H [Cosmetic] Hud Editor
+ if (HudEditor_ShouldOverrideDraw()) {
+ if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) == HUD_EDITOR_ELEMENT_MODE_HIDDEN) {
+ hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
+ return gfx;
+ }
+
+ HudEditor_ModifyDrawValues(&rectLeft, &rectTop, &rectWidth, &rectHeight, &dsdx, &dtdy);
+
+ hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
+ }
+ // #endregion
+
+ // 2S2H [Cosmetic] Changed to Wide variant to support widescreen
+ gSPWideTextureRectangle(gfx++, (rectLeft + 2) * 4, (rectTop + 2) * 4, (rectLeft + rectWidth + 2) * 4,
+ (rectTop + rectHeight + 2) * 4, G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ gDPPipeSync(gfx++);
+ gDPSetPrimColor(gfx++, 0, 0, r, g, b, a);
+ // 2S2H [Cosmetic] Changed to Wide variant to support widescreen
+ gSPWideTextureRectangle(gfx++, rectLeft * 4, rectTop * 4, (rectLeft + rectWidth) * 4, (rectTop + rectHeight) * 4,
+ G_TX_RENDERTILE, 0, 0, dsdx, dtdy);
+
+ return gfx;
+}
+// #endregion
+
/**
* Draw an IA8 texture on a rectangle with a shadow slightly offset to the bottom-right
*
@@ -1115,6 +1157,48 @@ void Interface_UpdateButtonAlphasByStatus(PlayState* play, s16 risingAlpha) {
}
}
+ // #region 2S2H [Dpad]
+ if (gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] == BTN_DISABLED) {
+ if (interfaceCtx->shipInterface.dpad.dRightAlpha != 70) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = 70;
+ }
+ } else {
+ if (interfaceCtx->shipInterface.dpad.dRightAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = risingAlpha;
+ }
+ }
+
+ if (gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] == BTN_DISABLED) {
+ if (interfaceCtx->shipInterface.dpad.dLeftAlpha != 70) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = 70;
+ }
+ } else {
+ if (interfaceCtx->shipInterface.dpad.dLeftAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = risingAlpha;
+ }
+ }
+
+ if (gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] == BTN_DISABLED) {
+ if (interfaceCtx->shipInterface.dpad.dDownAlpha != 70) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = 70;
+ }
+ } else {
+ if (interfaceCtx->shipInterface.dpad.dDownAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = risingAlpha;
+ }
+ }
+
+ if (gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] == BTN_DISABLED) {
+ if (interfaceCtx->shipInterface.dpad.dUpAlpha != 70) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = 70;
+ }
+ } else {
+ if (interfaceCtx->shipInterface.dpad.dUpAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = risingAlpha;
+ }
+ }
+ // #endregion
+
if (gSaveContext.buttonStatus[EQUIP_SLOT_A] == BTN_DISABLED) {
if (interfaceCtx->aAlpha != 70) {
interfaceCtx->aAlpha = 70;
@@ -1158,6 +1242,24 @@ void Interface_UpdateButtonAlphas(PlayState* play, s16 dimmingAlpha, s16 risingA
if ((interfaceCtx->cRightAlpha != 0) && (interfaceCtx->cRightAlpha > dimmingAlpha)) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
}
void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
@@ -1194,6 +1296,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) {
interfaceCtx->healthAlpha = dimmingAlpha;
}
@@ -1252,6 +1372,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) {
interfaceCtx->healthAlpha = dimmingAlpha;
}
@@ -1358,6 +1496,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) {
interfaceCtx->minimapAlpha = dimmingAlpha;
}
@@ -1389,6 +1545,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->healthAlpha != 0) && (interfaceCtx->healthAlpha > dimmingAlpha)) {
interfaceCtx->healthAlpha = dimmingAlpha;
}
@@ -1428,6 +1602,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) {
interfaceCtx->minimapAlpha = dimmingAlpha;
}
@@ -1474,6 +1666,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) {
interfaceCtx->magicAlpha = dimmingAlpha;
}
@@ -1531,6 +1741,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = risingAlpha;
}
+ // #region 2S2H [Dpad]
+ if (interfaceCtx->shipInterface.dpad.dRightAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dLeftAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dDownAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dUpAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = risingAlpha;
+ }
+ // #endregion
+
if (interfaceCtx->magicAlpha != 255) {
interfaceCtx->magicAlpha = risingAlpha;
}
@@ -1566,6 +1794,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = risingAlpha;
}
+ // #region 2S2H [Dpad]
+ if (interfaceCtx->shipInterface.dpad.dRightAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dLeftAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dDownAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dUpAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = risingAlpha;
+ }
+ // #endregion
+
if (interfaceCtx->magicAlpha != 255) {
interfaceCtx->magicAlpha = risingAlpha;
}
@@ -1609,6 +1855,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = risingAlpha;
}
+ // #region 2S2H [Dpad]
+ if (interfaceCtx->shipInterface.dpad.dRightAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dLeftAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dDownAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = risingAlpha;
+ }
+
+ if (interfaceCtx->shipInterface.dpad.dUpAlpha != 255) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = risingAlpha;
+ }
+ // #endregion
+
break;
case HUD_VISIBILITY_B_MINIMAP:
@@ -1628,6 +1892,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->magicAlpha != 0) && (interfaceCtx->magicAlpha > dimmingAlpha)) {
interfaceCtx->magicAlpha = dimmingAlpha;
}
@@ -1667,6 +1949,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if (interfaceCtx->healthAlpha != 255) {
interfaceCtx->healthAlpha = risingAlpha;
}
@@ -1698,6 +1998,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if (interfaceCtx->aAlpha != 255) {
interfaceCtx->aAlpha = risingAlpha;
}
@@ -1733,6 +2051,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) {
interfaceCtx->minimapAlpha = dimmingAlpha;
}
@@ -1772,6 +2108,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if ((interfaceCtx->minimapAlpha != 0) && (interfaceCtx->minimapAlpha > dimmingAlpha)) {
interfaceCtx->minimapAlpha = dimmingAlpha;
}
@@ -1799,6 +2153,24 @@ void Interface_UpdateHudAlphas(PlayState* play, s16 dimmingAlpha) {
interfaceCtx->cRightAlpha = dimmingAlpha;
}
+ // #region 2S2H [Dpad]
+ if ((interfaceCtx->shipInterface.dpad.dRightAlpha != 0) && (interfaceCtx->shipInterface.dpad.dRightAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dRightAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dLeftAlpha != 0) && (interfaceCtx->shipInterface.dpad.dLeftAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dLeftAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dDownAlpha != 0) && (interfaceCtx->shipInterface.dpad.dDownAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dDownAlpha = dimmingAlpha;
+ }
+
+ if ((interfaceCtx->shipInterface.dpad.dUpAlpha != 0) && (interfaceCtx->shipInterface.dpad.dUpAlpha > dimmingAlpha)) {
+ interfaceCtx->shipInterface.dpad.dUpAlpha = dimmingAlpha;
+ }
+ // #endregion
+
if (interfaceCtx->bAlpha != 255) {
interfaceCtx->bAlpha = risingAlpha;
}
@@ -1853,6 +2225,21 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_PICTOGRAPH_BOX) || (msgCtx->msgMode != MSGMODE_NONE)) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+ // #endregion
if (sPictoState == PICTO_BOX_STATE_OFF) {
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
@@ -1900,6 +2287,22 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_MASK_FIERCE_DEITY) ||
+ ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) && (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK))) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ }
+ }
+ // #endregion
} else {
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)) {
@@ -1914,6 +2317,21 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MASK_DEKU) && (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_MASK_ZORA)) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+ // #endregion
}
} else if ((play->sceneId == SCENE_SPOT00) && (gSaveContext.sceneLayer == 6)) {
// Unknown cutscene
@@ -1923,6 +2341,14 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ // #endregion
} else if (CHECK_EVENTINF(EVENTINF_34)) {
// Deku playground minigame
if (player->stateFlags3 & PLAYER_STATE3_1000000) {
@@ -1945,6 +2371,15 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
gSaveContext.buttonStatus[i] = BTN_DISABLED;
}
+
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ // #endregion
}
if (restoreHudVisibility || (gSaveContext.hudVisibility != HUD_VISIBILITY_A_B_MINIMAP)) {
@@ -1970,6 +2405,12 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
}
} else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) &&
(BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_DEKU_NUT)) {
@@ -2030,6 +2471,34 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
restoreHudVisibility = true;
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_MASK_ZORA) {
+ if (Player_GetEnvironmentalHazard(play) == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) {
+ if (!((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK))) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ } else if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ restoreHudVisibility = true;
+ }
+ }
+ // #endregion
if (restoreHudVisibility) {
gSaveContext.hudVisibility = HUD_VISIBILITY_IDLE;
@@ -2055,6 +2524,21 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[i] = BTN_ENABLED;
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_LENS_OF_TRUTH) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ } else {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+ // #endregion
if (gSaveContext.buttonStatus[EQUIP_SLOT_B] != BTN_DISABLED) {
gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_DISABLED;
@@ -2067,6 +2551,12 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
restoreHudVisibility = true;
Interface_SetHudVisibility(HUD_VISIBILITY_ALL);
}
@@ -2301,6 +2791,150 @@ void Interface_UpdateButtonsPart2(PlayState* play) {
}
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ // Individual D button
+ if (!gPlayerFormItemRestrictions[GET_PLAYER_FORM][DPAD_GET_CUR_FORM_BTN_ITEM(j)]) {
+ // Item not usable in current playerForm
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (player->actor.id != ACTOR_PLAYER) {
+ // Currently not playing as the main player
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (player->currentMask == PLAYER_MASK_GIANT) {
+ // Currently wearing Giant's Mask
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_MASK_GIANT) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ } else if (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_MASK_GIANT) {
+ // Giant's Mask is equipped
+ if (play->sceneId != SCENE_INISIE_BS) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ } else if (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_MASK_FIERCE_DEITY) {
+ // Fierce Deity's Mask is equipped
+ 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 (gSaveContext.shipSaveContext.dpad.status[j] != BTN_DISABLED) {
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ restoreHudVisibility = true;
+ }
+ } else if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ } else {
+ // End of special item cases. Apply restrictions to buttons
+ if (interfaceCtx->restrictions.tradeItems != 0) {
+ if (((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) ||
+ ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK)) ||
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_OCARINA_OF_TIME)) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.tradeItems == 0) {
+ if (((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) ||
+ ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK)) ||
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_OCARINA_OF_TIME)) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.masks != 0) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MASK_DEKU) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_MASK_GIANT)) {
+ if (!gSaveContext.shipSaveContext.dpad.status[j]) { // == BTN_ENABLED
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.masks == 0) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MASK_DEKU) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_MASK_GIANT)) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.pictoBox != 0) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_PICTOGRAPH_BOX) {
+ if (!gSaveContext.shipSaveContext.dpad.status[j]) { // == BTN_ENABLED
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ } else if (interfaceCtx->restrictions.pictoBox == 0) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) == ITEM_PICTOGRAPH_BOX) {
+ if (gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED) {
+ restoreHudVisibility = true;
+ }
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+
+ if (interfaceCtx->restrictions.all != 0) {
+ if (!((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) &&
+ !((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK)) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_OCARINA_OF_TIME) &&
+ !((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MASK_DEKU) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_MASK_GIANT)) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_PICTOGRAPH_BOX)) {
+
+ if ((gSaveContext.shipSaveContext.dpad.status[j] == BTN_ENABLED)) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_DISABLED;
+ }
+ }
+ } else if (interfaceCtx->restrictions.all == 0) {
+ if (!((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MOONS_TEAR) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_PENDANT_OF_MEMORIES)) &&
+ !((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_BOTTLE) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_OBABA_DRINK)) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_OCARINA_OF_TIME) &&
+ !((DPAD_GET_CUR_FORM_BTN_ITEM(j) >= ITEM_MASK_DEKU) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) <= ITEM_MASK_GIANT)) &&
+ (DPAD_GET_CUR_FORM_BTN_ITEM(j) != ITEM_PICTOGRAPH_BOX)) {
+
+ if ((gSaveContext.shipSaveContext.dpad.status[j] == BTN_DISABLED)) {
+ restoreHudVisibility = true;
+ gSaveContext.shipSaveContext.dpad.status[j] = BTN_ENABLED;
+ }
+ }
+ }
+ }
+ }
+ // #endregion
}
}
@@ -2339,12 +2973,24 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
}
} 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;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ // #endregion
}
Interface_SetHudVisibility(HUD_VISIBILITY_B_MAGIC);
@@ -2357,6 +3003,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_ENABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_ENABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ // #endregion
if (play->sceneId == SCENE_BOWLING) {
if (CURRENT_DAY == 1) {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOMBCHU;
@@ -2369,6 +3021,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
@@ -2383,6 +3041,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
}
}
@@ -2404,6 +3068,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if (player->stateFlags1 & PLAYER_STATE1_800000) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
@@ -2425,6 +3095,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
} else {
BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_BOW;
}
@@ -2445,6 +3121,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_A_HEARTS_MAGIC_MINIMAP_WITH_OVERWRITE);
if (play->transitionMode != TRANS_MODE_OFF) {
@@ -2461,6 +3143,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
} else if (player->stateFlags1 & PLAYER_STATE1_800000) {
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_MINIMAP);
@@ -2527,6 +3215,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
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)) {
@@ -2534,6 +3228,12 @@ void Interface_UpdateButtonsPart1(PlayState* play) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED;
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_RIGHT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_LEFT] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_DOWN] = BTN_DISABLED;
+ gSaveContext.shipSaveContext.dpad.status[EQUIP_SLOT_D_UP] = BTN_DISABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP);
} else if (play->actorCtx.flags & ACTORCTX_FLAG_PICTO_BOX_ON) {
// Related to pictograph
@@ -2604,6 +3304,12 @@ void Interface_InitMinigame(PlayState* play) {
interfaceCtx->minigameAmmo = 20;
}
+void Interface_Dpad_LoadItemIconImpl(PlayState* play, u8 btn) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+
+ interfaceCtx->iconItemSegment[DPAD_BUTTON(btn) + EQUIP_SLOT_MAX] = gItemIcons[DPAD_GET_CUR_FORM_BTN_ITEM(btn)];
+}
+
void Interface_LoadItemIconImpl(PlayState* play, u8 btn) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
@@ -2614,6 +3320,10 @@ void Interface_LoadItemIconImpl(PlayState* play, u8 btn) {
// #endregion
}
+void Interface_Dpad_LoadItemIcon(PlayState* play, u8 btn) {
+ Interface_Dpad_LoadItemIconImpl(play, btn);
+}
+
void Interface_LoadItemIcon(PlayState* play, u8 btn) {
Interface_LoadItemIconImpl(play, btn);
}
@@ -2645,10 +3355,18 @@ void Interface_UpdateButtonsAlt(PlayState* play, u16 flag) {
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] =
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_D_LEFT] =
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_DOWN] = gSaveContext.buttonStatus[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ // #endregion
Interface_SetHudVisibility(HUD_VISIBILITY_ALL_NO_MINIMAP_W_DISABLED);
} else {
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] =
gSaveContext.buttonStatus[EQUIP_SLOT_C_LEFT] = gSaveContext.buttonStatus[EQUIP_SLOT_B] = BTN_ENABLED;
+ // #region 2S2H [Dpad]
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_RIGHT] = gSaveContext.buttonStatus[EQUIP_SLOT_D_LEFT] =
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_DOWN] = gSaveContext.buttonStatus[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ // #endregion
Interface_UpdateButtonsPart1(play);
}
}
@@ -3050,6 +3768,25 @@ u8 Item_GiveImpl(PlayState* play, u8 item) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_RIGHT);
gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED;
}
+ // #region 2S2H [DPad]
+ else if ((slot + i) == DPAD_SLOT_EQUIP(0, EQUIP_SLOT_D_RIGHT)) {
+ DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_RIGHT) = item;
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_RIGHT);
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_RIGHT] = BTN_ENABLED;
+ } else if ((slot + i) == DPAD_SLOT_EQUIP(0, EQUIP_SLOT_D_LEFT)) {
+ DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_LEFT) = item;
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_LEFT);
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_LEFT] = BTN_ENABLED;
+ } else if ((slot + i) == DPAD_SLOT_EQUIP(0, EQUIP_SLOT_D_DOWN)) {
+ DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_DOWN) = item;
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_DOWN);
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_DOWN] = BTN_ENABLED;
+ } else if ((slot + i) == DPAD_SLOT_EQUIP(0, EQUIP_SLOT_D_UP)) {
+ DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_UP) = item;
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_UP);
+ gSaveContext.buttonStatus[EQUIP_SLOT_D_UP] = BTN_ENABLED;
+ }
+ // #endregion
gSaveContext.save.saveInfo.inventory.items[slot + i] = item;
return ITEM_NONE;
@@ -3075,6 +3812,15 @@ u8 Item_GiveImpl(PlayState* play, u8 item) {
return ITEM_NONE;
}
}
+ // #region 2S2H [Dpad]
+ for (s16 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if (temp == DPAD_GET_CUR_FORM_BTN_ITEM(j)) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(j, item);
+ Interface_Dpad_LoadItemIconImpl(play, j);
+ return ITEM_NONE;
+ }
+ }
+ // #endregion
}
return ITEM_NONE;
}
@@ -3266,6 +4012,14 @@ void Inventory_DeleteItem(s16 item, s16 slot) {
SET_CUR_FORM_BTN_SLOT(btn, SLOT_NONE);
}
}
+ // #region 2S2H [Dpad]
+ for (s16 dpadBtn = EQUIP_SLOT_D_RIGHT; dpadBtn <= EQUIP_SLOT_D_UP; dpadBtn++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(dpadBtn) == item) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(dpadBtn, ITEM_NONE);
+ DPAD_SET_CUR_FORM_BTN_SLOT(dpadBtn, SLOT_NONE);
+ }
+ }
+ // #endregion
}
void Inventory_UnequipItem(s16 item) {
@@ -3277,6 +4031,14 @@ void Inventory_UnequipItem(s16 item) {
SET_CUR_FORM_BTN_SLOT(btn, SLOT_NONE);
}
}
+ // #region 2S2H [Dpad]
+ for (s16 dpadBtn = EQUIP_SLOT_D_RIGHT; dpadBtn <= EQUIP_SLOT_D_UP; dpadBtn++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(dpadBtn) == item) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(dpadBtn, ITEM_NONE);
+ DPAD_SET_CUR_FORM_BTN_SLOT(dpadBtn, SLOT_NONE);
+ }
+ }
+ // #endregion
}
s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem) {
@@ -3293,6 +4055,15 @@ s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem) {
break;
}
}
+ // #region 2S2H [Dpad]
+ for (u8 j = EQUIP_SLOT_D_RIGHT; j <= EQUIP_SLOT_D_UP; j++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(j) == oldItem) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(j, newItem);
+ Interface_Dpad_LoadItemIconImpl(play, j);
+ break;
+ }
+ }
+ // #endregion
return true;
}
}
@@ -3349,6 +4120,22 @@ s32 Inventory_HasItemInBottle(u8 item) {
return false;
}
+// #region 2S2H [Dpad]
+void Inventory_Dpad_UpdateBottleItem(PlayState* play, u8 item, u8 btn) {
+ gSaveContext.save.saveInfo.inventory.items[DPAD_GET_CUR_FORM_BTN_SLOT(btn)] = item;
+ DPAD_SET_CUR_FORM_BTN_ITEM(btn, item);
+
+ Interface_Dpad_LoadItemIconImpl(play, btn);
+
+ play->pauseCtx.cursorItem[PAUSE_ITEM] = item;
+ gSaveContext.shipSaveContext.dpad.status[btn] = BTN_ENABLED;
+
+ if (item == ITEM_HOT_SPRING_WATER) {
+ Interface_StartBottleTimer(60, DPAD_GET_CUR_FORM_BTN_SLOT(btn) - SLOT_BOTTLE_1);
+ }
+}
+// #endregion
+
void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn) {
gSaveContext.save.saveInfo.inventory.items[GET_CUR_FORM_BTN_SLOT(btn)] = item;
SET_CUR_FORM_BTN_ITEM(btn, item);
@@ -3379,6 +4166,19 @@ s32 Inventory_ConsumeFairy(PlayState* play) {
break;
}
}
+ // #region 2S2H [Dpad]
+ if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
+ for (u8 dpadBtn = EQUIP_SLOT_C_LEFT; dpadBtn <= EQUIP_SLOT_C_RIGHT; dpadBtn++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(dpadBtn) == ITEM_FAIRY) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(dpadBtn, ITEM_BOTTLE);
+ Interface_Dpad_LoadItemIconImpl(play, dpadBtn);
+ bottleSlot = DPAD_GET_CUR_FORM_BTN_SLOT(dpadBtn);
+ i = 0;
+ break;
+ }
+ }
+ }
+ // #endregion
gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] = ITEM_BOTTLE;
return true;
}
@@ -3401,6 +4201,14 @@ void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item) {
Interface_LoadItemIconImpl(play, btn);
}
}
+ // #region 2S2H [Dpad]
+ for (s16 dpadBtn = EQUIP_SLOT_D_RIGHT; dpadBtn <= EQUIP_SLOT_D_UP; dpadBtn++) {
+ if (DPAD_GET_CUR_FORM_BTN_SLOT(dpadBtn) == slot) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(dpadBtn, item);
+ Interface_Dpad_LoadItemIconImpl(play, dpadBtn);
+ }
+ }
+ // #endregion 2S2H
}
void Interface_MemSetZeroed(u32* buf, s32 count) {
@@ -3935,7 +4743,14 @@ void Magic_Update(PlayState* play) {
(Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) ||
((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS_OF_TRUTH) &&
(BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) != ITEM_LENS_OF_TRUTH) &&
- (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS_OF_TRUTH)) ||
+ (BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_RIGHT) != ITEM_LENS_OF_TRUTH) &&
+ // #region 2S2H [Dpad]
+ (!CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0) ||
+ (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_RIGHT) != ITEM_LENS_OF_TRUTH) &&
+ (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_LEFT) != ITEM_LENS_OF_TRUTH) &&
+ (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_DOWN) != ITEM_LENS_OF_TRUTH) &&
+ (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_UP) != ITEM_LENS_OF_TRUTH))) ||
+ // #endregion
!play->actorCtx.lensActive) {
// Deactivate Lens of Truth and set magic state to idle
play->actorCtx.lensActive = false;
@@ -4260,6 +5075,16 @@ void Interface_DrawItemButtons(PlayState* play) {
gDPPipeSync(OVERLAY_DISP++);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ // #region 2S2H [Dpad]
+ if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
+ s16 dpadAlpha = MAX(MAX(MAX(interfaceCtx->shipInterface.dpad.dRightAlpha, interfaceCtx->shipInterface.dpad.dLeftAlpha), interfaceCtx->shipInterface.dpad.dDownAlpha),
+ interfaceCtx->shipInterface.dpad.dUpAlpha);
+ HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_D_PAD);
+ OVERLAY_DISP = Gfx_DrawTexRectIA16_DropShadow(OVERLAY_DISP, gDPadTex, 32, 32, 271, 55, 32, 32, 1024, 1024, 255, 255, 255, dpadAlpha);
+ gDPPipeSync(OVERLAY_DISP++);
+ }
+ // #endregion
+
// B Button Color & Texture
HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_B);
OVERLAY_DISP = Gfx_DrawTexRectIA8_DropShadow(
@@ -4418,6 +5243,139 @@ void Interface_DrawItemButtons(PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
+// #region 2S2H [Dpad]
+s16 sDpadItemIconDD[] = {
+ 1024, // EQUIP_SLOT_D_RIGHT
+ 1024, // EQUIP_SLOT_D_LEFT
+ 1024, // EQUIP_SLOT_D_DOWN
+ 1024, // EQUIP_SLOT_D_UP
+};
+s16 sDpadItemIconLeft[] = {
+ 295, // EQUIP_SLOT_D_RIGHT
+ 263, // EQUIP_SLOT_D_LEFT
+ 279, // EQUIP_SLOT_D_DOWN
+ 279, // EQUIP_SLOT_D_UP
+};
+s16 sDpadItemIconTop[] = {
+ 63, // EQUIP_SLOT_D_RIGHT
+ 63, // EQUIP_SLOT_D_LEFT
+ 79, // EQUIP_SLOT_D_DOWN
+ 47, // EQUIP_SLOT_D_UP
+};
+
+void Interface_Dpad_DrawItemIconTexture(PlayState* play, TexturePtr texture, s16 button) {
+ static s16 sDpadItemIconWidth[] = { 16, 16, 16, 16 };
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPLoadTextureBlock(OVERLAY_DISP++, texture, 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);
+
+ HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_D_PAD);
+ if (HudEditor_ShouldOverrideDraw()) {
+ if (CVarGetInteger(hudEditorElements[hudEditorActiveElement].modeCvar, HUD_EDITOR_ELEMENT_MODE_VANILLA) == HUD_EDITOR_ELEMENT_MODE_HIDDEN) {
+ hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
+ } else {
+ s16 rectLeft = sDpadItemIconLeft[button];
+ s16 rectTop = sDpadItemIconTop[button];
+ s16 rectWidth = sDpadItemIconWidth[button];
+ s16 rectHeight = sDpadItemIconWidth[button];
+ s16 dsdx = sDpadItemIconDD[button];
+ s16 dtdy = sDpadItemIconDD[button];
+
+ HudEditor_ModifyDrawValues(&rectLeft, &rectTop, &rectWidth, &rectHeight, &dsdx, &dtdy);
+
+ hudEditorActiveElement = HUD_EDITOR_ELEMENT_NONE;
+
+ gSPWideTextureRectangle(OVERLAY_DISP++, rectLeft << 2, rectTop << 2,
+ (rectLeft + rectWidth) << 2, (rectTop + rectHeight) << 2,
+ G_TX_RENDERTILE, 0, 0, dsdx << 1, dtdy << 1);
+ }
+ } else {
+ gSPTextureRectangle(OVERLAY_DISP++, sDpadItemIconLeft[button] << 2, sDpadItemIconTop[button] << 2,
+ (sDpadItemIconLeft[button] + sDpadItemIconWidth[button]) << 2, (sDpadItemIconTop[button] + sDpadItemIconWidth[button]) << 2,
+ G_TX_RENDERTILE, 0, 0, sDpadItemIconDD[button] << 1, sDpadItemIconDD[button] << 1);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
+s16 sDpadItemAmmoX[] = {
+ 295, // EQUIP_SLOT_D_RIGHT
+ 263, // EQUIP_SLOT_D_LEFT
+ 279, // EQUIP_SLOT_D_DOWN
+ 279, // EQUIP_SLOT_D_UP
+};
+
+s16 sDpadItemAmmoY[] = {
+ 63 + 11, // EQUIP_SLOT_D_RIGHT
+ 63 + 11, // EQUIP_SLOT_D_LEFT
+ 79 + 11, // EQUIP_SLOT_D_DOWN
+ 47 + 11, // EQUIP_SLOT_D_UP
+};
+
+void Interface_Dpad_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
+ u8 i;
+ u16 ammo;
+ OPEN_DISPS(play->state.gfxCtx);
+
+ i = ((void)0, DPAD_GET_CUR_FORM_BTN_ITEM(button));
+
+ if ((i == ITEM_DEKU_STICK) || (i == ITEM_DEKU_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
+ ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) || (i == ITEM_BOMBCHU) || (i == ITEM_POWDER_KEG) ||
+ (i == ITEM_MAGIC_BEANS) || (i == ITEM_PICTOGRAPH_BOX)) {
+
+ if ((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) {
+ i = ITEM_BOW;
+ }
+
+ ammo = AMMO(i);
+
+ if (i == ITEM_PICTOGRAPH_BOX) {
+ if (!CHECK_QUEST_ITEM(QUEST_PICTOGRAPH)) {
+ ammo = 0;
+ } else {
+ ammo = 1;
+ }
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ if (((i == ITEM_BOW) && (AMMO(i) == CUR_CAPACITY(UPG_QUIVER))) ||
+ ((i == ITEM_BOMB) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
+ ((i == ITEM_DEKU_STICK) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_STICKS))) ||
+ ((i == ITEM_DEKU_NUT) && (AMMO(i) == CUR_CAPACITY(UPG_DEKU_NUTS))) ||
+ ((i == ITEM_BOMBCHU) && (AMMO(i) == CUR_CAPACITY(UPG_BOMB_BAG))) ||
+ ((i == ITEM_POWDER_KEG) && (ammo == 1)) || ((i == ITEM_PICTOGRAPH_BOX) && (ammo == 1)) ||
+ ((i == ITEM_MAGIC_BEANS) && (ammo == 20))) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, alpha);
+ }
+
+ if ((u32)ammo == 0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, alpha);
+ }
+
+ for (i = 0; ammo >= 10; i++) {
+ ammo -= 10;
+ }
+
+ // Draw upper digit (tens)
+ if ((u32)i != 0) {
+ HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_D_PAD);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gAmmoDigitTextures[i], 8, 8,
+ sDpadItemAmmoX[button], sDpadItemAmmoY[button], 8, 8, 1 << 10, 1 << 10);
+ }
+
+ // Draw lower digit (ones)
+ HudEditor_SetActiveElement(HUD_EDITOR_ELEMENT_D_PAD);
+ OVERLAY_DISP = Gfx_DrawTexRectIA8(OVERLAY_DISP, gAmmoDigitTextures[ammo], 8, 8,
+ sDpadItemAmmoX[button] + 6, sDpadItemAmmoY[button], 8, 8, 1 << 10, 1 << 10);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+// #endregion
+
void Interface_DrawItemIconTexture(PlayState* play, TexturePtr texture, s16 button) {
static s16 D_801BFAFC[] = { 30, 24, 24, 24 };
@@ -4714,6 +5672,67 @@ void Interface_DrawCButtonIcons(PlayState* play) {
CLOSE_DISPS(play->state.gfxCtx);
}
+void Interface_DrawDButtonIcons(PlayState* play) {
+ InterfaceContext* interfaceCtx = &play->interfaceCtx;
+ DpadInterface* dpadInterfaceCtx = &play->interfaceCtx.shipInterface.dpad;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // D-Right Button Icon & Ammo Count
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_RIGHT) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, dpadInterfaceCtx->dRightAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_Dpad_DrawItemIconTexture(play, interfaceCtx->iconItemSegment[EQUIP_SLOT_D_RIGHT + EQUIP_SLOT_MAX], EQUIP_SLOT_D_RIGHT);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_Dpad_DrawAmmoCount(play, EQUIP_SLOT_D_RIGHT, dpadInterfaceCtx->dRightAlpha);
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // D-Left Button Icon & Ammo Count
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_LEFT) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, dpadInterfaceCtx->dLeftAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_Dpad_DrawItemIconTexture(play, interfaceCtx->iconItemSegment[EQUIP_SLOT_D_LEFT + EQUIP_SLOT_MAX], EQUIP_SLOT_D_LEFT);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_Dpad_DrawAmmoCount(play, EQUIP_SLOT_D_LEFT, dpadInterfaceCtx->dLeftAlpha);
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // D-Down Button Icon & Ammo Count
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_DOWN) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, dpadInterfaceCtx->dDownAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_Dpad_DrawItemIconTexture(play, interfaceCtx->iconItemSegment[EQUIP_SLOT_D_DOWN + EQUIP_SLOT_MAX], EQUIP_SLOT_D_DOWN);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_Dpad_DrawAmmoCount(play, EQUIP_SLOT_D_DOWN, dpadInterfaceCtx->dDownAlpha);
+ }
+
+ gDPPipeSync(OVERLAY_DISP++);
+
+ // D-Up Button Icon & Ammo Count
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_UP) < ITEM_F0) {
+ gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, dpadInterfaceCtx->dUpAlpha);
+ gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATEIA_PRIM, G_CC_MODULATEIA_PRIM);
+ Interface_Dpad_DrawItemIconTexture(play, interfaceCtx->iconItemSegment[EQUIP_SLOT_D_UP + EQUIP_SLOT_MAX], EQUIP_SLOT_D_UP);
+ gDPPipeSync(OVERLAY_DISP++);
+ gDPSetCombineLERP(OVERLAY_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0,
+ PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0);
+ Interface_Dpad_DrawAmmoCount(play, EQUIP_SLOT_D_UP, dpadInterfaceCtx->dUpAlpha);
+ }
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
+
void Interface_DrawAButton(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
s16 aAlpha;
@@ -7114,6 +8133,12 @@ void Interface_Draw(PlayState* play) {
}
Interface_DrawCButtonIcons(play);
+ // #region 2S2H [Dpad]
+ if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
+ Interface_DrawDButtonIcons(play);
+ }
+ // #endregion
+
Interface_DrawAButton(play);
Interface_DrawPauseMenuEquippingIcons(play);
@@ -7840,11 +8865,13 @@ void Interface_Init(PlayState* play) {
Interface_NewDay(play, CURRENT_DAY);
- interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.tha, sizeof(char*) * EQUIP_SLOT_MAX);
- for (size_t id = 0; id < EQUIP_SLOT_MAX; id++) {
+ // #region 2S2H [Dpad] Increase Size of iconItemSegment for dpad
+ interfaceCtx->iconItemSegment = THA_AllocTailAlign16(&play->state.tha, sizeof(char*) * (EQUIP_SLOT_MAX + EQUIP_SLOT_D_MAX));
+ for (size_t id = 0; id < (EQUIP_SLOT_MAX + EQUIP_SLOT_D_MAX); id++) {
interfaceCtx->iconItemSegment[id] = gEmptyTexture;
}
- // #endregion
+ // #endregion [Dpad]
+ // #endregion [Port]
if (CUR_FORM_EQUIP(EQUIP_SLOT_B) < ITEM_F0) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_B);
@@ -7864,6 +8891,26 @@ void Interface_Init(PlayState* play) {
Interface_LoadItemIconImpl(play, EQUIP_SLOT_C_RIGHT);
}
+ // #region 2S2H [Dpad]
+ if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_RIGHT) < ITEM_F0) {
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_RIGHT);
+ }
+
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_LEFT) < ITEM_F0) {
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_LEFT);
+ }
+
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_DOWN) < ITEM_F0) {
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_DOWN);
+ }
+
+ if (DPAD_BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_D_UP) < ITEM_F0) {
+ Interface_Dpad_LoadItemIconImpl(play, EQUIP_SLOT_D_UP);
+ }
+ }
+ // #endregion
+
if (((gSaveContext.timerStates[TIMER_ID_MINIGAME_2] == TIMER_STATE_COUNTING) ||
(gSaveContext.timerStates[TIMER_ID_GORON_RACE_UNUSED] == TIMER_STATE_COUNTING)) &&
((gSaveContext.respawnFlag == -1) || (gSaveContext.respawnFlag == 1)) &&
diff --git a/mm/src/code/z_player_lib.c b/mm/src/code/z_player_lib.c
index f90867392..91602bf64 100644
--- a/mm/src/code/z_player_lib.c
+++ b/mm/src/code/z_player_lib.c
@@ -574,6 +574,16 @@ s32 func_801235DC(PlayState* play, f32 arg1, s16 arg2) {
return false;
}
+// #region 2S2H [Dpad]
+ItemId Player_Dpad_GetItemOnButton(PlayState* play, Player* player, DpadEquipSlot slot) {
+ if (slot >= EQUIP_SLOT_D_MAX) {
+ return ITEM_NONE;
+ }
+
+ return DPAD_BTN_ITEM(slot);
+}
+// #endregion
+
ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) {
if (slot >= EQUIP_SLOT_A) {
return ITEM_NONE;
@@ -614,6 +624,15 @@ ItemId Player_GetItemOnButton(PlayState* play, Player* player, EquipSlot slot) {
return C_BTN_ITEM(EQUIP_SLOT_C_RIGHT);
}
+// #region 2S2H [Dpad]
+u16 sDItemButtons[] = {
+ BTN_DRIGHT,
+ BTN_DLEFT,
+ BTN_DDOWN,
+ BTN_DUP,
+};
+// #endregion
+
u16 sCItemButtons[] = {
BTN_CLEFT,
BTN_CDOWN,
@@ -657,6 +676,29 @@ PlayerItemAction func_80123810(PlayState* play) {
}
}
}
+ // #region 2S2H [Dpad]
+ if (CVarGetInteger("gEnhancements.Dpad.DpadEquips", 0)) {
+ for (i = 0; i < ARRAY_COUNT(sDItemButtons); i++) {
+ if (CHECK_BTN_ALL(CONTROLLER1(&play->state)->press.button, sDItemButtons[i])) {
+ itemId = Player_Dpad_GetItemOnButton(play, player, i);
+
+ play->interfaceCtx.unk_222 = 0;
+ play->interfaceCtx.unk_224 = 0;
+ Interface_SetHudVisibility(play->msgCtx.hudVisibility);
+
+ if ((itemId >= ITEM_FD) || ((itemAction = play->unk_18794(play, player, itemId)) <= PLAYER_IA_MINUS1)) {
+ Audio_PlaySfx(NA_SE_SY_ERROR);
+ return PLAYER_IA_MINUS1;
+ } else {
+ s32 pad;
+
+ player->heldItemButton = DPAD_TO_HELD_ITEM(i);
+ return itemAction;
+ }
+ }
+ }
+ }
+ // #endregion
return PLAYER_IA_NONE;
}
@@ -1316,7 +1358,13 @@ void Player_SetEquipmentData(PlayState* play, Player* player) {
}
void Player_UpdateBottleHeld(PlayState* play, Player* player, ItemId itemId, PlayerItemAction itemAction) {
- Inventory_UpdateBottleItem(play, itemId, player->heldItemButton);
+ // #region 2S2H [Dpad]
+ if (IS_HELD_DPAD(player->heldItemButton)) {
+ Inventory_Dpad_UpdateBottleItem(play, itemId, HELD_ITEM_TO_DPAD(player->heldItemButton));
+ } else {
+ Inventory_UpdateBottleItem(play, itemId, player->heldItemButton);
+ }
+ // #endregion
if (itemId != ITEM_BOTTLE) {
player->heldItemId = itemId;
diff --git a/mm/src/code/z_sram_NES.c b/mm/src/code/z_sram_NES.c
index 5bbef1343..65f64dfcb 100644
--- a/mm/src/code/z_sram_NES.c
+++ b/mm/src/code/z_sram_NES.c
@@ -555,6 +555,14 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Interface_LoadItemIconImpl(play, j);
}
}
+ // #region 2S2H [Dpad]
+ for (s32 k = EQUIP_SLOT_D_RIGHT; k <= EQUIP_SLOT_D_UP; k++) {
+ if (DPAD_GET_CUR_FORM_BTN_ITEM(k) == gSaveContext.save.saveInfo.inventory.items[i]) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(k, ITEM_BOTTLE);
+ Interface_Dpad_LoadItemIconImpl(play, k);
+ }
+ }
+ // #endregion
gSaveContext.save.saveInfo.inventory.items[i] = ITEM_BOTTLE;
}
}
@@ -623,6 +631,14 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Interface_LoadItemIconImpl(play, j);
}
}
+ // #region 2S2H [Dpad]
+ for (s32 k = EQUIP_SLOT_D_RIGHT; k <= EQUIP_SLOT_D_UP; k++) {
+ if ((DPAD_GET_CUR_FORM_BTN_ITEM(k) >= ITEM_MOONS_TEAR) && (DPAD_GET_CUR_FORM_BTN_ITEM(k) <= ITEM_PENDANT_OF_MEMORIES)) {
+ DPAD_SET_CUR_FORM_BTN_ITEM(k, ITEM_NONE);
+ Interface_Dpad_LoadItemIconImpl(play, k);
+ }
+ }
+ // #endregion
gSaveContext.save.saveInfo.skullTokenCount &= ~0xFFFF0000;
gSaveContext.save.saveInfo.skullTokenCount &= ~0x0000FFFF;
@@ -813,6 +829,23 @@ ItemEquips sSaveDefaultItemEquips = {
0x11,
};
+// #region 2S2H
+DpadSaveInfo sSaveDefaultDpadItemEquips = {
+ {
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE },
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE },
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE },
+ { ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE },
+ },
+ {
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE },
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE },
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE },
+ { SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE },
+ },
+};
+// #endregion
+
Inventory sSaveDefaultInventory = {
// items
{
@@ -937,6 +970,9 @@ void Sram_InitNewSave(void) {
memcpy(&gSaveContext.save.saveInfo.playerData, &sSaveDefaultPlayerData, sizeof(SavePlayerData));
memcpy(&gSaveContext.save.saveInfo.equips, &sSaveDefaultItemEquips, sizeof(ItemEquips));
+ // #region 2S2H [Dpad]
+ memcpy(&gSaveContext.save.shipSaveInfo.dpadEquips, &sSaveDefaultDpadItemEquips, sizeof(DpadSaveInfo));
+ // #endregion
memcpy(&gSaveContext.save.saveInfo.inventory, &sSaveDefaultInventory, sizeof(Inventory));
memcpy(&gSaveContext.save.saveInfo.checksum, &sSaveDefaultChecksum,
sizeof(gSaveContext.save.saveInfo.checksum));
@@ -1142,6 +1178,9 @@ void Sram_InitDebugSave(void) {
memcpy(&gSaveContext.save.saveInfo.playerData, &sSaveDebugPlayerData, sizeof(SavePlayerData));
memcpy(&gSaveContext.save.saveInfo.equips, &sSaveDebugItemEquips, sizeof(ItemEquips));
+ // #region 2S2H [Dpad]
+ memcpy(&gSaveContext.save.shipSaveInfo.dpadEquips, &sSaveDefaultDpadItemEquips, sizeof(DpadSaveInfo));
+ // #endregion
memcpy(&gSaveContext.save.saveInfo.inventory, &sSaveDebugInventory, sizeof(Inventory));
memcpy(&gSaveContext.save.saveInfo.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.saveInfo.checksum));