From a2abd188f762659c5e7595079d2925bc2869b455 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 7 Feb 2026 07:49:30 -0500 Subject: Clientside RTE shuffle --- apworld/client/rteMenu.gd | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'apworld/client/rteMenu.gd') diff --git a/apworld/client/rteMenu.gd b/apworld/client/rteMenu.gd index 5882d77..4b526cf 100644 --- a/apworld/client/rteMenu.gd +++ b/apworld/client/rteMenu.gd @@ -1,5 +1,7 @@ extends "res://scripts/ui/rteMenu.gd" +var buttons = [] + func _readier(): var ap = global.get_node("Archipelago") @@ -8,5 +10,57 @@ func _readier(): get_node("rte_daedalus").show() switcher.preload_map("res://objects/scenes/daedalus.tscn") + elif !ap.rte_mapping.is_empty(): + buttons = [$rte_the_plaza, $rte_the_gallery, $rte_daedalus, $rte_control_center] + for i in range(4): + buttons[i].name = "button_%d" % i + for i in range(4): + _setupButton(buttons[i], ap.rte_mapping[i]) + + refreshButtons() else: super()._readier() + + +func _setupButton(button, map_name): + switcher.preload_map("res://objects/scenes/%s.tscn" % map_name) + + button.hide() + button.text = map_name.replace("_", " ") + button.name = "rte_%s" % map_name + + var ap = global.get_node("Archipelago") + if ( + ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_VANILLA + and !unlocks.data.has("rte_%s" % map_name) + ): + unlocks.data["rte_%s" % map_name] = "" + + +func refreshButtons(): + var ap = global.get_node("Archipelago") + if ap.rte_mapping.is_empty(): + return + + for i in range(4): + if _shouldShowButton(ap.rte_mapping[i]): + buttons[i].show() + else: + buttons[i].hide() + + +func _shouldShowButton(map_name): + var ap = global.get_node("Archipelago") + + if ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_VANILLA: + return unlocks.data["rte_%s" % map_name] == "unlocked" + elif ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_UNLOCKED: + return true + elif ap.fast_travel_access == ap.kFAST_TRAVEL_ACCESS_ITEMS: + var gamedata = global.get_node("Gamedata") + var map_id = gamedata.map_id_by_name[map_name] + var rte_ap_id = gamedata.objects.get_maps()[map_id].get_rte_ap_id() + + return ap.client.hasItem(rte_ap_id) + + return false -- cgit 1.4.1