From 38cf3c0417ee5eceb06d0aeec2b38b90bbc76d7f Mon Sep 17 00:00:00 2001 From: Trevor L <80716066+TRPG0@users.noreply.github.com> Date: Thu, 28 Mar 2024 18:26:58 -0600 Subject: [PATCH] Hylics 2: Fix invalid multiworld data, use `self.random` instead of `self.multiworld.random` (#3001) * Hylics 2: Fixes * Rewrite loop --- worlds/hylics2/__init__.py | 79 +++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 44 deletions(-) diff --git a/worlds/hylics2/__init__.py b/worlds/hylics2/__init__.py index 1c51bacc5d67..cb7ae4498279 100644 --- a/worlds/hylics2/__init__.py +++ b/worlds/hylics2/__init__.py @@ -34,8 +34,6 @@ class Hylics2World(World): location_name_to_id = {data["name"]: loc_id for loc_id, data in all_locations.items()} option_definitions = Options.hylics2_options - topology_present: bool = True - data_version = 3 start_location = "Waynehouse" @@ -51,10 +49,6 @@ def create_item(self, name: str) -> "Hylics2Item": return Hylics2Item(name, self.all_items[item_id]["classification"], item_id, player=self.player) - def add_item(self, name: str, classification: ItemClassification, code: int) -> "Item": - return Hylics2Item(name, classification, code, self.player) - - def create_event(self, event: str): return Hylics2Item(event, ItemClassification.progression_skip_balancing, None, self.player) @@ -62,7 +56,7 @@ def create_event(self, event: str): # set random starting location if option is enabled def generate_early(self): if self.multiworld.random_start[self.player]: - i = self.multiworld.random.randint(0, 3) + i = self.random.randint(0, 3) if i == 0: self.start_location = "Waynehouse" elif i == 1: @@ -77,26 +71,26 @@ def create_items(self): pool = [] # add regular items - for i, data in Items.item_table.items(): - if data["count"] > 0: - for j in range(data["count"]): - pool.append(self.add_item(data["name"], data["classification"], i)) + for item in Items.item_table.values(): + if item["count"] > 0: + for _ in range(item["count"]): + pool.append(self.create_item(item["name"])) # add party members if option is enabled if self.multiworld.party_shuffle[self.player]: - for i, data in Items.party_item_table.items(): - pool.append(self.add_item(data["name"], data["classification"], i)) + for item in Items.party_item_table.values(): + pool.append(self.create_item(item["name"])) # handle gesture shuffle if not self.multiworld.gesture_shuffle[self.player]: # add gestures to pool like normal - for i, data in Items.gesture_item_table.items(): - pool.append(self.add_item(data["name"], data["classification"], i)) + for item in Items.gesture_item_table.values(): + pool.append(self.create_item(item["name"])) # add '10 Bones' items if medallion shuffle is enabled if self.multiworld.medallion_shuffle[self.player]: - for i, data in Items.medallion_item_table.items(): - for j in range(data["count"]): - pool.append(self.add_item(data["name"], data["classification"], i)) + for item in Items.medallion_item_table.values(): + for _ in range(item["count"]): + pool.append(self.create_item(item["name"])) # add to world's pool self.multiworld.itempool += pool @@ -107,48 +101,45 @@ def pre_fill(self): if self.multiworld.gesture_shuffle[self.player] == 2: # vanilla locations gestures = Items.gesture_item_table self.multiworld.get_location("Waynehouse: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200678]["name"], gestures[200678]["classification"], 200678)) + .place_locked_item(self.create_item("POROMER BLEB")) self.multiworld.get_location("Afterlife: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200683]["name"], gestures[200683]["classification"], 200683)) + .place_locked_item(self.create_item("TELEDENUDATE")) self.multiworld.get_location("New Muldul: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200679]["name"], gestures[200679]["classification"], 200679)) + .place_locked_item(self.create_item("SOUL CRISPER")) self.multiworld.get_location("Viewax's Edifice: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200680]["name"], gestures[200680]["classification"], 200680)) + .place_locked_item(self.create_item("TIME SIGIL")) self.multiworld.get_location("TV Island: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200681]["name"], gestures[200681]["classification"], 200681)) + .place_locked_item(self.create_item("CHARGE UP")) self.multiworld.get_location("Juice Ranch: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200682]["name"], gestures[200682]["classification"], 200682)) + .place_locked_item(self.create_item("FATE SANDBOX")) self.multiworld.get_location("Foglast: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200684]["name"], gestures[200684]["classification"], 200684)) + .place_locked_item(self.create_item("LINK MOLLUSC")) self.multiworld.get_location("Drill Castle: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200688]["name"], gestures[200688]["classification"], 200688)) + .place_locked_item(self.create_item("NEMATODE INTERFACE")) self.multiworld.get_location("Sage Airship: TV", self.player)\ - .place_locked_item(self.add_item(gestures[200685]["name"], gestures[200685]["classification"], 200685)) + .place_locked_item(self.create_item("BOMBO - GENESIS")) elif self.multiworld.gesture_shuffle[self.player] == 1: # TVs only - gestures = list(Items.gesture_item_table.items()) - tvs = list(Locations.tv_location_table.items()) + gestures = [gesture["name"] for gesture in Items.gesture_item_table.values()] + tvs = [tv["name"] for tv in Locations.tv_location_table.values()] # if Extra Items in Logic is enabled place CHARGE UP first and make sure it doesn't get # placed at Sage Airship: TV or Foglast: TV if self.multiworld.extra_items_in_logic[self.player]: - tv = self.multiworld.random.choice(tvs) - gest = gestures.index((200681, Items.gesture_item_table[200681])) - while tv[1]["name"] == "Sage Airship: TV" or tv[1]["name"] == "Foglast: TV": - tv = self.multiworld.random.choice(tvs) - self.multiworld.get_location(tv[1]["name"], self.player)\ - .place_locked_item(self.add_item(gestures[gest][1]["name"], gestures[gest][1]["classification"], - gestures[gest])) - gestures.remove(gestures[gest]) + tv = self.random.choice(tvs) + while tv == "Sage Airship: TV" or tv == "Foglast: TV": + tv = self.random.choice(tvs) + self.multiworld.get_location(tv, self.player)\ + .place_locked_item(self.create_item("CHARGE UP")) + gestures.remove("CHARGE UP") tvs.remove(tv) - for i in range(len(gestures)): - gest = self.multiworld.random.choice(gestures) - tv = self.multiworld.random.choice(tvs) - self.multiworld.get_location(tv[1]["name"], self.player)\ - .place_locked_item(self.add_item(gest[1]["name"], gest[1]["classification"], gest[0])) - gestures.remove(gest) - tvs.remove(tv) + self.random.shuffle(gestures) + self.random.shuffle(tvs) + while gestures: + gesture = gestures.pop() + tv = tvs.pop() + self.get_location(tv).place_locked_item(self.create_item(gesture)) def fill_slot_data(self) -> Dict[str, Any]: