Misc fixes for Shuffle Climb (#6296)

Rename deku tree grass on 2F, move logic accordingly
Include climb requirement in Dodongo's Armos Room without unintuitive jumps
Spirit typo had locked door before child climb linked to 2F instead of 1F
This commit is contained in:
Philip Dubé
2026-02-27 02:36:51 +00:00
committed by GitHub
parent c3ffaa918d
commit fe5dce24b5
7 changed files with 24 additions and 22 deletions

View File

@@ -387,8 +387,8 @@ void Rando::StaticData::RegisterGrassLocations() {
locationTable[RC_DEKU_TREE_LOBBY_GRASS_1] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(391, -156), "Lobby Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_1));
locationTable[RC_DEKU_TREE_LOBBY_GRASS_2] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(355, -233), "Lobby Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_2));
locationTable[RC_DEKU_TREE_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(307, -289), "Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_3));
locationTable[RC_DEKU_TREE_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, -414), "Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_4));
locationTable[RC_DEKU_TREE_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_5, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(142, -399), "Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_5));
locationTable[RC_DEKU_TREE_2F_GRASS_1] = Location::Grass(RC_DEKU_TREE_2F_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, -414), "2F Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_2F_GRASS_1));
locationTable[RC_DEKU_TREE_2F_GRASS_2] = Location::Grass(RC_DEKU_TREE_2F_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(142, -399), "2F Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_2F_GRASS_2));
locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1018, 1263), "Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1));
locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1005, 1216), "Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2));
locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1280, 1026), "Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3));
@@ -432,8 +432,8 @@ void Rando::StaticData::RegisterGrassLocations() {
locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(308, -291), "MQ Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3));
locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(81, -416), "MQ Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4));
locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(143, -401), "MQ Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5));
locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_6] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-11, -344), "MQ Lobby Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6));
locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_7] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-159, -302), "MQ Lobby Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7));
locationTable[RC_DEKU_TREE_MQ_2F_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_2F_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-11, -344), "MQ 2F Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_2F_GRASS_1));
locationTable[RC_DEKU_TREE_MQ_2F_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_2F_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-159, -302), "MQ 2F Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_2F_GRASS_2));
locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-636, 161), "MQ Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1));
locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-693, 182), "MQ Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2));
locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1443, 167), "MQ Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3));

View File

@@ -27,8 +27,6 @@ void RegionTable_Init_DekuTree() {
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_3, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_4, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_5, logic->CanCutShrubs()),
}, {
//Exits
ENTRANCE(RR_DEKU_TREE_ENTRYWAY, true),
@@ -42,6 +40,8 @@ void RegionTable_Init_DekuTree() {
//Locations
LOCATION(RC_DEKU_TREE_MAP_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_DEKU_TREE_LOBBY_LOWER_HEART, true),
LOCATION(RC_DEKU_TREE_2F_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_2F_GRASS_2, logic->CanCutShrubs()),
}, {
//Exits
ENTRANCE(RR_DEKU_TREE_LOBBY, true),
@@ -246,8 +246,8 @@ void RegionTable_Init_DekuTree() {
LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true),
LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_2F_GRASS_1, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_2F_GRASS_2, logic->CanCutShrubs()),
LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()),
}, {
//Exits

View File

@@ -156,7 +156,7 @@ void RegionTable_Init_DodongosCavern() {
areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Region("Dodongos Cavern Armos Room", SCENE_DODONGOS_CAVERN, {}, {}, {
//Exits
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_UPPER, true),
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, logic->IsAdult || (logic->HasItem(RG_POWER_BRACELET) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS))),
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, logic->IsAdult || (logic->HasItem(RG_POWER_BRACELET) && logic->HasItem(RG_CLIMB)) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS)),
});
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Region("Dodongos Cavern Bomb Room Lower", SCENE_DODONGOS_CAVERN, {}, {

View File

@@ -114,7 +114,7 @@ void RegionTable_Init_SpiritTemple() {
}, {
//Exits
ENTRANCE(RR_SPIRIT_TEMPLE_CHILD_SIDE_HUB, logic->CanUse(RG_CRAWL)),
ENTRANCE(RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_2F, logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 1)),
ENTRANCE(RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_1F, logic->SmallKeys(SCENE_SPIRIT_TEMPLE, 1)),
});
areaTable[RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_1F] = Region("Spirit Temple Sun On Floor 1F", SCENE_SPIRIT_TEMPLE, {}, {

View File

@@ -449,6 +449,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
}
}
}
assert(false);
return CAN_OBTAIN;
case RG_PROGRESSIVE_HOOKSHOT:
switch (INV_CONTENT(ITEM_HOOKSHOT)) {
case ITEM_NONE:
@@ -1166,8 +1168,8 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
{ RC_DEKU_TREE_LOBBY_GRASS_1, RAND_INF_DEKU_TREE_LOBBY_GRASS_1 },
{ RC_DEKU_TREE_LOBBY_GRASS_2, RAND_INF_DEKU_TREE_LOBBY_GRASS_2 },
{ RC_DEKU_TREE_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_LOBBY_GRASS_3 },
{ RC_DEKU_TREE_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_LOBBY_GRASS_4 },
{ RC_DEKU_TREE_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_LOBBY_GRASS_5 },
{ RC_DEKU_TREE_2F_GRASS_1, RAND_INF_DEKU_TREE_2F_GRASS_1 },
{ RC_DEKU_TREE_2F_GRASS_2, RAND_INF_DEKU_TREE_2F_GRASS_2 },
{ RC_DEKU_TREE_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1 },
{ RC_DEKU_TREE_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2 },
{ RC_DEKU_TREE_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3 },
@@ -1211,8 +1213,8 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
{ RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3 },
{ RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4 },
{ RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5 },
{ RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6 },
{ RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7 },
{ RC_DEKU_TREE_MQ_2F_GRASS_1, RAND_INF_DEKU_TREE_MQ_2F_GRASS_1 },
{ RC_DEKU_TREE_MQ_2F_GRASS_2, RAND_INF_DEKU_TREE_MQ_2F_GRASS_2 },
{ RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1 },
{ RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2 },
{ RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3 },

View File

@@ -3997,8 +3997,8 @@ typedef enum {
RC_DEKU_TREE_LOBBY_GRASS_1,
RC_DEKU_TREE_LOBBY_GRASS_2,
RC_DEKU_TREE_LOBBY_GRASS_3,
RC_DEKU_TREE_LOBBY_GRASS_4,
RC_DEKU_TREE_LOBBY_GRASS_5,
RC_DEKU_TREE_2F_GRASS_1,
RC_DEKU_TREE_2F_GRASS_2,
RC_DEKU_TREE_SLINGSHOT_GRASS_1,
RC_DEKU_TREE_SLINGSHOT_GRASS_2,
RC_DEKU_TREE_SLINGSHOT_GRASS_3,
@@ -4042,8 +4042,8 @@ typedef enum {
RC_DEKU_TREE_MQ_LOBBY_GRASS_3,
RC_DEKU_TREE_MQ_LOBBY_GRASS_4,
RC_DEKU_TREE_MQ_LOBBY_GRASS_5,
RC_DEKU_TREE_MQ_LOBBY_GRASS_6,
RC_DEKU_TREE_MQ_LOBBY_GRASS_7,
RC_DEKU_TREE_MQ_2F_GRASS_1,
RC_DEKU_TREE_MQ_2F_GRASS_2,
RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1,
RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2,
RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3,

View File

@@ -1982,8 +1982,8 @@ DEFINE_RAND_INF(RAND_INF_ZR_OPEN_GROTTO_GRASS_4)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_LOBBY_GRASS_1)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_LOBBY_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_LOBBY_GRASS_3)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_LOBBY_GRASS_4)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_LOBBY_GRASS_5)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_2F_GRASS_1)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_2F_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3)
@@ -2027,8 +2027,8 @@ DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_2F_GRASS_1)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_2F_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3)