From 2c6777b5004dcf27b603ec2b3a9545642ed908bd Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 9 Sep 2025 16:47:05 -0400 Subject: [Client] Handle symbol shuffle --- client/Archipelago/gamedata.gd | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'client/Archipelago/gamedata.gd') diff --git a/client/Archipelago/gamedata.gd b/client/Archipelago/gamedata.gd index f7a5d90..d8d16ed 100644 --- a/client/Archipelago/gamedata.gd +++ b/client/Archipelago/gamedata.gd @@ -5,15 +5,41 @@ var SCRIPT_proto var objects var door_id_by_map_node_path = {} var painting_id_by_map_node_path = {} +var panel_id_by_map_node_path = {} var door_id_by_ap_id = {} var map_id_by_name = {} var progressive_id_by_ap_id = {} var letter_id_by_ap_id = {} +var symbol_item_ids = [] + +var kSYMBOL_ITEMS func _init(proto_script): SCRIPT_proto = proto_script + kSYMBOL_ITEMS = { + SCRIPT_proto.PuzzleSymbol.SUN: "Sun Symbol", + SCRIPT_proto.PuzzleSymbol.SPARKLES: "Sparkles Symbol", + SCRIPT_proto.PuzzleSymbol.ZERO: "Zero Symbol", + SCRIPT_proto.PuzzleSymbol.EXAMPLE: "Example Symbol", + SCRIPT_proto.PuzzleSymbol.BOXES: "Boxes Symbol", + SCRIPT_proto.PuzzleSymbol.PLANET: "Planet Symbol", + SCRIPT_proto.PuzzleSymbol.PYRAMID: "Pyramid Symbol", + SCRIPT_proto.PuzzleSymbol.CROSS: "Cross Symbol", + SCRIPT_proto.PuzzleSymbol.SWEET: "Sweet Symbol", + SCRIPT_proto.PuzzleSymbol.GENDER: "Gender Symbol", + SCRIPT_proto.PuzzleSymbol.AGE: "Age Symbol", + SCRIPT_proto.PuzzleSymbol.SOUND: "Sound Symbol", + SCRIPT_proto.PuzzleSymbol.ANAGRAM: "Anagram Symbol", + SCRIPT_proto.PuzzleSymbol.JOB: "Job Symbol", + SCRIPT_proto.PuzzleSymbol.STARS: "Stars Symbol", + SCRIPT_proto.PuzzleSymbol.NULL: "Null Symbol", + SCRIPT_proto.PuzzleSymbol.EVAL: "Eval Symbol", + SCRIPT_proto.PuzzleSymbol.LINGO: "Lingo Symbol", + SCRIPT_proto.PuzzleSymbol.QUESTION: "Question Symbol", + } + func load(data_bytes): objects = SCRIPT_proto.AllObjects.new() @@ -58,6 +84,19 @@ func load(data_bytes): for letter in objects.get_letters(): letter_id_by_ap_id[letter.get_ap_id()] = letter.get_id() + for panel in objects.get_panels(): + var room = objects.get_rooms()[panel.get_room_id()] + var map = objects.get_maps()[room.get_map_id()] + + if not map.get_name() in panel_id_by_map_node_path: + panel_id_by_map_node_path[map.get_name()] = {} + + var map_data = panel_id_by_map_node_path[map.get_name()] + map_data[panel.get_path()] = panel.get_id() + + for symbol_name in kSYMBOL_ITEMS.values(): + symbol_item_ids.append(objects.get_special_ids()[symbol_name]) + func get_door_for_map_node_path(map_name, node_path): if not door_id_by_map_node_path.has(map_name): @@ -67,6 +106,14 @@ func get_door_for_map_node_path(map_name, node_path): return map_data.get(node_path, null) +func get_panel_for_map_node_path(map_name, node_path): + if not panel_id_by_map_node_path.has(map_name): + return null + + var map_data = panel_id_by_map_node_path[map_name] + return map_data.get(node_path, null) + + func get_door_ap_id(door_id): var door = objects.get_doors()[door_id] if door.has_ap_id(): -- cgit 1.4.1