From c5edb28bd91936ede3c7d31a9d934ef5428fba40 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 2 Sep 2025 14:50:55 -0400 Subject: [Client] Handle keyholder sanity --- client/Archipelago/manager.gd | 6 ++++-- client/Archipelago/player.gd | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) (limited to 'client') diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 0186a09..3aa3c50 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -20,8 +20,9 @@ var _batch_locations = false var _held_locations = [] var _item_locks = {} -var victory_condition = -1 +var keyholder_sanity = false var shuffle_doors = false +var victory_condition = -1 signal could_not_connect signal connect_status @@ -288,8 +289,9 @@ func _client_connected(slot_data): _last_new_item = localdata[0] # Read slot data. - victory_condition = int(slot_data.get("victory_condition", 0)) + keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) shuffle_doors = bool(slot_data.get("shuffle_doors", false)) + victory_condition = int(slot_data.get("victory_condition", 0)) # Set up item locks. _item_locks = {} diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index 7a1f5db..93eb14f 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd @@ -114,6 +114,30 @@ func _ready(): get_parent().add_child.call_deferred(victoryListener) + # Set up keyholder locations, in keyholder sanity. + if ap.keyholder_sanity: + for keyholder in gamedata.objects.get_keyholders(): + if not keyholder.has_key(): + continue + + var room = gamedata.objects.get_rooms()[keyholder.get_room_id()] + if room.get_map_id() != map_id: + continue + + var locationListener = ap.SCRIPT_locationListener.new() + locationListener.location_id = keyholder.get_ap_id() + locationListener.name = "locationListener_%d" % keyholder.get_ap_id() + + var khl = khl_script.new() + khl.name = "location_%d_keyholder" % keyholder.get_ap_id() + khl.answer = keyholder.get_key() + khl.senders.append(NodePath("/root/scene/" + keyholder.get_path())) + get_parent().add_child.call_deferred(khl) + + locationListener.senders.append(NodePath("../" + khl.name)) + + get_parent().add_child.call_deferred(locationListener) + # Block off roof access in Daedalus. if global.map == "daedalus": _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) -- cgit 1.4.1