RT_ICE_STALAGMITE_CLIP, RT_ICE_STALAGMITE_HOOKSHOT (#5909)

Coming back from block room to hub, the clip is different, instead it's by wall that both ages can get past with pretty specific sidehop. This is pretty niche since generally logic isn't doing reverse ice cavern
This commit is contained in:
Philip Dubé
2025-12-30 20:11:27 +00:00
committed by GitHub
parent 6e27cd7107
commit 5822c33268
5 changed files with 17 additions and 7 deletions

View File

@@ -134,7 +134,7 @@ void RegionTable_Init_GanonsCastle() {
areaTable[RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM] = Region("Ganon's Castle Water Trial Blue Fire Room", SCENE_INSIDE_GANONS_CASTLE, {
//Events
EventAccess(LOGIC_BLUE_FIRE_ACCESS, []{return true;}),
EventAccess(LOGIC_BLUE_FIRE_ACCESS, []{return logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP);}),
}, {
//Locations
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, true),

View File

@@ -40,7 +40,7 @@ void RegionTable_Init_IceCavern() {
Entrance(RR_ICE_CAVERN_BEGINNING, []{return true;}),
Entrance(RR_ICE_CAVERN_MAP_ROOM, []{return (logic->IsAdult || (ctx->GetTrickOption(RT_GROUND_JUMP_HARD) && logic->CanGroundJump())) && logic->CanClearStalagmite();}),
Entrance(RR_ICE_CAVERN_COMPASS_ROOM, []{return Here(RR_ICE_CAVERN_HUB, []{return logic->BlueFire();});}),
Entrance(RR_ICE_CAVERN_BLOCK_ROOM, []{return Here(RR_ICE_CAVERN_HUB, []{return logic->BlueFire();}) && logic->CanClearStalagmite();}),
Entrance(RR_ICE_CAVERN_BLOCK_ROOM, []{return Here(RR_ICE_CAVERN_HUB, []{return logic->BlueFire();}) && (logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP));}),
});
areaTable[RR_ICE_CAVERN_MAP_ROOM] = Region("Ice Cavern Map Room", SCENE_ICE_CAVERN, {
@@ -66,8 +66,8 @@ void RegionTable_Init_IceCavern() {
EventAccess(LOGIC_BLUE_FIRE_ACCESS, []{return true;}),
}, {
//Locations
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->CanClearStalagmite() && logic->BlueFire()),
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->CanClearStalagmite() && logic->BlueFire()), // can skip blue fire with rang trick
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, (logic->IsChild || logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP)) && logic->BlueFire()),
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, (logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP)) && logic->BlueFire()), // can skip blue fire with rang trick
LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, logic->HookshotOrBoomerang()),
}, {
//Exits
@@ -87,7 +87,7 @@ void RegionTable_Init_IceCavern() {
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG)),
}, {
//Exits
Entrance(RR_ICE_CAVERN_HUB, []{return logic->CanClearStalagmite();}),
Entrance(RR_ICE_CAVERN_HUB, []{return logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP);}),
Entrance(RR_ICE_CAVERN_BEFORE_FINAL_ROOM, []{return Here(RR_ICE_CAVERN_BLOCK_ROOM, []{return logic->BlueFire();});}),
});
@@ -162,7 +162,7 @@ void RegionTable_Init_IceCavern() {
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", SCENE_ICE_CAVERN, {
//Events
//Child can fit between the stalagmites on the left hand side
EventAccess(LOGIC_BLUE_FIRE_ACCESS, []{return logic->IsChild || logic->CanClearStalagmite();}),
EventAccess(LOGIC_BLUE_FIRE_ACCESS, []{return logic->IsChild || logic->CanClearStalagmite() || ctx->GetTrickOption(RT_ICE_STALAGMITE_CLIP);}),
}, {
//Locations
LOCATION(RC_ICE_CAVERN_MQ_MAP_CHEST, logic->BlueFire() && Here(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return logic->CanHitSwitch();})),

View File

@@ -1079,7 +1079,8 @@ bool Logic::CanJumpslash() {
}
bool Logic::CanClearStalagmite() {
return CanJumpslash() || HasExplosives();
return CanJumpslash() || HasExplosives() ||
(ctx->GetTrickOption(RT_ICE_STALAGMITE_HOOKSHOT) && CanUse(RG_HOOKSHOT));
}
bool Logic::CanHitSwitch(EnemyDistance distance, bool inWater) {

View File

@@ -3998,6 +3998,8 @@ typedef enum {
RT_SPIRIT_MQ_SUN_BLOCK_GS,
RT_SPIRIT_MQ_LOWER_ADULT,
RT_SPIRIT_MQ_FROZEN_EYE,
RT_ICE_STALAGMITE_CLIP,
RT_ICE_STALAGMITE_HOOKSHOT,
RT_ICE_BLOCK_GS,
RT_ICE_MQ_RED_ICE_GS,
RT_ICE_MQ_SCARECROW,

View File

@@ -1121,6 +1121,13 @@ void Settings::CreateOptions() {
"Spirit Temple MQ Frozen Eye Switch without Fire",
"You can melt the ice by shooting an arrow through a torch. The only way to find a line of sight for "
"this shot is to first spawn a Song of Time block, and then stand on the very edge of it.");
OPT_TRICK(RT_ICE_STALAGMITE_CLIP, RCQUEST_BOTH, RA_ICE_CAVERN, { Tricks::Tag::NOVICE },
"Ice Cavern Stalagmite Clips",
"Most stalagmites blocking path in Ice Cavern can be clipped past with basic movement. Also applies to "
"Water Trial.");
OPT_TRICK(RT_ICE_STALAGMITE_HOOKSHOT, RCQUEST_BOTH, RA_ICE_CAVERN, { Tricks::Tag::NOVICE },
"Ice Cavern Stalagmites with Hookshot",
"Shooting stalagmites with hookshot in the right way also breaks them. Also applies to Water Trial.");
OPT_TRICK(RT_ICE_BLOCK_GS, RCQUEST_VANILLA, RA_ICE_CAVERN, { Tricks::Tag::INTERMEDIATE },
"Ice Cavern Block Room GS with Hover Boots",
"The Hover Boots can be used to get in front of the Skulltula to kill it with a jump slash. Then, the "