From 533f7f210e131ce686af5ac0c1852a59e8a7780e Mon Sep 17 00:00:00 2001 From: Scipio Wright Date: Fri, 5 Jul 2024 21:12:51 -0400 Subject: [PATCH] Fill out swamp combat logic --- worlds/tunic/combat_logic.py | 9 +++--- worlds/tunic/er_rules.py | 63 ++++++++++++++++++++++++++++++------ 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/worlds/tunic/combat_logic.py b/worlds/tunic/combat_logic.py index 1d7956a0f2..7fc7136f0f 100644 --- a/worlds/tunic/combat_logic.py +++ b/worlds/tunic/combat_logic.py @@ -31,10 +31,6 @@ enemy_encounters: Dict[str, EncounterData] = { "Slorms": EncounterData(8, [[sword], [fire_wand], [gun], [stick, shield]], False), # the birds that swoop down at you "Hushers": EncounterData(12), - # includes shield fleemers - "Fleemers": EncounterData(8), - "Big Fleemer": EncounterData(12), - "Lost Echo": EncounterData(0, [[sword]]), # can't damage with stick "Autobolts": EncounterData(8, [[sword], [fire_wand], [gun]], False), "Chompignoms": EncounterData(8), @@ -43,7 +39,12 @@ enemy_encounters: Dict[str, EncounterData] = { "Wizards": EncounterData(12), # just frog's domain in general "Frogues": EncounterData(12), + # includes shield fleemers + "Fleemers": EncounterData(8), + "Big Fleemer": EncounterData(12), + "Lost Echoes": EncounterData(8), "Birds with Guns": EncounterData(12), + "Tentacles": EncounterData(12), # you're meant to fight them with sword, wand, shield, and some flasks "Foxes": EncounterData(10), "Scavengers": EncounterData(16), diff --git a/worlds/tunic/er_rules.py b/worlds/tunic/er_rules.py index b66149ca67..499638b64b 100644 --- a/worlds/tunic/er_rules.py +++ b/worlds/tunic/er_rules.py @@ -576,7 +576,7 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ regions["Ruined Atoll Portal"].connect( connecting_region=regions["Ruined Atoll"]) - regions["Ruined Atoll"].connect( + atoll_statue = regions["Ruined Atoll"].connect( connecting_region=regions["Ruined Atoll Statue"], rule=lambda state: has_ability(prayer, state, world) and (has_ladder("Ladders in South Atoll", state, world) @@ -916,19 +916,26 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ or state.has(laurels, player) or has_ice_grapple_logic(False, IceGrappling.option_hard, state, world)) - # nmg: ice grapple through cathedral door, can do it both ways - # todo: add can_reach for beach and the ladder to atoll - regions["Swamp Mid"].connect( + swamp_mid_to_cath = regions["Swamp Mid"].connect( connecting_region=regions["Swamp to Cathedral Main Entrance Region"], - rule=lambda state: (has_ability(prayer, state, world) - and (state.has(laurels, player) + rule=lambda state: (has_ability(prayer, state, world) + and (state.has(laurels, player) + # blam yourself in the face with a wand shot off the fuse or (can_ladder_storage(state, world) and state.has(fire_wand, player) - and options.ladder_storage >= LadderStorage.option_hard - and (not options.shuffle_ladders - or state.has_any({"Ladders in Overworld Town", + and options.ladder_storage >= LadderStorage.option_hard + and (not options.shuffle_ladders + or state.has_any({"Ladders in Overworld Town", "Ladder to Swamp", - "Ladders near Weathervane"}, player))))) + "Ladders near Weathervane"}, player) + or (state.has("Ladder to Ruined Atoll", player) + and state.can_reach_region("Overworld Beach", player))))) + and (not options.combat_logic + or has_combat_logic(["Birds with Guns", "Lost Echoes"], state, player))) or has_ice_grapple_logic(False, IceGrappling.option_medium, state, world)) + + if options.ladder_storage >= LadderStorage.option_hard and options.shuffle_ladders: + world.multiworld.register_indirect_condition(regions["Overworld Beach"], swamp_mid_to_cath) + regions["Swamp to Cathedral Main Entrance Region"].connect( connecting_region=regions["Swamp Mid"], rule=lambda state: has_ice_grapple_logic(False, IceGrappling.option_easy, state, world)) @@ -1172,6 +1179,9 @@ def set_er_region_rules(world: "TunicWorld", regions: Dict[str, Region], portal_ or has_combat_logic(["Shield Rudelings", "Autobolts"], state, player)) set_rule(ow_tunnel_beach, lambda state: has_combat_logic(["Shield Rudelings"], state, player)) + # need some strength to deal with the frogs at the northwest fuse + add_rule(atoll_statue, + lambda state: has_combat_logic(["Frogues"], state, player)) def set_er_location_rules(world: "TunicWorld") -> None: @@ -1420,3 +1430,36 @@ def set_er_location_rules(world: "TunicWorld") -> None: lambda state: has_combat_logic(["Autobolts"], state, player)) add_rule(multiworld.get_location("Overworld - [Southwest] West Beach Guarded By Turret 2", player), lambda state: has_combat_logic(["Autobolts"], 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_logic(["Wizards"], state, player)) + add_rule(multiworld.get_location("Eastern Vault East Fuse", player), + lambda state: has_combat_logic(["Wizards"], state, player)) + + # replace the sword rule with this one + set_rule(multiworld.get_location("Swamp - [South Graveyard] 4 Orange Skulls", player), + lambda state: has_combat_logic(["Big Fleemer"], state, player)) + set_rule(multiworld.get_location("Swamp - [South Graveyard] Above Big Skeleton", player), + lambda state: has_combat_logic(["Fleemers"], state, player)) + # the tentacles deal with everything else reasonably, so you just have to fight them + set_rule(multiworld.get_location("Swamp - [South Graveyard] Guarded By Tentacles", player), + lambda state: has_combat_logic(["Tentacles"], state, player)) + set_rule(multiworld.get_location("Swamp - [South Graveyard] Obscured Beneath Telescope", player), + lambda state: state.has(laurels, player) # can dash from swamp mid to here and grab it + or has_combat_logic(["Lost Echoes", "Fleemers"], state, player)) + set_rule(multiworld.get_location("Swamp - [Central] South Secret Passage", player), + lambda state: state.has(laurels, player) # can dash from swamp front to here and grab it + or has_combat_logic(["Lost Echoes"], state, player)) + set_rule(multiworld.get_location("Swamp - [South Graveyard] Upper Walkway On Pedestal", player), + lambda state: has_combat_logic(["Fleemers"], state, player)) + set_rule(multiworld.get_location("Swamp - [Central] Beneath Memorial", player), + lambda state: has_combat_logic(["Lost Echoes"], state, player)) + set_rule(multiworld.get_location("Swamp - [Central] Near Ramps Up", player), + lambda state: has_combat_logic(["Lost Echoes"], state, player)) + set_rule(multiworld.get_location("Swamp - [Upper Graveyard] Near Telescope", player), + lambda state: has_combat_logic(["Lost Echoes"], state, player)) + set_rule(multiworld.get_location("Swamp - [Upper Graveyard] Near Shield Fleemers", player), + lambda state: has_combat_logic(["Fleemers"], state, player)) + set_rule(multiworld.get_location("Swamp - [Upper Graveyard] Obscured Behind Hill", player), + lambda state: has_combat_logic(["Fleemers"], state, player))