Add OCARINA ITEMS GLITCH DARUNIAS_CHAMBER And Fix Crash

This commit is contained in:
TheLynk 2025-05-24 21:41:03 +02:00
commit e345f25366
11 changed files with 18 additions and 15 deletions

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, {}, { areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Region("HC Great Fairy Fountain", "HC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_HC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_HC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_CASTLE_GROUNDS, []{return true;}), 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, {}, { areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Region("OGC Great Fairy Fountain", "OGC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_OGC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_OGC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_CASTLE_GROUNDS, []{return true;}), 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, {}, { areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Region("DMC Great Fairy Fountain", "DMC Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_DMC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_DMC_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_DMC_LOWER_LOCAL, []{return true;}), 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, {}, { areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Region("DMT Great Fairy Fountain", "DMT Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_DMT_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_DMT_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), 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, {}, { areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Region("Colossus Great Fairy Fountain", "Colossus Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_DESERT_COLOSSUS, []{return true;}), 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_MEDIGORON, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}),
Entrance(RR_GC_WOODS_WARP, []{return logic->GCWoodsWarpOpen;}), 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_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)));}), 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

@ -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, {}, { areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Region("ZF Great Fairy Fountain", "ZF Great Fairy Fountain", {}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations //Locations
LOCATION(RC_ZF_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemGlitchZeldasLullaby()))), LOCATION(RC_ZF_GREAT_FAIRY_REWARD, (logic->CanUse(RG_ZELDAS_LULLABY) || (ctx->GetTrickOption(RT_OCARINA_ITEMS_GLITCH_GREAT_FAIRY) && logic->OcarinaItemsGlitchZeldasLullaby()))),
}, { }, {
//Exits //Exits
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}), 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_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_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_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)) || (ctx->GetTrickOption(RT_ZR_OCARINA_ITEMS_GLITCH_WATERFALL) && logic->OcarinaItemGlitchZeldasLullaby());}), 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, {}, {}, { areaTable[RR_ZR_BEHIND_WATERFALL] = Region("ZR Behind Waterfall", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, {}, {

View file

@ -1042,16 +1042,16 @@ uint8_t Logic::OcarinaButtons() {
bool Logic::HasBottle() { bool Logic::HasBottle() {
return BottleCount() >= 1; return BottleCount() >= 1;
} }
//It is logical allows you to manage just the logic of the glitch without any song or ocarina touch
bool Logic::OcarinaItemGlitch() { bool Logic::OcarinaItemsGlitch() {
return ((CanUse(RG_BOTTLE_WITH_BUGS) || CanUse(RG_BOTTLE_WITH_FISH)) && 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) || (CanUseSword() || CanUse(RG_STICKS) || CanUse(RG_NUTS) || CanUse(RG_BOMB_BAG) || CanUse(RG_FAIRY_BOW) ||
CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_BAG) || CanUse(RG_HOOKSHOT) || CanUse(RG_LONGSHOT) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOMBCHU_5) || CanUse(RG_HOOKSHOT) || CanUse(RG_LONGSHOT) ||
CanUse(RG_BOOMERANG) || CanUse(RG_MEGATON_HAMMER))); CanUse(RG_BOOMERANG) || CanUse(RG_MEGATON_HAMMER)));
} }
bool Logic::OcarinaItemGlitchZeldasLullaby() { bool Logic::OcarinaItemsGlitchZeldasLullaby() {
return OcarinaItemGlitch() && HasItem(RG_ZELDAS_LULLABY) && HasItem(RG_OCARINA_C_LEFT_BUTTON) && return OcarinaItemsGlitch() && HasItem(RG_ZELDAS_LULLABY) && HasItem(RG_OCARINA_C_LEFT_BUTTON) &&
HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON); HasItem(RG_OCARINA_C_RIGHT_BUTTON) && HasItem(RG_OCARINA_C_UP_BUTTON);
} }

View file

@ -203,8 +203,8 @@ class Logic {
uint8_t BottleCount(); uint8_t BottleCount();
uint8_t OcarinaButtons(); uint8_t OcarinaButtons();
bool HasBottle(); bool HasBottle();
bool OcarinaItemGlitch(); bool OcarinaItemsGlitch();
bool OcarinaItemGlitchZeldasLullaby(); bool OcarinaItemsGlitchZeldasLullaby();
bool CanUseSword(); bool CanUseSword();
bool CanJumpslashExceptHammer(); bool CanJumpslashExceptHammer();
bool CanJumpslash(); bool CanJumpslash();

View file

@ -3520,6 +3520,7 @@ typedef enum {
RT_GC_LEFTMOST, RT_GC_LEFTMOST,
RT_GC_GROTTO, RT_GC_GROTTO,
RT_GC_LINK_GORON_DINS, RT_GC_LINK_GORON_DINS,
RT_GC_OCARINA_ITEMS_GLITCH_DARUNIAS_CHAMBER,
RT_DMC_HOVER_BEAN_POH, RT_DMC_HOVER_BEAN_POH,
RT_DMC_BOLERO_JUMP, RT_DMC_BOLERO_JUMP,
RT_DMC_BOULDER_JS, RT_DMC_BOULDER_JS,

View file

@ -520,6 +520,8 @@ void Settings::CreateOptions() {
"taking damage from the lava floor."); "taking damage from the lava floor.");
OPT_TRICK(RT_GC_LINK_GORON_DINS, RCQUEST_BOTH, RA_GORON_CITY, { Tricks::Tag::NOVICE }, 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."); "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 }, OPT_TRICK(RT_DMC_HOVER_BEAN_POH, RCQUEST_BOTH, RA_DEATH_MOUNTAIN_CRATER, { Tricks::Tag::NOVICE },
"Crater\'s Bean PoH with Hover Boots", "Crater\'s Bean PoH with Hover Boots",
"Hover from the base of the bridge near Goron City and walk up the very steep slope."); "Hover from the base of the bridge near Goron City and walk up the very steep slope.");