diff --git a/BaseClasses.py b/BaseClasses.py index 9e2b657c39bc..2738d3ac6c36 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -437,7 +437,7 @@ def push_item(self, location: Location, item: Item, collect: bool = True): location.item = item item.location = location if collect: - self.state.collect(item, location.event, location) + self.state.collect(item, location.advancement, location) logging.debug('Placed %s at %s', item, location) @@ -584,8 +584,7 @@ def location_condition(location: Location): def location_relevant(location: Location): """Determine if this location is relevant to sweep.""" if location.progress_type != LocationProgressType.EXCLUDED \ - and (location.player in players["locations"] or location.event - or (location.item and location.item.advancement)): + and (location.player in players["locations"] or location.advancement): return True return False @@ -730,7 +729,7 @@ def sweep_for_events(self, key_only: bool = False, locations: Optional[Iterable[ 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.event and location not in self.events and + 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)} while reachable_events: reachable_events = {location for location in locations if location.can_reach(self)} @@ -1020,7 +1019,6 @@ class Location: name: str address: Optional[int] parent_region: Optional[Region] - event: bool = False locked: bool = False show_in_spoiler: bool = True progress_type: LocationProgressType = LocationProgressType.DEFAULT @@ -1051,7 +1049,6 @@ def place_locked_item(self, item: Item): raise Exception(f"Location {self} already filled.") self.item = item item.location = self - self.event = item.advancement self.locked = True def __repr__(self): @@ -1067,6 +1064,10 @@ def __hash__(self): def __lt__(self, other: Location): return (self.player, self.name) < (other.player, other.name) + @property + def advancement(self) -> bool: + return self.item is not None and self.item.advancement + @property def is_event(self) -> bool: """Returns True if the address of this location is None, denoting it is an Event Location.""" diff --git a/Fill.py b/Fill.py index 291ea7e882b7..cb143c408e0c 100644 --- a/Fill.py +++ b/Fill.py @@ -159,7 +159,6 @@ def fill_restrictive(multiworld: MultiWorld, base_state: CollectionState, locati multiworld.push_item(spot_to_fill, item_to_place, False) spot_to_fill.locked = lock placements.append(spot_to_fill) - spot_to_fill.event = item_to_place.advancement placed += 1 if not placed % 1000: _log_fill_progress(name, placed, total) @@ -310,7 +309,6 @@ def accessibility_corrections(multiworld: MultiWorld, state: CollectionState, lo pool.append(location.item) state.remove(location.item) location.item = None - location.event = False if location in state.events: state.events.remove(location) locations.append(location) @@ -659,7 +657,7 @@ def item_percentage(player: int, num: int) -> float: while True: # Check locations in the current sphere and gather progression items to swap earlier for location in balancing_sphere: - if location.event: + if location.advancement: balancing_state.collect(location.item, True, location) player = location.item.player # only replace items that end up in another player's world @@ -716,7 +714,7 @@ def item_percentage(player: int, num: int) -> float: # sort then shuffle to maintain deterministic behaviour, # while allowing use of set for better algorithm growth behaviour elsewhere - replacement_locations = sorted(l for l in checked_locations if not l.event and not l.locked) + replacement_locations = sorted(l for l in checked_locations if not l.advancement and not l.locked) multiworld.random.shuffle(replacement_locations) items_to_replace.sort() multiworld.random.shuffle(items_to_replace) @@ -747,7 +745,7 @@ def item_percentage(player: int, num: int) -> float: sphere_locations.add(location) for location in sphere_locations: - if location.event: + if location.advancement: state.collect(location.item, True, location) checked_locations |= sphere_locations @@ -768,7 +766,6 @@ def swap_location_item(location_1: Location, location_2: Location, check_locked: location_2.item, location_1.item = location_1.item, location_2.item location_1.item.location = location_1 location_2.item.location = location_2 - location_1.event, location_2.event = location_2.event, location_1.event def distribute_planned(multiworld: MultiWorld) -> None: @@ -965,7 +962,6 @@ def failed(warning: str, force: typing.Union[bool, str]) -> None: placement['force']) for (item, location) in successful_pairs: multiworld.push_item(location, item, collect=False) - location.event = True # flag location to be checked during fill location.locked = True logging.debug(f"Plando placed {item} at {location}") if from_pool: diff --git a/docs/world api.md b/docs/world api.md index f82ef40a98f8..4f9fc2b1dd54 100644 --- a/docs/world api.md +++ b/docs/world api.md @@ -380,11 +380,6 @@ from BaseClasses import Location class MyGameLocation(Location): game: str = "My Game" - - # override constructor to automatically mark event locations as such - def __init__(self, player: int, name="", code=None, parent=None) -> None: - super(MyGameLocation, self).__init__(player, name, code, parent) - self.event = code is None ``` in your `__init__.py` or your `locations.py`. diff --git a/test/bases.py b/test/bases.py index 07a3e6008629..ee9fbcb683b7 100644 --- a/test/bases.py +++ b/test/bases.py @@ -221,7 +221,7 @@ def remove(self, items: typing.Union[Item, typing.Iterable[Item]]) -> None: if isinstance(items, Item): items = (items,) for item in items: - if item.location and item.location.event and item.location in self.multiworld.state.events: + if item.location and item.advancement and item.location in self.multiworld.state.events: self.multiworld.state.events.remove(item.location) self.multiworld.state.remove(item) diff --git a/test/general/test_fill.py b/test/general/test_fill.py index 70e9e822bff7..7b004db61fee 100644 --- a/test/general/test_fill.py +++ b/test/general/test_fill.py @@ -80,7 +80,6 @@ def fill_region(multiworld: MultiWorld, region: Region, items: List[Item]) -> Li return items item = items.pop(0) multiworld.push_item(location, item, False) - location.event = item.advancement return items @@ -489,7 +488,6 @@ def test_double_sweep(self): player1 = generate_player_data(multiworld, 1, 1, 1) location = player1.locations[0] location.address = None - location.event = True item = player1.prog_items[0] item.code = None location.place_locked_item(item) @@ -527,13 +525,13 @@ def test_basic_distribute(self): distribute_items_restrictive(multiworld) self.assertEqual(locations[0].item, basic_items[1]) - self.assertFalse(locations[0].event) + self.assertFalse(locations[0].advancement) self.assertEqual(locations[1].item, prog_items[0]) - self.assertTrue(locations[1].event) + self.assertTrue(locations[1].advancement) self.assertEqual(locations[2].item, prog_items[1]) - self.assertTrue(locations[2].event) + self.assertTrue(locations[2].advancement) self.assertEqual(locations[3].item, basic_items[0]) - self.assertFalse(locations[3].event) + self.assertFalse(locations[3].advancement) def test_excluded_distribute(self): """Test that distribute_items_restrictive doesn't put advancement items on excluded locations""" @@ -746,7 +744,7 @@ def test_non_excluded_local_items(self): for item in multiworld.get_items(): self.assertEqual(item.player, item.location.player) - self.assertFalse(item.location.event, False) + self.assertFalse(item.location.advancement, False) def test_early_items(self) -> None: """Test that the early items API successfully places items early""" diff --git a/worlds/alttp/ItemPool.py b/worlds/alttp/ItemPool.py index 438c6226bc38..c26c32a7a309 100644 --- a/worlds/alttp/ItemPool.py +++ b/worlds/alttp/ItemPool.py @@ -253,10 +253,8 @@ def generate_itempool(world): region.locations.append(loc) multiworld.push_item(loc, item_factory('Triforce', world), False) - loc.event = True loc.locked = True - multiworld.get_location('Ganon', player).event = True multiworld.get_location('Ganon', player).locked = True event_pairs = [ ('Agahnim 1', 'Beat Agahnim 1'), @@ -273,7 +271,7 @@ def generate_itempool(world): location = multiworld.get_location(location_name, player) event = item_factory(event_name, world) multiworld.push_item(location, event, False) - location.event = location.locked = True + location.locked = True # set up item pool diff --git a/worlds/alttp/Rules.py b/worlds/alttp/Rules.py index 7ff3c757bd78..6646aae1b93e 100644 --- a/worlds/alttp/Rules.py +++ b/worlds/alttp/Rules.py @@ -1193,7 +1193,6 @@ def tr_big_key_chest_keys_needed(state): item = item_factory('Small Key (Turtle Rock)', world.worlds[player]) location = world.get_location('Turtle Rock - Big Key Chest', player) location.place_locked_item(item) - location.event = True toss_junk_item(world, player) if world.accessibility[player] != 'locations': diff --git a/worlds/checksfinder/Locations.py b/worlds/checksfinder/Locations.py index 8a2ae07b27b6..59a96c83ea8a 100644 --- a/worlds/checksfinder/Locations.py +++ b/worlds/checksfinder/Locations.py @@ -10,10 +10,6 @@ class AdvData(typing.NamedTuple): class ChecksFinderAdvancement(Location): game: str = "ChecksFinder" - def __init__(self, player: int, name: str, address: typing.Optional[int], parent): - super().__init__(player, name, address, parent) - self.event = not address - advancement_table = { "Tile 1": AdvData(81000, 'Board'), diff --git a/worlds/dlcquest/__init__.py b/worlds/dlcquest/__init__.py index 2200729a3210..ca2862113fd4 100644 --- a/worlds/dlcquest/__init__.py +++ b/worlds/dlcquest/__init__.py @@ -61,7 +61,7 @@ def create_items(self): self.precollect_coinsanity() locations_count = len([location for location in self.multiworld.get_locations(self.player) - if not location.event]) + if not location.advancement]) items_to_exclude = [excluded_items for excluded_items in self.multiworld.precollected_items[self.player]] diff --git a/worlds/dlcquest/test/checks/world_checks.py b/worlds/dlcquest/test/checks/world_checks.py index a97093d62036..cc2fa7f51ad2 100644 --- a/worlds/dlcquest/test/checks/world_checks.py +++ b/worlds/dlcquest/test/checks/world_checks.py @@ -10,7 +10,7 @@ def get_all_item_names(multiworld: MultiWorld) -> List[str]: def get_all_location_names(multiworld: MultiWorld) -> List[str]: - return [location.name for location in multiworld.get_locations() if not location.event] + return [location.name for location in multiworld.get_locations() if not location.advancement] def assert_victory_exists(tester: DLCQuestTestBase, multiworld: MultiWorld): @@ -38,5 +38,5 @@ def assert_can_win(tester: DLCQuestTestBase, multiworld: MultiWorld): def assert_same_number_items_locations(tester: DLCQuestTestBase, multiworld: MultiWorld): - non_event_locations = [location for location in multiworld.get_locations() if not location.event] + non_event_locations = [location for location in multiworld.get_locations() if not location.advancement] tester.assertEqual(len(multiworld.itempool), len(non_event_locations)) \ No newline at end of file diff --git a/worlds/generic/Rules.py b/worlds/generic/Rules.py index c434351e9493..f0eef2248058 100644 --- a/worlds/generic/Rules.py +++ b/worlds/generic/Rules.py @@ -90,7 +90,7 @@ def exclusion_rules(multiworld: MultiWorld, player: int, exclude_locations: typi if loc_name not in multiworld.worlds[player].location_name_to_id: raise Exception(f"Unable to exclude location {loc_name} in player {player}'s world.") from e else: - if not location.event: + if not location.advancement: location.progress_type = LocationProgressType.EXCLUDED else: logging.warning(f"Unable to exclude location {loc_name} in player {player}'s world.") diff --git a/worlds/ladx/Locations.py b/worlds/ladx/Locations.py index c7b127ef2b54..f29355f2ba86 100644 --- a/worlds/ladx/Locations.py +++ b/worlds/ladx/Locations.py @@ -60,13 +60,11 @@ class LinksAwakeningLocation(Location): def __init__(self, player: int, region, ladxr_item): name = meta_to_name(ladxr_item.metadata) + address = None - self.event = ladxr_item.event is not None - if self.event: + if ladxr_item.event is not None: name = ladxr_item.event - - address = None - if not self.event: + else: address = locations_to_id[name] super().__init__(player, name, address) self.parent_region = region diff --git a/worlds/ladx/__init__.py b/worlds/ladx/__init__.py index d662b526bb61..6c7517f359dc 100644 --- a/worlds/ladx/__init__.py +++ b/worlds/ladx/__init__.py @@ -154,7 +154,7 @@ def create_regions(self) -> None: # Place RAFT, other access events for region in regions: for loc in region.locations: - if loc.event: + if loc.address is None: loc.place_locked_item(self.create_event(loc.ladxr_item.event)) # Connect Windfish -> Victory diff --git a/worlds/meritous/Locations.py b/worlds/meritous/Locations.py index 1893b8520e48..690c757efff8 100644 --- a/worlds/meritous/Locations.py +++ b/worlds/meritous/Locations.py @@ -9,11 +9,6 @@ class MeritousLocation(Location): game: str = "Meritous" - def __init__(self, player: int, name: str = '', address: int = None, parent=None): - super(MeritousLocation, self).__init__(player, name, address, parent) - if "Wervyn Anixil" in name or "Defeat" in name: - self.event = True - offset = 593_000 diff --git a/worlds/oot/Location.py b/worlds/oot/Location.py index 3f7d75517e30..f924dd048da1 100644 --- a/worlds/oot/Location.py +++ b/worlds/oot/Location.py @@ -44,14 +44,11 @@ def __init__(self, player, name='', code=None, address1=None, address2=None, self.vanilla_item = vanilla_item if filter_tags is None: self.filter_tags = None - else: + else: self.filter_tags = list(filter_tags) self.never = False # no idea what this does self.disabled = DisableType.ENABLED - if type == 'Event': - self.event = True - @property def dungeon(self): return self.parent_region.dungeon diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 303529c945f6..d9ee63850eaf 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -717,7 +717,6 @@ def make_event_item(self, name, location, item=None): item = self.create_item(name, allow_arbitrary_name=True) self.multiworld.push_item(location, item, collect=False) location.locked = True - location.event = True if name not in item_table: location.internal = True return item @@ -842,7 +841,7 @@ def generate_basic(self): # mostly killing locations that shouldn't exist by se all_state.sweep_for_events(locations=all_locations) reachable = self.multiworld.get_reachable_locations(all_state, self.player) unreachable = [loc for loc in all_locations if - (loc.internal or loc.type == 'Drop') and loc.event and loc.locked and loc not in reachable] + (loc.internal or loc.type == 'Drop') and loc.address is None and loc.locked and loc not in reachable] for loc in unreachable: loc.parent_region.locations.remove(loc) # Exception: Sell Big Poe is an event which is only reachable if Bottle with Big Poe is in the item pool. @@ -972,7 +971,6 @@ def prefill_state(base_state): for location in song_locations: location.item = None location.locked = False - location.event = False else: break diff --git a/worlds/overcooked2/__init__.py b/worlds/overcooked2/__init__.py index da0e1890894a..633b624b84a0 100644 --- a/worlds/overcooked2/__init__.py +++ b/worlds/overcooked2/__init__.py @@ -115,8 +115,6 @@ def add_level_location( region, ) - location.event = is_event - if priority: location.progress_type = LocationProgressType.PRIORITY else: diff --git a/worlds/pokemon_rb/__init__.py b/worlds/pokemon_rb/__init__.py index b44e2f3b8faa..79028a68b187 100644 --- a/worlds/pokemon_rb/__init__.py +++ b/worlds/pokemon_rb/__init__.py @@ -265,7 +265,6 @@ def stage_fill_hook(cls, multiworld, progitempool, usefulitempool, filleritempoo state = sweep_from_pool(multiworld.state, progitempool + unplaced_items) if (not item.advancement) or state.can_reach(loc, "Location", loc.player): multiworld.push_item(loc, item, False) - loc.event = item.advancement fill_locations.remove(loc) break else: diff --git a/worlds/pokemon_rb/encounters.py b/worlds/pokemon_rb/encounters.py index a426374c2e6e..6d1762b0ca71 100644 --- a/worlds/pokemon_rb/encounters.py +++ b/worlds/pokemon_rb/encounters.py @@ -197,7 +197,6 @@ def process_pokemon_locations(self): mon = randomize_pokemon(self, original_mon, mons_list, 2, self.multiworld.random) placed_mons[mon] += 1 location.item = self.create_item(mon) - location.event = True location.locked = True location.item.location = location locations.append(location) @@ -269,7 +268,6 @@ def process_pokemon_locations(self): for slot in encounter_slots: location = self.multiworld.get_location(slot.name, self.player) location.item = self.create_item(slot.original_item) - location.event = True location.locked = True location.item.location = location placed_mons[location.item.name] += 1 \ No newline at end of file diff --git a/worlds/pokemon_rb/regions.py b/worlds/pokemon_rb/regions.py index b8f3d829c69a..4932f5793583 100644 --- a/worlds/pokemon_rb/regions.py +++ b/worlds/pokemon_rb/regions.py @@ -1540,7 +1540,6 @@ def create_regions(self): item = self.create_filler() elif location.original_item == "Pokedex": if self.multiworld.randomize_pokedex[self.player] == "vanilla": - location_object.event = True event = True item = self.create_item("Pokedex") elif location.original_item == "Moon Stone" and self.multiworld.stonesanity[self.player]: diff --git a/worlds/sc2wol/Regions.py b/worlds/sc2wol/Regions.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/worlds/smz3/__init__.py b/worlds/smz3/__init__.py index 39aa42c07ad7..04c376f3c87d 100644 --- a/worlds/smz3/__init__.py +++ b/worlds/smz3/__init__.py @@ -527,7 +527,6 @@ def post_fill(self): if (loc.item.player == self.player and loc.always_allow(state, loc.item)): loc.item.classification = ItemClassification.filler loc.item.item.Progression = False - loc.item.location.event = False self.unreachable.append(loc) def get_filler_item_name(self) -> str: @@ -573,7 +572,6 @@ def JunkFillGT(self, factor): break assert itemFromPool is not None, "Can't find anymore item(s) to pre fill GT" self.multiworld.push_item(loc, itemFromPool, False) - loc.event = False toRemove.sort(reverse = True) for i in toRemove: self.multiworld.itempool.pop(i) diff --git a/worlds/soe/__init__.py b/worlds/soe/__init__.py index dcca722ad1fe..061322650e68 100644 --- a/worlds/soe/__init__.py +++ b/worlds/soe/__init__.py @@ -486,4 +486,3 @@ def __init__(self, player: int, name: str, address: typing.Optional[int], parent super().__init__(player, name, address, parent) # unconditional assignments favor a split dict, saving memory self.progress_type = LocationProgressType.EXCLUDED if exclude else LocationProgressType.DEFAULT - self.event = not address diff --git a/worlds/spire/__init__.py b/worlds/spire/__init__.py index 35ef94090656..d8a9322ab415 100644 --- a/worlds/spire/__init__.py +++ b/worlds/spire/__init__.py @@ -92,12 +92,6 @@ def create_region(world: MultiWorld, player: int, name: str, locations=None, exi class SpireLocation(Location): game: str = "Slay the Spire" - def __init__(self, player: int, name: str, address=None, parent=None): - super(SpireLocation, self).__init__(player, name, address, parent) - if address is None: - self.event = True - self.locked = True - class SpireItem(Item): game = "Slay the Spire" diff --git a/worlds/stardew_valley/__init__.py b/worlds/stardew_valley/__init__.py index e25fd8eb9a58..6a82a2a26dd8 100644 --- a/worlds/stardew_valley/__init__.py +++ b/worlds/stardew_valley/__init__.py @@ -30,10 +30,6 @@ class StardewLocation(Location): game: str = "Stardew Valley" - def __init__(self, player: int, name: str, address: Optional[int], parent=None): - super().__init__(player, name, address, parent) - self.event = not address - class StardewItem(Item): game: str = "Stardew Valley" @@ -144,7 +140,7 @@ def create_items(self): locations_count = len([location for location in self.multiworld.get_locations(self.player) - if not location.event]) + if location.address is not None]) created_items = create_items(self.create_item, self.delete_item, locations_count, items_to_exclude, self.options, self.random) diff --git a/worlds/stardew_valley/test/TestGeneration.py b/worlds/stardew_valley/test/TestGeneration.py index 55ad4f07544b..1b4d1476b900 100644 --- a/worlds/stardew_valley/test/TestGeneration.py +++ b/worlds/stardew_valley/test/TestGeneration.py @@ -371,8 +371,7 @@ class TestLocationGeneration(SVTestBase): def test_all_location_created_are_in_location_table(self): for location in self.get_real_locations(): - if not location.event: - self.assertIn(location.name, location_table) + self.assertIn(location.name, location_table) class TestMinLocationAndMaxItem(SVTestBase): @@ -771,11 +770,10 @@ class TestShipsanityNone(SVTestBase): } def test_no_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event: - with self.subTest(location.name): - self.assertFalse("Shipsanity" in location.name) - self.assertNotIn(LocationTags.SHIPSANITY, location_table[location.name].tags) + for location in self.get_real_locations(): + with self.subTest(location.name): + self.assertFalse("Shipsanity" in location.name) + self.assertNotIn(LocationTags.SHIPSANITY, location_table[location.name].tags) class TestShipsanityCrops(SVTestBase): @@ -785,8 +783,8 @@ class TestShipsanityCrops(SVTestBase): } def test_only_crop_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_CROP, location_table[location.name].tags) @@ -808,8 +806,8 @@ class TestShipsanityCropsExcludeIsland(SVTestBase): } def test_only_crop_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_CROP, location_table[location.name].tags) @@ -831,8 +829,8 @@ class TestShipsanityCropsNoQiCropWithoutSpecialOrders(SVTestBase): } def test_only_crop_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_CROP, location_table[location.name].tags) @@ -854,8 +852,8 @@ class TestShipsanityFish(SVTestBase): } def test_only_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -878,8 +876,8 @@ class TestShipsanityFishExcludeIsland(SVTestBase): } def test_only_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -902,8 +900,8 @@ class TestShipsanityFishExcludeQiOrders(SVTestBase): } def test_only_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -926,8 +924,8 @@ class TestShipsanityFullShipment(SVTestBase): } def test_only_full_shipment_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FULL_SHIPMENT, location_table[location.name].tags) self.assertNotIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -953,8 +951,8 @@ class TestShipsanityFullShipmentExcludeIsland(SVTestBase): } def test_only_full_shipment_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FULL_SHIPMENT, location_table[location.name].tags) self.assertNotIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -979,8 +977,8 @@ class TestShipsanityFullShipmentExcludeQiBoard(SVTestBase): } def test_only_full_shipment_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertIn(LocationTags.SHIPSANITY_FULL_SHIPMENT, location_table[location.name].tags) self.assertNotIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -1006,8 +1004,8 @@ class TestShipsanityFullShipmentWithFish(SVTestBase): } def test_only_full_shipment_and_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertTrue(LocationTags.SHIPSANITY_FULL_SHIPMENT in location_table[location.name].tags or LocationTags.SHIPSANITY_FISH in location_table[location.name].tags) @@ -1041,8 +1039,8 @@ class TestShipsanityFullShipmentWithFishExcludeIsland(SVTestBase): } def test_only_full_shipment_and_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertTrue(LocationTags.SHIPSANITY_FULL_SHIPMENT in location_table[location.name].tags or LocationTags.SHIPSANITY_FISH in location_table[location.name].tags) @@ -1075,8 +1073,8 @@ class TestShipsanityFullShipmentWithFishExcludeQiBoard(SVTestBase): } def test_only_full_shipment_and_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: with self.subTest(location.name): self.assertTrue(LocationTags.SHIPSANITY_FULL_SHIPMENT in location_table[location.name].tags or LocationTags.SHIPSANITY_FISH in location_table[location.name].tags) diff --git a/worlds/stardew_valley/test/TestRules.py b/worlds/stardew_valley/test/TestRules.py index 787e0ce39c3e..3ee921bd2bc2 100644 --- a/worlds/stardew_valley/test/TestRules.py +++ b/worlds/stardew_valley/test/TestRules.py @@ -557,8 +557,8 @@ def test_cannot_make_any_donation_without_museum_access(self): railroad_item = "Railroad Boulder Removed" swap_museum_and_bathhouse(self.multiworld, self.player) collect_all_except(self.multiworld, railroad_item) - donation_locations = [location for location in self.multiworld.get_locations() if - not location.event and LocationTags.MUSEUM_DONATIONS in location_table[location.name].tags] + donation_locations = [location for location in self.get_real_locations() if + LocationTags.MUSEUM_DONATIONS in location_table[location.name].tags] for donation in donation_locations: self.assertFalse(self.world.logic.region.can_reach_location(donation.name)(self.multiworld.state)) @@ -713,10 +713,9 @@ class TestShipsanityNone(SVTestBase): } def test_no_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event: - self.assertFalse("Shipsanity" in location.name) - self.assertNotIn(LocationTags.SHIPSANITY, location_table[location.name].tags) + for location in self.get_real_locations(): + self.assertFalse("Shipsanity" in location.name) + self.assertNotIn(LocationTags.SHIPSANITY, location_table[location.name].tags) class TestShipsanityCrops(SVTestBase): @@ -725,8 +724,8 @@ class TestShipsanityCrops(SVTestBase): } def test_only_crop_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: self.assertIn(LocationTags.SHIPSANITY_CROP, location_table[location.name].tags) @@ -736,8 +735,8 @@ class TestShipsanityFish(SVTestBase): } def test_only_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: self.assertIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -747,8 +746,8 @@ class TestShipsanityFullShipment(SVTestBase): } def test_only_full_shipment_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: self.assertIn(LocationTags.SHIPSANITY_FULL_SHIPMENT, location_table[location.name].tags) self.assertNotIn(LocationTags.SHIPSANITY_FISH, location_table[location.name].tags) @@ -759,8 +758,8 @@ class TestShipsanityFullShipmentWithFish(SVTestBase): } def test_only_full_shipment_and_fish_shipsanity_locations(self): - for location in self.multiworld.get_locations(self.player): - if not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags: + for location in self.get_real_locations(): + if LocationTags.SHIPSANITY in location_table[location.name].tags: self.assertTrue(LocationTags.SHIPSANITY_FULL_SHIPMENT in location_table[location.name].tags or LocationTags.SHIPSANITY_FISH in location_table[location.name].tags) @@ -774,8 +773,8 @@ class TestShipsanityEverything(SVTestBase): def test_all_shipsanity_locations_require_shipping_bin(self): bin_name = "Shipping Bin" collect_all_except(self.multiworld, bin_name) - shipsanity_locations = [location for location in self.multiworld.get_locations() if - not location.event and LocationTags.SHIPSANITY in location_table[location.name].tags] + shipsanity_locations = [location for location in self.get_real_locations() if + LocationTags.SHIPSANITY in location_table[location.name].tags] bin_item = self.world.create_item(bin_name) for location in shipsanity_locations: with self.subTest(location.name): diff --git a/worlds/stardew_valley/test/__init__.py b/worlds/stardew_valley/test/__init__.py index 5eddb7e280b0..1a463d9fc280 100644 --- a/worlds/stardew_valley/test/__init__.py +++ b/worlds/stardew_valley/test/__init__.py @@ -277,10 +277,10 @@ def collect_all_the_money(self): self.multiworld.state.collect(self.world.create_item("Stardrop"), event=False) def get_real_locations(self) -> List[Location]: - return [location for location in self.multiworld.get_locations(self.player) if not location.event] + return [location for location in self.multiworld.get_locations(self.player) if location.address is not None] def get_real_location_names(self) -> List[str]: - return [location.name for location in self.multiworld.get_locations(self.player) if not location.event] + return [location.name for location in self.get_real_locations()] pre_generated_worlds = {} diff --git a/worlds/stardew_valley/test/assertion/mod_assert.py b/worlds/stardew_valley/test/assertion/mod_assert.py index 4f72c9a3977e..eec7f805d2c5 100644 --- a/worlds/stardew_valley/test/assertion/mod_assert.py +++ b/worlds/stardew_valley/test/assertion/mod_assert.py @@ -20,7 +20,7 @@ def assert_stray_mod_items(self, chosen_mods: Union[List[str], str], multiworld: self.assertTrue(item.mod_name is None or item.mod_name in chosen_mods, f"Item {item.name} has is from mod {item.mod_name}. Allowed mods are {chosen_mods}.") for multiworld_location in multiworld.get_locations(): - if multiworld_location.event: + if multiworld_location.address is None: continue location = location_table[multiworld_location.name] self.assertTrue(location.mod_name is None or location.mod_name in chosen_mods) diff --git a/worlds/stardew_valley/test/assertion/world_assert.py b/worlds/stardew_valley/test/assertion/world_assert.py index 413517e1c912..1e5512682f92 100644 --- a/worlds/stardew_valley/test/assertion/world_assert.py +++ b/worlds/stardew_valley/test/assertion/world_assert.py @@ -13,7 +13,7 @@ def get_all_item_names(multiworld: MultiWorld) -> List[str]: def get_all_location_names(multiworld: MultiWorld) -> List[str]: - return [location.name for location in multiworld.get_locations() if not location.event] + return [location.name for location in multiworld.get_locations() if location.address is not None] class WorldAssertMixin(RuleAssertMixin, TestCase): @@ -48,7 +48,7 @@ def assert_can_win(self, multiworld: MultiWorld): self.assert_can_reach_victory(multiworld) def assert_same_number_items_locations(self, multiworld: MultiWorld): - non_event_locations = [location for location in multiworld.get_locations() if not location.event] + non_event_locations = [location for location in multiworld.get_locations() if location.address is not None] self.assertEqual(len(multiworld.itempool), len(non_event_locations)) def assert_can_reach_everything(self, multiworld: MultiWorld): diff --git a/worlds/timespinner/Regions.py b/worlds/timespinner/Regions.py index f80babc0e6d4..4f53f75eff7a 100644 --- a/worlds/timespinner/Regions.py +++ b/worlds/timespinner/Regions.py @@ -206,7 +206,6 @@ def create_location(player: int, location_data: LocationData, region: Region) -> location.access_rule = location_data.rule if id is None: - location.event = True location.locked = True return location diff --git a/worlds/tloz/__init__.py b/worlds/tloz/__init__.py index b2f23ae2ca91..d4bea783a744 100644 --- a/worlds/tloz/__init__.py +++ b/worlds/tloz/__init__.py @@ -116,7 +116,6 @@ def create_event(self, event: str): def create_location(self, name, id, parent, event=False): return_location = TLoZLocation(self.player, name, id, parent) - return_location.event = event return return_location def create_regions(self): diff --git a/worlds/undertale/Locations.py b/worlds/undertale/Locations.py index 2f7de44512fa..5b45af63a9a2 100644 --- a/worlds/undertale/Locations.py +++ b/worlds/undertale/Locations.py @@ -10,10 +10,6 @@ class AdvData(typing.NamedTuple): class UndertaleAdvancement(Location): game: str = "Undertale" - def __init__(self, player: int, name: str, address: typing.Optional[int], parent): - super().__init__(player, name, address, parent) - self.event = not address - advancement_table = { "Snowman": AdvData(79100, "Snowdin Forest"), diff --git a/worlds/wargroove/__init__.py b/worlds/wargroove/__init__.py index ab4a9364fac0..abca210b2df1 100644 --- a/worlds/wargroove/__init__.py +++ b/worlds/wargroove/__init__.py @@ -131,12 +131,6 @@ def create_region(world: MultiWorld, player: int, name: str, locations=None, exi class WargrooveLocation(Location): game: str = "Wargroove" - def __init__(self, player: int, name: str, address=None, parent=None): - super(WargrooveLocation, self).__init__(player, name, address, parent) - if address is None: - self.event = True - self.locked = True - class WargrooveItem(Item): game = "Wargroove" diff --git a/worlds/zork_grand_inquisitor/world.py b/worlds/zork_grand_inquisitor/world.py index 2dc634e47d8d..66f062631cbf 100644 --- a/worlds/zork_grand_inquisitor/world.py +++ b/worlds/zork_grand_inquisitor/world.py @@ -109,9 +109,7 @@ def create_regions(self) -> None: region_mapping[data.region], ) - location.event = isinstance(location_enum_item, ZorkGrandInquisitorEvents) - - if location.event: + if isinstance(location_enum_item, ZorkGrandInquisitorEvents): location.place_locked_item( ZorkGrandInquisitorItem( data.event_item_name,