diff --git a/worlds/tunic/er_data.py b/worlds/tunic/er_data.py index ccc57ba5a7..35c4d889b7 100644 --- a/worlds/tunic/er_data.py +++ b/worlds/tunic/er_data.py @@ -693,6 +693,7 @@ tunic_er_regions: Dict[str, RegionInfo] = { "Monastery Rope": RegionInfo("Quarry Redux"), "Lower Quarry": RegionInfo("Quarry Redux"), "Even Lower Quarry": RegionInfo("Quarry Redux"), + "Even Lower Quarry Isolated Chest": RegionInfo("Quarry Redux"), # a region for that one chest "Lower Quarry Zig Door": RegionInfo("Quarry Redux"), "Rooted Ziggurat Entry": RegionInfo("ziggurat2020_0"), "Rooted Ziggurat Upper Entry": RegionInfo("ziggurat2020_1"), @@ -1470,15 +1471,17 @@ traversal_requirements: Dict[str, Dict[str, List[List[str]]]] = { [], "Quarry Monastery Entry": [], - "Lower Quarry Zig Door": - [["IG3"]], }, "Lower Quarry": { "Even Lower Quarry": [], }, "Even Lower Quarry": { - "Lower Quarry": + "Even Lower Quarry Isolated Chest": + [], + }, + "Even Lower Quarry Isolated Chest": { + "Even Lower Quarry": [], "Lower Quarry Zig Door": [["Quarry", "Quarry Connector"], ["IG3"]], diff --git a/worlds/tunic/er_rules.py b/worlds/tunic/er_rules.py index b7dd79357e..542c1b843b 100644 --- a/worlds/tunic/er_rules.py +++ b/worlds/tunic/er_rules.py @@ -891,15 +891,21 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ rule=lambda state: has_ladder("Ladders in Lower Quarry", state, world) or has_ice_grapple_logic(True, IceGrappling.option_easy, state, world)) - # nmg: bring a scav over, then ice grapple through the door, only with ER on to avoid soft lock regions["Even Lower Quarry"].connect( + connecting_region=regions["Even Lower Quarry Isolated Chest"]) + # you grappled down, might as well loot the rest too + lower_quarry_empty_to_combat = regions["Even Lower Quarry Isolated Chest"].connect( + connecting_region=regions["Even Lower Quarry"], + rule=lambda state: has_mask(state, world)) + + regions["Even Lower Quarry Isolated Chest"].connect( connecting_region=regions["Lower Quarry Zig Door"], rule=lambda state: state.has("Activate Quarry Fuse", player) or has_ice_grapple_logic(False, IceGrappling.option_hard, state, world)) - # nmg: use ice grapple to get from the beginning of Quarry to the door without really needing mask only with ER on + # don't need the mask for this either, please don't complain about not needing a mask here, you know what you did regions["Quarry"].connect( - connecting_region=regions["Lower Quarry Zig Door"], + connecting_region=regions["Even Lower Quarry Isolated Chest"], rule=lambda state: has_ice_grapple_logic(True, IceGrappling.option_hard, state, world)) monastery_front_to_back = regions["Monastery Front"].connect( @@ -1308,6 +1314,8 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ lambda state: has_combat_reqs("Quarry", state, player)) set_rule(monastery_front_to_back, lambda state: has_combat_reqs("Quarry", state, player)) + set_rule(lower_quarry_empty_to_combat, + lambda state: has_combat_reqs("Quarry", state, player)) set_rule(zig_low_entry_to_front, lambda state: has_combat_reqs("Rooted Ziggurat", state, player)) @@ -1318,9 +1326,9 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ or (has_ability(prayer, state, world) and has_combat_reqs("Rooted Ziggurat", state, player))) set_rule(zig_low_back_to_mid, lambda state: (state.has(laurels, player) - or has_ice_grapple_logic(True, IceGrappling.option_easy, state, world) + or has_ice_grapple_logic(True, IceGrappling.option_easy, state, world)) and has_ability(prayer, state, world) - and has_combat_reqs("Rooted Ziggurat", state, player))) + and has_combat_reqs("Rooted Ziggurat", state, player)) # only activating the fuse requires combat logic set_rule(cath_entry_to_elev, diff --git a/worlds/tunic/er_scripts.py b/worlds/tunic/er_scripts.py index 45bca70dcc..e6b87e4d4f 100644 --- a/worlds/tunic/er_scripts.py +++ b/worlds/tunic/er_scripts.py @@ -44,14 +44,14 @@ def create_er_regions(world: "TunicWorld") -> Dict[Portal, Portal]: portal_pairs = vanilla_portals(world, regions) + create_randomized_entrances(portal_pairs, regions) + set_er_region_rules(world, regions, portal_pairs) for location_name, location_id in world.location_name_to_id.items(): region = regions[location_table[location_name].er_region] location = TunicERLocation(world.player, location_name, location_id, region) region.locations.append(location) - - create_randomized_entrances(portal_pairs, regions) for region in regions.values(): world.multiworld.regions.append(region) diff --git a/worlds/tunic/locations.py b/worlds/tunic/locations.py index d255916257..01adbe035b 100644 --- a/worlds/tunic/locations.py +++ b/worlds/tunic/locations.py @@ -233,7 +233,7 @@ location_table: Dict[str, TunicLocationData] = { "Quarry - [Lowlands] Upper Walkway": TunicLocationData("Lower Quarry", "Even Lower Quarry"), "Quarry - [West] Lower Area Below Bridge": TunicLocationData("Lower Quarry", "Lower Quarry"), "Quarry - [West] Lower Area Isolated Chest": TunicLocationData("Lower Quarry", "Lower Quarry"), - "Quarry - [Lowlands] Near Elevator": TunicLocationData("Lower Quarry", "Even Lower Quarry"), + "Quarry - [Lowlands] Near Elevator": TunicLocationData("Lower Quarry", "Even Lower Quarry Isolated Chest"), "Quarry - [West] Lower Area After Bridge": TunicLocationData("Lower Quarry", "Lower Quarry"), "Rooted Ziggurat Upper - Near Bridge Switch": TunicLocationData("Rooted Ziggurat", "Rooted Ziggurat Upper Front"), "Rooted Ziggurat Upper - Beneath Bridge To Administrator": TunicLocationData("Rooted Ziggurat", "Rooted Ziggurat Upper Back"), diff --git a/worlds/tunic/options.py b/worlds/tunic/options.py index 9c6299c3a2..19856dc242 100644 --- a/worlds/tunic/options.py +++ b/worlds/tunic/options.py @@ -178,7 +178,6 @@ class CombatLogic(Choice): option_off = 0 option_bosses_only = 1 option_on = 2 - # todo: fix unit test failures when default is not 0 default = 2