diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-27 21:06:32 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-27 21:06:32 -0400 |
| commit | 53e0509fcb20cc824e3fe5b3d3a826f09fc9c166 (patch) | |
| tree | d83573fe2209122cc1c87d0a60ab22e6b20d4ec9 /apworld/client | |
| parent | b0f474bee1c8e1111f7542bf4985136d9aedf340 (diff) | |
| download | lingo2-archipelago-53e0509fcb20cc824e3fe5b3d3a826f09fc9c166.tar.gz lingo2-archipelago-53e0509fcb20cc824e3fe5b3d3a826f09fc9c166.tar.bz2 lingo2-archipelago-53e0509fcb20cc824e3fe5b3d3a826f09fc9c166.zip | |
Treat worldports as items for tracker
Diffstat (limited to 'apworld/client')
| -rw-r--r-- | apworld/client/client.gd | 23 | ||||
| -rw-r--r-- | apworld/client/gamedata.gd | 5 | ||||
| -rw-r--r-- | apworld/client/manager.gd | 8 | ||||
| -rw-r--r-- | apworld/client/textclient.gd | 5 | ||||
| -rw-r--r-- | apworld/client/worldport.gd | 10 |
5 files changed, 50 insertions, 1 deletions
| diff --git a/apworld/client/client.gd b/apworld/client/client.gd index 3d4096f..a23e85a 100644 --- a/apworld/client/client.gd +++ b/apworld/client/client.gd | |||
| @@ -18,10 +18,12 @@ var _seed = "" | |||
| 18 | var _team = 0 | 18 | var _team = 0 |
| 19 | var _slot = 0 | 19 | var _slot = 0 |
| 20 | var _checked_locations = [] | 20 | var _checked_locations = [] |
| 21 | var _checked_worldports = [] | ||
| 21 | var _received_indexes = [] | 22 | var _received_indexes = [] |
| 22 | var _received_items = {} | 23 | var _received_items = {} |
| 23 | var _slot_data = {} | 24 | var _slot_data = {} |
| 24 | var _accessible_locations = [] | 25 | var _accessible_locations = [] |
| 26 | var _accessible_worldports = [] | ||
| 25 | 27 | ||
| 26 | signal could_not_connect | 28 | signal could_not_connect |
| 27 | signal connect_status | 29 | signal connect_status |
| @@ -33,6 +35,7 @@ signal item_sent_notification(message) | |||
| 33 | signal hint_received(message) | 35 | signal hint_received(message) |
| 34 | signal accessible_locations_updated | 36 | signal accessible_locations_updated |
| 35 | signal checked_locations_updated | 37 | signal checked_locations_updated |
| 38 | signal checked_worldports_updated | ||
| 36 | signal keyboard_update_received | 39 | signal keyboard_update_received |
| 37 | 40 | ||
| 38 | 41 | ||
| @@ -55,7 +58,9 @@ func _reset_state(): | |||
| 55 | _should_process = false | 58 | _should_process = false |
| 56 | _received_items = {} | 59 | _received_items = {} |
| 57 | _received_indexes = [] | 60 | _received_indexes = [] |
| 61 | _checked_worldports = [] | ||
| 58 | _accessible_locations = [] | 62 | _accessible_locations = [] |
| 63 | _accessible_worldports = [] | ||
| 59 | 64 | ||
| 60 | 65 | ||
| 61 | func disconnect_from_ap(): | 66 | func disconnect_from_ap(): |
| @@ -117,6 +122,14 @@ func _on_web_socket_server_message_received(_peer_id: int, packet: String) -> vo | |||
| 117 | 122 | ||
| 118 | checked_locations_updated.emit() | 123 | checked_locations_updated.emit() |
| 119 | 124 | ||
| 125 | elif cmd == "UpdateWorldports": | ||
| 126 | for port_id in message["worldports"]: | ||
| 127 | var lint = int(port_id) | ||
| 128 | if not _checked_worldports.has(lint): | ||
| 129 | _checked_worldports.append(lint) | ||
| 130 | |||
| 131 | checked_worldports_updated.emit() | ||
| 132 | |||
| 120 | elif cmd == "ItemReceived": | 133 | elif cmd == "ItemReceived": |
| 121 | for item in message["items"]: | 134 | for item in message["items"]: |
| 122 | var index = int(item["index"]) | 135 | var index = int(item["index"]) |
| @@ -152,10 +165,15 @@ func _on_web_socket_server_message_received(_peer_id: int, packet: String) -> vo | |||
| 152 | 165 | ||
| 153 | elif cmd == "AccessibleLocations": | 166 | elif cmd == "AccessibleLocations": |
| 154 | _accessible_locations.clear() | 167 | _accessible_locations.clear() |
| 168 | _accessible_worldports.clear() | ||
| 155 | 169 | ||
| 156 | for loc in message["locations"]: | 170 | for loc in message["locations"]: |
| 157 | _accessible_locations.append(int(loc)) | 171 | _accessible_locations.append(int(loc)) |
| 158 | 172 | ||
| 173 | if "worldports" in message: | ||
| 174 | for port_id in message["worldports"]: | ||
| 175 | _accessible_worldports.append(int(port_id)) | ||
| 176 | |||
| 159 | accessible_locations_updated.emit() | 177 | accessible_locations_updated.emit() |
| 160 | 178 | ||
| 161 | elif cmd == "UpdateKeyboard": | 179 | elif cmd == "UpdateKeyboard": |
| @@ -226,6 +244,11 @@ func updateKeyboard(updates): | |||
| 226 | sendMessage([{"cmd": "UpdateKeyboard", "keyboard": updates}]) | 244 | sendMessage([{"cmd": "UpdateKeyboard", "keyboard": updates}]) |
| 227 | 245 | ||
| 228 | 246 | ||
| 247 | func checkWorldport(port_id): | ||
| 248 | if not _checked_worldports.has(port_id): | ||
| 249 | sendMessage([{"cmd": "CheckWorldport", "port_id": port_id}]) | ||
| 250 | |||
| 251 | |||
| 229 | func sendQuit(): | 252 | func sendQuit(): |
| 230 | sendMessage([{"cmd": "Quit"}]) | 253 | sendMessage([{"cmd": "Quit"}]) |
| 231 | 254 | ||
| diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 13ec568..e44fa17 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd | |||
| @@ -173,6 +173,11 @@ func get_door_receivers(door_id): | |||
| 173 | return door.get_receivers() | 173 | return door.get_receivers() |
| 174 | 174 | ||
| 175 | 175 | ||
| 176 | func get_worldport_display_name(port_id): | ||
| 177 | var port = objects.get_ports()[port_id] | ||
| 178 | return "%s - %s (Worldport)" % [_get_room_object_map_name(port), port.get_name()] | ||
| 179 | |||
| 180 | |||
| 176 | func _get_map_object_map_name(obj): | 181 | func _get_map_object_map_name(obj): |
| 177 | return objects.get_maps()[obj.get_map_id()].get_display_name() | 182 | return objects.get_maps()[obj.get_map_id()].get_display_name() |
| 178 | 183 | ||
| diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index afa3ebe..3facfba 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd | |||
| @@ -109,6 +109,7 @@ func _ready(): | |||
| 109 | client.hint_received.connect(_process_hint_received) | 109 | client.hint_received.connect(_process_hint_received) |
| 110 | client.accessible_locations_updated.connect(_on_accessible_locations_updated) | 110 | client.accessible_locations_updated.connect(_on_accessible_locations_updated) |
| 111 | client.checked_locations_updated.connect(_on_checked_locations_updated) | 111 | client.checked_locations_updated.connect(_on_checked_locations_updated) |
| 112 | client.checked_worldports_updated.connect(_on_checked_worldports_updated) | ||
| 112 | 113 | ||
| 113 | client.could_not_connect.connect(_client_could_not_connect) | 114 | client.could_not_connect.connect(_client_could_not_connect) |
| 114 | client.connect_status.connect(_client_connect_status) | 115 | client.connect_status.connect(_client_connect_status) |
| @@ -195,6 +196,7 @@ func _process_item(item, amount): | |||
| 195 | if gamedata.get_door_map_name(lock[0]) != global.map: | 196 | if gamedata.get_door_map_name(lock[0]) != global.map: |
| 196 | continue | 197 | continue |
| 197 | 198 | ||
| 199 | # TODO: fix doors opening from door groups | ||
| 198 | var receivers = gamedata.get_door_receivers(lock[0]) | 200 | var receivers = gamedata.get_door_receivers(lock[0]) |
| 199 | var scene = get_tree().get_root().get_node_or_null("scene") | 201 | var scene = get_tree().get_root().get_node_or_null("scene") |
| 200 | if scene != null: | 202 | if scene != null: |
| @@ -327,6 +329,12 @@ func _on_checked_locations_updated(): | |||
| 327 | textclient_node.update_locations() | 329 | textclient_node.update_locations() |
| 328 | 330 | ||
| 329 | 331 | ||
| 332 | func _on_checked_worldports_updated(): | ||
| 333 | var textclient_node = global.get_node("Textclient") | ||
| 334 | if textclient_node != null: | ||
| 335 | textclient_node.update_locations() | ||
| 336 | |||
| 337 | |||
| 330 | func _client_could_not_connect(message): | 338 | func _client_could_not_connect(message): |
| 331 | could_not_connect.emit(message) | 339 | could_not_connect.emit(message) |
| 332 | 340 | ||
| diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd index 1b36c29..af155fb 100644 --- a/apworld/client/textclient.gd +++ b/apworld/client/textclient.gd | |||
| @@ -150,6 +150,11 @@ func update_locations(): | |||
| 150 | var location_name = gamedata.location_name_by_id.get(location_id, "(Unknown)") | 150 | var location_name = gamedata.location_name_by_id.get(location_id, "(Unknown)") |
| 151 | location_names.append(location_name) | 151 | location_names.append(location_name) |
| 152 | 152 | ||
| 153 | for port_id in ap.client._accessible_worldports: | ||
| 154 | if not ap.client._checked_worldports.has(port_id): | ||
| 155 | var port_name = gamedata.get_worldport_display_name(port_id) | ||
| 156 | location_names.append(port_name) | ||
| 157 | |||
| 153 | location_names.sort() | 158 | location_names.sort() |
| 154 | 159 | ||
| 155 | var count = 0 | 160 | var count = 0 |
| diff --git a/apworld/client/worldport.gd b/apworld/client/worldport.gd index cdca248..ed9891e 100644 --- a/apworld/client/worldport.gd +++ b/apworld/client/worldport.gd | |||
| @@ -3,6 +3,8 @@ extends "res://scripts/nodes/worldport.gd" | |||
| 3 | var absolute_rotation = false | 3 | var absolute_rotation = false |
| 4 | var target_rotation = 0 | 4 | var target_rotation = 0 |
| 5 | 5 | ||
| 6 | var port_id = null | ||
| 7 | |||
| 6 | 8 | ||
| 7 | func _ready(): | 9 | func _ready(): |
| 8 | var node_path = String( | 10 | var node_path = String( |
| @@ -13,7 +15,7 @@ func _ready(): | |||
| 13 | 15 | ||
| 14 | if ap.shuffle_worldports: | 16 | if ap.shuffle_worldports: |
| 15 | var gamedata = global.get_node("Gamedata") | 17 | var gamedata = global.get_node("Gamedata") |
| 16 | var port_id = gamedata.get_port_for_map_node_path(global.map, node_path) | 18 | port_id = gamedata.get_port_for_map_node_path(global.map, node_path) |
| 17 | if port_id != null: | 19 | if port_id != null: |
| 18 | if port_id in ap.port_pairings: | 20 | if port_id in ap.port_pairings: |
| 19 | var target_port = gamedata.objects.get_ports()[ap.port_pairings[port_id]] | 21 | var target_port = gamedata.objects.get_ports()[ap.port_pairings[port_id]] |
| @@ -29,6 +31,8 @@ func _ready(): | |||
| 29 | sets_entry_point = true | 31 | sets_entry_point = true |
| 30 | invisible = false | 32 | invisible = false |
| 31 | fades = true | 33 | fades = true |
| 34 | else: | ||
| 35 | port_id = null | ||
| 32 | 36 | ||
| 33 | if global.map == "icarus" and exit == "daedalus": | 37 | if global.map == "icarus" and exit == "daedalus": |
| 34 | if not ap.daedalus_roof_access: | 38 | if not ap.daedalus_roof_access: |
| @@ -39,6 +43,10 @@ func _ready(): | |||
| 39 | 43 | ||
| 40 | func bodyEntered(body): | 44 | func bodyEntered(body): |
| 41 | if body.is_in_group("player"): | 45 | if body.is_in_group("player"): |
| 46 | if port_id != null: | ||
| 47 | var ap = global.get_node("Archipelago") | ||
| 48 | ap.client.checkWorldport(port_id) | ||
| 49 | |||
| 42 | if absolute_rotation: | 50 | if absolute_rotation: |
| 43 | entry_rotate.y = target_rotation - body.rotation_degrees.y | 51 | entry_rotate.y = target_rotation - body.rotation_degrees.y |
| 44 | 52 | ||
