From e714d2e129bdb940f923ab6469f289ae9a4a7e58 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 24 Jul 2024 08:34:51 -0400 Subject: [PATCH] Lingo: Add option to prevent shuffling postgame (#3350) * Lingo: Add option to prevent shuffling postgame * Allow roof access on door shuffle * Fix broken unit test * Simplified THE END edge case * Revert unnecessary change * Review comments * Fix mastery unit test * Update generated.dat * Added player's name to error message --- worlds/lingo/__init__.py | 33 +++++++++++++++- worlds/lingo/data/LL1.yaml | 16 +++++++- worlds/lingo/data/generated.dat | Bin 136277 -> 136563 bytes worlds/lingo/data/ids.yaml | 3 +- worlds/lingo/options.py | 6 +++ worlds/lingo/player_logic.py | 34 +++++++++------- worlds/lingo/rules.py | 3 ++ worlds/lingo/test/TestMastery.py | 6 ++- worlds/lingo/test/TestPostgame.py | 62 ++++++++++++++++++++++++++++++ 9 files changed, 145 insertions(+), 18 deletions(-) create mode 100644 worlds/lingo/test/TestPostgame.py diff --git a/worlds/lingo/__init__.py b/worlds/lingo/__init__.py index 8d6a7fc4eb..3b67617873 100644 --- a/worlds/lingo/__init__.py +++ b/worlds/lingo/__init__.py @@ -3,7 +3,7 @@ Archipelago init file for Lingo """ from logging import warning -from BaseClasses import Item, ItemClassification, Tutorial +from BaseClasses import CollectionState, Item, ItemClassification, Tutorial from Options import OptionError from worlds.AutoWorld import WebWorld, World from .datatypes import Room, RoomEntrance @@ -68,6 +68,37 @@ class LingoWorld(World): def create_regions(self): create_regions(self) + if not self.options.shuffle_postgame: + state = CollectionState(self.multiworld) + state.collect(LingoItem("Prevent Victory", ItemClassification.progression, None, self.player), True) + + # Note: relies on the assumption that real_items is a definitive list of real progression items in this + # world, and is not modified after being created. + for item in self.player_logic.real_items: + state.collect(self.create_item(item), True) + + # Exception to the above: a forced good item is not considered a "real item", but needs to be here anyway. + if self.player_logic.forced_good_item != "": + state.collect(self.create_item(self.player_logic.forced_good_item), True) + + all_locations = self.multiworld.get_locations(self.player) + state.sweep_for_events(locations=all_locations) + + unreachable_locations = [location for location in all_locations + if not state.can_reach_location(location.name, self.player)] + + for location in unreachable_locations: + if location.name in self.player_logic.event_loc_to_item.keys(): + continue + + self.player_logic.real_locations.remove(location.name) + location.parent_region.locations.remove(location) + + if len(self.player_logic.real_items) > len(self.player_logic.real_locations): + raise OptionError(f"{self.player_name}'s Lingo world does not have enough locations to fit the number" + f" of required items without shuffling the postgame. Either enable postgame" + f" shuffling, or choose different options.") + def create_items(self): pool = [self.create_item(name) for name in self.player_logic.real_items] diff --git a/worlds/lingo/data/LL1.yaml b/worlds/lingo/data/LL1.yaml index e12ca02297..3035446ef7 100644 --- a/worlds/lingo/data/LL1.yaml +++ b/worlds/lingo/data/LL1.yaml @@ -879,6 +879,8 @@ panel: DRAWL + RUNS - room: Owl Hallway panel: READS + RUST + - room: Ending Area + panel: THE END paintings: - id: eye_painting disable: True @@ -2322,7 +2324,7 @@ orientation: east - id: hi_solved_painting orientation: west - Orange Tower Seventh Floor: + Ending Area: entrances: Orange Tower Sixth Floor: room: Orange Tower @@ -2334,6 +2336,18 @@ check: True tag: forbid non_counting: True + location_name: Orange Tower Seventh Floor - THE END + doors: + End: + event: True + panels: + - THE END + Orange Tower Seventh Floor: + entrances: + Ending Area: + room: Ending Area + door: End + panels: THE MASTER: # We will set up special rules for this in code. id: Countdown Panels/Panel_master_master diff --git a/worlds/lingo/data/generated.dat b/worlds/lingo/data/generated.dat index 3ed6cb24f7d289c38189932fe5ccf705bdaf0262..4a751b25ec5f143b6b055fd2043a6543754ef5b1 100644 GIT binary patch delta 27407 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 delta 27456 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%0D?iOrPle5Pi@mE?)2&I^!3< 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