Add missing hint logic, cleanup ganon's tower and mido logic, change LA rock name (#6565)

This commit is contained in:
Pepper0ni
2026-04-26 15:39:01 +01:00
committed by GitHub
parent eeca7626d8
commit 4b90ae48c7
13 changed files with 72 additions and 23 deletions
@@ -397,7 +397,7 @@ void Rando::StaticData::RegisterRockLocations() {
locationTable[RC_KAK_ROCK_2] = Location::Rock(RC_KAK_ROCK_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-664, 1288), "Kak Rock 2", RHT_KAK_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_ROCK_2));
locationTable[RC_GY_ROCK] = Location::Rock(RC_GY_ROCK, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1193, 693), "GY Rock", RHT_GY_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_ROCK));
locationTable[RC_LH_ROCK] = Location::Rock(RC_LH_ROCK, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(1222, 3953), "LA Rock", RHT_LH_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_ROCK));
locationTable[RC_LH_ROCK] = Location::Rock(RC_LH_ROCK, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(1222, 3953), "LH Rock", RHT_LH_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_ROCK));
locationTable[RC_ZD_CIRCLE_ROCK_1] = Location::Rock(RC_ZD_CIRCLE_ROCK_1, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(462, -696), "ZD Circle Rock 1", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_1));
locationTable[RC_ZD_CIRCLE_ROCK_2] = Location::Rock(RC_ZD_CIRCLE_ROCK_2, RCQUEST_BOTH, RCAREA_ZORAS_DOMAIN, SCENE_ZORAS_DOMAIN, TWO_ACTOR_PARAMS(518, -719), "ZD Circle Rock 2", RHT_ZD_ROCK, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZD_CIRCLE_ROCK_2));
@@ -1077,7 +1077,10 @@ void RegionTable_Init_FireTemple() {
#pragma endregion
// Boss Room
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] = Region("Fire Temple Boss Entryway", SCENE_FIRE_TEMPLE, {}, {}, {
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] = Region("Fire Temple Boss Entryway", SCENE_FIRE_TEMPLE, {}, {
// Locations
LOCATION(RC_FOREST_BOSS_KEY_HINT, true),
}, {
// Exits
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false),
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false),
@@ -829,7 +829,10 @@ void RegionTable_Init_ForestTemple() {
#pragma endregion
// Boss Room
areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] = Region("Forest Temple Boss Entryway", SCENE_FOREST_TEMPLE, {}, {}, {
areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] = Region("Forest Temple Boss Entryway", SCENE_FOREST_TEMPLE, {}, {
// Locations
LOCATION(RC_FOREST_BOSS_KEY_HINT, true),
}, {
// Exits
ENTRANCE(RR_FOREST_TEMPLE_BASEMENT, ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && logic->Get(LOGIC_FOREST_OPEN_BOSS_HALLWAY)),
ENTRANCE(RR_FOREST_TEMPLE_MQ_BASEMENT, ctx->GetDungeon(FOREST_TEMPLE)->IsMQ() && logic->Get(LOGIC_FOREST_OPEN_BOSS_HALLWAY)),
@@ -827,11 +827,11 @@ void RegionTable_Init_GanonsCastle() {
areaTable[RR_GANONS_TOWER_STAIRS_4] = Region("Ganon's Tower Stairs 4", SCENE_GANONS_TOWER, {}, {}, {
//Exits
ENTRANCE(RR_GANONS_TOWER_FLOOR_3, true),
ENTRANCE(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, true),
ENTRANCE(RR_GANONS_TOWER_FLOOR_3, true),
ENTRANCE(RR_GANONS_TOWER_POT_ROOM, true),
});
areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", SCENE_GANONS_TOWER, {}, {
areaTable[RR_GANONS_TOWER_POT_ROOM] = Region("Ganon's Tower Pot Room", SCENE_GANONS_TOWER, {}, {
// Locations
LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_1, logic->CanBreakPots()),
LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_2, logic->CanBreakPots()),
@@ -853,7 +853,16 @@ void RegionTable_Init_GanonsCastle() {
LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_18, logic->CanBreakPots()),
}, {
//Exits
ENTRANCE(RR_GANONS_TOWER_FLOOR_3, AnyAgeTime([]{return true;})),
ENTRANCE(RR_GANONS_TOWER_STAIRS_4, true;),
ENTRANCE(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, true;),
});
areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", SCENE_GANONS_TOWER, {}, {
//Locations
LOCATION(RC_GANONS_BOSS_KEY_HINT, true),
}, {
//Exits
ENTRANCE(RR_GANONS_TOWER_POT_ROOM, false;),
ENTRANCE(RR_GANONS_TOWER_GANONDORF_LAIR, AnyAgeTime([]{return logic->HasItem(RG_GANONS_CASTLE_BOSS_KEY);})),
});
@@ -862,7 +871,7 @@ void RegionTable_Init_GanonsCastle() {
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
}, {
//Exits
ENTRANCE(RR_GANONS_CASTLE_ESCAPE, logic->CanKillEnemy(RE_GANONDORF)),
ENTRANCE(RR_GANONS_CASTLE_ESCAPE, logic->CanKillEnemy(RE_GANONDORF)),
});
areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, {}, {
@@ -367,7 +367,10 @@ void RegionTable_Init_ShadowTemple() {
ENTRANCE(RR_SHADOW_TEMPLE_BOSS_DOOR, (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOVER_BOOTS)),
});
areaTable[RR_SHADOW_TEMPLE_BOSS_DOOR] = Region("Shadow Temple Boss Door", SCENE_SHADOW_TEMPLE, {}, {}, {
areaTable[RR_SHADOW_TEMPLE_BOSS_DOOR] = Region("Shadow Temple Boss Door", SCENE_SHADOW_TEMPLE, {}, {
//Locations
LOCATION(RC_SHADOW_BOSS_KEY_HINT, true),
}, {
//Exits
ENTRANCE(RR_SHADOW_TEMPLE_PRE_BOSS_ROOM, (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOVER_BOOTS)),
ENTRANCE(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, true),
@@ -714,8 +717,8 @@ void RegionTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_MQ_BOSS_DOOR] = Region("Shadow Temple MQ Boss Door", SCENE_SHADOW_TEMPLE, {}, {
//Locations
//you can drop onto this and the respawn is reasonable
LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, (logic->HookshotOrBoomerang() || ((logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
LOCATION(RC_SHADOW_BOSS_KEY_HINT, true),
LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, (logic->HookshotOrBoomerang() || ((logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && ctx->GetTrickOption(RT_VOIDOUT_COLLECTION))) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
}, {
//Exits
ENTRANCE(RR_SHADOW_TEMPLE_MQ_PRE_BOSS_ROOM, logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
@@ -536,7 +536,10 @@ void RegionTable_Init_SpiritTemple() {
//WARNING these events are not glitchproofed and assume you need all keys to reach from the front
EVENT_ACCESS(LOGIC_REVERSE_SPIRIT_CHILD, logic->IsChild),
EVENT_ACCESS(LOGIC_REVERSE_SPIRIT_ADULT, logic->IsAdult),
}, {}, {
}, {
//Locations
LOCATION(RC_SPIRIT_BOSS_KEY_HINT, true),
}, {
// Exits
ENTRANCE(RR_SPIRIT_TEMPLE_STATUE_ROOM, true),
//CanBunnyJump with a jumpslash can reach either hand and with good timing the platform as child. the latter is definitely a trick, the former may not be
@@ -1132,7 +1135,10 @@ void RegionTable_Init_SpiritTemple() {
//WARNING these events are not glitchproofed and assume you need all keys to reach from the front
EVENT_ACCESS(LOGIC_REVERSE_SPIRIT_CHILD, logic->IsChild),
EVENT_ACCESS(LOGIC_REVERSE_SPIRIT_ADULT, logic->IsAdult),
}, {}, {
}, {
//Locations
LOCATION(RC_SPIRIT_BOSS_KEY_HINT, true),
}, {
// Exits
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, true),
//CanBunnyJump with a jumpslash can reach either hand and with good timing the platform as child. the latter is definitely a trick, the former may not be
@@ -632,7 +632,10 @@ void RegionTable_Init_WaterTemple() {
ENTRANCE(RR_WATER_TEMPLE_TRAPPED_SLOPE, true),
});
areaTable[RR_WATER_TEMPLE_TRAPPED_SLOPE] = Region("Water Temple Trapped Slope", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_TRAPPED_SLOPE] = Region("Water Temple Trapped Slope", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_BOSS_KEY_HINT, true),
}, {
ENTRANCE(RR_WATER_TEMPLE_RISING_TARGET_LEDGE, true),
ENTRANCE(RR_WATER_TEMPLE_BOSS_ENTRYWAY, true),
});
@@ -772,7 +775,10 @@ void RegionTable_Init_WaterTemple() {
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR, logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE)),
});
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Boss Door", SCENE_WATER_TEMPLE, {}, {}, {
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Boss Door", SCENE_WATER_TEMPLE, {}, {
//Locations
LOCATION(RC_WATER_BOSS_KEY_HINT, true),
}, {
//Exits
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage()),
ENTRANCE(RR_WATER_TEMPLE_BOSS_ENTRYWAY, true),
@@ -100,6 +100,8 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_WONDER_SIGN, logic->IsChild && logic->CanJumpslashExceptHammer()),
LOCATION(RC_KF_WONDER_PLATFORMS_1, logic->IsChild),
LOCATION(RC_KF_WONDER_PLATFORMS_2, logic->IsChild),
//Technically bad logic, because we can move Mido out of logic, but then we already have KSword...
LOCATION(RC_MIDO_HINT, !ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) && logic->IsChild && logic->CanUse(RG_SPEAK_KOKIRI)),
}, {
//Exits
ENTRANCE(RR_KF_BOULDER_LOOP, logic->CanUse(RG_CRAWL)),
@@ -111,7 +113,7 @@ void RegionTable_Init_KokiriForest() {
ENTRANCE(RR_KF_HOUSE_OF_TWINS, true),
ENTRANCE(RR_KF_KNOW_IT_ALL_HOUSE, true),
ENTRANCE(RR_KF_KOKIRI_SHOP, true),
ENTRANCE(RR_KF_OUTSIDE_DEKU_TREE, (logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->Get(LOGIC_FOREST_TEMPLE_CLEAR))) || ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->Get(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD)),
ENTRANCE(RR_KF_OUTSIDE_DEKU_TREE, (logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->Get(LOGIC_FOREST_TEMPLE_CLEAR))) || logic->Get(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD)),
ENTRANCE(RR_KF_OUTSIDE_LOST_WOODS, logic->HasItem(RG_CLIMB) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST, RG_KOKIRI_FOREST_BEAN_SOUL) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS)))),
ENTRANCE(RR_KF_RUPEE_ALCOVE, logic->IsAdult && CanPlantBean(RR_KOKIRI_FOREST, RG_KOKIRI_FOREST_BEAN_SOUL)),
ENTRANCE(RR_LW_BRIDGE_FROM_FOREST, logic->IsAdult || ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || logic->Get(LOGIC_DEKU_TREE_CLEAR)),
@@ -175,6 +177,7 @@ void RegionTable_Init_KokiriForest() {
LOCATION(RC_KF_MIDOS_TOP_RIGHT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_KF_MIDOS_BOTTOM_LEFT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_KF_MIDOS_BOTTOM_RIGHT_CHEST, logic->HasItem(RG_OPEN_CHEST)),
LOCATION(RC_MIDO_HINT, logic->Get(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD) && logic->IsChild && logic->CanUse(RG_SPEAK_KOKIRI)),
}, {
//Exits
ENTRANCE(RR_KOKIRI_FOREST, true),
@@ -14,6 +14,7 @@ void RegionTable_Init_Root() {
EVENT_ACCESS(LOGIC_TH_COULD_FREE_SLOPE_CARPENTER, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)),
EVENT_ACCESS(LOGIC_TH_RESCUED_ALL_CARPENTERS, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE)),
EVENT_ACCESS(LOGIC_FREED_EPONA, (bool)ctx->GetOption(RSK_SKIP_EPONA_RACE)),
EVENT_ACCESS(LOGIC_SHOWED_MIDO_SWORD_AND_SHIELD, ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF)),
}, {
//Locations
LOCATION(RC_LINKS_POCKET, true),
@@ -982,11 +982,18 @@ void Rando::StaticData::InitLocationTable() {
// Other Hints
locationTable[RC_GANONDORF_HINT] = Location::OtherHint(RC_GANONDORF_HINT, RCQUEST_BOTH, ACTOR_EN_GANON_MANT, SCENE_GANON_BOSS, "Ganondorf Hint");
locationTable[RC_FOREST_BOSS_KEY_HINT] = Location::OtherHint(RC_FOREST_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_FOREST_TEMPLE, "Forest Temple Boss Key Hint");
locationTable[RC_FIRE_BOSS_KEY_HINT] = Location::OtherHint(RC_FIRE_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_FIRE_TEMPLE, "Fire Temple Boss Key Hint");
locationTable[RC_WATER_BOSS_KEY_HINT] = Location::OtherHint(RC_WATER_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_WATER_TEMPLE, "Water Temple Boss Key Hint");
locationTable[RC_SPIRIT_BOSS_KEY_HINT] = Location::OtherHint(RC_SPIRIT_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_SPIRIT_TEMPLE, "Spirit Temple Boss Key Hint");
locationTable[RC_SHADOW_BOSS_KEY_HINT] = Location::OtherHint(RC_SHADOW_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_SHADOW_TEMPLE, "Shadow Temple Boss Key Hint");
locationTable[RC_GANONS_BOSS_KEY_HINT] = Location::OtherHint(RC_GANONS_BOSS_KEY_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_GANONS_TOWER, "Ganon's Castle Boss Key Hint");
locationTable[RC_SHEIK_HINT_GC] = Location::OtherHint(RC_SHEIK_HINT_GC, RCQUEST_VANILLA, ACTOR_EN_XC, SCENE_INSIDE_GANONS_CASTLE, "Sheik Hint");
locationTable[RC_SHEIK_HINT_MQ_GC] = Location::OtherHint(RC_SHEIK_HINT_MQ_GC, RCQUEST_MQ, ACTOR_EN_XC, SCENE_INSIDE_GANONS_CASTLE, "Sheik Hint");
locationTable[RC_DAMPE_HINT] = Location::OtherHint(RC_DAMPE_HINT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_GRAVEKEEPERS_HUT, "Diary Hint");
locationTable[RC_GREG_HINT] = Location::OtherHint(RC_GREG_HINT, RCQUEST_BOTH, RCAREA_MARKET, ACTOR_EN_TAKARA_MAN, SCENE_TREASURE_BOX_SHOP, "Greg Hint");
locationTable[RC_SARIA_SONG_HINT] = Location::OtherHint(RC_SARIA_SONG_HINT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, ACTOR_ID_MAX, SCENE_ID_MAX, "Sarias Song Hint", "Magic Hint Via Saria's Song");
locationTable[RC_MIDO_HINT] = Location::OtherHint(RC_MIDO_HINT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, ACTOR_ID_MAX, SCENE_ID_MAX, "Mido Hint");
locationTable[RC_ALTAR_HINT_CHILD] = Location::OtherHint(RC_ALTAR_HINT_CHILD, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "ToT Child Altar Hint");
locationTable[RC_ALTAR_HINT_ADULT] = Location::OtherHint(RC_ALTAR_HINT_ADULT, RCQUEST_BOTH, ACTOR_ID_MAX, SCENE_TEMPLE_OF_TIME, "ToT Adult Altar Hint");
locationTable[RC_FISHING_POLE_HINT] = Location::OtherHint(RC_FISHING_POLE_HINT, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, "Fishing Pole Hint");
@@ -2065,6 +2065,13 @@ RANDO_ENUM_ITEM(RC_TRIFORCE_COMPLETED)
RANDO_ENUM_ITEM(RC_DAMPE_HINT)
RANDO_ENUM_ITEM(RC_GREG_HINT)
RANDO_ENUM_ITEM(RC_SARIA_SONG_HINT)
RANDO_ENUM_ITEM(RC_MIDO_HINT)
RANDO_ENUM_ITEM(RC_FOREST_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_FIRE_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_WATER_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_SPIRIT_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_SHADOW_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_GANONS_BOSS_KEY_HINT)
RANDO_ENUM_ITEM(RC_ALTAR_HINT_CHILD)
RANDO_ENUM_ITEM(RC_ALTAR_HINT_ADULT)
RANDO_ENUM_ITEM(RC_FISHING_POLE_HINT)
@@ -1079,6 +1079,7 @@ RANDO_ENUM_ITEM(RR_GANONS_TOWER_FLOOR_2)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_STAIRS_3)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_FLOOR_3)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_STAIRS_4)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_POT_ROOM)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR)
RANDO_ENUM_ITEM(RR_GANONS_TOWER_GANONDORF_LAIR)
RANDO_ENUM_ITEM(RR_GANONS_CASTLE_ESCAPE)
@@ -192,16 +192,16 @@ std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap
// warp song hints are special cased due to entrances not being done properly yet
// Ganondorf Joke is special cased as the text is random
{RH_SHEIK_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SHEIK_HINT_LA_ONLY}, RSK_SHEIK_LA_HINT, true, {}, {RG_LIGHT_ARROWS}, {RC_SHEIK_HINT_GC, RC_SHEIK_HINT_MQ_GC}, true)},
{RH_FOREST_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FOREST_TEMPLE_BOSS_KEY}, {}, true)},
{RH_FIRE_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FIRE_TEMPLE_BOSS_KEY}, {}, true)},
{RH_WATER_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_WATER_TEMPLE_BOSS_KEY}, {}, true)},
{RH_SPIRIT_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SPIRIT_TEMPLE_BOSS_KEY}, {}, true)},
{RH_SHADOW_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SHADOW_TEMPLE_BOSS_KEY}, {}, true)},
{RH_GANONS_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_GANONS_CASTLE_BOSS_KEY}, {}, true)},
{RH_FOREST_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FOREST_TEMPLE_BOSS_KEY}, {RC_FOREST_BOSS_KEY_HINT}, true)},
{RH_FIRE_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_FIRE_TEMPLE_BOSS_KEY}, {RC_FIRE_BOSS_KEY_HINT}, true)},
{RH_WATER_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_WATER_TEMPLE_BOSS_KEY}, {RC_WATER_BOSS_KEY_HINT}, true)},
{RH_SPIRIT_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SPIRIT_TEMPLE_BOSS_KEY}, {RC_SPIRIT_BOSS_KEY_HINT}, true)},
{RH_SHADOW_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_SHADOW_TEMPLE_BOSS_KEY}, {RC_SHADOW_BOSS_KEY_HINT}, true)},
{RH_GANONS_BOSS_KEY_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_BOSS_KEY_HINT}, RSK_BOSS_KEY_HINT, true, {}, {RG_GANONS_CASTLE_BOSS_KEY}, {RC_GANONS_BOSS_KEY_HINT}, true)},
{RH_DAMPES_DIARY, StaticHintInfo(HINT_TYPE_AREA, {RHT_DAMPE_DIARY}, RSK_DAMPES_DIARY_HINT, true, {}, {RG_PROGRESSIVE_HOOKSHOT}, {RC_DAMPE_HINT})},
{RH_GREG_RUPEE, StaticHintInfo(HINT_TYPE_AREA, {RHT_GREG_HINT}, RSK_GREG_HINT, true, {}, {RG_GREG_RUPEE}, {RC_GREG_HINT})},
{RH_SARIA_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_SARIA_TALK_HINT, RHT_SARIA_SONG_HINT}, RSK_SARIA_HINT, true, {}, {RG_PROGRESSIVE_MAGIC_METER}, {RC_SARIA_SONG_HINT, RC_SONG_FROM_SARIA}, true)},
{RH_MIDO_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_MIDO_HINT}, RSK_MIDO_HINT, true, {}, {RG_KOKIRI_SWORD}, {}, true)},
{RH_MIDO_HINT, StaticHintInfo(HINT_TYPE_AREA, {RHT_MIDO_HINT}, RSK_MIDO_HINT, true, {}, {RG_KOKIRI_SWORD}, {RC_MIDO_HINT}, true)},
{RH_LOACH_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_LOACH_HINT}, RSK_LOACH_HINT, true, {RC_LH_HYRULE_LOACH})},
{RH_FISHING_POLE, StaticHintInfo(HINT_TYPE_AREA, {RHT_FISHING_POLE_HINT}, RSK_FISHING_POLE_HINT, true, {}, {RG_FISHING_POLE}, {RC_FISHING_POLE_HINT}, true)},
{RH_HBA_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_HBA_HINT_SIGN, RHT_HBA_HINT_NOT_ON_HORSE, RHT_HBA_HINT_INITIAL, RHT_HBA_HINT_HAVE_1000}, RSK_HBA_HINT, true, {RC_GF_HBA_1000_POINTS, RC_GF_HBA_1500_POINTS})},