From 8b78cb832abdc8e764122f5de7c348f190cf20f1 Mon Sep 17 00:00:00 2001 From: inspectredc <78732756+inspectredc@users.noreply.github.com> Date: Mon, 6 Nov 2023 04:33:51 +0000 Subject: [PATCH] items tied to items rather than slots + dpad items now work (#2884) --- .../actors/ovl_En_Partner/z_en_partner.c | 82 +++++++++---------- 1 file changed, 40 insertions(+), 42 deletions(-) diff --git a/soh/src/overlays/actors/ovl_En_Partner/z_en_partner.c b/soh/src/overlays/actors/ovl_En_Partner/z_en_partner.c index bfd4dfbbe..8780ab10c 100644 --- a/soh/src/overlays/actors/ovl_En_Partner/z_en_partner.c +++ b/soh/src/overlays/actors/ovl_En_Partner/z_en_partner.c @@ -510,58 +510,60 @@ void UseItem(uint8_t usedItem, u8 started, Actor* thisx, PlayState* play) { if (this->usedItem != 0xFF && this->itemTimer <= 0) { switch (usedItem) { - case SLOT_STICK: + case ITEM_STICK: UseDekuStick(this, play, started); break; - case SLOT_BOMB: + case ITEM_BOMB: UseBombs(this, play, started); break; - case SLOT_BOMBCHU: + case ITEM_BOMBCHU: UseBombchus(this, play, started); break; - case SLOT_NUT: + case ITEM_NUT: UseNuts(this, play, started); break; - case SLOT_BOW: + case ITEM_BOW: UseBow(this, play, started, 0); break; - case SLOT_ARROW_FIRE: + case ITEM_ARROW_FIRE: UseBow(this, play, started, 1); break; - case SLOT_ARROW_ICE: + case ITEM_ARROW_ICE: UseBow(this, play, started, 2); break; - case SLOT_ARROW_LIGHT: + case ITEM_ARROW_LIGHT: UseBow(this, play, started, 3); break; - case SLOT_SLINGSHOT: + case ITEM_SLINGSHOT: UseSlingshot(this, play, started); break; - case SLOT_OCARINA: + case ITEM_OCARINA_FAIRY: + case ITEM_OCARINA_TIME: UseOcarina(this, play, started); break; - case SLOT_HOOKSHOT: + case ITEM_HOOKSHOT: + case ITEM_LONGSHOT: UseHookshot(this, play, started); break; - case SLOT_DINS_FIRE: + case ITEM_DINS_FIRE: UseSpell(this, play, started, 1); break; - case SLOT_NAYRUS_LOVE: + case ITEM_NAYRUS_LOVE: UseSpell(this, play, started, 2); break; - case SLOT_FARORES_WIND: + case ITEM_FARORES_WIND: UseSpell(this, play, started, 3); break; - case SLOT_HAMMER: + case ITEM_HAMMER: UseHammer(this, play, started); break; - case SLOT_BOOMERANG: + case ITEM_BOOMERANG: UseBoomerang(this, play, started); break; - case SLOT_LENS: + case ITEM_LENS: UseLens(this, play, started); break; - case SLOT_BEAN: + case ITEM_BEAN: UseBeans(this, play, started); break; } @@ -685,39 +687,35 @@ void EnPartner_Update(Actor* thisx, PlayState* play) { uint8_t released = 0; uint8_t current = 0; + uint16_t partnerButtons[7] = { BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT}; + uint8_t buttonMax = 3; + if (CVarGetInteger("gDpadEquips", 0) != 0) { + buttonMax = ARRAY_COUNT(gSaveContext.equips.cButtonSlots); + } + if (this->usedItem == 0xFF && this->itemTimer <= 0) { - if (CHECK_BTN_ALL(sControlInput.press.button, BTN_CLEFT)) { - this->usedItem = gSaveContext.equips.cButtonSlots[0]; - this->usedItemButton = 0; - pressed = 1; - } else if (CHECK_BTN_ALL(sControlInput.press.button, BTN_CDOWN)) { - this->usedItem = gSaveContext.equips.cButtonSlots[1]; - this->usedItemButton = 1; - pressed = 1; - } else if (CHECK_BTN_ALL(sControlInput.press.button, BTN_CRIGHT)) { - this->usedItem = gSaveContext.equips.cButtonSlots[2]; - this->usedItemButton = 2; - pressed = 1; + for (uint8_t i = 0; i < buttonMax; i++) { + if (CHECK_BTN_ALL(sControlInput.press.button, partnerButtons[i])) { + this->usedItem = gSaveContext.equips.buttonItems[i+1]; + this->usedItemButton = i; + pressed = 1; + } } } if (this->usedItem != 0xFF) { - if (CHECK_BTN_ALL(sControlInput.cur.button, BTN_CLEFT) && this->usedItemButton == 0) { - current = 1; - } else if (CHECK_BTN_ALL(sControlInput.cur.button, BTN_CDOWN) && this->usedItemButton == 1) { - current = 1; - } else if (CHECK_BTN_ALL(sControlInput.cur.button, BTN_CRIGHT) && this->usedItemButton == 2) { - current = 1; + for (uint8_t i = 0; i < buttonMax; i++) { + if (CHECK_BTN_ALL(sControlInput.cur.button, partnerButtons[i]) && this->usedItemButton == i) { + current = 1; + } } } if (this->usedItem != 0xFF) { - if (CHECK_BTN_ALL(sControlInput.rel.button, BTN_CLEFT) && this->usedItemButton == 0) { - released = 1; - } else if (CHECK_BTN_ALL(sControlInput.rel.button, BTN_CDOWN) && this->usedItemButton == 1) { - released = 1; - } else if (CHECK_BTN_ALL(sControlInput.rel.button, BTN_CRIGHT) && this->usedItemButton == 2) { - released = 1; + for (uint8_t i = 0; i < buttonMax; i++) { + if (CHECK_BTN_ALL(sControlInput.rel.button, partnerButtons[i]) && this->usedItemButton == i) { + released = 1; + } } }