From f4a383ae208da8363ef9ffad7763e0853e02a678 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 29 Aug 2025 12:07:56 -0400 Subject: [Client] Various fixes - Locations count puzzles in a map that are already solved. - Item-controlled paintings, animation listeners, and teleport listeners are handled properly. --- client/Archipelago/animationListener.gd | 38 +++++++++++++++++++++++++++++++++ client/Archipelago/manager.gd | 10 ++++----- client/Archipelago/painting.gd | 16 +++++++------- client/Archipelago/saver.gd | 5 +++++ client/Archipelago/settings_screen.gd | 7 ++++++ client/Archipelago/teleportListener.gd | 38 +++++++++++++++++++++++++++++++++ 6 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 client/Archipelago/animationListener.gd create mode 100644 client/Archipelago/saver.gd create mode 100644 client/Archipelago/teleportListener.gd diff --git a/client/Archipelago/animationListener.gd b/client/Archipelago/animationListener.gd new file mode 100644 index 0000000..f1fb5fb --- /dev/null +++ b/client/Archipelago/animationListener.gd @@ -0,0 +1,38 @@ +extends "res://scripts/nodes/listeners/animationListener.gd" + +var item_id + + +func _ready(): + var node_path = String( + get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names() + ) + + print("node: %s" % node_path) + + var gamedata = global.get_node("Gamedata") + var door_id = gamedata.get_door_for_map_node_path(global.map, node_path) + if door_id != null: + print("door_id: %d" % door_id) + + var ap = global.get_node("Archipelago") + item_id = ap.get_item_id_for_door(door_id) + + if item_id != null: + self.senders = [] + self.senderGroup = [] + self.nested = false + self.complete_at = 0 + self.max_length = 0 + self.excludeSenders = [] + + call_deferred("_readier") + + super._ready() + + +func _readier(): + var ap = global.get_node("Archipelago") + + if ap.has_item(item_id): + handleTriggered() diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 99cb47b..d950cd6 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -90,11 +90,11 @@ func _process_item(item, index, from, flags): var rnode = scene.get_node_or_null(receiver) if rnode != null: rnode.handleTriggered() - for painting_id in gamedata.objects.get_doors()[door_id].get_move_paintings(): - var painting = gamedata.objects.get_paintings()[painting_id] - var pnode = scene.get_node_or_null(painting.get_path() + "/teleportListener") - if pnode != null: - pnode.handleTriggered() + #for painting_id in gamedata.objects.get_doors()[door_id].get_move_paintings(): + # var painting = gamedata.objects.get_paintings()[painting_id] + # var pnode = scene.get_node_or_null(painting.get_path() + "/teleportListener") + # if pnode != null: + # pnode.handleTriggered() # Show a message about the item if it's new. if index != null and index > _last_new_item: diff --git a/client/Archipelago/painting.gd b/client/Archipelago/painting.gd index 17baeb5..6b3de0b 100644 --- a/client/Archipelago/painting.gd +++ b/client/Archipelago/painting.gd @@ -15,17 +15,17 @@ func _ready(): if door_id != null: print("door_id: %d" % door_id) - self.senders = [] - self.senderGroup = [] - self.nested = false - self.complete_at = 0 - self.max_length = 0 - self.excludeSenders = [] - var ap = global.get_node("Archipelago") item_id = ap.get_item_id_for_door(door_id) if item_id != null: + self.senders = [] + self.senderGroup = [] + self.nested = false + self.complete_at = 0 + self.max_length = 0 + self.excludeSenders = [] + call_deferred("_readier") super._ready() @@ -35,4 +35,4 @@ func _readier(): var ap = global.get_node("Archipelago") if ap.has_item(item_id): - $teleportListener.handleTriggered() + handleTriggered() diff --git a/client/Archipelago/saver.gd b/client/Archipelago/saver.gd new file mode 100644 index 0000000..7e788a8 --- /dev/null +++ b/client/Archipelago/saver.gd @@ -0,0 +1,5 @@ +extends "res://scripts/nodes/saver.gd" + + +func levelLoaded(): + reload.call_deferred() diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index a675f8e..5a4a76d 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -36,9 +36,12 @@ func _ready(): global.add_child(ap_instance) # Let's also inject any scripts we need to inject now. + installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) + installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd")) + installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd")) var proto_script = load("user://maps/Archipelago/generated/proto.gd") var gamedata_script = load("user://maps/Archipelago/gamedata.gd") @@ -138,8 +141,12 @@ func connectionSuccessful(): unlocks.loadData() unlocks.unlockKey("capslock", 1) + clearResourceCache("res://objects/meshes/gridDoor.tscn") clearResourceCache("res://objects/nodes/door.tscn") + clearResourceCache("res://objects/nodes/listeners/animationListener.tscn") + clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn") clearResourceCache("res://objects/nodes/player.tscn") + clearResourceCache("res://objects/nodes/saver.tscn") var paintings_dir = DirAccess.open("res://objects/meshes/paintings") if paintings_dir: diff --git a/client/Archipelago/teleportListener.gd b/client/Archipelago/teleportListener.gd new file mode 100644 index 0000000..4bb08c9 --- /dev/null +++ b/client/Archipelago/teleportListener.gd @@ -0,0 +1,38 @@ +extends "res://scripts/nodes/listeners/teleportListener.gd" + +var item_id + + +func _ready(): + var node_path = String( + get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names() + ) + + print("node: %s" % node_path) + + var gamedata = global.get_node("Gamedata") + var door_id = gamedata.get_door_for_map_node_path(global.map, node_path) + if door_id != null: + print("door_id: %d" % door_id) + + var ap = global.get_node("Archipelago") + item_id = ap.get_item_id_for_door(door_id) + + if item_id != null: + self.senders = [] + self.senderGroup = [] + self.nested = false + self.complete_at = 0 + self.max_length = 0 + self.excludeSenders = [] + + call_deferred("_readier") + + super._ready() + + +func _readier(): + var ap = global.get_node("Archipelago") + + if ap.has_item(item_id): + handleTriggered() -- cgit 1.4.1