From 0049d2995ca09324a9c973460c0a4acf97eba907 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 23 Feb 2026 12:46:37 -0500 Subject: Add settings to prioritize locations on current map --- apworld/client/gamedata.gd | 27 +++++++++++++++++++++++++++ apworld/client/manager.gd | 5 +++++ apworld/client/pauseMenu.gd | 19 +++++++++++++++++++ apworld/client/player.gd | 3 +++ apworld/client/textclient.gd | 6 ++++++ 5 files changed, 60 insertions(+) diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 373f981..a2e023c 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd @@ -14,6 +14,7 @@ var letter_id_by_ap_id = {} var symbol_item_ids = [] var anti_trap_ids = {} var location_name_by_id = {} +var map_id_by_location_id = {} var ending_display_name_by_name = {} var port_id_by_ap_id = {} var map_id_by_rte_ap_id = {} @@ -84,6 +85,7 @@ func load(data_bytes): or door.get_type() == SCRIPT_proto.DoorType.GRAVESTONE ): location_name_by_id[door.get_ap_id()] = _get_door_location_name(door) + map_id_by_location_id[door.get_ap_id()] = map.get_id() for painting in objects.get_paintings(): var room = objects.get_rooms()[painting.get_room_id()] @@ -114,18 +116,30 @@ func load(data_bytes): letter_id_by_ap_id[letter.get_ap_id()] = letter.get_id() location_name_by_id[letter.get_ap_id()] = _get_letter_location_name(letter) + var room = objects.get_rooms()[letter.get_room_id()] + map_id_by_location_id[letter.get_ap_id()] = room.get_map_id() + for mastery in objects.get_masteries(): location_name_by_id[mastery.get_ap_id()] = _get_mastery_location_name(mastery) + var room = objects.get_rooms()[mastery.get_room_id()] + map_id_by_location_id[mastery.get_ap_id()] = room.get_map_id() + for ending in objects.get_endings(): var location_name = _get_ending_location_name(ending) location_name_by_id[ending.get_ap_id()] = location_name ending_display_name_by_name[ending.get_name()] = location_name + var room = objects.get_rooms()[ending.get_room_id()] + map_id_by_location_id[ending.get_ap_id()] = room.get_map_id() + for keyholder in objects.get_keyholders(): if keyholder.has_key(): location_name_by_id[keyholder.get_ap_id()] = _get_keyholder_location_name(keyholder) + var room = objects.get_rooms()[keyholder.get_room_id()] + map_id_by_location_id[keyholder.get_ap_id()] = room.get_map_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()] @@ -194,6 +208,19 @@ func get_worldport_display_name(port_id): return "%s - %s" % [_get_room_object_map_name(port), port.get_display_name()] +func get_map_name_for_location(location_id): + var map_id = map_id_by_location_id[location_id] + var map = objects.get_maps()[map_id] + return map.get_name() + + +func get_map_name_for_port(port_id): + var port = objects.get_ports()[port_id] + var room = objects.get_rooms()[port.get_room_id()] + var map = objects.get_maps()[room.get_map_id()] + return map.get_name() + + func _get_map_object_map_name(obj): return objects.get_maps()[obj.get_map_id()].get_display_name() diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index f10a0b7..9b790c0 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd @@ -14,6 +14,7 @@ var connection_history = [] var show_compass = false var show_locations = false var show_minimap = false +var prioritize_current_map = false var client var keyboard @@ -130,6 +131,9 @@ func _init(): if data.size() > 6: show_minimap = data[6] + if data.size() > 7: + prioritize_current_map = data[7] + # We need to create a mapping from material paths to the original colors of # those materials. We force reload the materials, overwriting any custom # textures, and create the mapping. We then reload the textures in case the @@ -185,6 +189,7 @@ func saveSettings(): show_compass, show_locations, show_minimap, + prioritize_current_map, ] file.store_var(data, true) file.close() diff --git a/apworld/client/pauseMenu.gd b/apworld/client/pauseMenu.gd index 72b45e8..50a1e99 100644 --- a/apworld/client/pauseMenu.gd +++ b/apworld/client/pauseMenu.gd @@ -3,6 +3,7 @@ extends "res://scripts/ui/pauseMenu.gd" var compass_button var locations_button var minimap_button +var prioritize_current_button func _ready(): @@ -39,6 +40,15 @@ func _ready(): minimap_button.pressed.connect(_toggle_minimap) ap_panel.add_child(minimap_button) + prioritize_current_button = CheckBox.new() + prioritize_current_button.text = "prioritize locations on current map" + prioritize_current_button.button_pressed = ap.prioritize_current_map + prioritize_current_button.position = Vector2(65, 400) + prioritize_current_button.theme = preload("res://assets/themes/baseUI.tres") + prioritize_current_button.add_theme_font_size_override("font_size", 60) + prioritize_current_button.pressed.connect(_toggle_prioritize_current) + ap_panel.add_child(prioritize_current_button) + super._ready() @@ -89,3 +99,12 @@ func _toggle_minimap(): var minimap = get_tree().get_root().get_node("scene/Minimap") if minimap != null: minimap.visible = ap.show_minimap + + +func _toggle_prioritize_current(): + var ap = global.get_node("Archipelago") + ap.prioritize_current_map = prioritize_current_button.button_pressed + ap.saveSettings() + + var textclient = global.get_node("Textclient") + textclient.update_locations() diff --git a/apworld/client/player.gd b/apworld/client/player.gd index dabc15d..dc05fc9 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd @@ -196,6 +196,9 @@ func _ready(): minimap.visible = ap.show_minimap get_parent().add_child.call_deferred(minimap) + var textclient = global.get_node("Textclient") + textclient.update_locations() + if ap.music_mapping.has(global.map): var song_setter = get_node_or_null("/root/scene/songSetter") if song_setter: diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd index ce28a3a..571f3d6 100644 --- a/apworld/client/textclient.gd +++ b/apworld/client/textclient.gd @@ -205,6 +205,7 @@ func update_locations(reset_locations = true): for location_id in ap.client._accessible_locations: if not ap.client._checked_locations.has(location_id): var location_name = gamedata.location_name_by_id.get(location_id, "(Unknown)") + var map_name = gamedata.get_map_name_for_location(location_id) ( locations . append( @@ -214,6 +215,7 @@ func update_locations(reset_locations = true): "id": location_id, "ignored": ap._ignored_locations.has(location_id), "hint": ap.client._hinted_locations.has(location_id), + "current": ap.prioritize_current_map and map_name == global.map, } ) ) @@ -221,6 +223,7 @@ func update_locations(reset_locations = true): for port_id in ap.client._accessible_worldports: if not ap.client._checked_worldports.has(port_id): var port_name = gamedata.get_worldport_display_name(port_id) + var map_name = gamedata.get_map_name_for_port(port_id) ( locations . append( @@ -230,6 +233,7 @@ func update_locations(reset_locations = true): "id": port_id, "ignored": false, "hint": false, + "current": ap.prioritize_current_map and map_name == global.map, } ) ) @@ -362,6 +366,8 @@ func _cmp_tracker_objects(a, b) -> bool: return !a["ignored"] elif a["hint"] != b["hint"]: return a["hint"] + elif a["current"] != b["current"]: + return a["current"] else: return a["name"] < b["name"] -- cgit 1.4.1