diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2026-01-22 09:41:56 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-22 09:41:56 -0600 |
| commit | 99204fb69c923cba79299675c2ce21bb4f8ee587 (patch) | |
| tree | a3509ae6348307e7bf571feb3c3047e5cf67c317 | |
| parent | 58eef5d931e437ca828bdf2387616b1d7bd63c06 (diff) | |
Fixes for suns song usage in time shuffle (#1488)
| -rw-r--r-- | mm/2s2h/Enhancements/Trackers/ItemTracker/ItemTrackerSettings.cpp | 9 | ||||
| -rw-r--r-- | mm/2s2h/Rando/Menu.cpp | 10 | ||||
| -rw-r--r-- | mm/2s2h/Rando/MiscBehavior/ClockShuffle.cpp | 30 | ||||
| -rw-r--r-- | mm/2s2h/Rando/StartingItems.cpp | 3 | ||||
| -rw-r--r-- | mm/2s2h/Rando/StaticData/Items.cpp | 2 |
5 files changed, 30 insertions, 24 deletions
diff --git a/mm/2s2h/Enhancements/Trackers/ItemTracker/ItemTrackerSettings.cpp b/mm/2s2h/Enhancements/Trackers/ItemTracker/ItemTrackerSettings.cpp index 285c935b4..b1c91d3c5 100644 --- a/mm/2s2h/Enhancements/Trackers/ItemTracker/ItemTrackerSettings.cpp +++ b/mm/2s2h/Enhancements/Trackers/ItemTracker/ItemTrackerSettings.cpp @@ -401,7 +401,14 @@ void LoadAvailableWindows() { .name = "Time", .columns = 6, .scale = 1.0f, - .items = GetItemsFromRange(TRACKER_ITEM_RANDO, RI_TIME_DAY_1, RI_TIME_NIGHT_3), + .items = { + { TRACKER_ITEM_RANDO, RI_TIME_DAY_1 }, + { TRACKER_ITEM_RANDO, RI_TIME_NIGHT_1 }, + { TRACKER_ITEM_RANDO, RI_TIME_DAY_2 }, + { TRACKER_ITEM_RANDO, RI_TIME_NIGHT_2 }, + { TRACKER_ITEM_RANDO, RI_TIME_DAY_3 }, + { TRACKER_ITEM_RANDO, RI_TIME_NIGHT_3 }, + }, }); itemTrackerGroupsAvailable.push_back(TrackerGroup{ diff --git a/mm/2s2h/Rando/Menu.cpp b/mm/2s2h/Rando/Menu.cpp index e25d052ad..b0b63dc35 100644 --- a/mm/2s2h/Rando/Menu.cpp +++ b/mm/2s2h/Rando/Menu.cpp @@ -196,6 +196,16 @@ void RefreshMetrics() { for (auto& item : startingItems) { setOfItemsInPool.insert(item); } + // Handle weird edge case with Random shuffle time option missing one time because it's computed given + if (randoSaveInfo.randoSaveOptions[RO_CLOCK_SHUFFLE] && + randoSaveInfo.randoSaveOptions[RO_CLOCK_SHUFFLE_PROGRESSIVE] == RO_CLOCK_SHUFFLE_RANDOM) { + setOfItemsInPool.insert(RI_TIME_DAY_1); + setOfItemsInPool.insert(RI_TIME_NIGHT_1); + setOfItemsInPool.insert(RI_TIME_DAY_2); + setOfItemsInPool.insert(RI_TIME_NIGHT_2); + setOfItemsInPool.insert(RI_TIME_DAY_3); + setOfItemsInPool.insert(RI_TIME_NIGHT_3); + } ableToBalance = checksInPool >= (itemsInPool - junkInPool); } diff --git a/mm/2s2h/Rando/MiscBehavior/ClockShuffle.cpp b/mm/2s2h/Rando/MiscBehavior/ClockShuffle.cpp index 692ad329e..ae5a8a853 100644 --- a/mm/2s2h/Rando/MiscBehavior/ClockShuffle.cpp +++ b/mm/2s2h/Rando/MiscBehavior/ClockShuffle.cpp @@ -288,7 +288,7 @@ bool SceneNeedsReloadForTimeSkip(s16 sceneId) { case SCENE_BOWLING: // Honey & Darling - minigame mode changes based on day/time return true; case SCENE_CLOCKTOWER: // South Clock Town - Clock Tower platform appears at midnight Night 3 - return true; + return CURRENT_DAY == 3; default: return false; // Most scenes handle time changes without reload } @@ -375,34 +375,22 @@ void ApplyTimeSkip(int nextHalfDay, EnTest4* enTest4) { } // Apply time change - gSaveContext.save.day = day; + gSaveContext.save.day = time == GAME_TIME_DAY_START ? day - 1 : day; gSaveContext.save.time = time; + // Unset Sun's Song state + if (gSaveContext.sunsSongState != SUNSSONG_INACTIVE) { + gSaveContext.sunsSongState = SUNSSONG_INACTIVE; + R_TIME_SPEED = gPlayState->envCtx.sceneTimeSpeed; + } + // Update actor state enTest4->daytimeIndex = IsCurrentlyNightTime(time) ? 1 : 0; + enTest4->prevBellTime = CURRENT_TIME; - // Handle scene reload for time-sensitive scenes if (SceneNeedsReloadForTimeSkip(gPlayState->sceneId)) { ForceSceneReload(); - enTest4->prevTime = time - CLOCK_TIME(0, 1); - return; } - - // Terminal state handling - if (nextHalfDay == ClockItems::TERMINAL_STATE) { - enTest4->prevTime = time - CLOCK_TIME(0, 1); - return; - } - - // Day transition handling - if (time == GAME_TIME_DAY_START) { - gSaveContext.save.day--; - } else { - Interface_NewDay(gPlayState, gSaveContext.save.day); - Environment_NewDay(&gPlayState->envCtx); - } - - enTest4->prevTime = time - CLOCK_TIME(0, 1); } // Application function: Applies the time skip diff --git a/mm/2s2h/Rando/StartingItems.cpp b/mm/2s2h/Rando/StartingItems.cpp index 3430284b2..61f6530c8 100644 --- a/mm/2s2h/Rando/StartingItems.cpp +++ b/mm/2s2h/Rando/StartingItems.cpp @@ -54,8 +54,9 @@ std::vector<RandoItemId> GetComputedStartingItems(RandoSaveInfo& randoSaveInfo) // When shuffling time, if the player did not choose any starting time items, we need to give them at least one. if (randoSaveInfo.randoSaveOptions[RO_CLOCK_SHUFFLE] == RO_GENERIC_YES) { + auto configuredStartedItems = Rando::GetStartingItemsFromSave(randoSaveInfo); bool hasTimeItem = false; - for (RandoItemId randoItemId : startingItems) { + for (RandoItemId randoItemId : configuredStartedItems) { if (randoItemId >= RI_TIME_DAY_1 && randoItemId <= RI_TIME_PROGRESSIVE) { hasTimeItem = true; break; diff --git a/mm/2s2h/Rando/StaticData/Items.cpp b/mm/2s2h/Rando/StaticData/Items.cpp index 204e88a8c..f64a5fc41 100644 --- a/mm/2s2h/Rando/StaticData/Items.cpp +++ b/mm/2s2h/Rando/StaticData/Items.cpp @@ -292,7 +292,7 @@ std::map<StartingItemCategory, std::vector<RandoItemId>> StartingItemsMap = { { STARTING_ITEMS_MISC, { RI_SOUL_BOSS_GOHT, RI_SOUL_BOSS_GYORG, RI_SOUL_BOSS_MAJORA, RI_SOUL_BOSS_ODOLWA, RI_SOUL_BOSS_TWINMOLD, RI_FROG_BLUE, RI_FROG_CYAN, RI_FROG_PINK, RI_FROG_WHITE, - RI_TIME_DAY_1, RI_TIME_DAY_2, RI_TIME_DAY_3, RI_TIME_NIGHT_1, RI_TIME_NIGHT_2, RI_TIME_NIGHT_3, RI_TIME_PROGRESSIVE, + RI_TIME_DAY_1, RI_TIME_NIGHT_1, RI_TIME_DAY_2, RI_TIME_NIGHT_2, RI_TIME_DAY_3, RI_TIME_NIGHT_3, RI_TIME_PROGRESSIVE, RI_OCARINA_BUTTON_A, RI_OCARINA_BUTTON_C_DOWN, RI_OCARINA_BUTTON_C_RIGHT, RI_OCARINA_BUTTON_C_LEFT, RI_OCARINA_BUTTON_C_UP, } }, }; |
