From 0f7fd48cddac9dc5d6da8347aca7ee27afc7bb8a Mon Sep 17 00:00:00 2001 From: Scipio Wright Date: Sun, 23 Feb 2025 11:02:30 -0500 Subject: [PATCH] TUNIC: Add some more rules for Monastery connections (#4564) * Move a couple locations to monastery * Connect Quarry Back to Monastery * Quarry Back -> Monastery with laurels, Monastery -> Monastery Back with wand/sword * Add Monastery Back region * Move a couple non-ER locations to monastery back * Monastery front -> back with sword, wand, or laurels zip * also laurels zip for non-ER --- worlds/tunic/er_rules.py | 4 +++- worlds/tunic/locations.py | 8 ++++---- worlds/tunic/regions.py | 5 +++-- worlds/tunic/rules.py | 5 +++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/worlds/tunic/er_rules.py b/worlds/tunic/er_rules.py index f111fed8..1d3ede21 100644 --- a/worlds/tunic/er_rules.py +++ b/worlds/tunic/er_rules.py @@ -990,7 +990,9 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ rule=lambda state: has_ice_grapple_logic(True, IceGrappling.option_hard, state, world)) monastery_front_to_back = regions["Monastery Front"].connect( - connecting_region=regions["Monastery Back"]) + connecting_region=regions["Monastery Back"], + rule=lambda state: has_sword(state, player) or state.has(fire_wand, player) + or laurels_zip(state, world)) # laurels through the gate, no setup needed regions["Monastery Back"].connect( connecting_region=regions["Monastery Front"], diff --git a/worlds/tunic/locations.py b/worlds/tunic/locations.py index d0c4f860..d3c23406 100644 --- a/worlds/tunic/locations.py +++ b/worlds/tunic/locations.py @@ -206,7 +206,7 @@ location_table: Dict[str, TunicLocationData] = { "Fountain Cross Door - Page Pickup": TunicLocationData("Overworld Holy Cross", "Fountain Cross Room", location_group="Holy Cross"), "Secret Gathering Place - Holy Cross Chest": TunicLocationData("Overworld Holy Cross", "Secret Gathering Place", location_group="Holy Cross"), "Top of the Mountain - Page At The Peak": TunicLocationData("Overworld Holy Cross", "Top of the Mountain", location_group="Holy Cross"), - "Monastery - Monastery Chest": TunicLocationData("Monastery", "Monastery Back"), + "Monastery - Monastery Chest": TunicLocationData("Monastery Back", "Monastery Back"), "Quarry - [Back Entrance] Bushes Holy Cross": TunicLocationData("Quarry Back", "Quarry Back", location_group="Holy Cross"), "Quarry - [Back Entrance] Chest": TunicLocationData("Quarry Back", "Quarry Back"), "Quarry - [Central] Near Shortcut Ladder": TunicLocationData("Quarry Back", "Quarry Back"), @@ -220,12 +220,12 @@ location_table: Dict[str, TunicLocationData] = { "Quarry - [Central] Obscured Below Entry Walkway": TunicLocationData("Quarry Back", "Quarry Back"), "Quarry - [Central] Top Floor Overhang": TunicLocationData("Quarry", "Quarry"), "Quarry - [East] Near Bridge": TunicLocationData("Quarry", "Quarry"), - "Quarry - [Central] Above Ladder": TunicLocationData("Quarry", "Quarry Monastery Entry"), + "Quarry - [Central] Above Ladder": TunicLocationData("Monastery", "Quarry Monastery Entry"), "Quarry - [Central] Obscured Behind Staircase": TunicLocationData("Quarry", "Quarry"), - "Quarry - [Central] Above Ladder Dash Chest": TunicLocationData("Quarry", "Quarry Monastery Entry"), + "Quarry - [Central] Above Ladder Dash Chest": TunicLocationData("Monastery", "Quarry Monastery Entry"), "Quarry - [West] Upper Area Bombable Wall": TunicLocationData("Quarry Back", "Quarry Back"), "Quarry - [East] Bombable Wall": TunicLocationData("Quarry", "Quarry"), - "Hero's Grave - Ash Relic": TunicLocationData("Monastery", "Hero Relic - Quarry"), + "Hero's Grave - Ash Relic": TunicLocationData("Monastery Back", "Hero Relic - Quarry"), "Quarry - [West] Shooting Range Secret Path": TunicLocationData("Lower Quarry", "Lower Quarry"), "Quarry - [West] Near Shooting Range": TunicLocationData("Lower Quarry", "Lower Quarry"), "Quarry - [West] Below Shooting Range": TunicLocationData("Lower Quarry", "Lower Quarry"), diff --git a/worlds/tunic/regions.py b/worlds/tunic/regions.py index 8f5df889..f21af11e 100644 --- a/worlds/tunic/regions.py +++ b/worlds/tunic/regions.py @@ -13,9 +13,10 @@ tunic_regions: dict[str, tuple[str]] = { "Library": tuple(), "Eastern Vault Fortress": ("Beneath the Vault",), "Beneath the Vault": ("Eastern Vault Fortress",), - "Quarry Back": ("Quarry",), + "Quarry Back": ("Quarry", "Monastery"), "Quarry": ("Monastery", "Lower Quarry"), - "Monastery": tuple(), + "Monastery": ("Monastery Back",), + "Monastery Back": tuple(), "Lower Quarry": ("Rooted Ziggurat",), "Rooted Ziggurat": tuple(), "Swamp": ("Cathedral",), diff --git a/worlds/tunic/rules.py b/worlds/tunic/rules.py index 95937678..63f76ac9 100644 --- a/worlds/tunic/rules.py +++ b/worlds/tunic/rules.py @@ -124,6 +124,11 @@ def set_region_rules(world: "TunicWorld") -> None: and (state.has_any({grapple, laurels, gun}, player) or can_ladder_storage(state, world)) world.get_entrance("Quarry Back -> Quarry").access_rule = \ lambda state: has_sword(state, player) or state.has(fire_wand, player) + world.get_entrance("Quarry Back -> Monastery").access_rule = \ + lambda state: state.has(laurels, player) + world.get_entrance("Monastery -> Monastery Back").access_rule = \ + lambda state: (has_sword(state, player) or state.has(fire_wand, player) + or laurels_zip(state, world)) world.get_entrance("Quarry -> Lower Quarry").access_rule = \ lambda state: has_mask(state, world) world.get_entrance("Lower Quarry -> Rooted Ziggurat").access_rule = \