Shuffle Ganon Tower (#5078)
This commit is contained in:
@@ -568,6 +568,9 @@ void SetAllEntrancesData() {
|
|||||||
{ { EntranceType::AdultBoss, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, RR_SHADOW_TEMPLE_BOSS_ROOM, ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE },
|
{ { EntranceType::AdultBoss, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, RR_SHADOW_TEMPLE_BOSS_ROOM, ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE },
|
||||||
{ EntranceType::AdultBoss, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, ENTR_SHADOW_TEMPLE_BOSS_DOOR } },
|
{ EntranceType::AdultBoss, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, ENTR_SHADOW_TEMPLE_BOSS_DOOR } },
|
||||||
|
|
||||||
|
{ { EntranceType::GanonTower, RR_GANONS_TOWER_ENTRYWAY, RR_GANONS_TOWER_STAIRS_1, ENTR_GANONS_TOWER_0 },
|
||||||
|
{ EntranceType::GanonTower, RR_GANONS_TOWER_STAIRS_1, RR_GANONS_TOWER_ENTRYWAY, ENTR_INSIDE_GANONS_CASTLE_1 } },
|
||||||
|
|
||||||
{ { EntranceType::BlueWarp, RR_DEKU_TREE_BOSS_ROOM, RR_KF_OUTSIDE_DEKU_TREE, ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP },
|
{ { EntranceType::BlueWarp, RR_DEKU_TREE_BOSS_ROOM, RR_KF_OUTSIDE_DEKU_TREE, ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP },
|
||||||
NO_RETURN_ENTRANCE },
|
NO_RETURN_ENTRANCE },
|
||||||
{ { EntranceType::BlueWarp, RR_DODONGOS_CAVERN_BOSS_ROOM, RR_DEATH_MOUNTAIN_TRAIL, ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP },
|
{ { EntranceType::BlueWarp, RR_DODONGOS_CAVERN_BOSS_ROOM, RR_DEATH_MOUNTAIN_TRAIL, ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP },
|
||||||
@@ -584,6 +587,8 @@ void SetAllEntrancesData() {
|
|||||||
NO_RETURN_ENTRANCE },
|
NO_RETURN_ENTRANCE },
|
||||||
{ { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP },
|
{ { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP },
|
||||||
NO_RETURN_ENTRANCE },
|
NO_RETURN_ENTRANCE },
|
||||||
|
{ { EntranceType::BlueWarp, RR_GANONS_TOWER_GANONDORF_LAIR, RR_GANONS_TOWER_STAIRS_1, ENTR_GANONS_TOWER_0 },
|
||||||
|
NO_RETURN_ENTRANCE },
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1246,6 +1251,15 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||||||
entrancePools[EntranceType::BossReverse].push_back(entrance->GetReverse());
|
entrancePools[EntranceType::BossReverse].push_back(entrance->GetReverse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->GetOption(RSK_SHUFFLE_GANONS_TOWER_ENTRANCE).IsNot(RO_GENERIC_OFF)) {
|
||||||
|
AddElementsToPool(entrancePools[EntranceType::Boss], GetShuffleableEntrances(EntranceType::GanonTower));
|
||||||
|
if (ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||||
|
for (Entrance* entrance : GetShuffleableEntrances(EntranceType::GanonTower)) {
|
||||||
|
entrancePools[EntranceType::BossReverse].push_back(entrance->GetReverse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
entrancePools[EntranceType::ChildBoss] = GetShuffleableEntrances(EntranceType::ChildBoss);
|
entrancePools[EntranceType::ChildBoss] = GetShuffleableEntrances(EntranceType::ChildBoss);
|
||||||
entrancePools[EntranceType::AdultBoss] = GetShuffleableEntrances(EntranceType::AdultBoss);
|
entrancePools[EntranceType::AdultBoss] = GetShuffleableEntrances(EntranceType::AdultBoss);
|
||||||
@@ -1257,6 +1271,16 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||||||
entrancePools[EntranceType::AdultBossReverse].push_back(entrance->GetReverse());
|
entrancePools[EntranceType::AdultBossReverse].push_back(entrance->GetReverse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->GetOption(RSK_SHUFFLE_GANONS_TOWER_ENTRANCE).IsNot(RO_GENERIC_OFF)) {
|
||||||
|
AddElementsToPool(entrancePools[EntranceType::AdultBoss],
|
||||||
|
GetShuffleableEntrances(EntranceType::GanonTower));
|
||||||
|
if (ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||||
|
for (Entrance* entrance : GetShuffleableEntrances(EntranceType::GanonTower)) {
|
||||||
|
entrancePools[EntranceType::AdultBossReverse].push_back(entrance->GetReverse());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1527,6 +1551,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||||||
GetEntrance(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE) },
|
GetEntrance(RR_SPIRIT_TEMPLE_ENTRYWAY, RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE) },
|
||||||
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY),
|
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY),
|
||||||
GetEntrance(RR_SHADOW_TEMPLE_ENTRYWAY, RR_GRAVEYARD_WARP_PAD_REGION) },
|
GetEntrance(RR_SHADOW_TEMPLE_ENTRYWAY, RR_GRAVEYARD_WARP_PAD_REGION) },
|
||||||
|
{ EntranceNameByRegions(RR_GANONS_TOWER_GANONDORF_LAIR, RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR),
|
||||||
|
GetEntrance(RR_GANONS_TOWER_ENTRYWAY, RR_GANONS_TOWER_STAIRS_1) },
|
||||||
};
|
};
|
||||||
|
|
||||||
// If a boss room is inside a dungeon entrance (or inside a dungeon which is inside a dungeon entrance), make
|
// If a boss room is inside a dungeon entrance (or inside a dungeon which is inside a dungeon entrance), make
|
||||||
@@ -1548,6 +1574,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||||||
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_DESERT_COLOSSUS) },
|
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_DESERT_COLOSSUS) },
|
||||||
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_ENTRYWAY, RR_GRAVEYARD_WARP_PAD_REGION),
|
{ EntranceNameByRegions(RR_SHADOW_TEMPLE_ENTRYWAY, RR_GRAVEYARD_WARP_PAD_REGION),
|
||||||
GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION) },
|
GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION) },
|
||||||
|
{ EntranceNameByRegions(RR_GANONS_TOWER_ENTRYWAY, RR_GANONS_TOWER_STAIRS_1),
|
||||||
|
GetEntrance(RR_GANONS_TOWER_GANONDORF_LAIR, RR_GANONS_TOWER_STAIRS_1) },
|
||||||
};
|
};
|
||||||
|
|
||||||
// Pair <BlueWarp exit, BossRoom reverse exit>
|
// Pair <BlueWarp exit, BossRoom reverse exit>
|
||||||
@@ -1568,6 +1596,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||||||
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY) },
|
GetEntrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY) },
|
||||||
{ GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION),
|
{ GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION),
|
||||||
GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY) },
|
GetEntrance(RR_SHADOW_TEMPLE_BOSS_ROOM, RR_SHADOW_TEMPLE_BOSS_ENTRYWAY) },
|
||||||
|
{ GetEntrance(RR_GANONS_TOWER_GANONDORF_LAIR, RR_GANONS_TOWER_STAIRS_1),
|
||||||
|
GetEntrance(RR_GANONS_TOWER_GANONDORF_LAIR, RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR) },
|
||||||
};
|
};
|
||||||
|
|
||||||
for (EntrancePair pair : bossRoomExitPairs) {
|
for (EntrancePair pair : bossRoomExitPairs) {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ enum class EntranceType {
|
|||||||
ChildBossReverse,
|
ChildBossReverse,
|
||||||
AdultBoss,
|
AdultBoss,
|
||||||
AdultBossReverse,
|
AdultBossReverse,
|
||||||
|
GanonTower,
|
||||||
Interior,
|
Interior,
|
||||||
InteriorReverse,
|
InteriorReverse,
|
||||||
SpecialInterior,
|
SpecialInterior,
|
||||||
|
|||||||
@@ -750,7 +750,9 @@ void RegionTable_Init_GanonsCastle() {
|
|||||||
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
|
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}),
|
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}),
|
||||||
|
Entrance(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return false;}),
|
||||||
|
Entrance(RR_GANONS_TOWER_STAIRS_1, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, {}, {
|
areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, {}, {
|
||||||
|
|||||||
@@ -153,6 +153,8 @@ void Settings::CreateOptionDescriptions() {
|
|||||||
"\n"
|
"\n"
|
||||||
"Full - Shuffle the entrances of all boss rooms together. Child may be expected to defeat Phantom Ganon and/or "
|
"Full - Shuffle the entrances of all boss rooms together. Child may be expected to defeat Phantom Ganon and/or "
|
||||||
"Bongo Bongo.";
|
"Bongo Bongo.";
|
||||||
|
mOptionDescriptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE] =
|
||||||
|
"Shuffle the entrance from Ganon's Castle to Ganon's Tower into the pool of boss entrances.";
|
||||||
mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] =
|
mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] =
|
||||||
"Shuffle the pool of Overworld entrances, which corresponds to almost all loading zones between overworld "
|
"Shuffle the pool of Overworld entrances, which corresponds to almost all loading zones between overworld "
|
||||||
"areas.\n"
|
"areas.\n"
|
||||||
|
|||||||
@@ -6604,6 +6604,7 @@ typedef enum {
|
|||||||
RSK_DAMAGE_MULTIPLIER,
|
RSK_DAMAGE_MULTIPLIER,
|
||||||
RSK_ALL_LOCATIONS_REACHABLE,
|
RSK_ALL_LOCATIONS_REACHABLE,
|
||||||
RSK_SHUFFLE_BOSS_ENTRANCES,
|
RSK_SHUFFLE_BOSS_ENTRANCES,
|
||||||
|
RSK_SHUFFLE_GANONS_TOWER_ENTRANCE,
|
||||||
RSK_SHUFFLE_100_GS_REWARD,
|
RSK_SHUFFLE_100_GS_REWARD,
|
||||||
RSK_TRIFORCE_HUNT,
|
RSK_TRIFORCE_HUNT,
|
||||||
RSK_TRIFORCE_HUNT_PIECES_TOTAL,
|
RSK_TRIFORCE_HUNT_PIECES_TOTAL,
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#define ENTRANCE_TABLE_SIZE ENTR_MAX
|
#define ENTRANCE_TABLE_SIZE ENTR_MAX
|
||||||
|
|
||||||
#define MAX_ENTRANCE_RANDO_USED_INDEX 0x0820
|
#define MAX_ENTRANCE_RANDO_USED_INDEX 0x0820
|
||||||
#define ENTRANCE_OVERRIDES_MAX_COUNT 293 // 19 one-way entrances + 124 two-way entrances (x2) + 26 Thieves' Hideout
|
#define ENTRANCE_OVERRIDES_MAX_COUNT 296 // 20 one-way entrances + 125 two-way entrances (x2) + 26 Thieves' Hideout
|
||||||
#define SHUFFLEABLE_BOSS_COUNT 8
|
#define SHUFFLEABLE_BOSS_COUNT 8
|
||||||
|
|
||||||
#define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1
|
#define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1
|
||||||
|
|||||||
@@ -397,15 +397,17 @@ const EntranceData entranceData[] = {
|
|||||||
{ ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, ENTR_TEMPLE_OF_TIME_ENTRANCE, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Temple of Time Entrance", "ToT Courtyard Temple Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot"},
|
{ ENTR_TEMPLE_OF_TIME_EXTERIOR_DAY_OUTSIDE_TEMPLE, ENTR_TEMPLE_OF_TIME_ENTRANCE, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Temple of Time Entrance", "ToT Courtyard Temple Entry", ENTRANCE_GROUP_MARKET, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_INTERIOR, "tot"},
|
||||||
|
|
||||||
// Hyrule Castle
|
// Hyrule Castle
|
||||||
{ ENTR_MARKET_DAY_CASTLE_EXIT, ENTR_CASTLE_GROUNDS_SOUTH_EXIT, {SCENE_NO_SPAWN(SCENE_HYRULE_CASTLE), SCENE_NO_SPAWN(SCENE_OUTSIDE_GANONS_CASTLE)}, "Castle Grounds South Exit", "Market Castle Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD, "outside ganon's castle"},
|
{ ENTR_MARKET_DAY_CASTLE_EXIT, ENTR_CASTLE_GROUNDS_SOUTH_EXIT, {SCENE_NO_SPAWN(SCENE_HYRULE_CASTLE), SCENE_NO_SPAWN(SCENE_OUTSIDE_GANONS_CASTLE)}, "Castle Grounds South Exit", "Market Castle Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_MARKET, ENTRANCE_TYPE_OVERWORLD, "outside ganon's castle"},
|
||||||
{ ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC, ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, SINGLE_SCENE_INFO(SCENE_HYRULE_CASTLE), "HC Boulder Crawlspace", "HC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "", 1},
|
{ ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC, ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, SINGLE_SCENE_INFO(SCENE_HYRULE_CASTLE), "HC Boulder Crawlspace", "HC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "", 1},
|
||||||
{ ENTRANCE_GROTTO_LOAD(GROTTO_HC_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HC_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_CASTLE), "HC Storms Grotto Entry", "HC Storms Grotto", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_GROTTO, "bombable", 1},
|
{ ENTRANCE_GROTTO_LOAD(GROTTO_HC_STORMS_OFFSET), ENTRANCE_GROTTO_EXIT(GROTTO_HC_STORMS_OFFSET), SINGLE_SCENE_INFO(SCENE_HYRULE_CASTLE), "HC Storms Grotto Entry", "HC Storms Grotto", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_GROTTO, "bombable", 1},
|
||||||
{ ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 0x01 }}, "HC Great Fairy Fountain", "HC Boulder Crawlspace", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR},
|
{ ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, 0x01 }}, "HC Great Fairy Fountain", "HC Boulder Crawlspace", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR},
|
||||||
{ ENTRANCE_GROTTO_EXIT(GROTTO_HC_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HC_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x09 }}, "HC Storms Grotto", "HC Storms Grotto Entry", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_GROTTO, "bombable"},
|
{ ENTRANCE_GROTTO_EXIT(GROTTO_HC_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_HC_STORMS_OFFSET), {{ SCENE_GROTTOS, 0x09 }}, "HC Storms Grotto", "HC Storms Grotto Entry", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_GROTTO, "bombable"},
|
||||||
{ ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, ENTR_POTION_SHOP_KAKARIKO_1, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Behind Pillar", "OGC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle", 1},
|
{ ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, ENTR_POTION_SHOP_KAKARIKO_1, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Behind Pillar", "OGC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle", 1},
|
||||||
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
||||||
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
||||||
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"}
|
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"},
|
||||||
|
{ ENTR_INSIDE_GANONS_CASTLE_1, ENTR_GANONS_TOWER_0, SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Entrance", "Inside Ganon's Castle Past Trials", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "gc"},
|
||||||
|
{ ENTR_GANONS_TOWER_0, ENTR_INSIDE_GANONS_CASTLE_1, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Past Trials", "Ganon's Tower Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "gc"},
|
||||||
|
|
||||||
// clang-format on
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -295,6 +295,12 @@ void Settings::CreateOptions() {
|
|||||||
OPT_CALLBACK(RSK_SHUFFLE_BOSS_ENTRANCES, {
|
OPT_CALLBACK(RSK_SHUFFLE_BOSS_ENTRANCES, {
|
||||||
HandleMixedEntrancePoolsUI();
|
HandleMixedEntrancePoolsUI();
|
||||||
|
|
||||||
|
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) == RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) {
|
||||||
|
mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE].Hide();
|
||||||
|
} else {
|
||||||
|
mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE].Unhide();
|
||||||
|
}
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) ==
|
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) ==
|
||||||
RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF ||
|
RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF ||
|
||||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("MixedEntrances"), RO_GENERIC_OFF) == RO_GENERIC_OFF) {
|
CVarGetInteger(CVAR_RANDOMIZER_SETTING("MixedEntrances"), RO_GENERIC_OFF) == RO_GENERIC_OFF) {
|
||||||
@@ -303,6 +309,7 @@ void Settings::CreateOptions() {
|
|||||||
mOptions[RSK_MIX_BOSS_ENTRANCES].Unhide();
|
mOptions[RSK_MIX_BOSS_ENTRANCES].Unhide();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
OPT_BOOL(RSK_SHUFFLE_GANONS_TOWER_ENTRANCE, "Ganon's Tower Entrance", CVAR_RANDOMIZER_SETTING("ShuffleGanonTowerEntrance"), mOptionDescriptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_OVERWORLD_ENTRANCES, "Overworld Entrances", CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES]);
|
OPT_BOOL(RSK_SHUFFLE_OVERWORLD_ENTRANCES, "Overworld Entrances", CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES]);
|
||||||
OPT_CALLBACK(RSK_SHUFFLE_OVERWORLD_ENTRANCES, {
|
OPT_CALLBACK(RSK_SHUFFLE_OVERWORLD_ENTRANCES, {
|
||||||
HandleMixedEntrancePoolsUI();
|
HandleMixedEntrancePoolsUI();
|
||||||
@@ -2244,13 +2251,13 @@ void Settings::CreateOptions() {
|
|||||||
mOptionGroups[RSG_MENU_SECTION_ENTRANCES] = OptionGroup::SubGroup(
|
mOptionGroups[RSG_MENU_SECTION_ENTRANCES] = OptionGroup::SubGroup(
|
||||||
"Entrances",
|
"Entrances",
|
||||||
{ &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
{ &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE], &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES], &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], &mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS], &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS],
|
&mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS],
|
||||||
&mOptions[RSK_DECOUPLED_ENTRANCES], &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], &mOptions[RSK_DECOUPLED_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_BOSS_ENTRANCES], &mOptions[RSK_MIX_OVERWORLD_ENTRANCES],
|
&mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_INTERIOR_ENTRANCES], &mOptions[RSK_MIX_THIEVES_HIDEOUT_ENTRANCES],
|
&mOptions[RSK_MIX_OVERWORLD_ENTRANCES], &mOptions[RSK_MIX_INTERIOR_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_GROTTO_ENTRANCES] },
|
&mOptions[RSK_MIX_THIEVES_HIDEOUT_ENTRANCES], &mOptions[RSK_MIX_GROTTO_ENTRANCES] },
|
||||||
WidgetContainerType::SECTION);
|
WidgetContainerType::SECTION);
|
||||||
mOptionGroups[RSG_MENU_COLUMN_ENTRANCES] =
|
mOptionGroups[RSG_MENU_COLUMN_ENTRANCES] =
|
||||||
OptionGroup::SubGroup("", { &mOptionGroups[RSG_MENU_SECTION_ENTRANCES] }, WidgetContainerType::COLUMN);
|
OptionGroup::SubGroup("", { &mOptionGroups[RSG_MENU_SECTION_ENTRANCES] }, WidgetContainerType::COLUMN);
|
||||||
@@ -2538,6 +2545,7 @@ void Settings::CreateOptions() {
|
|||||||
&mOptions[RSK_SHUFFLE_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
||||||
|
&mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE],
|
||||||
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES],
|
||||||
@@ -2958,6 +2966,10 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
|||||||
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF);
|
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mOptions[RSK_SHUFFLE_BOSS_ENTRANCES].Is(RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF)) {
|
||||||
|
mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE].Set(RO_GENERIC_OFF);
|
||||||
|
}
|
||||||
|
|
||||||
if (mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) {
|
if (mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Is(RO_DUNGEON_REWARDS_END_OF_DUNGEON)) {
|
||||||
mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_DUNGEON_REWARD);
|
mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_DUNGEON_REWARD);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user