diff --git a/worlds/tunic/er_data.py b/worlds/tunic/er_data.py index 65d3089304..63e97b3854 100644 --- a/worlds/tunic/er_data.py +++ b/worlds/tunic/er_data.py @@ -192,13 +192,13 @@ portal_mapping: List[Portal] = [ Portal(name="Dark Tomb to Checkpoint", region="Dark Tomb Entry Point", destination="Sewer_Boss", tag="_"), - Portal(name="West Garden Exit near Hero's Grave", region="West Garden", + Portal(name="West Garden Exit near Hero's Grave", region="West Garden before Terry", destination="Overworld Redux", tag="_lower"), - Portal(name="West Garden to Magic Dagger House", region="West Garden", + Portal(name="West Garden to Magic Dagger House", region="West Garden at Dagger House", destination="archipelagos_house", tag="_"), Portal(name="West Garden Exit after Boss", region="West Garden after Boss", destination="Overworld Redux", tag="_upper"), - Portal(name="West Garden Shop", region="West Garden", + Portal(name="West Garden Shop", region="West Garden before Terry", destination="Shop", tag="_"), Portal(name="West Garden Laurels Exit", region="West Garden Laurels Exit Region", destination="Overworld Redux", tag="_lowest"), @@ -616,11 +616,15 @@ tunic_er_regions: Dict[str, RegionInfo] = { "Beneath the Well Front": RegionInfo("Sewer"), # the front, to separate it from the weapon requirement in the mid "Beneath the Well Main": RegionInfo("Sewer"), # the main section of it, requires a weapon "Beneath the Well Back": RegionInfo("Sewer"), # the back two portals, and all 4 upper chests - "West Garden": RegionInfo("Archipelagos Redux"), + "West Garden before Terry": RegionInfo("Archipelagos Redux"), # the lower entry point, near hero grave + "West Garden after Terry": RegionInfo("Archipelagos Redux"), # after Terry, up until next chompignons + "West Garden at Dagger House": RegionInfo("Archipelagos Redux"), # just outside magic dagger house + "West Garden South Checkpoint": RegionInfo("Archipelagos Redux"), "Magic Dagger House": RegionInfo("archipelagos_house", dead_end=DeadEnd.all_cats), "West Garden Portal": RegionInfo("Archipelagos Redux", dead_end=DeadEnd.restricted), "West Garden Portal Item": RegionInfo("Archipelagos Redux", dead_end=DeadEnd.restricted), "West Garden Laurels Exit Region": RegionInfo("Archipelagos Redux"), + "West Garden before Boss": RegionInfo("Archipelagos Redux"), # main west garden "West Garden after Boss": RegionInfo("Archipelagos Redux"), "West Garden Hero's Grave Region": RegionInfo("Archipelagos Redux"), "Ruined Atoll": RegionInfo("Atoll Redux"), @@ -1092,38 +1096,64 @@ traversal_requirements: Dict[str, Dict[str, List[List[str]]]] = { "Dark Tomb Main": [], }, - "West Garden": { - "West Garden Laurels Exit Region": - [["Hyperdash"], ["LS1"]], - "West Garden after Boss": - [], + "West Garden before Terry": { + "West Garden after Terry": + [], "West Garden Hero's Grave Region": [], + }, + "West Garden Hero's Grave Region": { + "West Garden before Terry": + [], + }, + "West Garden after Terry": { + "West Garden before Terry": + [], + "West Garden South Checkpoint": + [], + "West Garden Laurels Exit Region": + [["LS1"]], + }, + "West Garden South Checkpoint": { + "West Garden before Boss": + [], + "West Garden at Dagger House": + [], + "West Garden after Terry": + [], + }, + "West Garden before Boss": { + "West Garden after Boss": + [], + "West Garden South Checkpoint": + [], + }, + "West Garden after Boss": { + "West Garden before Boss": + [["Hyperdash"]], + }, + "West Garden at Dagger House": { + "West Garden Laurels Exit Region": + [["Hyperdash"]], + "West Garden South Checkpoint": + [], "West Garden Portal Item": [["IG2"]], }, "West Garden Laurels Exit Region": { - "West Garden": - [["Hyperdash"]], - }, - "West Garden after Boss": { - "West Garden": + "West Garden at Dagger House": [["Hyperdash"]], }, "West Garden Portal Item": { - "West Garden": + "West Garden at Dagger House": [["IG1"]], "West Garden Portal": - [["Hyperdash", "West Garden"]], + [["Hyperdash", "West Garden South Checkpoint"]], }, "West Garden Portal": { "West Garden Portal Item": [["Hyperdash"]], }, - "West Garden Hero's Grave Region": { - "West Garden": - [], - }, "Ruined Atoll": { "Ruined Atoll Lower Entry Area": [["Hyperdash"], ["LS1"]], @@ -1533,7 +1563,7 @@ traversal_requirements: Dict[str, Dict[str, List[List[str]]]] = { "Far Shore to Library Region": [["Library Lab"]], "Far Shore to West Garden Region": - [["West Garden"]], + [["West Garden South Checkpoint"]], "Far Shore to Fortress Region": [["Fortress Exterior from Overworld", "Beneath the Vault Back", "Eastern Vault Fortress"]], }, diff --git a/worlds/tunic/er_rules.py b/worlds/tunic/er_rules.py index 42518a8e5a..f22df3a6fc 100644 --- a/worlds/tunic/er_rules.py +++ b/worlds/tunic/er_rules.py @@ -508,25 +508,46 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ rule=lambda state: has_lantern(state, world)) # West Garden + # combat logic regions + wg_before_to_after_terry = regions["West Garden before Terry"].connect( + connecting_region=regions["West Garden after Terry"]) + wg_after_to_before_terry = regions["West Garden after Terry"].connect( + connecting_region=regions["West Garden before Terry"]) + + regions["West Garden after Terry"].connect( + connecting_region=regions["West Garden South Checkpoint"]) + wg_checkpoint_to_after_terry = regions["West Garden South Checkpoint"].connect( + connecting_region=regions["West Garden after Terry"]) + + wg_checkpoint_to_dagger = regions["West Garden South Checkpoint"].connect( + connecting_region=regions["West Garden at Dagger House"]) + wg_dagger_to_checkpoint = regions["West Garden at Dagger House"].connect( + connecting_region=regions["West Garden South Checkpoint"]) + + wg_checkpoint_to_before_boss = regions["West Garden South Checkpoint"].connect( + connecting_region=regions["West Garden before Boss"]) + regions["West Garden before Boss"].connect( + connecting_region=regions["West Garden South Checkpoint"]) + regions["West Garden Laurels Exit Region"].connect( - connecting_region=regions["West Garden"], + connecting_region=regions["West Garden at Dagger House"], rule=lambda state: state.has(laurels, player)) - regions["West Garden"].connect( + regions["West Garden at Dagger House"].connect( connecting_region=regions["West Garden Laurels Exit Region"], rule=lambda state: state.has(laurels, player)) regions["West Garden after Boss"].connect( - connecting_region=regions["West Garden"], + connecting_region=regions["West Garden before Boss"], rule=lambda state: state.has(laurels, player)) - wg_to_after_gk = regions["West Garden"].connect( + wg_to_after_gk = regions["West Garden before Boss"].connect( connecting_region=regions["West Garden after Boss"], rule=lambda state: state.has(laurels, player) or has_sword(state, player)) - regions["West Garden"].connect( + regions["West Garden before Terry"].connect( connecting_region=regions["West Garden Hero's Grave Region"], rule=lambda state: has_ability(prayer, state, world)) regions["West Garden Hero's Grave Region"].connect( - connecting_region=regions["West Garden"]) + connecting_region=regions["West Garden before Terry"]) regions["West Garden Portal"].connect( connecting_region=regions["West Garden Portal Item"], @@ -535,11 +556,11 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ connecting_region=regions["West Garden Portal"], rule=lambda state: state.has(laurels, player) and has_ability(prayer, state, world)) - # nmg: can ice grapple to and from the item behind the magic dagger house + # can ice grapple to and from the item behind the magic dagger house regions["West Garden Portal Item"].connect( - connecting_region=regions["West Garden"], + connecting_region=regions["West Garden at Dagger House"], rule=lambda state: has_ice_grapple_logic(True, IceGrappling.option_easy, state, world)) - regions["West Garden"].connect( + regions["West Garden at Dagger House"].connect( connecting_region=regions["West Garden Portal Item"], rule=lambda state: has_ice_grapple_logic(True, IceGrappling.option_medium, state, world)) @@ -1192,6 +1213,21 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ add_rule(dt_exit_to_main, lambda state: has_combat_reqs("Dark Tomb", state, player)) + # todo: add rule for running past the enemies and into dagger house, with a can_reach for the entrance + set_rule(wg_before_to_after_terry, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + set_rule(wg_after_to_before_terry, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + # laurels through, probably to the checkpoint, or just fight + set_rule(wg_checkpoint_to_after_terry, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + set_rule(wg_checkpoint_to_dagger, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + set_rule(wg_dagger_to_checkpoint, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + set_rule(wg_checkpoint_to_before_boss, + lambda state: state.has(laurels, player) or has_combat_reqs("West Garden", state, player)) + def set_er_location_rules(world: "TunicWorld") -> None: player = world.player @@ -1491,6 +1527,16 @@ def set_er_location_rules(world: "TunicWorld") -> None: add_rule(multiworld.get_location("Beneath the Well - [Side Room] Chest By Phrends", player), lambda state: has_combat_reqs("Overworld", state, player)) + # laurels past the enemies, then use the wand or gun to take care of the fairies that chased you + add_rule(multiworld.get_location("West Garden - [West Lowlands] Tree Holy Cross Chest", player), + lambda state: state.has_any({fire_wand, "Gun"}, player)) + add_rule(multiworld.get_location("West Garden - [Central Lowlands] Chest Beneath Faeries", player), + lambda state: has_combat_reqs("West Garden", state, player)) + add_rule(multiworld.get_location("West Garden - [Central Lowlands] Chest Beneath Save Point", player), + lambda state: has_combat_reqs("West Garden", state, player)) + add_rule(multiworld.get_location("West Garden - [West Highlands] Upper Left Walkway", player), + lambda state: has_combat_reqs("West Garden", state, player)) + # could add it to the other fuse events but that's just wasteful imo add_rule(multiworld.get_location("Eastern Vault West Fuses", player), lambda state: has_combat_reqs("Eastern Vault Fortress", state, player)) diff --git a/worlds/tunic/er_scripts.py b/worlds/tunic/er_scripts.py index 05e25d1d81..340bf479fb 100644 --- a/worlds/tunic/er_scripts.py +++ b/worlds/tunic/er_scripts.py @@ -83,7 +83,7 @@ tunic_events: Dict[str, str] = { "Quarry Connector Fuse": "Quarry Connector", "Quarry Fuse": "Quarry", "Ziggurat Fuse": "Rooted Ziggurat Lower Back", - "West Garden Fuse": "West Garden", + "West Garden Fuse": "West Garden South Checkpoint", "Library Fuse": "Library Lab", "Place Questagons": "Sealed Temple", } diff --git a/worlds/tunic/ladder_storage_data.py b/worlds/tunic/ladder_storage_data.py index 89e8c818d7..311cf0f5a5 100644 --- a/worlds/tunic/ladder_storage_data.py +++ b/worlds/tunic/ladder_storage_data.py @@ -78,9 +78,9 @@ easy_ls: List[LadderInfo] = [ # West Garden # exit after Garden Knight - LadderInfo("West Garden", "Archipelagos Redux, Overworld Redux_upper"), + LadderInfo("West Garden before Boss", "Archipelagos Redux, Overworld Redux_upper"), # West Garden laurels exit - LadderInfo("West Garden", "Archipelagos Redux, Overworld Redux_lowest"), + LadderInfo("West Garden after Terry", "Archipelagos Redux, Overworld Redux_lowest"), # Atoll, use the little ladder you fix at the beginning LadderInfo("Ruined Atoll", "Atoll Redux, Overworld Redux_lower"), diff --git a/worlds/tunic/locations.py b/worlds/tunic/locations.py index ea00967173..aaea9839fe 100644 --- a/worlds/tunic/locations.py +++ b/worlds/tunic/locations.py @@ -290,26 +290,26 @@ location_table: Dict[str, TunicLocationData] = { "Hero's Grave - Feathers Relic": TunicLocationData("Swamp", "Hero Relic - Swamp"), "West Furnace - Chest": TunicLocationData("West Garden", "Furnace Walking Path"), "Overworld - [West] Near West Garden Entrance": TunicLocationData("West Garden", "Overworld to West Garden from Furnace"), - "West Garden - [Central Highlands] Holy Cross (Blue Lines)": TunicLocationData("West Garden", "West Garden", location_group="Holy Cross"), - "West Garden - [West Lowlands] Tree Holy Cross Chest": TunicLocationData("West Garden", "West Garden", location_group="Holy Cross"), - "West Garden - [Southeast Lowlands] Outside Cave": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Lowlands] Chest Beneath Faeries": TunicLocationData("West Garden", "West Garden"), - "West Garden - [North] Behind Holy Cross Door": TunicLocationData("West Garden", "West Garden", location_group="Holy Cross"), - "West Garden - [Central Highlands] Top of Ladder Before Boss": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Lowlands] Passage Beneath Bridge": TunicLocationData("West Garden", "West Garden"), - "West Garden - [North] Across From Page Pickup": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Lowlands] Below Left Walkway": TunicLocationData("West Garden", "West Garden"), - "West Garden - [West] In Flooded Walkway": TunicLocationData("West Garden", "West Garden"), - "West Garden - [West] Past Flooded Walkway": TunicLocationData("West Garden", "West Garden"), - "West Garden - [North] Obscured Beneath Hero's Memorial": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Lowlands] Chest Near Shortcut Bridge": TunicLocationData("West Garden", "West Garden"), - "West Garden - [West Highlands] Upper Left Walkway": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Lowlands] Chest Beneath Save Point": TunicLocationData("West Garden", "West Garden"), - "West Garden - [Central Highlands] Behind Guard Captain": TunicLocationData("West Garden", "West Garden"), + "West Garden - [Central Highlands] Holy Cross (Blue Lines)": TunicLocationData("West Garden", "West Garden before Boss", location_group="Holy Cross"), + "West Garden - [West Lowlands] Tree Holy Cross Chest": TunicLocationData("West Garden", "West Garden after Terry", location_group="Holy Cross"), + "West Garden - [Southeast Lowlands] Outside Cave": TunicLocationData("West Garden", "West Garden at Dagger House"), + "West Garden - [Central Lowlands] Chest Beneath Faeries": TunicLocationData("West Garden", "West Garden South Checkpoint"), + "West Garden - [North] Behind Holy Cross Door": TunicLocationData("West Garden", "West Garden before Terry", location_group="Holy Cross"), + "West Garden - [Central Highlands] Top of Ladder Before Boss": TunicLocationData("West Garden", "West Garden before Boss"), + "West Garden - [Central Lowlands] Passage Beneath Bridge": TunicLocationData("West Garden", "West Garden after Terry"), + "West Garden - [North] Across From Page Pickup": TunicLocationData("West Garden", "West Garden before Terry"), + "West Garden - [Central Lowlands] Below Left Walkway": TunicLocationData("West Garden", "West Garden after Terry"), + "West Garden - [West] In Flooded Walkway": TunicLocationData("West Garden", "West Garden after Terry"), + "West Garden - [West] Past Flooded Walkway": TunicLocationData("West Garden", "West Garden after Terry"), + "West Garden - [North] Obscured Beneath Hero's Memorial": TunicLocationData("West Garden", "West Garden before Terry"), + "West Garden - [Central Lowlands] Chest Near Shortcut Bridge": TunicLocationData("West Garden", "West Garden after Terry"), + "West Garden - [West Highlands] Upper Left Walkway": TunicLocationData("West Garden", "West Garden South Checkpoint"), + "West Garden - [Central Lowlands] Chest Beneath Save Point": TunicLocationData("West Garden", "West Garden South Checkpoint"), + "West Garden - [Central Highlands] Behind Guard Captain": TunicLocationData("West Garden", "West Garden before Boss"), "West Garden - [Central Highlands] After Garden Knight": TunicLocationData("Overworld", "West Garden after Boss", location_group="Bosses"), - "West Garden - [South Highlands] Secret Chest Beneath Fuse": TunicLocationData("West Garden", "West Garden"), + "West Garden - [South Highlands] Secret Chest Beneath Fuse": TunicLocationData("West Garden", "West Garden South Checkpoint"), "West Garden - [East Lowlands] Page Behind Ice Dagger House": TunicLocationData("West Garden", "West Garden Portal Item"), - "West Garden - [North] Page Pickup": TunicLocationData("West Garden", "West Garden"), + "West Garden - [North] Page Pickup": TunicLocationData("West Garden", "West Garden before Terry"), "West Garden House - [Southeast Lowlands] Ice Dagger Pickup": TunicLocationData("West Garden", "Magic Dagger House"), "Hero's Grave - Effigy Relic": TunicLocationData("West Garden", "Hero Relic - West Garden"), }