This commit is contained in:
TheLynk 2025-06-16 14:45:17 -03:00 committed by GitHub
commit a96be56a22
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 54 additions and 11 deletions

View file

@ -21,7 +21,7 @@ void RegionTable_Init_BottomOfTheWell() {
//Events
EventAccess(&logic->StickPot, []{return true;}),
EventAccess(&logic->NutPot, []{return true;}),
EventAccess(&logic->LoweredWaterInsideBotw, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
EventAccess(&logic->LoweredWaterInsideBotw, []{return (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH) && logic->OcarinaItemsGlitchZeldasLullaby()));}),
}, {
//Locations
LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, logic->HasExplosives()),
@ -210,7 +210,7 @@ void RegionTable_Init_BottomOfTheWell() {
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2) && logic->CanUseProjectile();}),
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, []{return logic->IsChild && logic->LoweredWaterInsideBotw;}),
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH_MQ) && logic->OcarinaItemsGlitchZeldasLullaby()));}),
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
});

View file

@ -50,7 +50,7 @@ void RegionTable_Init_CastleGrounds() {
areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Region("HC Great Fairy Fountain", "HC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_HC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_HC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
@ -100,7 +100,7 @@ void RegionTable_Init_CastleGrounds() {
areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Region("OGC Great Fairy Fountain", "OGC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_OGC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_OGC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_CASTLE_GROUNDS, []{return true;}),

View file

@ -101,7 +101,7 @@ void RegionTable_Init_DeathMountainCrater() {
areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Region("DMC Great Fairy Fountain", "DMC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_DMC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_DMC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_DMC_LOWER_LOCAL, []{return true;}),

View file

@ -100,7 +100,7 @@ void RegionTable_Init_DeathMountainTrail() {
areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Region("DMT Great Fairy Fountain", "DMT Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_DMT_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_DMT_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),

View file

@ -60,7 +60,7 @@ void RegionTable_Init_DesertColossus() {
areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Region("Colossus Great Fairy Fountain", "Colossus Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_DESERT_COLOSSUS, []{return true;}),

View file

@ -41,7 +41,7 @@ void RegionTable_Init_GoronCity() {
Entrance(RR_GC_MEDIGORON, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}),
Entrance(RR_GC_WOODS_WARP, []{return logic->GCWoodsWarpOpen;}),
Entrance(RR_GC_SHOP, []{return (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && (logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET) || logic->GoronCityChildFire || logic->CanUse(RG_FAIRY_BOW)));}),
Entrance(RR_GC_DARUNIAS_CHAMBER, []{return (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && logic->GCDaruniasDoorOpenChild);}),
Entrance(RR_GC_DARUNIAS_CHAMBER, []{return (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && (logic->GCDaruniasDoorOpenChild || (ctx->GetTrickOption(RT_GC_OCARINA_ITEMS_GLITCH_DARUNIAS_CHAMBER) && logic->OcarinaItemsGlitchZeldasLullaby())));}),
Entrance(RR_GC_GROTTO_PLATFORM, []{return logic->IsAdult && ((logic->CanUse(RG_SONG_OF_TIME) && ((logic->EffectiveHealth() > 2) || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_NAYRUS_LOVE))) || (logic->EffectiveHealth() > 1 && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_HOOKSHOT)) || (logic->EffectiveHealth() > 2 && logic->CanUse(RG_HOOKSHOT) && ctx->GetTrickOption(RT_GC_GROTTO)));}),
});

View file

@ -110,7 +110,7 @@ void RegionTable_Init_KokiriForest() {
areaTable[RR_KF_LINKS_HOUSE] = Region("KF Link's House", "KF Link's House", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_KF_LINKS_HOUSE_COW, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && logic->LinksCow),
LOCATION(RC_KF_LINKS_HOUSE_COW, logic->IsAdult && logic->LinksCow && logic->CanUse(RG_EPONAS_SONG) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_COW) && logic->OcarinaItemsGlitchEponasSong())),
LOCATION(RC_KF_LINKS_HOUSE_POT, logic->CanBreakPots()),
}, {
//Exits

View file

@ -112,7 +112,7 @@ void RegionTable_Init_ZorasFountain() {
areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Region("ZF Great Fairy Fountain", "ZF Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_ZF_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
LOCATION(RC_ZF_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, {
//Exits
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),

View file

@ -68,7 +68,7 @@ void RegionTable_Init_ZoraRiver() {
Entrance(RR_ZR_FAIRY_GROTTO, []{return Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();});}),
Entrance(RR_THE_LOST_WOODS, []{return logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
Entrance(RR_ZR_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
Entrance(RR_ZR_BEHIND_WATERFALL, []{return ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || (logic->IsChild && ctx->GetTrickOption(RT_ZR_CUCCO)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_ZR_HOVERS));}),
Entrance(RR_ZR_BEHIND_WATERFALL, []{return ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || (logic->IsChild && ctx->GetTrickOption(RT_ZR_CUCCO)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_ZR_HOVERS)) || (ctx->GetTrickOption(RT_ZR_OCARINA_ITEMS_GLITCH_WATERFALL) && logic->OcarinaItemsGlitchZeldasLullaby());}),
});
areaTable[RR_ZR_BEHIND_WATERFALL] = Region("ZR Behind Waterfall", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, {}, {

View file

@ -1042,6 +1042,23 @@ uint8_t Logic::OcarinaButtons() {
bool Logic::HasBottle() {
return BottleCount() >= 1;
}
//It is logical allows you to manage just the logic of the glitch without any song or ocarina touch
bool Logic::OcarinaItemsGlitch() {
return ((CanUse(RG_BOTTLE_WITH_BUGS) || CanUse(RG_BOTTLE_WITH_FISH)) &&
(CanUseSword() || CanUse(RG_STICKS) || CanUse(RG_NUTS) || CanUse(RG_BOMB_BAG) || CanUse(RG_FAIRY_BOW) ||
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5) || CanUse(RG_HOOKSHOT) || CanUse(RG_LONGSHOT) ||
CanUse(RG_BOOMERANG) || CanUse(RG_MEGATON_HAMMER)));
}
bool Logic::OcarinaItemsGlitchZeldasLullaby() {
return OcarinaItemsGlitch() && HasItem(RG_ZELDAS_LULLABY) && HasItem(RG_OCARINA_C_LEFT_BUTTON) &&
HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON);
}
bool Logic::OcarinaItemsGlitchEponasSong() {
return OcarinaItemsGlitch() && HasItem(RG_EPONAS_SONG) && HasItem(RG_OCARINA_C_LEFT_BUTTON) &&
HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON);
}
bool Logic::CanUseSword() {
return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_MASTER_SWORD) || CanUse(RG_BIGGORON_SWORD);

View file

@ -203,6 +203,9 @@ class Logic {
uint8_t BottleCount();
uint8_t OcarinaButtons();
bool HasBottle();
bool OcarinaItemsGlitch();
bool OcarinaItemsGlitchZeldasLullaby();
bool OcarinaItemsGlitchEponasSong();
bool CanUseSword();
bool CanJumpslashExceptHammer();
bool CanJumpslash();

View file

@ -3499,6 +3499,8 @@ typedef enum {
RT_HOVER_BOOST_SIMPLE,
RT_BOMBCHU_BEEHIVES,
RT_BLUE_FIRE_MUD_WALLS,
RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY,
RT_OCARINA_ITEMS_GLITCH_COW,
RT_KF_ADULT_GS, // -- location tricks
RT_LW_BRIDGE,
RT_LW_MIDO_BACKFLIP,
@ -3527,6 +3529,7 @@ typedef enum {
RT_GC_LEFTMOST,
RT_GC_GROTTO,
RT_GC_LINK_GORON_DINS,
RT_GC_OCARINA_ITEMS_GLITCH_DARUNIAS_CHAMBER,
RT_DMC_HOVER_BEAN_POH,
RT_DMC_BOLERO_JUMP,
RT_DMC_BOULDER_JS,
@ -3535,6 +3538,7 @@ typedef enum {
RT_ZR_UPPER,
RT_ZR_HOVERS,
RT_ZR_CUCCO,
RT_ZR_OCARINA_ITEMS_GLITCH_WATERFALL,
RT_ZD_KING_ZORA_SKIP,
RT_ZD_GS,
RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES,
@ -3706,6 +3710,8 @@ typedef enum {
RT_MEGASIDEHOP_BOMBCHU,
RT_NAVI_DIVE,
RT_BOTTOM_OF_THE_WELL_NAVI_DIVE,
RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH,
RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH_MQ,
RT_LOST_WOOD_NAVI_DIVE,
RT_OCARINA_ITEMS,
RT_OCARINA_ITEMS_BOMB,

View file

@ -400,6 +400,12 @@ void Settings::CreateOptions() {
"Allows exploding beehives with Bombchus.");
OPT_TRICK(RT_BLUE_FIRE_MUD_WALLS, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE }, "Break Mud Walls with Blue Fire",
"Use Blue Fire to break mud walls.");
OPT_TRICK(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE },
"Ocarina Items Glitch for Great Fairy",
"Access the rewards of the Great Fairy with Ocarina Items Glitch.");
OPT_TRICK(RT_OCARINA_ITEMS_GLITCH_COW, RCQUEST_BOTH, RA_NONE, { Tricks::Tag::NOVICE },
"Ocarina Items Glitch for Cow",
"Access the rewards of Cow with Ocarina Items Glitch.");
OPT_TRICK(RT_KF_ADULT_GS, RCQUEST_BOTH, RA_KOKIRI_FOREST, { Tricks::Tag::NOVICE },
"Adult Kokiri Forest GS with Hover Boots",
"Can be obtained without Hookshot by using the Hover Boots off of one of the roots.");
@ -516,6 +522,8 @@ void Settings::CreateOptions() {
"taking damage from the lava floor.");
OPT_TRICK(RT_GC_LINK_GORON_DINS, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::NOVICE },
"Stop Link the Goron with Din\'s Fire", "The timing is quite awkward.");
OPT_TRICK(RT_GC_OCARINA_ITEMS_GLITCH_DARUNIAS_CHAMBER, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::NOVICE },
"Open Darunia\'s Chamber with Ocarina Items Glitch", "With the Ocarina Items Glitch allows you to open the Darunia\'s Chamber.");
OPT_TRICK(RT_DMC_HOVER_BEAN_POH, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::NOVICE },
"Crater\'s Bean PoH with Hover Boots",
"Hover from the base of the bridge near Goron City and walk up the very steep slope.");
@ -542,6 +550,9 @@ void Settings::CreateOptions() {
"Zora\'s Domain Entry with Hover Boots", "Can hover behind the waterfall as adult.");
OPT_TRICK(RT_ZR_CUCCO, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::NOVICE }, "Zora\'s Domain Entry with Cucco",
"You can fly behind the waterfall with a Cucco as child.");
OPT_TRICK(RT_ZR_OCARINA_ITEMS_GLITCH_WATERFALL, RCQUEST_BOTH, RA_ZORAS_RIVER, { Tricks::Tag::NOVICE },
"Zora\'s Domain Entry with Ocarina Items Glitch",
"With the Ocarina Items Glitch allows you to open the waterfall.");
OPT_TRICK(RT_ZD_KING_ZORA_SKIP, RCQUEST_BOTH, RA_ZORAS_DOMAIN, { Tricks::Tag::INTERMEDIATE },
"Skip King Zora as Adult with Nothing",
"With a precise jump as adult, it is possible to get on the fence next to King Zora from the front to "
@ -709,6 +720,12 @@ void Settings::CreateOptions() {
OPT_TRICK(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
"Bottom of the Well Navi dive",
"You need Deku Sticks or Kokiri Sword to dive with Navi for entering Bottom of the Well.");
OPT_TRICK(RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
"Lowered Water Inside BOTW with Ocarina Items Glitch",
"Allows you to lower the water level in BOTW with the Ocarina Items Glitch.");
OPT_TRICK(RT_BOTTOM_OF_THE_WELL_OCARINA_ITEMS_GLITCH_MQ, RCQUEST_MQ, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
"Open Door BOTW MQ with Ocarina Items Glitch",
"Open Door in BOTW MQ with the Ocarina Items Glitch.");
OPT_TRICK(RT_BOTW_CHILD_DEADHAND, RCQUEST_BOTH, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },
"Child Dead Hand without Kokiri Sword", "Requires 9 sticks or 5 jump slashes.");
OPT_TRICK(RT_BOTW_BASEMENT, RCQUEST_VANILLA, RA_BOTTOM_OF_THE_WELL, { Tricks::Tag::NOVICE },