mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-14 02:27:21 -07:00
shuffle gerudo fortress entrances
This commit is contained in:
parent
237dcfec74
commit
6983ffdb29
9 changed files with 121 additions and 23 deletions
|
@ -343,7 +343,7 @@ void SetAllEntrancesData() {
|
|||
{ { EntranceType::Interior, RR_HYRULE_CASTLE_GROUNDS, RR_HC_GREAT_FAIRY_FOUNTAIN, ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_DINS_HC },
|
||||
{ EntranceType::Interior, RR_HC_GREAT_FAIRY_FOUNTAIN, RR_CASTLE_GROUNDS, ENTR_CASTLE_GROUNDS_GREAT_FAIRY_EXIT } },
|
||||
{ { EntranceType::Interior, RR_GANONS_CASTLE_GROUNDS, RR_OGC_GREAT_FAIRY_FOUNTAIN, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD },
|
||||
// 0x3E8 is an unused entrance index repruposed to differentiate between the HC and OGC fairy
|
||||
// 0x3E8 is an unused entrance index repurposed to differentiate between the HC and OGC fairy
|
||||
// fountain exits (normally they both use 0x340)
|
||||
{ EntranceType::Interior, RR_OGC_GREAT_FAIRY_FOUNTAIN, RR_CASTLE_GROUNDS, ENTR_POTION_SHOP_KAKARIKO_1 } },
|
||||
{ { EntranceType::Interior, RR_DMC_LOWER_NEARBY, RR_DMC_GREAT_FAIRY_FOUNTAIN, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_DMC },
|
||||
|
@ -364,6 +364,33 @@ void SetAllEntrancesData() {
|
|||
{ { EntranceType::SpecialInterior, RR_KAK_BACKYARD, RR_KAK_POTION_SHOP_BACK, ENTR_POTION_SHOP_KAKARIKO_BACK },
|
||||
{ EntranceType::SpecialInterior, RR_KAK_POTION_SHOP_BACK, RR_KAK_BACKYARD, ENTR_KAKARIKO_VILLAGE_OUTSIDE_POTION_SHOP_BACK } },
|
||||
|
||||
{ { EntranceType::GerudoFortress, RR_GF_OUTSKIRTS, RR_TH_1_TORCH_CELL, ENTR_THIEVES_HIDEOUT_0 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_1_TORCH_CELL, RR_GF_OUTSKIRTS, ENTR_GERUDOS_FORTRESS_1 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_NEAR_GROTTO, RR_TH_1_TORCH_CELL, ENTR_THIEVES_HIDEOUT_1 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_1_TORCH_CELL, RR_GF_NEAR_GROTTO, ENTR_GERUDOS_FORTRESS_2 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_NEAR_GROTTO, RR_TH_KITCHEN_CORRIDOR, ENTR_THIEVES_HIDEOUT_2 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_KITCHEN_CORRIDOR, RR_GF_NEAR_GROTTO, ENTR_GERUDOS_FORTRESS_3 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_ABOVE_GTG, RR_TH_KITCHEN_CORRIDOR, ENTR_THIEVES_HIDEOUT_3 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_KITCHEN_CORRIDOR, RR_GF_ABOVE_GTG, ENTR_GERUDOS_FORTRESS_4 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_NEAR_GROTTO, RR_TH_STEEP_SLOPE_CELL, ENTR_THIEVES_HIDEOUT_4 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_STEEP_SLOPE_CELL, RR_GF_NEAR_GROTTO, ENTR_GERUDOS_FORTRESS_5 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_BOTTOM_OF_LOWER_VINES, RR_TH_STEEP_SLOPE_CELL, ENTR_THIEVES_HIDEOUT_5 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_STEEP_SLOPE_CELL, RR_GF_BOTTOM_OF_LOWER_VINES, ENTR_GERUDOS_FORTRESS_6 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_ABOVE_GTG, RR_TH_DOUBLE_CELL, ENTR_THIEVES_HIDEOUT_6 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_DOUBLE_CELL, RR_GF_ABOVE_GTG, ENTR_GERUDOS_FORTRESS_7 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_TOP_OF_LOWER_VINES, RR_TH_DOUBLE_CELL, ENTR_THIEVES_HIDEOUT_7 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_DOUBLE_CELL, RR_GF_TOP_OF_LOWER_VINES, ENTR_GERUDOS_FORTRESS_8 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_TOP_OF_LOWER_VINES, RR_TH_KITCHEN_TOP, ENTR_THIEVES_HIDEOUT_8 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_KITCHEN_TOP, RR_GF_TOP_OF_LOWER_VINES, ENTR_GERUDOS_FORTRESS_9 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_NEAR_GS, RR_TH_KITCHEN_TOP, ENTR_THIEVES_HIDEOUT_9 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_KITCHEN_TOP, RR_GF_NEAR_GS, ENTR_GERUDOS_FORTRESS_10 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_BELOW_CHEST, RR_TH_BREAK_ROOM, ENTR_THIEVES_HIDEOUT_10 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_BREAK_ROOM, RR_GF_BELOW_CHEST, ENTR_GERUDOS_FORTRESS_11 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_ABOVE_JAIL, RR_TH_BREAK_ROOM_CORRIDOR, ENTR_THIEVES_HIDEOUT_11 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_BREAK_ROOM_CORRIDOR, RR_GF_ABOVE_JAIL, ENTR_GERUDOS_FORTRESS_12 } },
|
||||
{ { EntranceType::GerudoFortress, RR_GF_BELOW_GS, RR_TH_DEAD_END_CELL, ENTR_THIEVES_HIDEOUT_12 },
|
||||
{ EntranceType::GerudoFortress, RR_TH_DEAD_END_CELL, RR_GF_BELOW_GS, ENTR_GERUDOS_FORTRESS_13 } },
|
||||
|
||||
// Grotto Loads use an entrance index of 0x0700 + their grotto id. The id is used as index for the
|
||||
// grottoLoadTable in soh/soh/Enhancements/randomizer/randomizer_grotto.c
|
||||
// Grotto Returns use an entrance index of 0x0800 + their grotto id. The id is used as index for the
|
||||
|
@ -643,7 +670,8 @@ std::vector<Entrance*> EntranceShuffler::AssumeEntrancePool(std::vector<Entrance
|
|||
(ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) ||
|
||||
ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL)))) {
|
||||
auto type = entrance->GetType();
|
||||
if (((type == EntranceType::Dungeon || type == EntranceType::GrottoGrave) &&
|
||||
if (((type == EntranceType::Dungeon || type == EntranceType::GerudoFortress ||
|
||||
type == EntranceType::GrottoGrave) &&
|
||||
entrance->GetReverse()->GetName() !=
|
||||
"Spirit Temple Entryway -> Desert Colossus From Spirit Entryway") ||
|
||||
(type == EntranceType::Interior &&
|
||||
|
@ -1260,6 +1288,17 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
}
|
||||
}
|
||||
|
||||
// Gerudo Fortress entrances
|
||||
if (ctx->GetOption(RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES)) {
|
||||
entrancePools[EntranceType::GerudoFortress] = GetShuffleableEntrances(EntranceType::GerudoFortress);
|
||||
|
||||
if (ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||
for (Entrance* entrance : entrancePools[EntranceType::GerudoFortress]) {
|
||||
entrancePools[EntranceType::GerudoFortressReverse].push_back(entrance->GetReverse());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// grotto entrances
|
||||
if (ctx->GetOption(RSK_SHUFFLE_GROTTO_ENTRANCES)) {
|
||||
entrancePools[EntranceType::GrottoGrave] = GetShuffleableEntrances(EntranceType::GrottoGrave);
|
||||
|
@ -1327,6 +1366,12 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
poolsToMix.insert(EntranceType::InteriorReverse);
|
||||
}
|
||||
}
|
||||
if (ctx->GetOption(RSK_MIX_GERUDO_FORTRESS_ENTRANCES)) {
|
||||
poolsToMix.insert(EntranceType::GerudoFortress);
|
||||
if (ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||
poolsToMix.insert(EntranceType::GerudoFortressReverse);
|
||||
}
|
||||
}
|
||||
if (ctx->GetOption(RSK_MIX_GROTTO_ENTRANCES)) {
|
||||
poolsToMix.insert(EntranceType::GrottoGrave);
|
||||
if (ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) {
|
||||
|
|
|
@ -28,6 +28,8 @@ enum class EntranceType {
|
|||
Interior,
|
||||
InteriorReverse,
|
||||
SpecialInterior,
|
||||
GerudoFortress,
|
||||
GerudoFortressReverse,
|
||||
GrottoGrave,
|
||||
GrottoGraveReverse,
|
||||
Overworld,
|
||||
|
|
|
@ -193,10 +193,11 @@ void RegionTable_Init_GerudoFortress() {
|
|||
//Exits
|
||||
//you don't take fall damage if you land on the rock with the flag on for some reason
|
||||
//there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP
|
||||
Entrance(RR_GF_OUTSKIRTS, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
|
||||
Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GF_BELOW_CHEST, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_GF_OUTSKIRTS, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
|
||||
Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GF_BELOW_CHEST, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_TH_BREAK_ROOM_CORRIDOR, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", SCENE_GERUDOS_FORTRESS, {}, {}, {
|
||||
|
|
|
@ -43,8 +43,9 @@ void RegionTable_Init_ThievesHideout() {
|
|||
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
|
||||
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
|
||||
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
|
||||
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
|
||||
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_DEAD_END_CELL] = Region("Thieves Hideout Dead End Cell", SCENE_THIEVES_HIDEOUT, {
|
||||
|
@ -73,8 +74,8 @@ void RegionTable_Init_ThievesHideout() {
|
|||
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
|
||||
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_KITCHEN_CORRIDOR] = Region("Thieves Hideout Kitchen Corridor", SCENE_THIEVES_HIDEOUT, {}, {
|
||||
|
|
|
@ -166,6 +166,8 @@ void Settings::CreateOptionDescriptions() {
|
|||
"- Link's House\n"
|
||||
"- Temple of Time\n"
|
||||
"- Kakariko Potion Shop";
|
||||
mOptionDescriptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES] =
|
||||
"Shuffle the pool of entrances between Gerudo Fortress & Thieves' Hideout.";
|
||||
mOptionDescriptions[RSK_SHUFFLE_GROTTO_ENTRANCES] =
|
||||
"Shuffle the pool of grotto entrances, including all graves, small Fairy fountains and the Deku Theatre.";
|
||||
mOptionDescriptions[RSK_SHUFFLE_OWL_DROPS] = "Randomize where Kaepora Gaebora (the Owl) drops you at when you talk "
|
||||
|
|
|
@ -5924,6 +5924,7 @@ typedef enum {
|
|||
RSK_SHUFFLE_DUNGEON_ENTRANCES,
|
||||
RSK_SHUFFLE_OVERWORLD_ENTRANCES,
|
||||
RSK_SHUFFLE_INTERIOR_ENTRANCES,
|
||||
RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES,
|
||||
RSK_SHUFFLE_GROTTO_ENTRANCES,
|
||||
RSK_SHUFFLE_OWL_DROPS,
|
||||
RSK_SHUFFLE_WARP_SONGS,
|
||||
|
@ -5933,6 +5934,7 @@ typedef enum {
|
|||
RSK_MIX_BOSS_ENTRANCES,
|
||||
RSK_MIX_OVERWORLD_ENTRANCES,
|
||||
RSK_MIX_INTERIOR_ENTRANCES,
|
||||
RSK_MIX_GERUDO_FORTRESS_ENTRANCES,
|
||||
RSK_MIX_GROTTO_ENTRANCES,
|
||||
RSK_DECOUPLED_ENTRANCES,
|
||||
RSK_STARTING_SKULLTULA_TOKEN,
|
||||
|
|
|
@ -409,9 +409,10 @@ void Entrance_SetSavewarpEntrance(void) {
|
|||
} else if (scene == SCENE_GANONS_TOWER || scene == SCENE_GANONDORF_BOSS ||
|
||||
scene == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE || scene == SCENE_GANONS_TOWER_COLLAPSE_INTERIOR ||
|
||||
scene == SCENE_GANON_BOSS || scene == SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR) {
|
||||
gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; // Inside Ganon's Castle -> Ganon's Tower Climb
|
||||
} else if (scene == SCENE_THIEVES_HIDEOUT) { // Theives hideout
|
||||
gSaveContext.entranceIndex = ENTR_THIEVES_HIDEOUT_0; // Gerudo Fortress -> Thieve's Hideout spawn 0
|
||||
gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; // Inside Ganon's Castle -> Ganon's Tower Climb
|
||||
} else if (scene == SCENE_THIEVES_HIDEOUT &&
|
||||
!Randomizer_GetSettingValue(RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES)) { // Thieves' Hideout
|
||||
gSaveContext.entranceIndex = ENTR_THIEVES_HIDEOUT_0; // Gerudo Fortress -> Thieves' Hideout spawn 0
|
||||
} else if (scene == SCENE_LINKS_HOUSE &&
|
||||
Randomizer_GetSettingValue(RSK_SHUFFLE_INTERIOR_ENTRANCES) != RO_INTERIOR_ENTRANCE_SHUFFLE_ALL) {
|
||||
// Save warping in Link's house keeps the player there if Link's house not shuffled,
|
||||
|
@ -425,10 +426,9 @@ void Entrance_SetSavewarpEntrance(void) {
|
|||
} else if (LINK_IS_CHILD) {
|
||||
gSaveContext.entranceIndex = Entrance_OverrideNextIndex(ENTR_LINKS_HOUSE_CHILD_SPAWN); // Child Overworld Spawn
|
||||
} else {
|
||||
gSaveContext.entranceIndex = Entrance_OverrideNextIndex(
|
||||
ENTR_HYRULE_FIELD_10); // Adult Overworld Spawn (Normally 0x5F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD), but 0x282
|
||||
// (ENTR_HYRULE_FIELD_10) has been repurposed to differentiate from Prelude which
|
||||
// also uses 0x5F4)
|
||||
// Adult Overworld Spawn. Normally 0x5F4 (ENTR_TEMPLE_OF_TIME_WARP_PAD), but 0x282
|
||||
// (ENTR_HYRULE_FIELD_10) has been repurposed to differentiate from Prelude which also uses 0x5F4
|
||||
gSaveContext.entranceIndex = Entrance_OverrideNextIndex(ENTR_HYRULE_FIELD_10);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -328,6 +328,32 @@ const EntranceData entranceData[] = {
|
|||
{ ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "GF Outside Training Ground", "Gerudo Training Ground Entrance", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON, "gtg", 1},
|
||||
{ ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET), ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET), {{ SCENE_FAIRYS_FOUNTAIN, 0x00 }}, "GF Fairy Grotto", "GF Storms Grotto Entry", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_GROTTO, ""},
|
||||
{ ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE, SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "Gerudo Training Ground Entrance", "GF Outside Training Ground", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON, "gtg"},
|
||||
{ ENTR_GERUDOS_FORTRESS_1, ENTR_THIEVES_HIDEOUT_0, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 1", "Thieves 1", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_2, ENTR_THIEVES_HIDEOUT_1, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 2", "Thieves 2", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_3, ENTR_THIEVES_HIDEOUT_2, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 3", "Thieves 3", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_4, ENTR_THIEVES_HIDEOUT_3, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 4", "Thieves 4", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_5, ENTR_THIEVES_HIDEOUT_4, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 5", "Thieves 5", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_6, ENTR_THIEVES_HIDEOUT_5, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 6", "Thieves 6", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_7, ENTR_THIEVES_HIDEOUT_6, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 7", "Thieves 7", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_8, ENTR_THIEVES_HIDEOUT_7, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 8", "Thieves 8", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_9, ENTR_THIEVES_HIDEOUT_8, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 9", "Thieves 9", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_10, ENTR_THIEVES_HIDEOUT_9, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 10", "Thieves 10", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_11, ENTR_THIEVES_HIDEOUT_10, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 11", "Thieves 11", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_12, ENTR_THIEVES_HIDEOUT_11, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 12", "Thieves 12", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_GERUDOS_FORTRESS_13, ENTR_THIEVES_HIDEOUT_12, SINGLE_SCENE_INFO(SCENE_THIEVES_HIDEOUT), "Gerudo 13", "Thieves 13", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_0, ENTR_GERUDOS_FORTRESS_1, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 1", "Gerudo 1", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_1, ENTR_GERUDOS_FORTRESS_2, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 2", "Gerudo 2", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_2, ENTR_GERUDOS_FORTRESS_3, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 3", "Gerudo 3", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_3, ENTR_GERUDOS_FORTRESS_4, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 4", "Gerudo 4", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_4, ENTR_GERUDOS_FORTRESS_5, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 5", "Gerudo 5", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_5, ENTR_GERUDOS_FORTRESS_6, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 6", "Gerudo 6", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_6, ENTR_GERUDOS_FORTRESS_7, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 7", "Gerudo 7", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_7, ENTR_GERUDOS_FORTRESS_8, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 8", "Gerudo 8", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_8, ENTR_GERUDOS_FORTRESS_9, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 9", "Gerudo 9", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_9, ENTR_GERUDOS_FORTRESS_10, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 10", "Gerudo 10", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_10, ENTR_GERUDOS_FORTRESS_11, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 11", "Gerudo 11", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_11, ENTR_GERUDOS_FORTRESS_12, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 12", "Gerudo 12", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
{ ENTR_THIEVES_HIDEOUT_12, ENTR_GERUDOS_FORTRESS_13, SINGLE_SCENE_INFO(SCENE_GERUDOS_FORTRESS), "Thieves 13", "Gerudo 13", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DUNGEON},
|
||||
|
||||
// The Wasteland
|
||||
{ ENTR_GERUDOS_FORTRESS_GATE_EXIT, ENTR_HAUNTED_WASTELAND_EAST_EXIT, SINGLE_SCENE_INFO(SCENE_HAUNTED_WASTELAND), "Haunted Wasteland East Exit", "Gerudo Fortress Gate Exit", ENTRANCE_GROUP_HAUNTED_WASTELAND, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_OVERWORLD, "hw,gf"},
|
||||
|
|
|
@ -144,6 +144,7 @@ void Settings::CreateOptions() {
|
|||
OPT_U8(RSK_SHUFFLE_BOSS_ENTRANCES, "Boss Entrances", {"Off", "Age Restricted", "Full"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleBossEntrances"), mOptionDescriptions[RSK_SHUFFLE_BOSS_ENTRANCES], WidgetType::Combobox, RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF);
|
||||
OPT_BOOL(RSK_SHUFFLE_OVERWORLD_ENTRANCES, "Overworld Entrances", CVAR_RANDOMIZER_SETTING("ShuffleOverworldEntrances"), mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES]);
|
||||
OPT_U8(RSK_SHUFFLE_INTERIOR_ENTRANCES, "Interior Entrances", {"Off", "Simple", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleInteriorsEntrances"), mOptionDescriptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], WidgetType::Combobox, RO_INTERIOR_ENTRANCE_SHUFFLE_OFF);
|
||||
OPT_BOOL(RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES, "Gerudo Fortress Entrances", CVAR_RANDOMIZER_SETTING("ShuffleGerudoFortressEntrances"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES]);
|
||||
OPT_BOOL(RSK_SHUFFLE_GROTTO_ENTRANCES, "Grottos Entrances", CVAR_RANDOMIZER_SETTING("ShuffleGrottosEntrances"), mOptionDescriptions[RSK_SHUFFLE_GROTTO_ENTRANCES]);
|
||||
OPT_BOOL(RSK_SHUFFLE_OWL_DROPS, "Owl Drops", CVAR_RANDOMIZER_SETTING("ShuffleOwlDrops"), mOptionDescriptions[RSK_SHUFFLE_OWL_DROPS]);
|
||||
OPT_BOOL(RSK_SHUFFLE_WARP_SONGS, "Warp Songs", CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), mOptionDescriptions[RSK_SHUFFLE_WARP_SONGS]);
|
||||
|
@ -153,6 +154,7 @@ void Settings::CreateOptions() {
|
|||
OPT_BOOL(RSK_MIX_BOSS_ENTRANCES, "Mix Bosses", CVAR_RANDOMIZER_SETTING("MixBosses"), mOptionDescriptions[RSK_MIX_BOSS_ENTRANCES], IMFLAG_NONE);
|
||||
OPT_BOOL(RSK_MIX_OVERWORLD_ENTRANCES, "Mix Overworld", CVAR_RANDOMIZER_SETTING("MixOverworld"), mOptionDescriptions[RSK_MIX_OVERWORLD_ENTRANCES], IMFLAG_NONE);
|
||||
OPT_BOOL(RSK_MIX_INTERIOR_ENTRANCES, "Mix Interiors", CVAR_RANDOMIZER_SETTING("MixInteriors"), mOptionDescriptions[RSK_MIX_INTERIOR_ENTRANCES], IMFLAG_NONE);
|
||||
OPT_BOOL(RSK_MIX_GERUDO_FORTRESS_ENTRANCES, "Mix Gerudo Fortress", CVAR_RANDOMIZER_SETTING("MixGerudo Fortress"), mOptionDescriptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES]);
|
||||
OPT_BOOL(RSK_MIX_GROTTO_ENTRANCES, "Mix Grottos", CVAR_RANDOMIZER_SETTING("MixGrottos"), mOptionDescriptions[RSK_MIX_GROTTO_ENTRANCES]);
|
||||
OPT_BOOL(RSK_DECOUPLED_ENTRANCES, "Decouple Entrances", CVAR_RANDOMIZER_SETTING("DecoupleEntrances"), mOptionDescriptions[RSK_DECOUPLED_ENTRANCES]);
|
||||
OPT_BOOL(RSK_BOMBCHU_BAG, "Bombchu Bag", CVAR_RANDOMIZER_SETTING("BombchuBag"), mOptionDescriptions[RSK_BOMBCHU_BAG]);
|
||||
|
@ -1216,10 +1218,11 @@ void Settings::CreateOptions() {
|
|||
"Shuffle Entrances",
|
||||
{ &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS],
|
||||
&mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], &mOptions[RSK_DECOUPLED_ENTRANCES],
|
||||
&mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES],
|
||||
&mOptions[RSK_MIX_OVERWORLD_ENTRANCES], &mOptions[RSK_MIX_INTERIOR_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES], &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS], &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS],
|
||||
&mOptions[RSK_DECOUPLED_ENTRANCES], &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES],
|
||||
&mOptions[RSK_MIX_BOSS_ENTRANCES], &mOptions[RSK_MIX_OVERWORLD_ENTRANCES],
|
||||
&mOptions[RSK_MIX_INTERIOR_ENTRANCES], &mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES],
|
||||
&mOptions[RSK_MIX_GROTTO_ENTRANCES] },
|
||||
WidgetContainerType::COLUMN);
|
||||
mOptionGroups[RSG_WORLD_IMGUI_TABLE] = OptionGroup::SubGroup("World",
|
||||
|
@ -1452,6 +1455,7 @@ void Settings::CreateOptions() {
|
|||
&mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES],
|
||||
&mOptions[RSK_SHUFFLE_OWL_DROPS],
|
||||
&mOptions[RSK_SHUFFLE_WARP_SONGS],
|
||||
|
@ -1461,6 +1465,7 @@ void Settings::CreateOptions() {
|
|||
&mOptions[RSK_MIX_BOSS_ENTRANCES],
|
||||
&mOptions[RSK_MIX_OVERWORLD_ENTRANCES],
|
||||
&mOptions[RSK_MIX_INTERIOR_ENTRANCES],
|
||||
&mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES],
|
||||
&mOptions[RSK_MIX_GROTTO_ENTRANCES],
|
||||
&mOptions[RSK_DECOUPLED_ENTRANCES],
|
||||
&mOptions[RSK_BOMBCHU_BAG],
|
||||
|
@ -2070,6 +2075,7 @@ void Settings::UpdateOptionProperties() {
|
|||
mOptions[RSK_MIX_BOSS_ENTRANCES].Hide();
|
||||
mOptions[RSK_MIX_OVERWORLD_ENTRANCES].Hide();
|
||||
mOptions[RSK_MIX_INTERIOR_ENTRANCES].Hide();
|
||||
mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES].Hide();
|
||||
mOptions[RSK_MIX_GROTTO_ENTRANCES].Hide();
|
||||
} else {
|
||||
mOptions[RSK_MIXED_ENTRANCE_POOLS].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
|
@ -2077,6 +2083,7 @@ void Settings::UpdateOptionProperties() {
|
|||
mOptions[RSK_MIX_BOSS_ENTRANCES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
mOptions[RSK_MIX_OVERWORLD_ENTRANCES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
mOptions[RSK_MIX_INTERIOR_ENTRANCES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
mOptions[RSK_MIX_GROTTO_ENTRANCES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
|
||||
RandomizerSettingKey lastKey = RSK_MIXED_ENTRANCE_POOLS;
|
||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleDungeonsEntrances"), RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) ==
|
||||
|
@ -2105,6 +2112,13 @@ void Settings::UpdateOptionProperties() {
|
|||
mOptions[RSK_MIX_INTERIOR_ENTRANCES].Unhide();
|
||||
lastKey = RSK_MIX_INTERIOR_ENTRANCES;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoFortressEntrances"), RO_GENERIC_OFF) ==
|
||||
RO_GENERIC_OFF) {
|
||||
mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES].Hide();
|
||||
} else {
|
||||
mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES].Unhide();
|
||||
lastKey = RSK_MIX_GERUDO_FORTRESS_ENTRANCES;
|
||||
}
|
||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGrottosEntrances"), RO_GENERIC_OFF) == RO_GENERIC_OFF) {
|
||||
mOptions[RSK_MIX_GROTTO_ENTRANCES].Hide();
|
||||
} else {
|
||||
|
@ -2562,8 +2576,8 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
|||
mOptions[RSK_SHUFFLE_BOSS_ENTRANCES].IsNot(RO_BOSS_ROOM_ENTRANCE_SHUFFLE_OFF) ||
|
||||
mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] ||
|
||||
mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].IsNot(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF) ||
|
||||
mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] ||
|
||||
mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) {
|
||||
mOptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES] || mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] ||
|
||||
mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] || mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) {
|
||||
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_ON);
|
||||
} else {
|
||||
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||
|
@ -2819,6 +2833,7 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
|||
bool bossShuffle = !mOptions[RSK_SHUFFLE_BOSS_ENTRANCES].Is(RO_GENERIC_OFF);
|
||||
bool overworldShuffle = !mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES].Is(RO_GENERIC_OFF);
|
||||
bool interiorShuffle = !mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].Is(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF);
|
||||
bool gerudoFortressShuffle = !mOptions[RSK_SHUFFLE_GERUDO_FORTRESS_ENTRANCES].Is(RO_GENERIC_OFF);
|
||||
bool grottoShuffle = !mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES].Is(RO_GENERIC_OFF);
|
||||
|
||||
if (dungeonShuffle + bossShuffle + overworldShuffle + interiorShuffle + grottoShuffle <= 1) {
|
||||
|
@ -2841,6 +2856,10 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
|||
mOptions[RSK_MIX_INTERIOR_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||
}
|
||||
|
||||
if (!mOptions[RSK_MIXED_ENTRANCE_POOLS] || !gerudoFortressShuffle) {
|
||||
mOptions[RSK_MIX_GERUDO_FORTRESS_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||
}
|
||||
|
||||
if (!mOptions[RSK_MIXED_ENTRANCE_POOLS] || !grottoShuffle) {
|
||||
mOptions[RSK_MIX_GROTTO_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue