From 35ed0d4e19791281523dcab5901ff8785823badb Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 27 Jul 2024 17:17:34 -0400 Subject: [PATCH 1/4] Lingo: Fix Rhyme Room LEAP panel logic (#3699) --- worlds/lingo/data/LL1.yaml | 2 ++ worlds/lingo/data/generated.dat | Bin 148903 -> 148927 bytes 2 files changed, 2 insertions(+) diff --git a/worlds/lingo/data/LL1.yaml b/worlds/lingo/data/LL1.yaml index 1c9f4e551df1..5d10f0774778 100644 --- a/worlds/lingo/data/LL1.yaml +++ b/worlds/lingo/data/LL1.yaml @@ -7649,6 +7649,8 @@ LEAP: id: Double Room/Panel_leap_leap tag: midwhite + required_door: + door: Door to Cross doors: Door to Cross: id: Double Room Area Doors/Door_room_4a diff --git a/worlds/lingo/data/generated.dat b/worlds/lingo/data/generated.dat index d221b8168d9164576b3f1c5b2fc57c604da5f100..ad412fc352541d2dee982829f5484a85b9d2b446 100644 GIT binary patch delta 3860 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 RrqfE!sB*StUxsG%`!6G{Tt5H+ From e38f5d0a6132797c49a27b1d9cce9350270ce182 Mon Sep 17 00:00:00 2001 From: Scipio Wright Date: Sat, 27 Jul 2024 17:17:59 -0400 Subject: [PATCH 2/4] TUNIC: Update plando connection option call to use options API #3695 --- worlds/tunic/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/worlds/tunic/__init__.py b/worlds/tunic/__init__.py index b3aa1e6a3479..5253e9951437 100644 --- a/worlds/tunic/__init__.py +++ b/worlds/tunic/__init__.py @@ -121,7 +121,7 @@ def stage_generate_early(cls, multiworld: MultiWorld) -> None: cls.seed_groups[group] = SeedGroup(logic_rules=tunic.options.logic_rules.value, laurels_at_10_fairies=tunic.options.laurels_location == 3, fixed_shop=bool(tunic.options.fixed_shop), - plando=multiworld.plando_connections[tunic.player]) + plando=tunic.options.plando_connections) continue # lower value is more restrictive @@ -134,9 +134,9 @@ def stage_generate_early(cls, multiworld: MultiWorld) -> None: if tunic.options.fixed_shop: cls.seed_groups[group]["fixed_shop"] = True - if multiworld.plando_connections[tunic.player]: + if tunic.options.plando_connections: # loop through the connections in the player's yaml - for cxn in multiworld.plando_connections[tunic.player]: + for cxn in tunic.options.plando_connections: new_cxn = True for group_cxn in cls.seed_groups[group]["plando"]: # if neither entrance nor exit match anything in the group, add to group From 34141f8de0d2274cc66da9c3ed8045a64bad31fa Mon Sep 17 00:00:00 2001 From: lilDavid <1337lilDavid@gmail.com> Date: Sat, 27 Jul 2024 16:19:09 -0500 Subject: [PATCH 3/4] SMZ3: Classify "nice" items as useful (#3683) --- worlds/smz3/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worlds/smz3/__init__.py b/worlds/smz3/__init__.py index 6056a171d370..d78c9f7d8224 100644 --- a/worlds/smz3/__init__.py +++ b/worlds/smz3/__init__.py @@ -215,7 +215,6 @@ def create_items(self): niceItems = TotalSMZ3Item.Item.CreateNicePool(self.smz3World) junkItems = TotalSMZ3Item.Item.CreateJunkPool(self.smz3World) - allJunkItems = niceItems + junkItems self.junkItemsNames = [item.Type.name for item in junkItems] if (self.smz3World.Config.Keysanity): @@ -228,7 +227,8 @@ def create_items(self): self.multiworld.push_precollected(SMZ3Item(item.Type.name, ItemClassification.filler, item.Type, self.item_name_to_id[item.Type.name], self.player, item)) itemPool = [SMZ3Item(item.Type.name, ItemClassification.progression, item.Type, self.item_name_to_id[item.Type.name], self.player, item) for item in progressionItems] + \ - [SMZ3Item(item.Type.name, ItemClassification.filler, item.Type, self.item_name_to_id[item.Type.name], self.player, item) for item in allJunkItems] + [SMZ3Item(item.Type.name, ItemClassification.useful, item.Type, self.item_name_to_id[item.Type.name], self.player, item) for item in niceItems] + \ + [SMZ3Item(item.Type.name, ItemClassification.filler, item.Type, self.item_name_to_id[item.Type.name], self.player, item) for item in junkItems] self.smz3DungeonItems = [SMZ3Item(item.Type.name, ItemClassification.progression, item.Type, self.item_name_to_id[item.Type.name], self.player, item) for item in self.dungeon] self.multiworld.itempool += itemPool From b77805e5ee5f50bae7ded6690473a0ac66fa4e07 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 28 Jul 2024 01:32:25 +0200 Subject: [PATCH 4/4] Fill: remove sweep_for_events(key_only=True) (#2239) --- BaseClasses.py | 8 +++----- Fill.py | 1 - worlds/alttp/SubClasses.py | 4 ---- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 88857f803212..1c7dad7f3b9e 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -680,13 +680,13 @@ def can_reach_entrance(self, spot: str, player: int) -> bool: def can_reach_region(self, spot: str, player: int) -> bool: return self.multiworld.get_region(spot, player).can_reach(self) - def sweep_for_events(self, key_only: bool = False, locations: Optional[Iterable[Location]] = None) -> None: + def sweep_for_events(self, locations: Optional[Iterable[Location]] = None) -> None: if locations is None: locations = self.multiworld.get_filled_locations() reachable_events = True # since the loop has a good chance to run more than once, only filter the events once - locations = {location for location in locations if location.advancement and location not in self.events and - not key_only or getattr(location.item, "locked_dungeon_item", False)} + locations = {location for location in locations if location.advancement and location not in self.events} + while reachable_events: reachable_events = {location for location in locations if location.can_reach(self)} locations -= reachable_events @@ -1291,8 +1291,6 @@ def create_playthrough(self, create_paths: bool = True) -> None: state = CollectionState(multiworld) collection_spheres = [] while required_locations: - state.sweep_for_events(key_only=True) - sphere = set(filter(state.can_reach, required_locations)) for location in sphere: diff --git a/Fill.py b/Fill.py index 4967ff073601..5185bbb60ee4 100644 --- a/Fill.py +++ b/Fill.py @@ -646,7 +646,6 @@ def balance_multiworld_progression(multiworld: MultiWorld) -> None: def get_sphere_locations(sphere_state: CollectionState, locations: typing.Set[Location]) -> typing.Set[Location]: - sphere_state.sweep_for_events(key_only=True, locations=locations) return {loc for loc in locations if sphere_state.can_reach(loc)} def item_percentage(player: int, num: int) -> float: diff --git a/worlds/alttp/SubClasses.py b/worlds/alttp/SubClasses.py index 769dcc199852..328e28da9346 100644 --- a/worlds/alttp/SubClasses.py +++ b/worlds/alttp/SubClasses.py @@ -76,10 +76,6 @@ def dungeon_item(self) -> Optional[str]: if self.type in {"SmallKey", "BigKey", "Map", "Compass"}: return self.type - @property - def locked_dungeon_item(self): - return self.location.locked and self.dungeon_item - class LTTPRegionType(IntEnum): LightWorld = 1