summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbriaguya <70942617+briaguya-ai@users.noreply.github.com>2025-03-24 03:46:22 -0400
committerGitHub <noreply@github.com>2025-03-24 08:46:22 +0100
commitedd8561ddc3ffe155e6c63e37599274e977e70da (patch)
tree84152b61870d40fd59cc4293669f92b1dff3ad49
parentc7e3ef9e4dd86ea38a655eaecce850db8d7f8a03 (diff)
assignable tunics/boots - dont throw items (#5045)
* don't throw items when using assigned tunics/boots * didn't actually need that * simplify logic so we don't need to check for holding items * just use a vb should * fix comment
-rw-r--r--soh/soh/Enhancements/AssignableTunicsAndBoots.cpp22
-rw-r--r--soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h9
-rw-r--r--soh/src/overlays/actors/ovl_player_actor/z_player.c6
3 files changed, 35 insertions, 2 deletions
diff --git a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp
index 3a52312c9..3b4b11686 100644
--- a/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp
+++ b/soh/soh/Enhancements/AssignableTunicsAndBoots.cpp
@@ -87,6 +87,28 @@ void RegisterAssignableTunicsBoots() {
}
});
+ // don't throw items when the pressed button is a tunic or boots
+ COND_VB_SHOULD(VB_THROW_OR_PUT_DOWN_HELD_ITEM, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, {
+ // if the vanilla condition doesn't want us to throw/put down the item, early return
+ if (!*should) {
+ return;
+ }
+
+ Input* input = va_arg(args, Input*);
+
+ s32 item = ITEM_NONE;
+ for (s32 i = 0; i < ARRAY_COUNT(sItemButtons); i++) {
+ if (CHECK_BTN_ALL(input->press.button, sItemButtons[i])) {
+ item = Player_GetItemOnButton(gPlayState, i);
+ break;
+ }
+ }
+
+ if (item >= ITEM_TUNIC_KOKIRI && item <= ITEM_BOOTS_HOVER) {
+ *should = false;
+ }
+ });
+
// do something when the player presses a button to use the tunics/boots
COND_VB_SHOULD(VB_EXECUTE_PLAYER_ACTION_FUNC, CVAR_TUNICBOOTS_VALUE != CVAR_TUNICBOOTS_DEFAULT, {
// if the vanilla condition doesn't want us to run the actionFunc, don't do any of this
diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
index d6154347c..5d25bd12d 100644
--- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
+++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h
@@ -1796,6 +1796,15 @@ typedef enum {
// #### `result`
// ```c
+ // (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) &&
+ // CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)
+ // ```
+ // #### `args`
+ // - `*Input`
+ VB_THROW_OR_PUT_DOWN_HELD_ITEM,
+
+ // #### `result`
+ // ```c
// true
// ```
// #### `args`
diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c
index 1d9c89212..8acdee4a4 100644
--- a/soh/src/overlays/actors/ovl_player_actor/z_player.c
+++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c
@@ -7436,8 +7436,10 @@ s32 Player_ActionHandler_9(Player* this, PlayState* play) {
if (CVarGetInteger(CVAR_ENHANCEMENT("DpadEquips"), 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
- if ((this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) &&
- CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) {
+ if (GameInteractor_Should(VB_THROW_OR_PUT_DOWN_HELD_ITEM, (
+ (this->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR) && (this->heldActor != NULL) &&
+ CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)
+ ), sControlInput)) {
if (!func_80835644(play, this, this->heldActor)) {
if (!func_8083EAF0(this, this->heldActor)) {
Player_SetupAction(play, this, Player_Action_808464B0, 1);