mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-09-29 03:17:52 -04:00
Fix logic for fire near boss (#7147)
Adult with hood can jump from cage to boss door to upper with hood Also fix bunny / mask options being disabled outside rando file
This commit is contained in:
@@ -33,9 +33,32 @@ void RegionTable_Init_FireTemple() {
|
||||
//and I've only been able to get the nearest 2, regardless it's a trick and probably a specific one like GY crate freestanding with rang
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FOYER, (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || (logic->BunnyHood() && logic->Get(LOGIC_FIRE_HIT_PLATFORM))) && (logic->FireTimer() >= 16 || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_UPPER, logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && logic->FireTimer() >= 16),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->BunnyHood() && logic->Get(LOGIC_FIRE_HIT_PLATFORM)) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->Get(LOGIC_FIRE_HIT_PLATFORM))))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FOYER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR, logic->FireTimer() >= 8 && logic->Get(LOGIC_FIRE_HIT_PLATFORM)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_TARGET, logic->FireTimer() >= 16 && logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR, logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->BunnyHood())))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR] = Region("Fire Temple Near Boss Pillar", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->FireTimer() >= 8),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_TARGET, logic->FireTimer() >= 8 && logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR, logic->FireTimer() >= 8 && (logic->IsAdult || logic->BunnyHood() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_DOOR] = Region("Fire Temple Near Boss Door", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->FireTimer() >= 8 && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR, logic->FireTimer() >= 8 && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->BunnyHood())),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_TARGET, logic->FireTimer() >= 8 && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->BunnyHood()))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_TARGET] = Region("Fire Temple Near Boss Target", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->FireTimer() >= 8 && (logic->IsAdult || logic->BunnyHood()) && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR, logic->FireTimer() >= 8 && logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->BunnyHood())),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_UPPER, logic->FireTimer() >= 8 && logic->IsAdult),
|
||||
});
|
||||
|
||||
//This region assumes tunic logic is handled on entry.
|
||||
@@ -49,7 +72,9 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits should be handled if there's any way here directly
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->FireTimer() >= 8),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_TARGET, logic->FireTimer() >= 8),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM] = Region("Fire Temple Loop Hexagon Room", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
@@ -332,8 +357,9 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
//Accounting for either air-drifting to the platform you want and taking fall damage or landing on the platform and jumping off
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->Get(LOGIC_FIRE_HIT_PLATFORM) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->TakeDamage() || logic->BunnyHood())),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR, logic->Get(LOGIC_FIRE_HIT_PLATFORM)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8 && logic->TakeDamage()), // sidehop towards foyer door
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR, logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8 && logic->TakeDamage()), // sidehop towards boss door
|
||||
ENTRANCE(RR_FIRE_TEMPLE_CORRIDOR, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_PLATFORMS, logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && (logic->Get(LOGIC_FIRE_HIT_ABOVE_MAZE_PLATFORM) || logic->CanGroundJump() || logic->BunnyHood()))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_CAGELESS_CHEST_ROOM, true),
|
||||
@@ -576,9 +602,25 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, logic->FireTimer() >= 24 && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FOYER_UPPER, (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->BunnyHood())) && (logic->FireTimer() >= 16 || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, logic->FireTimer() >= 32 && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->BunnyHood()))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->BunnyHood()) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->BunnyHood() || logic->Get(LOGIC_FIRE_HIT_PLATFORM))))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FOYER_UPPER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR, logic->FireTimer() >= 8 && logic->Get(LOGIC_FIRE_HIT_PLATFORM)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, logic->FireTimer() >= 32 && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, logic->FireTimer() >= 16 && (logic->CanUse(RG_HOVER_BOOTS) || (logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->BunnyHood()) || (logic->IsAdult && (ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS) || logic->BunnyHood())))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR] = Region("Fire Temple Near Boss Pillar", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->FireTimer() >= 8),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, logic->FireTimer() >= 8 && logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, logic->FireTimer() >= 8 && (logic->IsAdult || logic->BunnyHood() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR] = Region("Fire Temple MQ Near Boss Door", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->FireTimer() >= 8 && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR, logic->FireTimer() >= 8 && logic->Get(LOGIC_FIRE_HIT_PLATFORM) && (logic->IsAdult || logic->BunnyHood() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, logic->FireTimer() >= 8 && logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->BunnyHood())),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
//This region assumes tunic logic is handled on entry.
|
||||
@@ -599,8 +641,8 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_UPPER, logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->BunnyHood()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->IsAdult && logic->TakeDamage()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_UPPER, logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->BunnyHood() || ctx->GetTrickOption(RT_UNINTUITIVE_JUMPS)),
|
||||
});
|
||||
|
||||
//This region assumes tunic logic is handled on entry.
|
||||
@@ -613,6 +655,7 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET, true),
|
||||
});
|
||||
|
||||
@@ -954,7 +997,9 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->Get(LOGIC_FIRE_HIT_PLATFORM)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_PILLAR, logic->Get(LOGIC_FIRE_HIT_PLATFORM)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8 && logic->TakeDamage()), // sidehop towards foyer door
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, logic->Get(LOGIC_FIRE_HIT_PLATFORM) && logic->FireTimer() >= 8 && logic->TakeDamage()), // sidehop towards boss door
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_CORRIDOR, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
//Hover boots get there via the platforms
|
||||
@@ -1133,8 +1178,8 @@ void RegionTable_Init_FireTemple() {
|
||||
LOCATION(RC_FIRE_BOSS_KEY_HINT, true),
|
||||
}, {
|
||||
// Exits
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR, ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR, ctx->GetDungeon(FIRE_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ROOM, logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
|
||||
@@ -497,6 +497,9 @@ RANDO_ENUM_ITEM(RR_FOREST_TEMPLE_BOSS_ROOM)
|
||||
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_FOYER)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_NEAR_BOSS_PILLAR)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_NEAR_BOSS_DOOR)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_NEAR_BOSS_TARGET)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_NEAR_BOSS_UPPER)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_LOOP_5_TILE_ROOM)
|
||||
@@ -555,6 +558,8 @@ RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_LOOP_FLARE_DANCER)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_LOOP_CAGE_SWITCH)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_LOOP_GORON_CAGE)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_PILLAR)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_DOOR)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_TARGET)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_UPPER)
|
||||
RANDO_ENUM_ITEM(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM)
|
||||
|
||||
@@ -993,7 +993,8 @@ void SohMenu::AddMenuEnhancements() {
|
||||
AddWidget(path, "Bunny Hood Effect", WIDGET_CVAR_COMBOBOX)
|
||||
.CVar(CVAR_BUNNY_HOOD_NAME)
|
||||
.PreFunc([](WidgetInfo& info) {
|
||||
info.options->disabled = OTRGlobals::Instance->gRandoContext->GetOption(RSK_BUNNY_HOOD).Is(RO_GENERIC_ON);
|
||||
info.options->disabled =
|
||||
IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_BUNNY_HOOD).Is(RO_GENERIC_ON);
|
||||
info.options->disabledTooltip = "This setting is forcefully enabled because a randomized savefile with "
|
||||
"\"Bunny Hood Effect\" is currently loaded.";
|
||||
})
|
||||
@@ -1008,7 +1009,7 @@ void SohMenu::AddMenuEnhancements() {
|
||||
.CVar(CVAR_ADULT_MASKS_NAME)
|
||||
.PreFunc([](WidgetInfo& info) {
|
||||
info.options->disabled =
|
||||
OTRGlobals::Instance->gRandoContext->GetOption(RSK_MASKS_AS_ADULT).Is(RO_GENERIC_ON);
|
||||
IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_MASKS_AS_ADULT).Is(RO_GENERIC_ON);
|
||||
info.options->disabledTooltip = "This setting is forcefully enabled because a randomized savefile with "
|
||||
"\"Masks as Adult\" is currently loaded.";
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user