diff --git a/soh/soh/Enhancements/randomizer/entrance.cpp b/soh/soh/Enhancements/randomizer/entrance.cpp index 157deaa40..b7ba6db65 100644 --- a/soh/soh/Enhancements/randomizer/entrance.cpp +++ b/soh/soh/Enhancements/randomizer/entrance.cpp @@ -1706,18 +1706,24 @@ void Randomizer_DiscoverRegion(Region* region, std::unordered_set visitedRegions; + Randomizer_DiscoverRegion(&areaTable[region], visitedRegions); +} + +void Randomizer_EntranceDiscovered(s16 index, bool recalculateAvailableChecks) { auto entranceEntry = Rando::entranceMap.find(index); if (entranceEntry == Rando::entranceMap.end()) { return; } Rando::Entrance* entrance = entranceEntry->second; - Region* region = entrance->GetConnectedRegion(); + RandomizerRegion connectedRegionKey = entrance->GetConnectedRegionKey(); - std::unordered_set visitedRegions; - Randomizer_DiscoverRegion(region, visitedRegions); + Randomizer_RegionDiscovered(connectedRegionKey); - CheckTracker::RecalculateAvailableChecks(); + if (recalculateAvailableChecks) { + CheckTracker::RecalculateAvailableChecks(); + } } } \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/entrance.h b/soh/soh/Enhancements/randomizer/entrance.h index 15608c951..0b2e5eb9d 100644 --- a/soh/soh/Enhancements/randomizer/entrance.h +++ b/soh/soh/Enhancements/randomizer/entrance.h @@ -153,7 +153,8 @@ class EntranceShuffler { extern "C" { #endif EntranceOverride* Randomizer_GetEntranceOverrides(); -void Randomizer_EntranceDiscovered(s16 index); +void Randomizer_RegionDiscovered(RandomizerRegion region); +void Randomizer_EntranceDiscovered(s16 index, bool recalculateAvailableChecks); #ifdef __cplusplus } #endif diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 2bc85df91..aa2e78843 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -585,6 +585,12 @@ void CheckTrackerLoadGame(int32_t fileNum) { if (Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_ENTRANCES).Get()) { Rando::Context::GetInstance()->GetEntranceShuffler()->ApplyEntranceOverrides(); + + for (s16 entranceIndex = 0; entranceIndex < ENTR_MAX; entranceIndex++) { + if (IsEntranceDiscovered(entranceIndex)) { + Randomizer_EntranceDiscovered(entranceIndex, false); + } + } } RecalculateAvailableChecks(); diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.c b/soh/soh/Enhancements/randomizer/randomizer_entrance.c index 0abee702c..5d50ca142 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.c +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.c @@ -809,7 +809,7 @@ void Entrance_SetEntranceDiscovered(u16 entranceIndex, u8 isReversedEntrance) { if (idx < SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT) { u32 entranceBit = 1 << (entranceIndex - (idx * bitsPerIndex)); gSaveContext.ship.stats.entrancesDiscovered[idx] |= entranceBit; - Randomizer_EntranceDiscovered(entranceIndex); + Randomizer_EntranceDiscovered(entranceIndex, true); // Set reverse entrance when not decoupled if (!Randomizer_GetSettingValue(RSK_DECOUPLED_ENTRANCES) && !isReversedEntrance) {