From 3d6ae2a7ba78e67b0c591865fc536a1fd67d0849 Mon Sep 17 00:00:00 2001 From: Archez Date: Mon, 11 Nov 2024 22:51:02 -0500 Subject: [PATCH] Fix skip intro and skip first cycle logic running when it shouldn't --- .../Cutscenes/SkipIntroSequence.cpp | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/mm/2s2h/Enhancements/Cutscenes/SkipIntroSequence.cpp b/mm/2s2h/Enhancements/Cutscenes/SkipIntroSequence.cpp index 92c0b0046a..2a12a2c4cf 100644 --- a/mm/2s2h/Enhancements/Cutscenes/SkipIntroSequence.cpp +++ b/mm/2s2h/Enhancements/Cutscenes/SkipIntroSequence.cpp @@ -12,8 +12,10 @@ void Flags_SetWeekEventReg(s32 flag); void RegisterSkipIntroSequence() { REGISTER_VB_SHOULD(VB_PLAY_TRANSITION_CS, { // Intro cutscene - if (!(gSaveContext.save.entrance == ENTRANCE(CUTSCENE, 0) && gSaveContext.save.cutsceneIndex == 0)) + if (!(gSaveContext.save.entrance == ENTRANCE(CUTSCENE, 0) && gSaveContext.save.cutsceneIndex == 0) || + gSaveContext.save.isFirstCycle) { return; + } if (CVarGetInteger("gEnhancements.Cutscenes.SkipIntroSequence", 0)) { gSaveContext.save.entrance = ENTRANCE(SOUTH_CLOCK_TOWN, 0); @@ -23,6 +25,10 @@ void RegisterSkipIntroSequence() { gSaveContext.cycleSceneFlags[SCENE_OPENINGDAN].switch0 |= (1 << 0); gSaveContext.save.playerForm = PLAYER_FORM_DEKU; + // Marks when Link enters clock town for the first time. + // This should be true forever, it is not "just" for "first cycle". Don't unset it in the first cycle skip. + gSaveContext.save.isFirstCycle = true; + // Mark chest as opened and give the player the Deku Nuts gSaveContext.cycleSceneFlags[SCENE_OPENINGDAN].chest |= (1 << 0); Item_Give(gPlayState, ITEM_DEKU_NUTS_10); @@ -32,11 +38,8 @@ void RegisterSkipIntroSequence() { gSaveContext.save.saveInfo.playerData.isMagicAcquired = true; Item_Give(gPlayState, ITEM_OCARINA_OF_TIME); Item_Give(gPlayState, ITEM_MASK_DEKU); - gSaveContext.save.saveInfo.inventory.questItems = (1 << QUEST_SONG_TIME) | (1 << QUEST_SONG_HEALING); - if (gSaveContext.save.saveInfo.playerData.threeDayResetCount < 1) { - gSaveContext.save.saveInfo.playerData.threeDayResetCount = 1; - } - gSaveContext.save.isFirstCycle = false; + gSaveContext.save.saveInfo.inventory.questItems |= (1 << QUEST_SONG_TIME) | (1 << QUEST_SONG_HEALING); + gSaveContext.save.saveInfo.playerData.threeDayResetCount = 1; // Lose nuts AMMO(ITEM_DEKU_NUT) = 0; @@ -44,26 +47,16 @@ void RegisterSkipIntroSequence() { // Tatl's text at seeing the broken great fairy gSaveContext.cycleSceneFlags[SCENE_YOUSEI_IZUMI].switch0 |= (1 << 10); - // Tatl's text when first entering South Clock Town if not already set - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_59_04)) { - SET_WEEKEVENTREG(WEEKEVENTREG_59_04); - } + // Tatl's text when first entering South Clock Town + SET_WEEKEVENTREG(WEEKEVENTREG_59_04); - // Set Tatl second cycle (?) text if not already set - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_31_04)) { - SET_WEEKEVENTREG(WEEKEVENTREG_31_04); - } + // Set Tatl second cycle (?) + SET_WEEKEVENTREG(WEEKEVENTREG_31_04); - // Set Entrance Cutscene flags for Clock Town if not already set - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN)) { - SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN); - } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN)) { - SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN); - } - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN)) { - SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN); - } + // Set Entrance Cutscene flags for Clock Town + SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN); + SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN); + SET_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN); } } });