diff --git a/soh/soh/Enhancements/debugconsole.cpp b/soh/soh/Enhancements/debugconsole.cpp index 5df00dfab..f58f060ff 100644 --- a/soh/soh/Enhancements/debugconsole.cpp +++ b/soh/soh/Enhancements/debugconsole.cpp @@ -1406,6 +1406,11 @@ static bool SfxHandler(std::shared_ptr Console, const std::vector return 0; } +static bool RecalculateAccessibleChecksHandler(std::shared_ptr Console, const std::vector& args, std::string* output) { + CheckTracker::RecalculateAccessibleChecks(); + return 0; +} + void DebugConsole_Init(void) { // Console CMD_REGISTER("file_select", {FileSelectHandler, "Returns to the file select."}); @@ -1595,5 +1600,7 @@ void DebugConsole_Init(void) { {"group_name", Ship::ArgumentType::TEXT, true}, }}); + CMD_REGISTER("recalculate_accessible_checks", {RecalculateAccessibleChecksHandler, "Recalculate accessible checks."}); + Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 6342c4e0a..7af29c870 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -826,9 +826,7 @@ void LoadFile() { UpdateAllAreas(); if (gSaveContext.fileNum >= 0 && gSaveContext.fileNum <= 2) { - if (areaTable[RR_ROOT].regionName.empty()) { - RegionTable_Init(); - } + RegionTable_Init(); RecalculateAccessibleChecks(); } } @@ -1729,41 +1727,6 @@ void ImGuiDrawTwoColorPickerSection(const char* text, const char* cvarMainName, } } -void CalculateAccessibleEntrances(const Region& region, - bool isParentAccessible, - std::unordered_map& entranceAccessible, - std::vector& visitedRegions, - std::stop_token stopToken) { - for (const auto& entranceInRegion : region.exits) { - if (stopToken.stop_requested()) { - return; - } - - auto pair = entranceAccessible.find(&entranceInRegion); - bool isEntranceAccessible = true; - if (pair == entranceAccessible.end()) { - isEntranceAccessible = isParentAccessible && entranceInRegion.GetConditionsMet(); - entranceAccessible[&entranceInRegion] = isEntranceAccessible; - } else if (!pair->second) { - isEntranceAccessible = isParentAccessible && entranceInRegion.GetConditionsMet(); - pair->second = isEntranceAccessible; - } - else { - return; - } - - if (std::find(visitedRegions.begin(), visitedRegions.end(), entranceInRegion.GetConnectedRegionKey()) == visitedRegions.end()) { - visitedRegions.emplace_back(entranceInRegion.GetConnectedRegionKey()); - CalculateAccessibleEntrances(*entranceInRegion.GetConnectedRegion(), - isEntranceAccessible, - entranceAccessible, - visitedRegions, - stopToken); - visitedRegions.pop_back(); - } - } -} - void RecalculateAccessibleChecks() { StartPerformanceTimer(PT_RECALCULATE_ACCESSIBLE_CHECKS);