From 7d19567f1ac1cf4fd6373303e0e767a8adeb89a7 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger <fefferburbia@gmail.com> Date: Thu, 13 Mar 2025 12:44:05 -0400 Subject: Sort panel solve index by location ID --- Archipelago/load.gd | 6 ++---- util/generate_gamedata.rb | 21 +++++++++++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/Archipelago/load.gd b/Archipelago/load.gd index 8510008..57c49a3 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd @@ -569,7 +569,6 @@ func _load(): # Attach a script to every panel so that we can do things like conditionally # disable them. var panel_script = apclient.SCRIPT_panel - var panel_index = 0 for panel in gamedata.panels: var panel_node if panel["id"].begins_with("EndPanel"): @@ -579,14 +578,13 @@ func _load(): var script_instance = panel_script.new() script_instance.name = "AP_Panel" script_instance.data = panel - script_instance.solve_index = panel_index + script_instance.solve_index = panel["solve_index"] if apclient._panel_door_shuffle and gamedata.mentioned_panels.has(panel["id"]): script_instance.locked = true panel_node.add_child(script_instance) apclient.connect("evaluate_solvability", script_instance, "evaluate_solvability") - apclient._panelsBySolveIndex[panel_index] = panel["id"] - panel_index += 1 + apclient._panelsBySolveIndex[panel["solve_index"]] = panel["id"] # Hook up the goal panel. if apclient._victory_condition == apclient.kTHE_MASTER: diff --git a/util/generate_gamedata.rb b/util/generate_gamedata.rb index 83099ad..7db06ca 100644 --- a/util/generate_gamedata.rb +++ b/util/generate_gamedata.rb @@ -30,10 +30,25 @@ mentioned_warps = Set[] painting_output = {} door_items_by_progressive_id = {} panel_items_by_progressive_id = {} +panel_location_ids = [] +solve_index_by_location = {} ids_config = YAML.load_file(idspath) - config = YAML.load_file(configpath) + +config.each do |room_name, room_data| + if room_data.include? "panels" + room_data["panels"].each do |panel_name, panel| + location_id = ids_config["panels"][room_name][panel_name] + panel_location_ids << location_id + end + end +end + +panel_location_ids.sort.each_with_index do |location_id, index| + solve_index_by_location[location_id] = index +end + config.each do |room_name, room_data| if room_data.include? "panels" room_data["panels"].each do |panel_name, panel| @@ -45,6 +60,7 @@ config.each do |room_name, room_data| ret = {} ret["id"] = "\"#{panel["id"]}\"" ret["loc"] = location_id + ret["solve_index"] = solve_index_by_location[location_id] if panel.include? "colors" if panel["colors"].kind_of? String ret["color"] = "[\"#{panel["colors"]}\"]" @@ -73,9 +89,6 @@ config.each do |room_name, room_data| if panel.include? "achievement" ret["achievement"] = "\"#{panel["achievement"]}\"" end - if panel.include? "hunt" and panel["hunt"] - ret["hunt"] = "true" - end panel_output << ret panel_ids_by_location_id[location_id] = [panel["id"]] -- cgit 1.4.1