RT_UNINTUITIVE_JUMPS (#6107)

consolidate novice jump tricks that are purely movement based

2 new jumps added: shadow boat jump, & forest trial child jump
This commit is contained in:
Philip Dubé
2026-01-06 17:44:42 +00:00
committed by GitHub
parent 443badee87
commit e26269d1b3
9 changed files with 29 additions and 57 deletions

View File

@@ -34,7 +34,7 @@ void RegionTable_Init_FireTemple() {
//Exits
Entrance(RR_FIRE_TEMPLE_FOYER, []{return (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && (logic->FireTimer() >= 16 || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8));}),
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_UPPER, []{return logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && logic->FireTimer() >= 16;}),
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->Get(LOGIC_FIRE_HIT_PLATFORM))));}),
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->Get(LOGIC_FIRE_HIT_PLATFORM))));}),
});
//This region assumes tunic logic is handled on entry.
@@ -538,7 +538,7 @@ void RegionTable_Init_FireTemple() {
//Exits
Entrance(RR_FIRE_TEMPLE_MQ_FOYER_UPPER, []{return (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && (logic->FireTimer() >= 16 || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8));}),
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, []{return logic->FireTimer() >= 32 && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->Get(LOGIC_FIRE_HIT_PLATFORM))));}),
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->Get(LOGIC_FIRE_HIT_PLATFORM))));}),
});
//This region assumes tunic logic is handled on entry.

View File

@@ -71,7 +71,7 @@ void RegionTable_Init_GanonsCastle() {
});
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM] = Region("Ganon's Castle Forest Trial Beamos Room", SCENE_INSIDE_GANONS_CASTLE, {
EventAccess(LOGIC_FOREST_TRIAL_SILVER_RUPEES, []{return logic->IsAdult || logic->CanUse(RG_HOOKSHOT);}),
EventAccess(LOGIC_FOREST_TRIAL_SILVER_RUPEES, []{return logic->IsAdult || logic->CanUse(RG_HOOKSHOT);}), // child can get these by voiding after switch
}, {}, {
//Exits
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, []{return true;}),
@@ -81,13 +81,13 @@ void RegionTable_Init_GanonsCastle() {
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_END] = Region("Ganon's Castle Forest Trial Beamos Room End", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
//Exits
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM, []{return logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_FINAL_DOOR, []{return logic->IsAdult || logic->CanGroundJump();}), // child can do unintuitive jump
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_FINAL_DOOR, []{return logic->IsAdult || logic->CanGroundJump() || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS);}),
});
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_FINAL_DOOR] = Region("Ganon's Castle Forest Trial Beamos Room Final Door", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
//Exits
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_END, []{return true;}),
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM, []{return logic->Get(LOGIC_FOREST_TRIAL_SILVER_RUPEES);}), // child needs to either ground jump or do unintuitive jump
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM, []{return logic->Get(LOGIC_FOREST_TRIAL_SILVER_RUPEES);}),
});
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Forest Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
@@ -416,7 +416,7 @@ void RegionTable_Init_GanonsCastle() {
}, {
//Exits
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return logic->Get(LOGIC_FOREST_TRIAL_MQ_SPAWN_BEAMOS_CHEST) && (logic->CanAvoidEnemy(RE_BEAMOS) || logic->CanKillEnemy(RE_ARMOS)) && logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM_END, []{return logic->IsAdult || logic->CanGroundJump();}), // child can do unintuitive jump
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM_END, []{return logic->IsAdult || logic->CanGroundJump() || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS);}),
});
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM_END] = Region("Ganon's Castle MQ Forest Trial Beamos Room Final Door", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {

View File

@@ -24,7 +24,7 @@ void RegionTable_Init_JabuJabusBelly() {
areaTable[RR_JABU_JABUS_BELLY_LIFT_ROOM] = Region("Jabu Jabus Belly Lift Room", SCENE_JABU_JABU, {}, {
//Locations
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku() && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku() && GetCheckPrice() <= GetWalletCapacity()),
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
}, {
@@ -285,7 +285,7 @@ void RegionTable_Init_JabuJabusBelly() {
}, {
//Exits
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return true;}),
Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE))));}),
Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS))));}),
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->Get(LOGIC_JABU_MQ_HOLES_ROOM_DOOR);}),
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return logic->Get(LOGIC_JABU_LOWERED_PATH) || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->Get(LOGIC_JABU_MQ_LIFT_ROOM_COW));}),
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER, []{return logic->Get(LOGIC_JABU_MQ_WATER_SWITCH_LIFT_ACCESS);}),

View File

@@ -268,7 +268,7 @@ void RegionTable_Init_ShadowTemple() {
//Exits
Entrance(RR_SHADOW_TEMPLE_ROOM_TO_BOAT, []{return logic->SmallKeys(SCENE_SHADOW_TEMPLE, 4);}),
Entrance(RR_SHADOW_TEMPLE_SPINNING_BLADES, []{return logic->HasItem(RG_GORONS_BRACELET);}),
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return ((logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return ((logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS))) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
});
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Region("Shadow Temple Beyond Boat", SCENE_SHADOW_TEMPLE, {
@@ -642,7 +642,7 @@ void RegionTable_Init_ShadowTemple() {
//Exits
Entrance(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, []{return logic->Get(LOGIC_SHADOW_SHORTCUT_BLOCK);}),
Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return logic->SmallKeys(SCENE_SHADOW_TEMPLE, 5);}),
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return ((logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return ((logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS))) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
});
areaTable[RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Region("Shadow Temple MQ Beyond Boat", SCENE_SHADOW_TEMPLE, {

View File

@@ -294,7 +294,7 @@ void RegionTable_Init_WaterTemple() {
//Exits
Entrance(RR_WATER_TEMPLE_3_JETS_SWITCH, []{return true;}),
Entrance(RR_WATER_TEMPLE_BOULDER_CANAL, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}),
Entrance(RR_WATER_TEMPLE_BEHIND_CANAL, []{return logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE) && logic->HasItem(RG_BRONZE_SCALE);}),
Entrance(RR_WATER_TEMPLE_BEHIND_CANAL, []{return logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->HasItem(RG_BRONZE_SCALE);}),
});
areaTable[RR_WATER_TEMPLE_BOULDER_CANAL] = Region("Water Temple Boulder Canal", SCENE_WATER_TEMPLE, {}, {
@@ -1310,7 +1310,7 @@ void RegionTable_Init_WaterTemple() {
//Exits
Entrance(RR_WATER_TEMPLE_MQ_3_JETS_ROOM, []{return logic->SmallKeys(SCENE_WATER_TEMPLE, 2);}),
Entrance(RR_WATER_TEMPLE_MQ_SCARECROW_CANAL, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}),
Entrance(RR_WATER_TEMPLE_MQ_BEHIND_CANAL, []{return logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE) && logic->HasItem(RG_BRONZE_SCALE);}),
Entrance(RR_WATER_TEMPLE_MQ_BEHIND_CANAL, []{return logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->HasItem(RG_BRONZE_SCALE);}),
});
areaTable[RR_WATER_TEMPLE_MQ_BEHIND_CANAL] = Region("Water Temple MQ Behind Canal", SCENE_WATER_TEMPLE, {}, {}, {

View File

@@ -85,7 +85,7 @@ void RegionTable_Init_GerudoFortress() {
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
// need to explicitly convert it into a bool
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0 ;}),
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS).Get() != 0 ;}),
});
areaTable[RR_GF_BOTTOM_OF_LOWER_VINES] = Region("GF Bottom of Lower Vines", SCENE_GERUDOS_FORTRESS, {}, {}, {
@@ -104,7 +104,7 @@ void RegionTable_Init_GerudoFortress() {
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}),
// need to explicitly convert it into a bool
Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP).Get();}),
Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS).Get();}),
});
areaTable[RR_GF_NEAR_GS] = Region("GF Near GS", SCENE_GERUDOS_FORTRESS, {}, {
@@ -126,21 +126,21 @@ void RegionTable_Init_GerudoFortress() {
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_NEAR_GS, []{return true;}),
Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return true;}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP).Get();}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS).Get();}),
});
areaTable[RR_GF_BOTTOM_OF_UPPER_VINES] = Region("GF Bottom of Upper Vines", SCENE_GERUDOS_FORTRESS, {}, {}, {
//Exits
Entrance(RR_GF_OUTSIDE_GTG, []{return true;}),
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_JUMP));}),
Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS));}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return true /* logic->CanClimb() */;}),
Entrance(RR_GF_TO_GTG, []{return logic->IsAdult && ctx->GetTrickOption(RT_GF_LEDGE_CLIP_INTO_GTG).Get();}),
});
areaTable[RR_GF_TOP_OF_UPPER_VINES] = Region("GF Top of Upper Vines", SCENE_GERUDOS_FORTRESS, {}, {
//Locations
//if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_GF_JUMP, climb is needed to get back up
//if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_UNINTUITIVE_JUMPS, climb is needed to get back up
LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH) && logic->CanGetNightTimeGS()),
}, {
//Exits
@@ -163,7 +163,7 @@ void RegionTable_Init_GerudoFortress() {
areaTable[RR_GF_LONG_ROOF] = Region("GF Long Roof", SCENE_GERUDOS_FORTRESS, {}, {}, {
//Exits
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_NEAR_GS, []{return (logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP)) || logic->CanUse(RG_HOVER_BOOTS);}),
Entrance(RR_GF_NEAR_GS, []{return (logic->IsAdult && ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS)) || logic->CanUse(RG_HOVER_BOOTS);}),
Entrance(RR_GF_BELOW_GS, []{return true;}),
Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GF_BELOW_CHEST, []{return true;}),
@@ -193,8 +193,8 @@ 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;}),
//there's a trick to reach RR_GF_LONG_ROOF
Entrance(RR_GF_OUTSKIRTS, []{return ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS).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);}),

View File

@@ -74,7 +74,7 @@ void RegionTable_Init_Kakariko() {
Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}),
Entrance(RR_KAK_IMPAS_LEDGE, []{return (logic->IsChild && logic->AtDay) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION));}),
Entrance(RR_KAK_WATCHTOWER, []{return logic->IsAdult || logic->AtDay || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer());}),
Entrance(RR_KAK_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsAdult);}),
Entrance(RR_KAK_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->IsAdult);}),
Entrance(RR_KAK_IMPAS_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_ROOFTOP_GS) && logic->CanUse(RG_HOVER_BOOTS));}),
Entrance(RR_THE_GRAVEYARD, []{return true;}),
Entrance(RR_KAK_BEHIND_GATE, []{return logic->IsAdult || logic->Get(LOGIC_KAKARIKO_GATE_OPEN);}),
@@ -104,7 +104,7 @@ void RegionTable_Init_Kakariko() {
}, {
//Exits
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
Entrance(RR_KAK_ROOFTOP, []{return ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsChild;}),
Entrance(RR_KAK_ROOFTOP, []{return ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) && logic->IsChild;}),
});
areaTable[RR_KAK_ROOFTOP] = Region("Kak Rooftop", SCENE_KAKARIKO_VILLAGE, {}, {
@@ -177,7 +177,7 @@ void RegionTable_Init_Kakariko() {
}, {
//Exits
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
Entrance(RR_KAK_WINDMILL_UPPER, []{return (logic->IsAdult && (ctx->GetTrickOption(RT_KAK_ADULT_WINDMILL_POH) || logic->CanGroundJump())) || (logic->IsChild && logic->CanJumpslash() && ctx->GetTrickOption(RT_KAK_CHILD_WINDMILL_POH));}),
Entrance(RR_KAK_WINDMILL_UPPER, []{return (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->CanGroundJump())) || (logic->IsChild && logic->CanJumpslash() && ctx->GetTrickOption(RT_KAK_CHILD_WINDMILL_POH));}),
});
areaTable[RR_KAK_WINDMILL_UPPER] = Region("Kak Windmill Upper", SCENE_WINDMILL_AND_DAMPES_GRAVE, {}, {

View File

@@ -4102,6 +4102,7 @@ typedef enum {
RT_VISIBLE_COLLISION, // -- general tricks
RT_GROTTOS_WITHOUT_AGONY,
RT_FEWER_TUNIC_REQUIREMENTS,
RT_UNINTUITIVE_JUMPS,
RT_RUSTED_SWITCHES,
RT_FLAMING_CHESTS,
RT_BUNNY_HOOD_JUMPS,
@@ -4117,9 +4118,7 @@ typedef enum {
RT_LW_GS_BEAN,
RT_HC_STORMS_GS,
RT_HF_BIG_POE_WITHOUT_EPONA,
RT_KAK_MAN_ON_ROOF,
RT_KAK_TOWER_GS,
RT_KAK_ADULT_WINDMILL_POH,
RT_KAK_CHILD_WINDMILL_POH,
RT_KAK_ROOFTOP_GS,
RT_GY_POH,
@@ -4157,7 +4156,6 @@ typedef enum {
RT_GV_CHILD_TENT,
RT_GV_CHILD_CUCCO_JUMP,
RT_PASS_GUARDS_WITH_NOTHING,
RT_GF_JUMP,
RT_GF_CHILD_SKIP_WASTELAND_GATE,
RT_GF_ADULT_SKIP_WASTELAND_GATE,
RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON,
@@ -4186,7 +4184,6 @@ typedef enum {
RT_DC_MQ_ADULT_EYES,
RT_DC_DODONGO_CHU,
RT_DC_EYES_CHU,
RT_JABU_ALCOVE_JUMP_DIVE,
RT_JABU_BOSS_HOVER,
RT_JABU_NEAR_BOSS_RANGED,
RT_JABU_NEAR_BOSS_EXPLOSIVES,
@@ -4212,7 +4209,6 @@ typedef enum {
RT_FOREST_MQ_JS_HALLWAY_SWITCH,
RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH,
RT_FOREST_MQ_RANG_HALLWAY_SWITCH,
RT_FIRE_BOSS_DOOR_JUMP,
RT_FIRE_SOT,
RT_FIRE_STRENGTH,
RT_FIRE_SCARECROW,
@@ -4230,7 +4226,6 @@ typedef enum {
RT_WATER_CRACKED_WALL,
RT_WATER_BK_REGION,
RT_WATER_NORTH_BASEMENT_LEDGE_JUMP,
RT_WATER_BK_JUMP_DIVE,
RT_WATER_FW_CENTRAL_GS,
RT_WATER_IRONS_CENTRAL_GS,
RT_WATER_CENTRAL_BOW,

View File

@@ -1347,6 +1347,10 @@ void Settings::CreateOptions() {
"Allows the following possible without Tunics:\n- Enter Water Temple. The area below the center pillar "
"still requires Zora Tunic. Applies to MQ also.\n- Enter Fire Temple. Volvagia still requires Goron "
"Tunic. Applies to MQ also, and includes child access to first floor with dungeon shuffle.");
OPT_TRICK(RT_UNINTUITIVE_JUMPS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Unintuitive Jumps",
"Many ledges can be overcome with particular jumps which are simple to execute without items.\n"
"This includes jumping from heights to dive deeper without scales,\n"
"though this trick doesn't cover Water Temple's Dragon Room.");
OPT_TRICK(RT_RUSTED_SWITCHES, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Hammer Through Collision",
"Applies to:\n"
"- Hitting Fire Temple Highest Goron Chest's Rusted Switch in the SoT Block without Song of Time.\n"
@@ -1422,17 +1426,11 @@ void Settings::CreateOptions() {
OPT_TRICK(RT_HF_BIG_POE_WITHOUT_EPONA, RCQUEST_BOTH, RA_HYRULE_FIELD, { Tricks::Tag::NOVICE },
"Big Poe without Epona",
"Big Poes have a chance of appearing without Epona, you can shoot them quickly with only bow.");
OPT_TRICK(RT_KAK_MAN_ON_ROOF, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE },
"Man on Roof without Hookshot",
"Can be reached by side-hopping off the watchtower as either age, or by jumping onto the potion shop's "
"roof from the ledge as adult.");
OPT_TRICK(RT_KAK_TOWER_GS, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::INTERMEDIATE },
"Kakariko Tower GS with Jump Slash",
"Climb the tower as high as you can without touching the Gold Skulltula, then let go and jump slash "
"immediately. By jump-slashing from as low on the ladder as possible to still hit the Skulltula, this "
"trick can be done without taking fall damage.");
OPT_TRICK(RT_KAK_ADULT_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::NOVICE },
"Windmill PoH as Adult with Nothing", "Can jump up to the spinning platform from below as adult.");
OPT_TRICK(RT_KAK_CHILD_WINDMILL_POH, RCQUEST_BOTH, RA_KAKARIKO_VILLAGE, { Tricks::Tag::EXTREME },
"Windmill PoH as Child with Precise Jump Slash",
"Can jump up to the spinning platform from below as child with a precise jumpslash timed with the "
@@ -1578,9 +1576,6 @@ void Settings::CreateOptions() {
"Sneak Past Moving Gerudo Guards with No Items",
"The logic normally guarantees Bow or Hookshot to stun them from a distance,"
"but every moving guard can be passed with basic movement and AI manipulation");
OPT_TRICK(RT_GF_JUMP, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, "Gerudo\'s Fortress Ledge Jumps",
"It is possible to navigate the rooves of Fortress with unintuative jumps to reach additional areas "
"without going inside.");
OPT_TRICK(RT_GF_CHILD_SKIP_WASTELAND_GATE, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
"Gerudo\'s Fortress Skip Wasteland Gate as Child",
"As child a sidehop out of bounds off the tower can be used to get past the gate.");
@@ -1661,9 +1656,6 @@ void Settings::CreateOptions() {
"Dodongo\'s Cavern Two Scrub Room with Strength",
"With help from a conveniently-positioned block, Adult can quickly carry a Bomb Flower over to destroy "
"the mud wall blocking the room with two Deku Scrubs.");
OPT_TRICK(RT_DC_JUMP, RCQUEST_BOTH, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE },
"Dodongo\'s Cavern Spike Trap Room Jump without Hover Boots",
"The jump is Adult Link only. Applies to both Vanilla and MQ.");
OPT_TRICK(RT_DC_HAMMER_FLOOR, RCQUEST_BOTH, RA_DODONGOS_CAVERN, { Tricks::Tag::NOVICE },
"Dodongo\'s Cavern Smash the Boss Lobby Floor",
"The bombable floor before King Dodongo can be destroyed with Hammer if hit in the very center. This is "
@@ -1694,11 +1686,6 @@ void Settings::CreateOptions() {
"Dodongo\'s Cavern Light the Eyes with Bombchus",
"You can light the dodongo head's eyes with bombchus from the main room, allowing instant access to the end "
"of the dungeon.");
OPT_TRICK(RT_JABU_ALCOVE_JUMP_DIVE, RCQUEST_BOTH, RA_JABU_JABUS_BELLY, { Tricks::Tag::NOVICE },
"Jabu Underwater Alcove as Adult with Jump Dive",
"Standing above the underwater tunnel leading to the scrub, jump down and swim through the tunnel. This "
"allows adult to access the alcove with no Scale or Iron Boots. In Vanilla Jabu, this alcove has a "
"business scrub. In MQ Jabu, it has the compass chest and a door switch for the main floor.");
OPT_TRICK(RT_JABU_BOSS_HOVER, RCQUEST_VANILLA, RA_JABU_JABUS_BELLY, { Tricks::Tag::INTERMEDIATE },
"Jabu Near Boss Room with Hover Boots",
"A box for the blue switch can be carried over by backwalking with one while the elevator is at its "
@@ -1809,10 +1796,6 @@ void Settings::CreateOptions() {
"The Boomerang can return to Link through walls, allowing child to hit the hallway switch. This can be "
"used to allow adult to pass through later, or in conjunction with \"Forest Temple Outside Backdoor with "
"Jump Slash\".");
OPT_TRICK(RT_FIRE_BOSS_DOOR_JUMP, RCQUEST_BOTH, RA_FIRE_TEMPLE, { Tricks::Tag::NOVICE },
"Fire Temple Boss Door without Hover Boots or Pillar",
"The Fire Temple Boss Door can be reached as adult with a precise jump. You must be touching the side "
"wall of the room so that Link will grab the ledge from farther away than is normally possible.");
// Is also used in MQ logic, but has no practical effect there as of now
OPT_TRICK(RT_FIRE_SOT, RCQUEST_VANILLA, RA_FIRE_TEMPLE, { Tricks::Tag::INTERMEDIATE },
"Fire Temple Song of Time Room GS without Song of Time",
@@ -1891,12 +1874,6 @@ void Settings::CreateOptions() {
"In the northern basement there's a ledge from where, in Vanilla Water Temple, boulders roll out into "
"the room. Normally to jump directly to this ledge logically requires the Hover Boots, but with precise "
"jump, it can be done without them. This trick applies to both Vanilla and Master Quest.");
OPT_TRICK(
RT_WATER_BK_JUMP_DIVE, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE },
"Water Temple Boss Key Jump Dive",
"Stand on the very edge of the raised corridor leading from the push block room to the rolling boulder "
"corridor. Face the Gold Skulltula on the waterfall and jump over the boulder corridor floor into the pool of "
"water, swimming right once underwater. This allows access to the boss key room without Iron boots.");
// Also used in MQ logic, but won't be relevent unless a way to enter tower without irons exists (likely a clip +
// swim)
OPT_TRICK(RT_WATER_FW_CENTRAL_GS, RCQUEST_VANILLA, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE },
@@ -1929,7 +1906,7 @@ void Settings::CreateOptions() {
"to find some other way of killing it.");
OPT_TRICK(RT_WATER_DRAGON_JUMP_DIVE, RCQUEST_BOTH, RA_WATER_TEMPLE, { Tricks::Tag::NOVICE },
"Water Temple Dragon Statue Jump Dive",
"If you come into the dragon statue room from the serpent river, you can jump down from above and get "
"If you come into the dragon statue room from the serpent river, you can sidehop down from above and get "
"into the tunnel without needing either Iron Boots or a Scale. This trick applies to both Vanilla and "
"Master Quest. In Vanilla, you must shoot the switch from above with the Bow, and then quickly get "
"through the tunnel before the gate closes.");