From d79984b099c3f762b95d3b4257bef113d3a8d6ee Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 7 Sep 2025 15:42:00 -0400 Subject: Added door groups --- apworld/player_logic.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) (limited to 'apworld/player_logic.py') diff --git a/apworld/player_logic.py b/apworld/player_logic.py index 5cb9011..ce9a4e5 100644 --- a/apworld/player_logic.py +++ b/apworld/player_logic.py @@ -123,16 +123,39 @@ class Lingo2PlayerLogic: self.item_by_door[progressive.doors[i]] = (progressive.name, i + 1) self.real_items.append(progressive.name) + for door_group in world.static_logic.objects.door_groups: + if door_group.type == data_pb2.DoorGroupType.CONNECTOR and not self.world.options.shuffle_doors: + continue + + if (door_group.type == data_pb2.DoorGroupType.COLOR_CONNECTOR and + not self.world.options.shuffle_control_center_colors): + continue + + for door in door_group.doors: + self.item_by_door[door] = (door_group.name, 1) + + self.real_items.append(door_group.name) + # We iterate through the doors in two parts because it is essential that we determine which doors are shuffled # before we calculate any access requirements. for door in world.static_logic.objects.doors: - if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.ITEM_ONLY] and self.world.options.shuffle_doors: - if door.id in self.item_by_door: - continue + if door.type in [data_pb2.DoorType.EVENT, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]: + continue + + if door.id in self.item_by_door: + continue + + if (door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.ITEM_ONLY] and + not self.world.options.shuffle_doors): + continue + + if (door.type == data_pb2.DoorType.CONTROL_CENTER_COLOR and + not self.world.options.shuffle_control_center_colors): + continue - door_item_name = self.world.static_logic.get_door_item_name(door) - self.item_by_door[door.id] = (door_item_name, 1) - self.real_items.append(door_item_name) + door_item_name = self.world.static_logic.get_door_item_name(door) + self.item_by_door[door.id] = (door_item_name, 1) + self.real_items.append(door_item_name) for door in world.static_logic.objects.doors: if door.type in [data_pb2.DoorType.STANDARD, data_pb2.DoorType.LOCATION_ONLY, data_pb2.DoorType.GRAVESTONE]: -- cgit 1.4.1