Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Forest Stage upgrades with Skip Misc Interactions #5052

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from

Conversation

JordanLongstaff
Copy link
Contributor

@JordanLongstaff JordanLongstaff commented Feb 12, 2025

Fixes #5051

The VB handlers for the Forest Stage upgrades inadvertently gave the player the max upgrades for both sticks and nuts. Now it's corrected to award progressive upgrades.

Build Artifacts

@@ -1105,10 +1105,10 @@ void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) {
case FLAG_ITEM_GET_INF:
switch (flag) {
case ITEMGETINF_OBTAINED_STICK_UPGRADE_FROM_STAGE:
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_DEKU_STICK_CAPACITY_30).GetGIEntry_Copy();
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_PROGRESSIVE_STICK_UPGRADE).GetGIEntry_Copy();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if we "should" use the progressive items in vanilla saves like this. Instead we'd probably should explicitly check for the cur upgrade value and then set the corresponding GI ID like the vanilla source does for the theater checks. Namely, the progressives path reads the rando ctx and logic settings, which might not be safe in vanilla saves.

/cc @garrettjoecox and @leggettc18 , what do you think regarding the vanilla queue?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CC @briaguya-ai also, since they added this originally.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for reference this is the PR moving deku theater to VB garrettjoecox#96

the logic it was replacing was directly in z_en_dnt_demo

        if (IS_RANDO) {
            Player* player = GET_PLAYER(play);
            switch (Player_GetMask(play)) {
                case PLAYER_MASK_SKULL:
                    if (!Flags_GetTreasure(play, 0x1F) && !Player_InBlockingCsMode(play, player)) {
                        GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_DEKU_THEATER_SKULL_MASK, GI_STICK_UPGRADE_30);
                        GiveItemEntryWithoutActor(play, getItemEntry);
                        player->pendingFlag.flagID = 0x1F;
                        player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
                    }
                    break;
                case PLAYER_MASK_TRUTH:
                    if (!Flags_GetTreasure(play, 0x1E) && !Player_InBlockingCsMode(play, player)) {
                        GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_DEKU_THEATER_MASK_OF_TRUTH, GI_NUT_UPGRADE_40);
                        GiveItemEntryWithoutActor(play, getItemEntry);
                        player->pendingFlag.flagID = 0x1E;
                        player->pendingFlag.flagType = FLAG_SCENE_TREASURE;
                    }
                    break;
            }
            return;
        }

this does make me curious about how progressive items work with #5023 now though

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Forest Stage Deku Nut upgrade is always 40 nuts with SkipMiscInteractions on
3 participants