From 6d8b971e7824dd6486bb4cb5a0f72eda7c5e47d3 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 1 Aug 2023 17:11:10 -0400 Subject: Gamedata is generated from main AP yaml We now also include static data that was previously sent in slot data. --- Archipelago/client.gd | 49 +++++++++++---------------------------------- Archipelago/load.gd | 55 +++++++++++++++++++++++++++++---------------------- 2 files changed, 43 insertions(+), 61 deletions(-) (limited to 'Archipelago') diff --git a/Archipelago/client.gd b/Archipelago/client.gd index a816c42..a4ffb1b 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd @@ -73,12 +73,6 @@ var _players = [] var _player_name_by_slot = {} var _checked_locations = [] var _slot_data = {} -var _door_ids_by_item = {} -var _mentioned_doors = [] -var _painting_ids_by_item = {} -var _mentioned_paintings = [] -var _panel_ids_by_location = {} -var _paintings = {} var _paintings_mapping = {} var _localdata_file = "" var _death_link = false @@ -230,25 +224,6 @@ func _on_data(): for player in _players: _player_name_by_slot[player["slot"]] = player["alias"] - if _slot_data.has("door_ids_by_item_id"): - _door_ids_by_item = _slot_data["door_ids_by_item_id"] - - _mentioned_doors = [] - for item in _door_ids_by_item.values(): - for door in item: - _mentioned_doors.append(door) - if _slot_data.has("painting_ids_by_item_id"): - _painting_ids_by_item = _slot_data["painting_ids_by_item_id"] - - _mentioned_paintings = [] - for item in _painting_ids_by_item.values(): - for painting in item: - _mentioned_paintings.append(painting) - if _slot_data.has("panel_ids_by_location_id"): - _panel_ids_by_location = _slot_data["panel_ids_by_location_id"] - if _slot_data.has("paintings"): - _paintings = _slot_data["paintings"] - _death_link = _slot_data.has("death_link") and _slot_data["death_link"] if _death_link: sendConnectUpdate(["DeathLink"]) @@ -260,7 +235,7 @@ func _on_data(): if _slot_data.has("shuffle_doors"): _door_shuffle = (_slot_data["shuffle_doors"] > 0) if _slot_data.has("shuffle_paintings"): - _painting_shuffle = (_slot_data["shuffle_paintings"] > 0) + _painting_shuffle = _slot_data["shuffle_paintings"] if _slot_data.has("shuffle_panels"): _panel_shuffle = _slot_data["shuffle_panels"] if _slot_data.has("seed"): @@ -585,17 +560,21 @@ func processItem(item, index, from, flags): global._print(item) - var stringified = String(item) - if _door_ids_by_item.has(stringified): + var gamedata = $Gamedata + var item_name = "Unknown" + if _item_id_to_name.has(item): + item_name = _item_id_to_name[item] + + if gamedata.door_ids_by_item_id.has(item_name): var doorsNode = get_tree().get_root().get_node("Spatial/Doors") - for door_id in _door_ids_by_item[stringified]: + for door_id in gamedata.door_ids_by_item_id[item_name]: doorsNode.get_node(door_id).openDoor() - if _painting_ids_by_item.has(stringified): + if gamedata.painting_ids_by_item_id.has(item_name): var real_parent_node = get_tree().get_root().get_node("Spatial/Decorations/Paintings") var fake_parent_node = get_tree().get_root().get_node_or_null("Spatial/AP_Paintings") - for painting_id in _painting_ids_by_item[stringified]: + for painting_id in gamedata.painting_ids_by_item_id[item_name]: var painting_node = real_parent_node.get_node_or_null(painting_id) if painting_node != null: painting_node.movePainting() @@ -606,10 +585,6 @@ func processItem(item, index, from, flags): painting_node.get_node("Script").movePainting() # Handle progressive items. - var item_name = "Unknown" - if _item_id_to_name.has(item): - item_name = _item_id_to_name[item] - if item_name in progressive_items.keys(): if not item_name in _progressive_progress: _progressive_progress[item_name] = 0 @@ -659,11 +634,11 @@ func processItem(item, index, from, flags): func doorIsVanilla(door): - return !_mentioned_doors.has(door) + return !$Gamedata.mentioned_doors.has(door) func paintingIsVanilla(painting): - return !_mentioned_paintings.has(painting) + return !$Gamedata.mentioned_paintings.has(painting) func evaluateSolvability(): diff --git a/Archipelago/load.gd b/Archipelago/load.gd index 0157395..95f0fb8 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd @@ -93,27 +93,31 @@ func _load(): # This is the best time to create the location nodes, since the map is now # loaded but the panels haven't been solved from the save file yet. + var gamedata = apclient.get_node("Gamedata") var panels_parent = self.get_node("Panels") var location_script = ResourceLoader.load("user://maps/Archipelago/location.gd") - for location_id in apclient._panel_ids_by_location.keys(): - var location = location_script.new() - location.ap_id = int(location_id) - location.name = "AP_location_" + location.ap_id - self.add_child(location) - - var panels = apclient._panel_ids_by_location[String(location.ap_id)] - location.total = panels.size() - - for panel in panels: - var that_panel - if panel.begins_with("EndPanel"): - that_panel = self.get_node("Decorations").get_node(panel) - else: - that_panel = panels_parent.get_node(panel) - - that_panel.get_node("Viewport/GUI/Panel/TextEdit").connect( - "answer_correct", location, "handle_correct" - ) + for location_id in gamedata.panel_ids_by_location_id.keys(): + if apclient._location_name_to_id.has(location_id): + var location = location_script.new() + location.ap_id = int(apclient._location_name_to_id[location_id]) + location.name = "AP_location_%d" % location.ap_id + self.add_child(location) + + var panels = gamedata.panel_ids_by_location_id[location_id] + location.total = panels.size() + + for panel in panels: + var that_panel + if panel.begins_with("EndPanel"): + that_panel = self.get_node("Decorations").get_node(panel) + else: + that_panel = panels_parent.get_node(panel) + + that_panel.get_node("Viewport/GUI/Panel/TextEdit").connect( + "answer_correct", location, "handle_correct" + ) + else: + global._print("Could not find location ID for %s" % location_id) # HOT CRUSTS should be at eye-level, have a yellow block behind it, and # not vanish when solved. @@ -133,8 +137,6 @@ func _load(): var rng = RandomNumberGenerator.new() rng.seed = apclient._slot_seed - var gamedata = apclient.get_node("Gamedata") - # Remove opaque wall in front of FOURTH. set_gridmap_tile(-71.5, 1.5, -64.5, "MeshInstance18") @@ -309,7 +311,7 @@ func _load(): remaining.append(all_paintings[j]) all_paintings.remove(j) - for painting in apclient._paintings.keys(): + for painting in gamedata.paintings.keys(): if randomized.has(painting): continue @@ -364,7 +366,11 @@ func _load(): # disable them. var panel_script = ResourceLoader.load("user://maps/Archipelago/panel.gd") for panel in gamedata.panels: - var panel_node = panels_parent.get_node(panel["id"]) + var panel_node + if panel["id"].begins_with("EndPanel"): + panel_node = self.get_node("Decorations").get_node(panel["id"]) + else: + panel_node = panels_parent.get_node(panel["id"]) var script_instance = panel_script.new() script_instance.name = "AP_Panel" script_instance.data = panel @@ -445,7 +451,8 @@ func instantiate_painting(name, scene): var mps_inst = mypainting_script.new() mps_inst.set_name("Script") - var pconfig = apclient._paintings[name] + var gamedata = apclient.get_node("Gamedata") + var pconfig = gamedata.paintings[name] mps_inst.orientation = pconfig["orientation"] if pconfig["move"]: mps_inst.move = true -- cgit 1.4.1