fix own dungeon items on shuffled boss rooms (#2683)

This commit is contained in:
Adam Bird 2023-04-11 07:31:37 -04:00 committed by GitHub
parent 330da0b5ec
commit b47d538e62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 72 additions and 37 deletions

View File

@ -7,12 +7,14 @@
namespace Dungeon { namespace Dungeon {
DungeonInfo::DungeonInfo(std::string name_, uint32_t map_, uint32_t compass_, uint32_t smallKey_, uint32_t keyRing_, DungeonInfo::DungeonInfo(std::string name_, uint32_t hintKey_, uint32_t map_, uint32_t compass_, uint32_t smallKey_,
uint32_t bossKey_, uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, uint32_t keyRing_, uint32_t bossKey_, uint8_t vanillaKeyCount_, uint8_t mqKeyCount_,
std::vector<uint32_t> vanillaLocations_, std::vector<uint32_t> vanillaLocations_,
std::vector<uint32_t> mqLocations_, std::vector<uint32_t> mqLocations_,
std::vector<uint32_t> sharedLocations_) std::vector<uint32_t> sharedLocations_,
std::vector<uint32_t> bossRoomLocations_)
: name(std::move(name_)), : name(std::move(name_)),
hintKey(hintKey_),
map(map_), map(map_),
compass(compass_), compass(compass_),
smallKey(smallKey_), smallKey(smallKey_),
@ -22,10 +24,15 @@ DungeonInfo::DungeonInfo(std::string name_, uint32_t map_, uint32_t compass_, ui
mqKeyCount(mqKeyCount_), mqKeyCount(mqKeyCount_),
vanillaLocations(std::move(vanillaLocations_)), vanillaLocations(std::move(vanillaLocations_)),
mqLocations(std::move(mqLocations_)), mqLocations(std::move(mqLocations_)),
sharedLocations(std::move(sharedLocations_)) {} sharedLocations(std::move(sharedLocations_)),
bossRoomLocations(std::move(bossRoomLocations_)) {}
DungeonInfo::~DungeonInfo() = default; DungeonInfo::~DungeonInfo() = default;
uint32_t DungeonInfo::GetHintKey() const {
return hintKey;
}
uint32_t DungeonInfo::GetSmallKey() const { uint32_t DungeonInfo::GetSmallKey() const {
return smallKey; return smallKey;
} }
@ -92,6 +99,7 @@ void DungeonInfo::PlaceVanillaSmallKeys() {
std::vector<uint32_t> DungeonInfo::GetDungeonLocations() const { std::vector<uint32_t> DungeonInfo::GetDungeonLocations() const {
auto locations = masterQuest ? mqLocations : vanillaLocations; auto locations = masterQuest ? mqLocations : vanillaLocations;
AddElementsToPool(locations, sharedLocations); AddElementsToPool(locations, sharedLocations);
AddElementsToPool(locations, bossRoomLocations);
return locations; return locations;
} }
@ -100,10 +108,11 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
auto locations = vanillaLocations; auto locations = vanillaLocations;
AddElementsToPool(locations, mqLocations); AddElementsToPool(locations, mqLocations);
AddElementsToPool(locations, sharedLocations); AddElementsToPool(locations, sharedLocations);
AddElementsToPool(locations, bossRoomLocations);
return locations; return locations;
} }
DungeonInfo DekuTree = DungeonInfo("Deku Tree", DEKU_TREE_MAP, DEKU_TREE_COMPASS, NONE, NONE, NONE, 0, 0, { DungeonInfo DekuTree = DungeonInfo("Deku Tree", DEKU_TREE, DEKU_TREE_MAP, DEKU_TREE_COMPASS, NONE, NONE, NONE, 0, 0, {
//Vanilla Locations //Vanilla Locations
DEKU_TREE_MAP_CHEST, DEKU_TREE_MAP_CHEST,
DEKU_TREE_COMPASS_CHEST, DEKU_TREE_COMPASS_CHEST,
@ -129,13 +138,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
DEKU_TREE_MQ_GS_COMPASS_ROOM, DEKU_TREE_MQ_GS_COMPASS_ROOM,
DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM,
DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM,
}, { },
//Shared Locations {},
{
// Boss Room Locations
DEKU_TREE_QUEEN_GOHMA_HEART, DEKU_TREE_QUEEN_GOHMA_HEART,
QUEEN_GOHMA, QUEEN_GOHMA,
}); });
DungeonInfo DodongosCavern = DungeonInfo("Dodongo's Cavern", DODONGOS_CAVERN_MAP, DODONGOS_CAVERN_COMPASS, NONE, NONE, NONE, 0, 0, { DungeonInfo DodongosCavern = DungeonInfo("Dodongo's Cavern", DODONGOS_CAVERN, DODONGOS_CAVERN_MAP, DODONGOS_CAVERN_COMPASS, NONE, NONE, NONE, 0, 0, {
//Vanilla Locations //Vanilla Locations
DODONGOS_CAVERN_MAP_CHEST, DODONGOS_CAVERN_MAP_CHEST,
DODONGOS_CAVERN_COMPASS_CHEST, DODONGOS_CAVERN_COMPASS_CHEST,
@ -168,14 +179,16 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM,
DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM,
DODONGOS_CAVERN_MQ_GS_BACK_AREA, DODONGOS_CAVERN_MQ_GS_BACK_AREA,
}, { },
//Shared Locations {},
{
// Boss Room Locations
DODONGOS_CAVERN_BOSS_ROOM_CHEST, DODONGOS_CAVERN_BOSS_ROOM_CHEST,
DODONGOS_CAVERN_KING_DODONGO_HEART, DODONGOS_CAVERN_KING_DODONGO_HEART,
KING_DODONGO, KING_DODONGO,
}); });
DungeonInfo JabuJabusBelly = DungeonInfo("Jabu Jabu's Belly", JABU_JABUS_BELLY_MAP, JABU_JABUS_BELLY_COMPASS, NONE, NONE, NONE, 0, 0, { DungeonInfo JabuJabusBelly = DungeonInfo("Jabu Jabu's Belly", JABU_JABUS_BELLY, JABU_JABUS_BELLY_MAP, JABU_JABUS_BELLY_COMPASS, NONE, NONE, NONE, 0, 0, {
//Vanilla Locations //Vanilla Locations
JABU_JABUS_BELLY_MAP_CHEST, JABU_JABUS_BELLY_MAP_CHEST,
JABU_JABUS_BELLY_COMPASS_CHEST, JABU_JABUS_BELLY_COMPASS_CHEST,
@ -203,13 +216,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM,
JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM,
JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS,
}, { },
//Shared Locations {},
{
// Boss Room Locations
JABU_JABUS_BELLY_BARINADE_HEART, JABU_JABUS_BELLY_BARINADE_HEART,
BARINADE, BARINADE,
}); });
DungeonInfo ForestTemple = DungeonInfo("Forest Temple", FOREST_TEMPLE_MAP, FOREST_TEMPLE_COMPASS, FOREST_TEMPLE_SMALL_KEY, FOREST_TEMPLE_KEY_RING, FOREST_TEMPLE_BOSS_KEY, 5, 6, { DungeonInfo ForestTemple = DungeonInfo("Forest Temple", FOREST_TEMPLE, FOREST_TEMPLE_MAP, FOREST_TEMPLE_COMPASS, FOREST_TEMPLE_SMALL_KEY, FOREST_TEMPLE_KEY_RING, FOREST_TEMPLE_BOSS_KEY, 5, 6, {
//Vanilla Locations //Vanilla Locations
FOREST_TEMPLE_FIRST_ROOM_CHEST, FOREST_TEMPLE_FIRST_ROOM_CHEST,
FOREST_TEMPLE_FIRST_STALFOS_CHEST, FOREST_TEMPLE_FIRST_STALFOS_CHEST,
@ -248,13 +263,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD,
FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD,
FOREST_TEMPLE_MQ_GS_WELL, FOREST_TEMPLE_MQ_GS_WELL,
}, { },
//Shared Locations {},
{
// Boss Room Locations
FOREST_TEMPLE_PHANTOM_GANON_HEART, FOREST_TEMPLE_PHANTOM_GANON_HEART,
PHANTOM_GANON, PHANTOM_GANON,
}); });
DungeonInfo FireTemple = DungeonInfo("Fire Temple", FIRE_TEMPLE_MAP, FIRE_TEMPLE_COMPASS, FIRE_TEMPLE_SMALL_KEY, FIRE_TEMPLE_KEY_RING, FIRE_TEMPLE_BOSS_KEY, 8, 5, { DungeonInfo FireTemple = DungeonInfo("Fire Temple", FIRE_TEMPLE, FIRE_TEMPLE_MAP, FIRE_TEMPLE_COMPASS, FIRE_TEMPLE_SMALL_KEY, FIRE_TEMPLE_KEY_RING, FIRE_TEMPLE_BOSS_KEY, 8, 5, {
//Vanilla Locations //Vanilla Locations
FIRE_TEMPLE_NEAR_BOSS_CHEST, FIRE_TEMPLE_NEAR_BOSS_CHEST,
FIRE_TEMPLE_FLARE_DANCER_CHEST, FIRE_TEMPLE_FLARE_DANCER_CHEST,
@ -294,13 +311,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR,
FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM,
FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE,
}, { },
//Shared Locations {},
{
// Boos Room Locations
FIRE_TEMPLE_VOLVAGIA_HEART, FIRE_TEMPLE_VOLVAGIA_HEART,
VOLVAGIA, VOLVAGIA,
}); });
DungeonInfo WaterTemple = DungeonInfo("Water Temple", WATER_TEMPLE_MAP, WATER_TEMPLE_COMPASS, WATER_TEMPLE_SMALL_KEY, WATER_TEMPLE_KEY_RING, WATER_TEMPLE_BOSS_KEY, 6, 2, { DungeonInfo WaterTemple = DungeonInfo("Water Temple", WATER_TEMPLE, WATER_TEMPLE_MAP, WATER_TEMPLE_COMPASS, WATER_TEMPLE_SMALL_KEY, WATER_TEMPLE_KEY_RING, WATER_TEMPLE_BOSS_KEY, 6, 2, {
//Vanilla Locations //Vanilla Locations
WATER_TEMPLE_MAP_CHEST, WATER_TEMPLE_MAP_CHEST,
WATER_TEMPLE_COMPASS_CHEST, WATER_TEMPLE_COMPASS_CHEST,
@ -330,13 +349,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY,
WATER_TEMPLE_MQ_GS_RIVER, WATER_TEMPLE_MQ_GS_RIVER,
WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH,
}, { },
//Shared Locations {},
{
// Boss Room Locations
WATER_TEMPLE_MORPHA_HEART, WATER_TEMPLE_MORPHA_HEART,
MORPHA, MORPHA,
}); });
DungeonInfo SpiritTemple = DungeonInfo("Spirit Temple", SPIRIT_TEMPLE_MAP, SPIRIT_TEMPLE_COMPASS, SPIRIT_TEMPLE_SMALL_KEY, SPIRIT_TEMPLE_KEY_RING, SPIRIT_TEMPLE_BOSS_KEY, 5, 7, { DungeonInfo SpiritTemple = DungeonInfo("Spirit Temple", SPIRIT_TEMPLE, SPIRIT_TEMPLE_MAP, SPIRIT_TEMPLE_COMPASS, SPIRIT_TEMPLE_SMALL_KEY, SPIRIT_TEMPLE_KEY_RING, SPIRIT_TEMPLE_BOSS_KEY, 5, 7, {
//Vanilla Locations //Vanilla Locations
SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST,
@ -391,11 +412,13 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
//Shared Locations //Shared Locations
SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST,
SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST,
}, {
// Boss Room Locations
SPIRIT_TEMPLE_TWINROVA_HEART, SPIRIT_TEMPLE_TWINROVA_HEART,
TWINROVA, TWINROVA,
}); });
DungeonInfo ShadowTemple = DungeonInfo("Shadow Temple", SHADOW_TEMPLE_MAP, SHADOW_TEMPLE_COMPASS, SHADOW_TEMPLE_SMALL_KEY, SHADOW_TEMPLE_KEY_RING, SHADOW_TEMPLE_BOSS_KEY, 5, 6, { DungeonInfo ShadowTemple = DungeonInfo("Shadow Temple", SHADOW_TEMPLE, SHADOW_TEMPLE_MAP, SHADOW_TEMPLE_COMPASS, SHADOW_TEMPLE_SMALL_KEY, SHADOW_TEMPLE_KEY_RING, SHADOW_TEMPLE_BOSS_KEY, 5, 6, {
//Vanilla Locations //Vanilla Locations
SHADOW_TEMPLE_MAP_CHEST, SHADOW_TEMPLE_MAP_CHEST,
SHADOW_TEMPLE_HOVER_BOOTS_CHEST, SHADOW_TEMPLE_HOVER_BOOTS_CHEST,
@ -446,13 +469,15 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
SHADOW_TEMPLE_MQ_GS_AFTER_WIND, SHADOW_TEMPLE_MQ_GS_AFTER_WIND,
SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, SHADOW_TEMPLE_MQ_GS_AFTER_SHIP,
SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, SHADOW_TEMPLE_MQ_GS_NEAR_BOSS,
}, { },
//Shared Locations {},
{
// Boss Room Locations
SHADOW_TEMPLE_BONGO_BONGO_HEART, SHADOW_TEMPLE_BONGO_BONGO_HEART,
BONGO_BONGO, BONGO_BONGO,
}); });
DungeonInfo BottomOfTheWell = DungeonInfo("Bottom of the Well", BOTTOM_OF_THE_WELL_MAP, BOTTOM_OF_THE_WELL_COMPASS, BOTTOM_OF_THE_WELL_SMALL_KEY, BOTTOM_OF_THE_WELL_KEY_RING, NONE, 3, 2, { DungeonInfo BottomOfTheWell = DungeonInfo("Bottom of the Well", BOTTOM_OF_THE_WELL, BOTTOM_OF_THE_WELL_MAP, BOTTOM_OF_THE_WELL_COMPASS, BOTTOM_OF_THE_WELL_SMALL_KEY, BOTTOM_OF_THE_WELL_KEY_RING, NONE, 3, 2, {
//Vanilla Locations //Vanilla Locations
BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST,
@ -481,9 +506,9 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT,
BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM,
BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM,
}, {}); }, {}, {});
DungeonInfo IceCavern = DungeonInfo("Ice Cavern", ICE_CAVERN_MAP, ICE_CAVERN_COMPASS, NONE, NONE, NONE, 0, 0, { DungeonInfo IceCavern = DungeonInfo("Ice Cavern", ICE_CAVERN, ICE_CAVERN_MAP, ICE_CAVERN_COMPASS, NONE, NONE, NONE, 0, 0, {
//Vanilla Locations //Vanilla Locations
ICE_CAVERN_MAP_CHEST, ICE_CAVERN_MAP_CHEST,
ICE_CAVERN_COMPASS_CHEST, ICE_CAVERN_COMPASS_CHEST,
@ -504,9 +529,9 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
}, { }, {
//Shared Locations //Shared Locations
SHEIK_IN_ICE_CAVERN, SHEIK_IN_ICE_CAVERN,
}); }, {});
DungeonInfo GerudoTrainingGrounds = DungeonInfo("Gerudo Training Grounds", NONE, NONE, GERUDO_TRAINING_GROUNDS_SMALL_KEY, GERUDO_TRAINING_GROUNDS_KEY_RING, NONE, 9, 3, { DungeonInfo GerudoTrainingGrounds = DungeonInfo("Gerudo Training Grounds", GERUDO_TRAINING_GROUNDS, NONE, NONE, GERUDO_TRAINING_GROUNDS_SMALL_KEY, GERUDO_TRAINING_GROUNDS_KEY_RING, NONE, 9, 3, {
//Vanilla Locations //Vanilla Locations
GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST, GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST,
GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST, GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST,
@ -549,9 +574,9 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST, GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST,
GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST, GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST,
GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST, GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST,
}, {}); }, {}, {});
DungeonInfo GanonsCastle = DungeonInfo("Ganon's Castle", NONE, NONE, GANONS_CASTLE_SMALL_KEY, GANONS_CASTLE_KEY_RING, GANONS_CASTLE_BOSS_KEY, 2, 3, { DungeonInfo GanonsCastle = DungeonInfo("Ganon's Castle", GANONS_CASTLE, NONE, NONE, GANONS_CASTLE_SMALL_KEY, GANONS_CASTLE_KEY_RING, GANONS_CASTLE_BOSS_KEY, 2, 3, {
//Vanilla Locations //Vanilla Locations
GANONS_CASTLE_FOREST_TRIAL_CHEST, GANONS_CASTLE_FOREST_TRIAL_CHEST,
GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST,
@ -596,7 +621,7 @@ std::vector<uint32_t> DungeonInfo::GetEveryLocation() const {
//Shared Locations //Shared Locations
GANONS_TOWER_BOSS_KEY_CHEST, GANONS_TOWER_BOSS_KEY_CHEST,
GANON, GANON,
}); }, {});
const DungeonArray dungeonList = { const DungeonArray dungeonList = {
&DekuTree, &DekuTree,

View File

@ -9,11 +9,12 @@
namespace Dungeon { namespace Dungeon {
class DungeonInfo { class DungeonInfo {
public: public:
DungeonInfo(std::string name_, uint32_t map_, uint32_t compass_, uint32_t smallKey_, uint32_t keyRing_, uint32_t bossKey_, DungeonInfo(std::string name_, uint32_t hintKey_, uint32_t map_, uint32_t compass_, uint32_t smallKey_, uint32_t keyRing_, uint32_t bossKey_,
uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, uint8_t vanillaKeyCount_, uint8_t mqKeyCount_,
std::vector<uint32_t> vanillaLocations_, std::vector<uint32_t> vanillaLocations_,
std::vector<uint32_t> mqLocations_, std::vector<uint32_t> mqLocations_,
std::vector<uint32_t> sharedLocations_); std::vector<uint32_t> sharedLocations_,
std::vector<uint32_t> bossRoomLocations_);
~DungeonInfo(); ~DungeonInfo();
const std::string& GetName() const { const std::string& GetName() const {
@ -52,6 +53,7 @@ public:
return (masterQuest) ? mqKeyCount : vanillaKeyCount; return (masterQuest) ? mqKeyCount : vanillaKeyCount;
} }
uint32_t GetHintKey() const;
uint32_t GetSmallKey() const; uint32_t GetSmallKey() const;
uint32_t GetKeyRing() const; uint32_t GetKeyRing() const;
uint32_t GetMap() const; uint32_t GetMap() const;
@ -71,6 +73,7 @@ public:
private: private:
std::string name; std::string name;
uint32_t hintKey;
uint32_t map; uint32_t map;
uint32_t compass; uint32_t compass;
uint32_t smallKey; uint32_t smallKey;
@ -83,6 +86,7 @@ private:
std::vector<uint32_t> vanillaLocations; std::vector<uint32_t> vanillaLocations;
std::vector<uint32_t> mqLocations; std::vector<uint32_t> mqLocations;
std::vector<uint32_t> sharedLocations; std::vector<uint32_t> sharedLocations;
std::vector<uint32_t> bossRoomLocations;
}; };
extern DungeonInfo DekuTree; extern DungeonInfo DekuTree;

View File

@ -759,9 +759,15 @@ static void FillExcludedLocations() {
//Function to handle the Own Dungeon setting //Function to handle the Own Dungeon setting
static void RandomizeOwnDungeon(const Dungeon::DungeonInfo* dungeon) { static void RandomizeOwnDungeon(const Dungeon::DungeonInfo* dungeon) {
std::vector<uint32_t> dungeonLocations = dungeon->GetDungeonLocations();
std::vector<uint32_t> dungeonItems; std::vector<uint32_t> dungeonItems;
// Search and filter for locations that match the hint region of the dungeon
// This accounts for boss room shuffle so that own dungeon items can be placed
// in the shuffled boss room
std::vector<LocationKey> dungeonLocations = FilterFromPool(allLocations, [dungeon](const auto loc) {
return GetHintRegionHintKey(Location(loc)->GetParentRegionKey()) == dungeon->GetHintKey();
});
//filter out locations that may be required to have songs placed at them //filter out locations that may be required to have songs placed at them
dungeonLocations = FilterFromPool(dungeonLocations, [](const auto loc){ dungeonLocations = FilterFromPool(dungeonLocations, [](const auto loc){
if (ShuffleSongs.Is(SONGSHUFFLE_SONG_LOCATIONS)) { if (ShuffleSongs.Is(SONGSHUFFLE_SONG_LOCATIONS)) {