From 467e96c6b7c50ea4dd84d9e5cca9eb7c3445a5c9 Mon Sep 17 00:00:00 2001 From: Anthony Stewart Date: Fri, 4 Apr 2025 22:17:59 -0500 Subject: [PATCH] Updated ApplyEntranceOverrides. --- soh/soh/Enhancements/randomizer/entrance.cpp | 33 +++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/entrance.cpp b/soh/soh/Enhancements/randomizer/entrance.cpp index 67c6ccc3f..e51bd25d8 100644 --- a/soh/soh/Enhancements/randomizer/entrance.cpp +++ b/soh/soh/Enhancements/randomizer/entrance.cpp @@ -1665,33 +1665,44 @@ void EntranceShuffler::ParseJson(nlohmann::json spoilerFileJson) { } void EntranceShuffler::ApplyEntranceOverrides() { - std::vector shuffledEntrances; - shuffledEntrances.reserve(entranceOverrides.size()); + std::unordered_map randomizerRegionToEntranceMap; + for (uint32_t rr = RR_NONE; rr < RR_MAX; rr++) { + for (auto& exit : areaTable[rr].exits) { + uint32_t key = rr << 16 | (uint32_t)exit.GetConnectedRegionKey(); + randomizerRegionToEntranceMap[key] = &exit; + } + } for (size_t i = 0; i < entranceOverrides.size(); i++) { EntranceOverride entranceOverride = entranceOverrides[i]; - const EntranceLinkInfo* forwardInfo; - const EntranceLinkInfo* returnInfo; + const EntranceLinkInfo* entranceInfo; + const EntranceLinkInfo* overridenEntranceInfo; for (const auto& pair : entranceShuffleTable) { if (pair.first.index == entranceOverride.index) { - forwardInfo = &pair.first; + entranceInfo = &pair.first; } if (pair.second.index == entranceOverride.index) { - forwardInfo = &pair.second; + entranceInfo = &pair.second; } if (pair.first.index == entranceOverride.override) { - returnInfo = &pair.first; + overridenEntranceInfo = &pair.first; } if (pair.second.index == entranceOverride.override) { - returnInfo = &pair.second; + overridenEntranceInfo = &pair.second; } } - shuffledEntrances.push_back({ *forwardInfo, *returnInfo }); - } + uint32_t entranceKey = (uint32_t)entranceInfo->parentRegion << 16 | (uint32_t)entranceInfo->connectedRegion; + Entrance* entrance = randomizerRegionToEntranceMap[entranceKey]; + uint32_t overridenEntranceKey = (uint32_t)overridenEntranceInfo->parentRegion << 16 | (uint32_t)overridenEntranceInfo->connectedRegion; + Entrance* overridenEntrance = randomizerRegionToEntranceMap[overridenEntranceKey]; - SetAllEntrancesData(shuffledEntrances); + entrance->Disconnect(); + entrance->Connect(overridenEntranceInfo->connectedRegion); + overridenEntrance->Disconnect(); + overridenEntrance->Connect(entranceInfo->connectedRegion); + } } } // namespace Rando