consolidation

This commit is contained in:
Demur Rumed 2025-07-30 06:00:45 +00:00
commit ead126d087
5 changed files with 15 additions and 21 deletions

View file

@ -104,14 +104,14 @@ void RegionTable_Init_GanonsCastle() {
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Region("Ganon's Castle Spirit Trial", SCENE_INSIDE_GANONS_CASTLE, { areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Region("Ganon's Castle Spirit Trial", SCENE_INSIDE_GANONS_CASTLE, {
//Events //Events
EventAccess(&logic->NutPot, []{return ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}), EventAccess(&logic->NutPot, []{return ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}),
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_MIRROR_SHIELD) || ctx->GetOption(RSK_SUNLIGHT_ARROWS)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT));}), EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_MIRROR_SHIELD) || ctx->GetOption(RSK_SUNLIGHT_ARROWS)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT));}),
}, { }, {
//Locations //Locations
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanJumpslashExceptHammer() || (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanJumpslashExceptHammer() || (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))))),
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))),
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))),
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true),
}, {}); }, {});

View file

@ -14,7 +14,7 @@ void RegionTable_Init_DeathMountainTrail() {
LOCATION(RC_DMT_FREESTANDING_POH, logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))), LOCATION(RC_DMT_FREESTANDING_POH, logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))),
LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))), LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash()), LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash()),
LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_DMT_HOOKSHOT_LOWER_GS) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_DMT_JS_LOWER_GS)) && logic->CanGetNightTimeGS()), LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) || (ctx->GetTrickOption(RT_DMT_JS_LOWER_GS) && logic->CanJumpslash())) && logic->CanGetNightTimeGS()),
LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()), LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()), LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))), LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),

View file

@ -17,7 +17,7 @@ void RegionTable_Init_GerudoValley() {
Entrance(RR_GV_UPPER_STREAM, []{return logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}), Entrance(RR_GV_UPPER_STREAM, []{return logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}), Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GV_GROTTO_LEDGE, []{return true;}), Entrance(RR_GV_GROTTO_LEDGE, []{return true;}),
Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)) || ((logic->IsChild || ctx->GetTrickOption(RT_GV_HOOKSHOT_EXTENSION_ACROSS_BRIDGE)) && logic->CanUse(RG_HOOKSHOT));}), Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)) || ((logic->IsChild || ctx->GetTrickOption(RT_HOOKSHOT_EXTENSION)) && logic->CanUse(RG_HOOKSHOT));}),
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child
}); });

View file

@ -3534,6 +3534,7 @@ typedef enum {
RT_BOMBCHU_BEEHIVES, RT_BOMBCHU_BEEHIVES,
RT_BLUE_FIRE_MUD_WALLS, RT_BLUE_FIRE_MUD_WALLS,
RT_OPEN_UNDERWATER_CHEST, RT_OPEN_UNDERWATER_CHEST,
RT_HOOKSHOT_EXTENSION,
RT_KF_ADULT_GS, // -- location tricks RT_KF_ADULT_GS, // -- location tricks
RT_LW_BRIDGE, RT_LW_BRIDGE,
RT_LW_MIDO_BACKFLIP, RT_LW_MIDO_BACKFLIP,
@ -3550,7 +3551,6 @@ typedef enum {
RT_GY_SHADOW_FIRE_ARROWS, RT_GY_SHADOW_FIRE_ARROWS,
RT_DMT_SOIL_GS, RT_DMT_SOIL_GS,
RT_DMT_BOMBABLE, RT_DMT_BOMBABLE,
RT_DMT_HOOKSHOT_LOWER_GS,
RT_DMT_HOVERS_LOWER_GS, RT_DMT_HOVERS_LOWER_GS,
RT_DMT_BEAN_LOWER_GS, RT_DMT_BEAN_LOWER_GS,
RT_DMT_JS_LOWER_GS, RT_DMT_JS_LOWER_GS,
@ -3578,7 +3578,6 @@ typedef enum {
RT_LH_LAB_DIVING, RT_LH_LAB_DIVING,
RT_LH_WATER_HOOKSHOT, RT_LH_WATER_HOOKSHOT,
RT_GV_CRATE_HOVERS, RT_GV_CRATE_HOVERS,
RT_GV_HOOKSHOT_EXTENSION_ACROSS_BRIDGE,
RT_PASS_GUARDS_WITH_NOTHING, RT_PASS_GUARDS_WITH_NOTHING,
RT_GF_JUMP, RT_GF_JUMP,
RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON, RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON,
@ -3703,7 +3702,6 @@ typedef enum {
RT_GTG_MQ_WITHOUT_HOOKSHOT, RT_GTG_MQ_WITHOUT_HOOKSHOT,
RT_LENS_GANON, RT_LENS_GANON,
RT_GANON_SPIRIT_TRIAL_HOOKSHOT, RT_GANON_SPIRIT_TRIAL_HOOKSHOT,
RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION,
RT_LENS_GANON_MQ, RT_LENS_GANON_MQ,
RT_GANON_MQ_FIRE_TRIAL, RT_GANON_MQ_FIRE_TRIAL,
RT_GANON_MQ_SHADOW_TRIAL, RT_GANON_MQ_SHADOW_TRIAL,

View file

@ -407,6 +407,12 @@ void Settings::CreateOptions() {
OPT_TRICK(RT_OPEN_UNDERWATER_CHEST, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE, Tricks::Tag::GLITCH }, OPT_TRICK(RT_OPEN_UNDERWATER_CHEST, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE, Tricks::Tag::GLITCH },
"Open Underwater Chests", "Open Underwater Chests",
"Underwater chests can be opened by wearing iron boots and hookshotting the chest."); "Underwater chests can be opened by wearing iron boots and hookshotting the chest.");
OPT_TRICK(RT_HOOKSHOT_EXTENSION, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::INTERMEDIATE, Tricks::Tag::GLITCH },
"Hookshot Extension",
"Slightly extends range. Also allows clipping projectile past collision. Used for:\n"
"- Crossing Gerudo Valley with Hookshot\n"
"- Retrieving DMT Gold Skulltula beside bomb flower\n"
"- Hitting switch through wall in Spirit Trial (with Bow or Slingshot)");
OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE }, OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE },
"Adult Kokiri Forest GS with Hover Boots", "Adult Kokiri Forest GS with Hover Boots",
"Can be obtained without Hookshot by using the Hover Boots off of one of the roots."); "Can be obtained without Hookshot by using the Hover Boots off of one of the roots.");
@ -472,10 +478,6 @@ void Settings::CreateOptions() {
"Death Mountain Trail Chest with Strength", "Death Mountain Trail Chest with Strength",
"Child Link can blow up the wall using a nearby bomb flower. You must backwalk with the flower and then " "Child Link can blow up the wall using a nearby bomb flower. You must backwalk with the flower and then "
"quickly throw it toward the wall."); "quickly throw it toward the wall.");
OPT_TRICK(RT_DMT_HOOKSHOT_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::INTERMEDIATE },
"Death Mountain Trail Lower Red Rock GS with Hookshot",
"After killing the Skulltula, the token can be fished out of the rock without needing to destroy it, by "
"using the Hookshot in the correct way.");
OPT_TRICK(RT_DMT_HOVERS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::ADVANCED }, OPT_TRICK(RT_DMT_HOVERS_LOWER_GS, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_TRAIL, { Tricks::Tag::ADVANCED },
"Death Mountain Trail Lower Red Rock GS with Hover Boots", "Death Mountain Trail Lower Red Rock GS with Hover Boots",
"After killing the Skulltula, the token can be collected without needing to destroy the rock by " "After killing the Skulltula, the token can be collected without needing to destroy the rock by "
@ -581,9 +583,6 @@ void Settings::CreateOptions() {
"Gerudo Valley Crate PoH as Adult with Hover Boots", "Gerudo Valley Crate PoH as Adult with Hover Boots",
"From the far side of Gerudo Valley, a precise Hover Boots movement and jump-slash recoil can allow " "From the far side of Gerudo Valley, a precise Hover Boots movement and jump-slash recoil can allow "
"adult to reach the ledge with the crate PoH without needing Longshot. You will take fall damage."); "adult to reach the ledge with the crate PoH without needing Longshot. You will take fall damage.");
OPT_TRICK(RT_GV_HOOKSHOT_EXTENSION_ACROSS_BRIDGE, RCQUEST_BOTH, RA_GERUDO_VALLEY,
{ Tricks::Tag::INTERMEDIATE, Tricks::Tag::GLITCH }, "Gerudo Valley Cross Bridge with Hookshot Extension",
"It is possible to cross Gerudo Valley with only Hookshot using a hookshot extension.");
OPT_TRICK(RT_PASS_GUARDS_WITH_NOTHING, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, OPT_TRICK(RT_PASS_GUARDS_WITH_NOTHING, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
"Sneak Past Moving Gerudo Guards with No Items", "Sneak Past Moving Gerudo Guards with No Items",
"The logic normally guarantees Bow or Hookshot to stun them from a distance," "The logic normally guarantees Bow or Hookshot to stun them from a distance,"
@ -1136,9 +1135,6 @@ void Settings::CreateOptions() {
"Spirit Trial without Hookshot", "Spirit Trial without Hookshot",
"The highest rupee can be obtained as either age by performing a precise jump and a well-timed jumpslash " "The highest rupee can be obtained as either age by performing a precise jump and a well-timed jumpslash "
"off of an Armos."); "off of an Armos.");
OPT_TRICK(RT_GANON_SPIRIT_TRIAL_BOW_EXTENSION, RCQUEST_VANILLA, RA_GANONS_CASTLE,
{ Tricks::Tag::NOVICE, Tricks::Tag::GLITCH }, "Spirit Trial Switch with Bow Extension",
"It is possible to shoot through wall to hit switch using a bow extension.");
OPT_TRICK(RT_LENS_GANON_MQ, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE }, OPT_TRICK(RT_LENS_GANON_MQ, RCQUEST_MQ, RA_GANONS_CASTLE, { Tricks::Tag::NOVICE },
"Ganon\'s Castle MQ without Lens of Truth", "Ganon\'s Castle MQ without Lens of Truth",
"Removes the requirements for the Lens of Truth in Ganon's Castle MQ."); "Removes the requirements for the Lens of Truth in Ganon's Castle MQ.");