From 1157a68696ba5766a8d134bac5904de8ede6680f Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 22 Sep 2025 12:07:02 -0400 Subject: [Client] Handle worldport shuffle --- client/Archipelago/manager.gd | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'client/Archipelago/manager.gd') diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 218870c..c804109 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -46,11 +46,13 @@ var apworld_version = [0, 0] var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 var daedalus_roof_access = false var keyholder_sanity = false +var port_pairings = {} var shuffle_control_center_colors = false var shuffle_doors = false var shuffle_gallery_paintings = false var shuffle_letters = kSHUFFLE_LETTERS_VANILLA var shuffle_symbols = false +var shuffle_worldports = false var strict_cyan_ending = false var strict_purple_ending = false var victory_condition = -1 @@ -380,6 +382,7 @@ func _client_connected(slot_data): shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false)) shuffle_letters = int(slot_data.get("shuffle_letters", 0)) shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) + shuffle_worldports = bool(slot_data.get("shuffle_worldports", false)) strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false)) strict_purple_ending = bool(slot_data.get("strict_purple_ending", false)) victory_condition = int(slot_data.get("victory_condition", 0)) @@ -387,6 +390,13 @@ func _client_connected(slot_data): if slot_data.has("version"): apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])] + port_pairings.clear() + if slot_data.has("port_pairings"): + var raw_pp = slot_data.get("port_pairings") + + for p1 in raw_pp.keys(): + port_pairings[int(p1)] = int(raw_pp[p1]) + # Set up item locks. _item_locks = {} @@ -404,12 +414,14 @@ func _client_connected(slot_data): _item_locks[door.get_id()] = [progressive.get_ap_id(), i + 1] for door_group in gamedata.objects.get_door_groups(): - if ( - door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR - or door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP - ): - for door in door_group.get_doors(): - _item_locks[door] = [door_group.get_ap_id(), 1] + if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR: + if shuffle_worldports: + continue + elif door_group.get_type() != gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP: + continue + + for door in door_group.get_doors(): + _item_locks[door] = [door_group.get_ap_id(), 1] if shuffle_control_center_colors: for door in gamedata.objects.get_doors(): @@ -417,7 +429,10 @@ func _client_connected(slot_data): _item_locks[door.get_id()] = [door.get_ap_id(), 1] for door_group in gamedata.objects.get_door_groups(): - if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR: + if ( + door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR + and not shuffle_worldports + ): for door in door_group.get_doors(): _item_locks[door] = [door_group.get_ap_id(), 1] -- cgit 1.4.1