from room to boat to wind tunnel need hovers to get back

can't reach entry without hookshot or hovers
split invisible spikes room for decoupled
don't need hovers to get GS from boss door
This commit is contained in:
Demur Rumed 2025-07-05 14:07:19 +00:00
parent 32f7c9e2e8
commit ec4a463f70
2 changed files with 44 additions and 18 deletions

View file

@ -18,7 +18,7 @@ void RegionTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", SCENE_SHADOW_TEMPLE, {}, {}, { areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", SCENE_SHADOW_TEMPLE, {}, {}, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
Entrance(RR_SHADOW_TEMPLE_WHISPERING_WALLS, []{return ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH);}), Entrance(RR_SHADOW_TEMPLE_WHISPERING_WALLS, []{return ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOVER_BOOTS);}), Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOVER_BOOTS);}),
}); });
@ -134,14 +134,20 @@ void RegionTable_Init_ShadowTemple() {
Entrance(RR_SHADOW_TEMPLE_UPPER_HUGE_PIT, []{return true;}), Entrance(RR_SHADOW_TEMPLE_UPPER_HUGE_PIT, []{return true;}),
}); });
areaTable[RR_SHADOW_TEMPLE_INVISIBLE_SPIKES] = Region("Shadow Temple Invisible Spinning Blades", SCENE_SHADOW_TEMPLE, {}, { areaTable[RR_SHADOW_TEMPLE_INVISIBLE_SPIKES] = Region("Shadow Temple Invisible Spikes", SCENE_SHADOW_TEMPLE, {}, {
//Locations //Locations
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))),
}, { }, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_LOWER_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}), Entrance(RR_SHADOW_TEMPLE_LOWER_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}),
Entrance(RR_SHADOW_TEMPLE_SKULL_JAR, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT);}), Entrance(RR_SHADOW_TEMPLE_SKULL_JAR, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT);}),
Entrance(RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}), Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT);}),
});
areaTable[RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM] = Region("Shadow Temple Invisible Spikes Platform", SCENE_SHADOW_TEMPLE, {}, {}, {
//Exits
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, []{return true;}),
Entrance(RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}),
}); });
areaTable[RR_SHADOW_TEMPLE_SKULL_JAR] = Region("Shadow Temple Skull Jar", SCENE_SHADOW_TEMPLE, {}, { areaTable[RR_SHADOW_TEMPLE_SKULL_JAR] = Region("Shadow Temple Skull Jar", SCENE_SHADOW_TEMPLE, {}, {
@ -155,15 +161,20 @@ void RegionTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL] = Region("Shadow Temple Upper Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {}, { areaTable[RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL] = Region("Shadow Temple Upper Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {}, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}), Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}),
Entrance(RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, []{return (logic->CanUse(RG_HOVER_BOOTS) && logic->CanPassEnemy(RE_BIG_SKULLTULA)) || logic->CanUse(RG_HOOKSHOT);}), Entrance(RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, []{return (logic->CanUse(RG_HOVER_BOOTS) && logic->CanPassEnemy(RE_BIG_SKULLTULA)) || logic->CanUse(RG_HOOKSHOT);}),
}); });
areaTable[RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL] = Region("Shadow Temple Lower Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {}, { areaTable[RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL] = Region("Shadow Temple Lower Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {}, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, []{return logic->CanUse(RG_HOOKSHOT);}), Entrance(RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, []{return logic->CanUse(RG_HOOKSHOT);}),
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL_ALCOVE, []{return true;}),
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, []{return true;}), Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, []{return true;}),
Entrance(RR_SHADOW_TEMPLE_ROOM_TO_BOAT, []{return true;}), });
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL_ALCOVE] = Region("Shadow Temple Wind Tunnel Alcove", SCENE_SHADOW_TEMPLE, {}, {}, {
Entrance(RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, []{return logic->CanUse(RG_HOVER_BOOTS);}),
Entrance(RR_SHADOW_TEMPLE_ROOM_TO_BOAT, []{return true;}),
}); });
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM] = Region("Shadow Temple Wind Tunnel Hint Room", SCENE_SHADOW_TEMPLE, {}, { areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM] = Region("Shadow Temple Wind Tunnel Hint Room", SCENE_SHADOW_TEMPLE, {}, {
@ -456,10 +467,16 @@ void RegionTable_Init_ShadowTemple() {
LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))),
}, { }, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}), Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}),
//We need to assume we can get here with or without the glass platforms //We need to assume we can get here with or without the glass platforms
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}), Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_PLATFORM, []{return (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}),
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}), Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}),
});
areaTable[RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_PLATFORM] = Region("Shadow Temple MQ Floor Spikes Platform", SCENE_SHADOW_TEMPLE, {}, {}, {
//Exits
Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return true;}),
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4);}),
}); });
areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", SCENE_SHADOW_TEMPLE, {}, { areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", SCENE_SHADOW_TEMPLE, {}, {
@ -493,6 +510,11 @@ void RegionTable_Init_ShadowTemple() {
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, []{return true;}), Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, []{return true;}),
}); });
areaTable[RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL_ALCOVE] = Region("Shadow Temple MQ Wind Tunnel Alcove", SCENE_SHADOW_TEMPLE, {}, {}, {
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, []{return logic->CanUse(RG_HOVER_BOOTS);}),
Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return true;}),
});
areaTable[RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM] = Region("Shadow Temple MQ B4 Gibdo Room", SCENE_SHADOW_TEMPLE, { areaTable[RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM] = Region("Shadow Temple MQ B4 Gibdo Room", SCENE_SHADOW_TEMPLE, {
//Events //Events
EventAccess(&logic->NutPot, []{return true;}), EventAccess(&logic->NutPot, []{return true;}),
@ -558,17 +580,17 @@ void RegionTable_Init_ShadowTemple() {
Entrance(RR_SHADOW_TEMPLE_MQ_PRE_BOSS_ROOM, []{return true;}), Entrance(RR_SHADOW_TEMPLE_MQ_PRE_BOSS_ROOM, []{return true;}),
}); });
areaTable[RR_SHADOW_TEMPLE_PRE_BOSS_ROOM] = Region("Shadow Temple MQ Pre Boss Room", SCENE_SHADOW_TEMPLE, {}, { areaTable[RR_SHADOW_TEMPLE_PRE_BOSS_ROOM] = Region("Shadow Temple MQ Pre Boss Room", SCENE_SHADOW_TEMPLE, {}, {}, {
//Locations
//you can drop onto this and the respawn is reasonable
LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, logic->CanUse(RG_HOVER_BOOTS) && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
}, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}), Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}),
Entrance(RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), Entrance(RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
}); });
areaTable[RR_SHADOW_TEMPLE_MQ_BOSS_DOOR] = Region("Shadow Temple MQ Boss Door", SCENE_SHADOW_TEMPLE, {}, {}, { 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->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
}, {
//Exits //Exits
Entrance(RR_SHADOW_TEMPLE_MQ_PRE_BOSS_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}), Entrance(RR_SHADOW_TEMPLE_MQ_PRE_BOSS_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return true;}), Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return true;}),

View file

@ -946,9 +946,11 @@ typedef enum {
RR_SHADOW_TEMPLE_LOWER_HUGE_PIT, RR_SHADOW_TEMPLE_LOWER_HUGE_PIT,
RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES, RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES,
RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, RR_SHADOW_TEMPLE_INVISIBLE_SPIKES,
RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM,
RR_SHADOW_TEMPLE_SKULL_JAR, RR_SHADOW_TEMPLE_SKULL_JAR,
RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL,
RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL,
RR_SHADOW_TEMPLE_WIND_TUNNEL_ALCOVE,
RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM,
RR_SHADOW_TEMPLE_ROOM_TO_BOAT, RR_SHADOW_TEMPLE_ROOM_TO_BOAT,
RR_SHADOW_TEMPLE_DOCK, RR_SHADOW_TEMPLE_DOCK,
@ -978,9 +980,11 @@ typedef enum {
RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM,
RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA, RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA,
RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM,
RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_PLATFORM,
RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM,
RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL, RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL,
RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL,
RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL_ALCOVE,
RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM,
RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM,
RR_SHADOW_TEMPLE_MQ_DOCK, RR_SHADOW_TEMPLE_MQ_DOCK,