From 94f0b2126554e7cffcff8fbdfde664dd5bbb942a Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Sat, 19 Jul 2025 16:06:53 +0000 Subject: [PATCH] @deprioritize --- soh/compile_logic.py | 8 ++++++- .../randomizer/location_access/generated.cpp | 24 +++++++++---------- soh/soh/Enhancements/randomizer/logic.s | 24 +++++++++---------- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/soh/compile_logic.py b/soh/compile_logic.py index b5fb2d5c2..24cef9cb6 100755 --- a/soh/compile_logic.py +++ b/soh/compile_logic.py @@ -300,7 +300,13 @@ for rr in RRs: if rr.exits: output("\n") for name, code in rr.exits: - output(f"\tEntrance({name}, []{{return {rr.gen(code)};}}),\n") + deprioritize = code.startswith("@deprioritize ") + if deprioritize: + _, code = code.split(None, 1) + output(f"\tEntrance({name}, []{{return {rr.gen(code)};}}") + if deprioritize: + output(", \"\", false") + output("),\n") output("});\n") source = "".join(result) diff --git a/soh/soh/Enhancements/randomizer/location_access/generated.cpp b/soh/soh/Enhancements/randomizer/location_access/generated.cpp index 471de816b..1084e46d9 100644 --- a/soh/soh/Enhancements/randomizer/location_access/generated.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/generated.cpp @@ -6,7 +6,7 @@ using namespace Rando; extern "C" SaveContext gSaveContext; void RegionTable_Init_Generated() { - // clang-format off +// clang-format off areaTable[RR_ROOT] = Region("Root", SCENE_ID_MAX, false, {RA_LINKS_POCKET}, { EventAccess(&logic->KakarikoVillageGateOpen, []{return ctx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}), EventAccess(&logic->THCouldFree1TorchCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}), @@ -637,7 +637,7 @@ areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", SCENE_LAKE_HYLIA, true, {RA_LAKE }, { Entrance(RR_HYRULE_FIELD, []{return true;}), Entrance(RR_LH_FROM_SHORTCUT, []{return true;}), - Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}), + Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}, "", false), Entrance(RR_LH_FISHING_ISLAND, []{return (((logic->IsChild || logic->WaterTempleClear) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA))));}), Entrance(RR_LH_LAB, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}), Entrance(RR_LH_FROM_WATER_TEMPLE, []{return true;}), @@ -656,7 +656,7 @@ areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", SCENE_LAKE_HYLIA, Entrance(RR_LH_FISHING_POND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}), }); areaTable[RR_LH_OWL_FLIGHT] = Region("LH Owl Flight", SCENE_LAKE_HYLIA, true, {RA_LAKE_HYLIA}, {}, {}, { - Entrance(RR_HYRULE_FIELD, []{return true;}), + Entrance(RR_HYRULE_FIELD, []{return true;}, "", false), }); areaTable[RR_LH_LAB] = Region("LH Lab", SCENE_LAKESIDE_LABORATORY, false, {}, {}, { LOCATION(RC_LH_LAB_DIVE, (logic->HasItem(RG_GOLDEN_SCALE) || ((bool)ctx->GetTrickOption(RT_LH_LAB_DIVING) && (logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE)))))), @@ -1732,7 +1732,7 @@ areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Region("Graveyard Dampes Grave", SCENE_WI LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, true), }, { Entrance(RR_THE_GRAVEYARD, []{return true;}), - Entrance(RR_KAK_WINDMILL, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}), + Entrance(RR_KAK_WINDMILL, []{return (logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME));}, "", false), }); areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Region("Graveyard Dampes House", SCENE_GRAVEKEEPERS_HUT, false, {}, {}, { LOCATION(RC_DAMPE_HINT, logic->IsAdult), @@ -2766,7 +2766,7 @@ areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", SCENE_DEKU_TRE LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->CanCutShrubs()), }, { Entrance(RR_DEKU_TREE_BOSS_EXIT, []{return true;}), - Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}), + Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, "", false), }); areaTable[RR_DODONGOS_CAVERN_BEGINNING] = Region("Dodongos Cavern Beginning", SCENE_DODONGOS_CAVERN, false, {RA_DODONGOS_CAVERN}, {}, {}, { Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}), @@ -3168,7 +3168,7 @@ areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", SC LOCATION(RC_KING_DODONGO, logic->DodongosCavernClear), }, { Entrance(RR_DODONGOS_CAVERN_BOSS_EXIT, []{return true;}), - Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}), + Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, "", false), }); areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", SCENE_JABU_JABU, false, {RA_JABU_JABUS_BELLY}, {}, {}, { Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}), @@ -3410,7 +3410,7 @@ areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", LOCATION(RC_BARINADE, logic->JabuJabusBellyClear), }, { Entrance(RR_JABU_JABUS_BELLY_BOSS_EXIT, []{return false;}), - Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}), + Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, "", false), }); areaTable[RR_FOREST_TEMPLE_FIRST_ROOM] = Region("Forest Temple First Room", SCENE_FOREST_TEMPLE, false, {RA_FOREST_TEMPLE}, {}, { LOCATION(RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, true), @@ -3823,7 +3823,7 @@ areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", SCENE_ LOCATION(RC_PHANTOM_GANON, logic->ForestTempleClear), }, { Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}), + Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, "", false), }); areaTable[RR_FIRE_TEMPLE_FIRST_ROOM] = Region("Fire Temple First Room", SCENE_FIRE_TEMPLE, false, {RA_FIRE_TEMPLE}, {}, {}, { Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return true;}), @@ -4323,7 +4323,7 @@ areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", SCENE_FIRE LOCATION(RC_VOLVAGIA, logic->FireTempleClear), }, { Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}), + Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, "", false), }); areaTable[RR_WATER_TEMPLE_LOBBY] = Region("Water Temple Lobby", SCENE_WATER_TEMPLE, false, {RA_WATER_TEMPLE}, {}, { LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, (logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))))), @@ -4893,7 +4893,7 @@ areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Region("Water Temple Boss Room", SCENE_WA LOCATION(RC_MORPHA, logic->WaterTempleClear), }, { Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}), + Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, "", false), }); areaTable[RR_SPIRIT_TEMPLE_LOBBY] = Region("Spirit Temple Lobby", SCENE_SPIRIT_TEMPLE, false, {RA_SPIRIT_TEMPLE}, {}, { LOCATION(RC_SPIRIT_TEMPLE_LOBBY_POT_1, logic->CanBreakPots()), @@ -5247,7 +5247,7 @@ areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", SCENE_ LOCATION(RC_TWINROVA, logic->SpiritTempleClear), }, { Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}), - Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}), + Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, "", false), }); areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", SCENE_SHADOW_TEMPLE, false, {RA_SHADOW_TEMPLE}, { EventAccess(&logic->NutPot, []{return true;}), @@ -6324,5 +6324,5 @@ areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANON areaTable[RR_GANONS_CASTLE_GANON_ARENA] = Region("Ganon's Arena", SCENE_GANON_BOSS, false, {}, {}, { LOCATION(RC_GANON, logic->CanKillEnemy(RE_GANON)), }, {}); - // clang-format on +// clang-format on } diff --git a/soh/soh/Enhancements/randomizer/logic.s b/soh/soh/Enhancements/randomizer/logic.s index 4405c5572..75061b395 100644 --- a/soh/soh/Enhancements/randomizer/logic.s +++ b/soh/soh/Enhancements/randomizer/logic.s @@ -7,7 +7,7 @@ using namespace Rando; extern "C" SaveContext gSaveContext; void RegionTable_Init_Generated() { - // clang-format off +// clang-format off :: def RR_ROOT SCENE_ID_MAX false RA_LINKS_POCKET @@ -637,7 +637,7 @@ RC_LH_WARP_PAD_GRASS_1 CanCutShrubs RC_LH_WARP_PAD_GRASS_2 CanCutShrubs RR_HYRULE_FIELD true RR_LH_FROM_SHORTCUT true -RR_LH_OWL_FLIGHT IsChild +RR_LH_OWL_FLIGHT @deprioritize IsChild RR_LH_FISHING_ISLAND (or (and (or IsChild WaterTempleClear) (HasItem RG_BRONZE_SCALE)) (and IsAdult (or (CanUse RG_SCARECROW) (CanPlantBean RR_LAKE_HYLIA)))) RR_LH_LAB (CanOpenOverworldDoor RG_HYLIA_LAB_KEY) RR_LH_FROM_WATER_TEMPLE true @@ -660,7 +660,7 @@ RR_LH_FISHING_POND (CanOpenOverworldDoor RG_FISHING_HOLE_KEY) def RR_LH_OWL_FLIGHT SCENE_LAKE_HYLIA true RA_LAKE_HYLIA LH Owl Flight -RR_HYRULE_FIELD true +RR_HYRULE_FIELD @deprioritize true def RR_LH_LAB SCENE_LAKESIDE_LABORATORY false LH Lab @@ -1736,7 +1736,7 @@ RC_GRAVEYARD_DAMPE_RACE_RUPEE_6 true RC_GRAVEYARD_DAMPE_RACE_RUPEE_7 true RC_GRAVEYARD_DAMPE_RACE_RUPEE_8 true RR_THE_GRAVEYARD true -RR_KAK_WINDMILL (and IsAdult (CanUse RG_SONG_OF_TIME)) +RR_KAK_WINDMILL @deprioritize (and IsAdult (CanUse RG_SONG_OF_TIME)) def RR_GRAVEYARD_DAMPES_HOUSE SCENE_GRAVEKEEPERS_HUT false Graveyard Dampes House @@ -2764,7 +2764,7 @@ RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6 CanCutShrubs RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7 CanCutShrubs RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8 CanCutShrubs RR_DEKU_TREE_BOSS_EXIT true -RR_KF_OUTSIDE_DEKU_TREE DekuTreeClear +RR_KF_OUTSIDE_DEKU_TREE @deprioritize DekuTreeClear def RR_DODONGOS_CAVERN_BEGINNING SCENE_DODONGOS_CAVERN false RA_DODONGOS_CAVERN Dodongos Cavern Beginning @@ -3167,7 +3167,7 @@ RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST true RC_DODONGOS_CAVERN_KING_DODONGO_HEART DodongosCavernClear RC_KING_DODONGO DodongosCavernClear RR_DODONGOS_CAVERN_BOSS_EXIT true -RR_DEATH_MOUNTAIN_TRAIL DodongosCavernClear +RR_DEATH_MOUNTAIN_TRAIL @deprioritize DodongosCavernClear def RR_JABU_JABUS_BELLY_BEGINNING SCENE_JABU_JABU false RA_JABU_JABUS_BELLY Jabu Jabus Belly Beginning @@ -3400,7 +3400,7 @@ RC_JABU_JABUS_BELLY_BARINADE_POT_6 CanBreakPots RC_JABU_JABUS_BELLY_BARINADE_HEART JabuJabusBellyClear RC_BARINADE JabuJabusBellyClear RR_JABU_JABUS_BELLY_BOSS_EXIT false -RR_ZORAS_FOUNTAIN JabuJabusBellyClear +RR_ZORAS_FOUNTAIN @deprioritize JabuJabusBellyClear def RR_FOREST_TEMPLE_FIRST_ROOM SCENE_FOREST_TEMPLE false RA_FOREST_TEMPLE Forest Temple First Room @@ -3805,7 +3805,7 @@ ForestTempleClear (CanKillEnemy RE_PHANTOM_GANON) RC_FOREST_TEMPLE_PHANTOM_GANON_HEART ForestTempleClear RC_PHANTOM_GANON ForestTempleClear RR_FOREST_TEMPLE_BOSS_ENTRYWAY false -RR_SACRED_FOREST_MEADOW ForestTempleClear +RR_SACRED_FOREST_MEADOW @deprioritize ForestTempleClear def RR_FIRE_TEMPLE_FIRST_ROOM SCENE_FIRE_TEMPLE false RA_FIRE_TEMPLE Fire Temple First Room @@ -4315,7 +4315,7 @@ FireTempleClear (and (>= FireTimer 64) (CanKillEnemy RE_VOLVAGIA)) RC_FIRE_TEMPLE_VOLVAGIA_HEART FireTempleClear RC_VOLVAGIA FireTempleClear RR_FIRE_TEMPLE_BOSS_ENTRYWAY false -RR_DMC_CENTRAL_LOCAL FireTempleClear +RR_DMC_CENTRAL_LOCAL @deprioritize FireTempleClear def RR_WATER_TEMPLE_LOBBY SCENE_WATER_TEMPLE false RA_WATER_TEMPLE Water Temple Lobby @@ -4898,7 +4898,7 @@ WaterTempleClear (CanKillEnemy RE_MORPHA) RC_WATER_TEMPLE_MORPHA_HEART WaterTempleClear RC_MORPHA WaterTempleClear RR_WATER_TEMPLE_BOSS_ENTRYWAY false -RR_LAKE_HYLIA WaterTempleClear +RR_LAKE_HYLIA @deprioritize WaterTempleClear def RR_SPIRIT_TEMPLE_LOBBY SCENE_SPIRIT_TEMPLE false RA_SPIRIT_TEMPLE Spirit Temple Lobby @@ -5256,7 +5256,7 @@ SpiritTempleClear (CanKillEnemy RE_TWINROVA) RC_SPIRIT_TEMPLE_TWINROVA_HEART SpiritTempleClear RC_TWINROVA SpiritTempleClear RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY false -RR_DESERT_COLOSSUS SpiritTempleClear +RR_DESERT_COLOSSUS @deprioritize SpiritTempleClear def RR_SHADOW_TEMPLE_BEGINNING SCENE_SHADOW_TEMPLE false RA_SHADOW_TEMPLE Shadow Temple Beginning @@ -6340,6 +6340,6 @@ Ganon's Arena RC_GANON (CanKillEnemy RE_GANON) :: - // clang-format on +// clang-format on } ::