From f71159a12f79518f9e1f15ebcc4a1c794e971171 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Wed, 1 Jan 2025 19:56:14 -0500 Subject: [PATCH 01/10] Add Gibdo Trade Sequence Options --- build/x64/mm/GibdoTradeSequenceOptions.cpp | 37 +++++++++++++++++++ mm/2s2h/BenGui/BenMenu.cpp | 12 ++++++ mm/2s2h/BenGui/BenMenu.h | 6 +++ mm/2s2h/Enhancements/Enhancements.h | 6 +++ mm/2s2h/GameInteractor/GameInteractor.h | 4 ++ .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 37 ++++++++++++++----- 6 files changed, 92 insertions(+), 10 deletions(-) create mode 100644 build/x64/mm/GibdoTradeSequenceOptions.cpp diff --git a/build/x64/mm/GibdoTradeSequenceOptions.cpp b/build/x64/mm/GibdoTradeSequenceOptions.cpp new file mode 100644 index 0000000000..3c455e4bbd --- /dev/null +++ b/build/x64/mm/GibdoTradeSequenceOptions.cpp @@ -0,0 +1,37 @@ +#include +#include "2s2h/GameInteractor/GameInteractor.h" +#include "2s2h/Enhancements/Enhancements.h" +#include "2s2h/ShipInit.hpp" +#include + +#define CVAR_NAME "gEnhancements.Minigames.GibdoTradeSequence" +#define CVAR CVarGetInteger(CVAR_NAME, GIBDO_TRADE_SEQUENCE_VANILLA) + +extern "C" { + #include "functions.h" + #include "variables.h" +} + +void RegisterGibdoTradeSequenceOptions() +{ + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { + ItemId requestedItemId = va_arg(args, ItemId); + if (AMMO(requestedItemId) >= 1) { + *should = true; + } + }); + + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, CVAR == GIBDO_TRADE_SEQUENCE_MM3D, { + PlayerItemAction requestedItemAction = va_arg(args, PlayerItemAction); + PlayerItemAction presentedItemAction = va_arg(args, PlayerItemAction); + + *should = (requestedItemAction == PLAYER_IA_BOTTLE_POTION_BLUE) && + (presentedItemAction == PLAYER_IA_BOTTLE_POTION_RED); + }); + + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { *should = false; }); + + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, CVAR == GIBDO_TRADE_SEQUENCE_NO_TRADE, { *should = false; }); +} + +static RegisterShipInitFunc initFunc(RegisterGibdoTradeSequenceOptions, { CVAR_NAME }); \ No newline at end of file diff --git a/mm/2s2h/BenGui/BenMenu.cpp b/mm/2s2h/BenGui/BenMenu.cpp index 733b9d1a71..ae013c384f 100644 --- a/mm/2s2h/BenGui/BenMenu.cpp +++ b/mm/2s2h/BenGui/BenMenu.cpp @@ -1166,6 +1166,18 @@ void BenMenu::AddEnhancements() { "- Always: Always show the search balls.") .DefaultIndex(DekuGuardSearchBallsOptions::DEKU_GUARD_SEARCH_BALLS_NIGHT_ONLY) .ComboMap(dekuGuardSearchBallsOptions)); + AddWidget(path, "Gibdo Trade Sequence Options", WIDGET_CVAR_COMBOBOX) + .CVar("gEnhancements.Minigames.GibdoTradeSequence") + .Options( + ComboboxOptions() + .Tooltip( + "Changes the way the Gibdo Trade Sequence works\n" + "-Vanilla: Works normally\n" + "-MM3D: Gibdos will only take one quantity of the item they request, as they do in MM3D. The Gibdo " + "requesting a blue potion will also accept a red potion.\n" + "-No trade: Gibdos will vanish without taking items") + .DefaultIndex(GibdoTradeSequenceOptions::GIBDO_TRADE_SEQUENCE_VANILLA) + .ComboMap(gibdoTradeSequenceOptions)); path.column = 2; AddWidget(path, "Damage Multiplier", WIDGET_CVAR_COMBOBOX) diff --git a/mm/2s2h/BenGui/BenMenu.h b/mm/2s2h/BenGui/BenMenu.h index 551fe915de..7927b225c3 100644 --- a/mm/2s2h/BenGui/BenMenu.h +++ b/mm/2s2h/BenGui/BenMenu.h @@ -39,6 +39,12 @@ static const std::unordered_map cremiaRewardOptions = { { CREMIA_REWARD_ALWAYS_RUPEE, "Rupee" }, }; +static const std::unordered_map gibdoTradeSequenceOptions = { + { GIBDO_TRADE_SEQUENCE_VANILLA, "Vanilla" }, + { GIBDO_TRADE_SEQUENCE_MM3D, "MM3D" }, + { GIBDO_TRADE_SEQUENCE_NO_TRADE, "No trade" }, +}; + static const std::unordered_map clockTypeOptions = { { CLOCK_TYPE_ORIGINAL, "Original" }, { CLOCK_TYPE_3DS, "MM3D style" }, diff --git a/mm/2s2h/Enhancements/Enhancements.h b/mm/2s2h/Enhancements/Enhancements.h index 2ee05bba1c..cfda54a430 100644 --- a/mm/2s2h/Enhancements/Enhancements.h +++ b/mm/2s2h/Enhancements/Enhancements.h @@ -27,6 +27,12 @@ enum CremiaRewardsOptions { CREMIA_REWARD_ALWAYS_RUPEE, }; +enum GibdoTradeSequenceOptions { + GIBDO_TRADE_SEQUENCE_VANILLA, + GIBDO_TRADE_SEQUENCE_MM3D, + GIBDO_TRADE_SEQUENCE_NO_TRADE, +}; + enum DekuGuardSearchBallsOptions { DEKU_GUARD_SEARCH_BALLS_NIGHT_ONLY, DEKU_GUARD_SEARCH_BALLS_NEVER, diff --git a/mm/2s2h/GameInteractor/GameInteractor.h b/mm/2s2h/GameInteractor/GameInteractor.h index 22ef0bcefa..25b6b767c3 100644 --- a/mm/2s2h/GameInteractor/GameInteractor.h +++ b/mm/2s2h/GameInteractor/GameInteractor.h @@ -94,6 +94,10 @@ typedef enum { VB_GORON_ROLL_DISABLE_SPIKE_MODE, VB_DEKU_LINK_SPIN_ON_LAST_HOP, VB_CLAMP_ANIMATION_SPEED, + VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, + VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, + VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, + VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, } GIVanillaBehavior; typedef enum { diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 2bfa81c840..514b303779 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -3,7 +3,7 @@ * Overlay: ovl_En_Talk_Gibud * Description: Gibdos requesting items Beneath the Well */ - +#include "2s2h/GameInteractor/GameInteractor.h" #include "z_en_talk_gibud.h" #include "z64rumble.h" @@ -71,7 +71,8 @@ typedef enum { /* 6 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS, /* 7 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER, /* 8 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE, - /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK + /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK, + /* 10 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED, } EnTalkGibudRequestedItemIndex; typedef enum { @@ -210,6 +211,7 @@ static EnTalkGibudRequestedItem sRequestedItemTable[] = { { PLAYER_IA_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true }, { PLAYER_IA_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true }, { PLAYER_IA_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true }, + { PLAYER_IA_BOTTLE_POTION_RED, ITEM_POTION_RED, 1, true }, }; static InitChainEntry sInitChain[] = { @@ -713,10 +715,14 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, + presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch requested item to red potion + requestedItem = &sRequestedItemTable[EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED]; + } if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { - if (AMMO(requestedItem->item) >= requestedItem->amount) { + if ((AMMO(requestedItem->item) >= requestedItem->amount) + || GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, requestedItem->item)) { return EN_TALK_GIBUD_REQUESTED_ITEM_MET; } else { return EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO; @@ -782,8 +788,13 @@ void EnTalkGibud_SetupPassiveIdle(EnTalkGibud* this) { void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->isTalking = true; - Message_StartTextbox(play, 0x1388, &this->actor); - this->textId = 0x1388; + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true)) { + Message_StartTextbox(play, 0x1388, &this->actor); + this->textId = 0x1388; + } else { + Message_StartTextbox(play, 0x138A, &this->actor); + this->textId = 0x138A; + } Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM); EnTalkGibud_SetupTalk(this); } else if (this->actor.xzDistToPlayer < 100.0f && !(this->collider.base.acFlags & AC_HIT)) { @@ -828,10 +839,16 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (this->textId == 0x138A) { // Remove the requested item/amount from the player's inventory requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (!requestedItem->isBottledItem) { - Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); - } else { - Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE,true)) { // We don't want to try to change their inventory if they don't need to trade anything + if (!requestedItem->isBottledItem) { + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, true)) { + Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); + } else { + Inventory_ChangeAmmo(requestedItem->item, -1); + } + } else { + Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); + } } player->stateFlags1 |= PLAYER_STATE1_20; player->stateFlags1 |= PLAYER_STATE1_20000000; From 53b33313bd548d72aeb5a64a577a6a24a445e674 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Wed, 1 Jan 2025 20:23:54 -0500 Subject: [PATCH 02/10] clang-format --- .../actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 514b303779..8891fd4450 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -716,13 +716,15 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, - presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch requested item to red potion + presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch + // requested item to red potion requestedItem = &sRequestedItemTable[EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED]; } if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { - if ((AMMO(requestedItem->item) >= requestedItem->amount) - || GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, requestedItem->item)) { + if ((AMMO(requestedItem->item) >= requestedItem->amount) || + GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, + requestedItem->item)) { return EN_TALK_GIBUD_REQUESTED_ITEM_MET; } else { return EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO; @@ -839,7 +841,9 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (this->textId == 0x138A) { // Remove the requested item/amount from the player's inventory requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE,true)) { // We don't want to try to change their inventory if they don't need to trade anything + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, + true)) { // We don't want to try to change their inventory if they don't + // need to trade anything if (!requestedItem->isBottledItem) { if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, true)) { Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); From 03d4ad17fe091909f58fa26eb9b8b843ea6f82b5 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Wed, 1 Jan 2025 20:31:34 -0500 Subject: [PATCH 03/10] hopefully fixes clang-format? --- .../actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 8891fd4450..a68f865d32 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -716,15 +716,15 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, - presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch - // requested item to red potion + presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch + // requested item to red potion requestedItem = &sRequestedItemTable[EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED]; } if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { - if ((AMMO(requestedItem->item) >= requestedItem->amount) || - GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, - requestedItem->item)) { + if ((AMMO(requestedItem->item) >= requestedItem->amount) || + GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, + requestedItem->item)) { return EN_TALK_GIBUD_REQUESTED_ITEM_MET; } else { return EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO; @@ -842,8 +842,8 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { // Remove the requested item/amount from the player's inventory requestedItem = &sRequestedItemTable[this->requestedItemIndex]; if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, - true)) { // We don't want to try to change their inventory if they don't - // need to trade anything + true)) { // We don't want to try to change their inventory if they don't + // need to trade anything if (!requestedItem->isBottledItem) { if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, true)) { Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); From 55294512daf12a5d6323281b288a2224d4f91d24 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Wed, 1 Jan 2025 20:32:52 -0500 Subject: [PATCH 04/10] actually fix clang-format now --- mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index a68f865d32..c82c998645 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -716,7 +716,7 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, - presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch + presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch // requested item to red potion requestedItem = &sRequestedItemTable[EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED]; } From 91dd08a865866271eccbbcf339b1da026573c10a Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Sun, 5 Jan 2025 16:58:28 -0500 Subject: [PATCH 05/10] I accidentally put the file in the wrong place somehow --- .../2s2h/Enhancements/Minigames}/GibdoTradeSequenceOptions.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {build/x64/mm => mm/2s2h/Enhancements/Minigames}/GibdoTradeSequenceOptions.cpp (100%) diff --git a/build/x64/mm/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp similarity index 100% rename from build/x64/mm/GibdoTradeSequenceOptions.cpp rename to mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp From 7b52408fa83614d5107239de88868763a34fd962 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Sun, 5 Jan 2025 17:11:18 -0500 Subject: [PATCH 06/10] clang-format --- .../Minigames/GibdoTradeSequenceOptions.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp index 3c455e4bbd..16ab357e24 100644 --- a/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp +++ b/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp @@ -8,20 +8,19 @@ #define CVAR CVarGetInteger(CVAR_NAME, GIBDO_TRADE_SEQUENCE_VANILLA) extern "C" { - #include "functions.h" - #include "variables.h" +#include "functions.h" +#include "variables.h" } -void RegisterGibdoTradeSequenceOptions() -{ - COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { - ItemId requestedItemId = va_arg(args, ItemId); +void RegisterGibdoTradeSequenceOptions() { + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { + ItemId requestedItemId = va_arg(args, ItemId); if (AMMO(requestedItemId) >= 1) { *should = true; } }); - COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, CVAR == GIBDO_TRADE_SEQUENCE_MM3D, { + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, CVAR == GIBDO_TRADE_SEQUENCE_MM3D, { PlayerItemAction requestedItemAction = va_arg(args, PlayerItemAction); PlayerItemAction presentedItemAction = va_arg(args, PlayerItemAction); @@ -29,7 +28,8 @@ void RegisterGibdoTradeSequenceOptions() (presentedItemAction == PLAYER_IA_BOTTLE_POTION_RED); }); - COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { *should = false; }); + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, + { *should = false; }); COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, CVAR == GIBDO_TRADE_SEQUENCE_NO_TRADE, { *should = false; }); } From 64d496021c66a26561f195d850e49dbefe70ea0d Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Fri, 24 Jan 2025 16:12:12 -0500 Subject: [PATCH 07/10] Relocate to difficulty options --- mm/2s2h/BenGui/BenMenu.cpp | 2 +- .../GibdoTradeSequenceOptions.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename mm/2s2h/Enhancements/{Minigames => DifficultyOptions}/GibdoTradeSequenceOptions.cpp (95%) diff --git a/mm/2s2h/BenGui/BenMenu.cpp b/mm/2s2h/BenGui/BenMenu.cpp index ae013c384f..456e87514d 100644 --- a/mm/2s2h/BenGui/BenMenu.cpp +++ b/mm/2s2h/BenGui/BenMenu.cpp @@ -1167,7 +1167,7 @@ void BenMenu::AddEnhancements() { .DefaultIndex(DekuGuardSearchBallsOptions::DEKU_GUARD_SEARCH_BALLS_NIGHT_ONLY) .ComboMap(dekuGuardSearchBallsOptions)); AddWidget(path, "Gibdo Trade Sequence Options", WIDGET_CVAR_COMBOBOX) - .CVar("gEnhancements.Minigames.GibdoTradeSequence") + .CVar("gEnhancements.Cheats.GibdoTradeSequence") .Options( ComboboxOptions() .Tooltip( diff --git a/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp similarity index 95% rename from mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp rename to mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp index 16ab357e24..9b4228b4a5 100644 --- a/mm/2s2h/Enhancements/Minigames/GibdoTradeSequenceOptions.cpp +++ b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp @@ -4,7 +4,7 @@ #include "2s2h/ShipInit.hpp" #include -#define CVAR_NAME "gEnhancements.Minigames.GibdoTradeSequence" +#define CVAR_NAME "gEnhancements.Cheats.GibdoTradeSequence" #define CVAR CVarGetInteger(CVAR_NAME, GIBDO_TRADE_SEQUENCE_VANILLA) extern "C" { From db2756228ccc6f66dfee3bdcb875970244719c78 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Tue, 28 Jan 2025 00:53:38 -0500 Subject: [PATCH 08/10] feedback --- .../GibdoTradeSequenceOptions.cpp | 37 ++++++++++++++++--- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 34 +++++------------ .../ovl_En_Talk_Gibud/z_en_talk_gibud.h | 7 ++++ 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp index 9b4228b4a5..e930c31e00 100644 --- a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp +++ b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp @@ -10,8 +10,11 @@ extern "C" { #include "functions.h" #include "variables.h" +#include "overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h" } +static EnTalkGibudRequestedItem redPotionRequestedItem = { PLAYER_IA_BOTTLE_POTION_RED, ITEM_POTION_RED, 1, true }; + void RegisterGibdoTradeSequenceOptions() { COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { ItemId requestedItemId = va_arg(args, ItemId); @@ -24,14 +27,38 @@ void RegisterGibdoTradeSequenceOptions() { PlayerItemAction requestedItemAction = va_arg(args, PlayerItemAction); PlayerItemAction presentedItemAction = va_arg(args, PlayerItemAction); - *should = (requestedItemAction == PLAYER_IA_BOTTLE_POTION_BLUE) && - (presentedItemAction == PLAYER_IA_BOTTLE_POTION_RED); + EnTalkGibudRequestedItem** requestedItem = va_arg(args, EnTalkGibudRequestedItem**); + + if (requestedItemAction == PLAYER_IA_BOTTLE_POTION_BLUE && + presentedItemAction == + PLAYER_IA_BOTTLE_POTION_RED) { // If requested blue potion, but presented red potion, switch out + // requested item from blue potion to red potion. + *should = true; + *requestedItem = &redPotionRequestedItem; + } }); - COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, - { *should = false; }); + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { + *should = false; - COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, CVAR == GIBDO_TRADE_SEQUENCE_NO_TRADE, { *should = false; }); + EnTalkGibudRequestedItem* requestedItem = va_arg(args, EnTalkGibudRequestedItem*); + if (CVAR == GIBDO_TRADE_SEQUENCE_MM3D) { + Inventory_ChangeAmmo(requestedItem->item, -1); + } + }); + + COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, CVAR == GIBDO_TRADE_SEQUENCE_NO_TRADE, { + *should = false; + + EnTalkGibud* gibudCtx = va_arg(args, EnTalkGibud*); + PlayState* play = va_arg(args, PlayState*); + bool doEndTradeMessage = va_arg(args, bool); + + if (doEndTradeMessage) { + Message_StartTextbox(play, 0x138A, &gibudCtx->actor); + gibudCtx->textId = 0x138A; + } + }); } static RegisterShipInitFunc initFunc(RegisterGibdoTradeSequenceOptions, { CVAR_NAME }); \ No newline at end of file diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index c82c998645..d5e01889ea 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -48,13 +48,6 @@ s32 EnTalkGibud_PlayerOutOfRange(EnTalkGibud* this, PlayState* play); void EnTalkGibud_TurnTowardsPlayer(EnTalkGibud* this, PlayState* play); s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, PlayState* play); -typedef struct { - /* 0x0 */ PlayerItemAction itemAction; - /* 0x4 */ ItemId item; - /* 0x8 */ s32 amount; - /* 0xC */ s16 isBottledItem; -} EnTalkGibudRequestedItem; // size = 0x10 - typedef enum { /* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET, /* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO, @@ -71,8 +64,7 @@ typedef enum { /* 6 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BOMBS, /* 7 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_HOT_SPRING_WATER, /* 8 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_BIG_POE, - /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK, - /* 10 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED, + /* 9 */ EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_MILK } EnTalkGibudRequestedItemIndex; typedef enum { @@ -211,7 +203,6 @@ static EnTalkGibudRequestedItem sRequestedItemTable[] = { { PLAYER_IA_BOTTLE_HOT_SPRING_WATER, ITEM_HOT_SPRING_WATER, 1, true }, { PLAYER_IA_BOTTLE_BIG_POE, ITEM_BIG_POE, 1, true }, { PLAYER_IA_BOTTLE_MILK, ITEM_MILK_BOTTLE, 1, true }, - { PLAYER_IA_BOTTLE_POTION_RED, ITEM_POTION_RED, 1, true }, }; static InitChainEntry sInitChain[] = { @@ -715,11 +706,8 @@ void EnTalkGibud_GetNextTextBoxId(EnTalkGibud* this, PlayState* play) { s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, PlayerItemAction presentedItemAction) { EnTalkGibudRequestedItem* requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, - presentedItemAction)) { // If requested Blue Potion but presented Red Potion, switch - // requested item to red potion - requestedItem = &sRequestedItemTable[EN_TALK_GIBUD_REQUESTED_ITEM_INDEX_POTION_RED]; - } + GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, false, requestedItem->itemAction, + presentedItemAction, &requestedItem); if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { if ((AMMO(requestedItem->item) >= requestedItem->amount) || @@ -790,12 +778,9 @@ void EnTalkGibud_SetupPassiveIdle(EnTalkGibud* this) { void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->isTalking = true; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true)) { + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, play, true)) { Message_StartTextbox(play, 0x1388, &this->actor); this->textId = 0x1388; - } else { - Message_StartTextbox(play, 0x138A, &this->actor); - this->textId = 0x138A; } Actor_PlaySfx(&this->actor, NA_SE_EN_REDEAD_AIM); EnTalkGibud_SetupTalk(this); @@ -841,14 +826,13 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (this->textId == 0x138A) { // Remove the requested item/amount from the player's inventory requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, - true)) { // We don't want to try to change their inventory if they don't - // need to trade anything + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, play, + false)) { // We don't want to try to change their inventory if they don't + // need to trade anything if (!requestedItem->isBottledItem) { - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, true)) { + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_TAKE_MORE_THAN_ONE_ITEM, true, + requestedItem)) { Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); - } else { - Inventory_ChangeAmmo(requestedItem->item, -1); } } else { Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index eb11218017..24e7da4beb 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -66,4 +66,11 @@ typedef struct EnTalkGibud { /* 0x3F7 */ s8 unk_3F7; // related to player->unk_ADD } EnTalkGibud; // size = 0x3F8 +typedef struct { + /* 0x0 */ PlayerItemAction itemAction; + /* 0x4 */ ItemId item; + /* 0x8 */ s32 amount; + /* 0xC */ s16 isBottledItem; +} EnTalkGibudRequestedItem; // size = 0x10 + #endif // Z_EN_TALK_GIBUD_H From c979de680c7075b1a8f18f13b14e79e0886cb5ae Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Tue, 28 Jan 2025 21:00:19 -0500 Subject: [PATCH 09/10] Let's not relocate EnTalkGibudRequestedItem struct def --- .../DifficultyOptions/GibdoTradeSequenceOptions.cpp | 8 ++++++++ .../overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c | 7 +++++++ .../overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h | 7 ------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp index e930c31e00..f9198b2218 100644 --- a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp +++ b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp @@ -11,6 +11,14 @@ extern "C" { #include "functions.h" #include "variables.h" #include "overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h" + +// redefinition +typedef struct { + /* 0x0 */ PlayerItemAction itemAction; + /* 0x4 */ ItemId item; + /* 0x8 */ s32 amount; + /* 0xC */ s16 isBottledItem; +} EnTalkGibudRequestedItem; // size = 0x10 } static EnTalkGibudRequestedItem redPotionRequestedItem = { PLAYER_IA_BOTTLE_POTION_RED, ITEM_POTION_RED, 1, true }; diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index d5e01889ea..dbb51c3e4c 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -48,6 +48,13 @@ s32 EnTalkGibud_PlayerOutOfRange(EnTalkGibud* this, PlayState* play); void EnTalkGibud_TurnTowardsPlayer(EnTalkGibud* this, PlayState* play); s32 EnTalkGibud_MoveToIdealGrabPositionAndRotation(EnTalkGibud* this, PlayState* play); +typedef struct { + /* 0x0 */ PlayerItemAction itemAction; + /* 0x4 */ ItemId item; + /* 0x8 */ s32 amount; + /* 0xC */ s16 isBottledItem; +} EnTalkGibudRequestedItem; // size = 0x10 + typedef enum { /* 0 */ EN_TALK_GIBUD_REQUESTED_ITEM_MET, /* 1 */ EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO, diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h index 24e7da4beb..eb11218017 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.h @@ -66,11 +66,4 @@ typedef struct EnTalkGibud { /* 0x3F7 */ s8 unk_3F7; // related to player->unk_ADD } EnTalkGibud; // size = 0x3F8 -typedef struct { - /* 0x0 */ PlayerItemAction itemAction; - /* 0x4 */ ItemId item; - /* 0x8 */ s32 amount; - /* 0xC */ s16 isBottledItem; -} EnTalkGibudRequestedItem; // size = 0x10 - #endif // Z_EN_TALK_GIBUD_H From ab0b0089bf38fde03c5795f83b873c58ab1d2797 Mon Sep 17 00:00:00 2001 From: zodiac-ill Date: Thu, 30 Jan 2025 18:11:05 -0500 Subject: [PATCH 10/10] feedback 2 --- .../DifficultyOptions/GibdoTradeSequenceOptions.cpp | 9 ++++----- .../overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp index f9198b2218..e5e3762a20 100644 --- a/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp +++ b/mm/2s2h/Enhancements/DifficultyOptions/GibdoTradeSequenceOptions.cpp @@ -25,15 +25,15 @@ static EnTalkGibudRequestedItem redPotionRequestedItem = { PLAYER_IA_BOTTLE_POTI void RegisterGibdoTradeSequenceOptions() { COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, CVAR != GIBDO_TRADE_SEQUENCE_VANILLA, { - ItemId requestedItemId = va_arg(args, ItemId); + ItemId requestedItemId = (ItemId)va_arg(args, int); if (AMMO(requestedItemId) >= 1) { *should = true; } }); COND_VB_SHOULD(VB_GIBDO_TRADE_SEQUENCE_ACCEPT_RED_POTION, CVAR == GIBDO_TRADE_SEQUENCE_MM3D, { - PlayerItemAction requestedItemAction = va_arg(args, PlayerItemAction); - PlayerItemAction presentedItemAction = va_arg(args, PlayerItemAction); + PlayerItemAction requestedItemAction = (PlayerItemAction)va_arg(args, int); + PlayerItemAction presentedItemAction = (PlayerItemAction)va_arg(args, int); EnTalkGibudRequestedItem** requestedItem = va_arg(args, EnTalkGibudRequestedItem**); @@ -59,11 +59,10 @@ void RegisterGibdoTradeSequenceOptions() { *should = false; EnTalkGibud* gibudCtx = va_arg(args, EnTalkGibud*); - PlayState* play = va_arg(args, PlayState*); bool doEndTradeMessage = va_arg(args, bool); if (doEndTradeMessage) { - Message_StartTextbox(play, 0x138A, &gibudCtx->actor); + Message_StartTextbox(gPlayState, 0x138A, &gibudCtx->actor); gibudCtx->textId = 0x138A; } }); diff --git a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index dbb51c3e4c..3fc9f62b36 100644 --- a/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/mm/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -717,9 +717,8 @@ s32 EnTalkGibud_PresentedItemMatchesRequest(EnTalkGibud* this, PlayState* play, presentedItemAction, &requestedItem); if (requestedItem->itemAction == presentedItemAction) { if (!requestedItem->isBottledItem) { - if ((AMMO(requestedItem->item) >= requestedItem->amount) || - GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, false, - requestedItem->item)) { + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_SUFFICIENT_QUANTITY_PRESENTED, + AMMO(requestedItem->item) >= requestedItem->amount, requestedItem->item)) { return EN_TALK_GIBUD_REQUESTED_ITEM_MET; } else { return EN_TALK_GIBUD_REQUESTED_ITEM_NOT_ENOUGH_AMMO; @@ -785,7 +784,7 @@ void EnTalkGibud_SetupPassiveIdle(EnTalkGibud* this) { void EnTalkGibud_PassiveIdle(EnTalkGibud* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->isTalking = true; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, play, true)) { + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, true)) { Message_StartTextbox(play, 0x1388, &this->actor); this->textId = 0x1388; } @@ -833,7 +832,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (this->textId == 0x138A) { // Remove the requested item/amount from the player's inventory requestedItem = &sRequestedItemTable[this->requestedItemIndex]; - if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, play, + if (GameInteractor_Should(VB_GIBDO_TRADE_SEQUENCE_DO_TRADE, true, this, false)) { // We don't want to try to change their inventory if they don't // need to trade anything if (!requestedItem->isBottledItem) {