about summary refs log tree commit diff stats
path: root/apworld/client
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-27 17:14:40 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-27 17:14:40 -0400
commitb0f474bee1c8e1111f7542bf4985136d9aedf340 (patch)
treeef2aa34bad532ffb2a45d90893dbcd4c378a0dfb /apworld/client
parentfeb89a44ddf5f93bc476ca29cd02257aea47dc06 (diff)
downloadlingo2-archipelago-b0f474bee1c8e1111f7542bf4985136d9aedf340.tar.gz
lingo2-archipelago-b0f474bee1c8e1111f7542bf4985136d9aedf340.tar.bz2
lingo2-archipelago-b0f474bee1c8e1111f7542bf4985136d9aedf340.zip
Treat local letters as items for tracker
Local letters are now synced with datastorage, so they transfer to other computers like regular items would, and the tracker also now waits until you collect local letters before showing what they give you in logic.
Diffstat (limited to 'apworld/client')
-rw-r--r--apworld/client/client.gd25
-rw-r--r--apworld/client/gamedata.gd7
-rw-r--r--apworld/client/keyboard.gd36
-rw-r--r--apworld/client/manager.gd1
4 files changed, 54 insertions, 15 deletions
diff --git a/apworld/client/client.gd b/apworld/client/client.gd index 286ad4b..3d4096f 100644 --- a/apworld/client/client.gd +++ b/apworld/client/client.gd
@@ -33,6 +33,7 @@ signal item_sent_notification(message)
33signal hint_received(message) 33signal hint_received(message)
34signal accessible_locations_updated 34signal accessible_locations_updated
35signal checked_locations_updated 35signal checked_locations_updated
36signal keyboard_update_received
36 37
37 38
38func _init(): 39func _init():
@@ -157,6 +158,13 @@ func _on_web_socket_server_message_received(_peer_id: int, packet: String) -> vo
157 158
158 accessible_locations_updated.emit() 159 accessible_locations_updated.emit()
159 160
161 elif cmd == "UpdateKeyboard":
162 var updates = {}
163 for k in message["updates"]:
164 updates[k] = int(message["updates"][k])
165
166 keyboard_update_received.emit(updates)
167
160 168
161func connectToServer(server, un, pw): 169func connectToServer(server, un, pw):
162 sendMessage([{"cmd": "Connect", "server": server, "player": un, "password": pw}]) 170 sendMessage([{"cmd": "Connect", "server": server, "player": un, "password": pw}])
@@ -202,19 +210,6 @@ func sendLocations(loc_ids):
202 sendMessage([{"cmd": "LocationChecks", "locations": loc_ids}]) 210 sendMessage([{"cmd": "LocationChecks", "locations": loc_ids}])
203 211
204 212
205func setValue(key, value, operation = "replace"):
206 sendMessage(
207 [
208 {
209 "cmd": "Set",
210 "key": "Lingo2_%d_%s" % [_slot, key],
211 "want_reply": false,
212 "operations": [{"operation": operation, "value": value}]
213 }
214 ]
215 )
216
217
218func say(textdata): 213func say(textdata):
219 sendMessage([{"cmd": "Say", "text": textdata}]) 214 sendMessage([{"cmd": "Say", "text": textdata}])
220 215
@@ -227,6 +222,10 @@ func scoutLocations(loc_ids):
227 sendMessage([{"cmd": "LocationScouts", "locations": loc_ids}]) 222 sendMessage([{"cmd": "LocationScouts", "locations": loc_ids}])
228 223
229 224
225func updateKeyboard(updates):
226 sendMessage([{"cmd": "UpdateKeyboard", "keyboard": updates}])
227
228
230func sendQuit(): 229func sendQuit():
231 sendMessage([{"cmd": "Quit"}]) 230 sendMessage([{"cmd": "Quit"}])
232 231
diff --git a/apworld/client/gamedata.gd b/apworld/client/gamedata.gd index 39e0583..13ec568 100644 --- a/apworld/client/gamedata.gd +++ b/apworld/client/gamedata.gd
@@ -161,6 +161,13 @@ func get_door_ap_id(door_id):
161 return null 161 return null
162 162
163 163
164func get_door_map_name(door_id):
165 var door = objects.get_doors()[door_id]
166 var room = objects.get_rooms()[door.get_room_id()]
167 var map = objects.get_maps()[room.get_map_id()]
168 return map.get_name()
169
170
164func get_door_receivers(door_id): 171func get_door_receivers(door_id):
165 var door = objects.get_doors()[door_id] 172 var door = objects.get_doors()[door_id]
166 return door.get_receivers() 173 return door.get_receivers()
diff --git a/apworld/client/keyboard.gd b/apworld/client/keyboard.gd index 450566d..a59c4d0 100644 --- a/apworld/client/keyboard.gd +++ b/apworld/client/keyboard.gd
@@ -48,6 +48,9 @@ func load_seed():
48 if localdata.size() > 2: 48 if localdata.size() > 2:
49 keyholder_state = localdata[2] 49 keyholder_state = localdata[2]
50 50
51 if not letters_saved.is_empty():
52 ap.client.updateKeyboard(letters_saved)
53
51 for k in kALL_LETTERS: 54 for k in kALL_LETTERS:
52 var level = 0 55 var level = 0
53 56
@@ -105,10 +108,20 @@ func update_unlocks():
105 108
106 109
107func collect_local_letter(key, level): 110func collect_local_letter(key, level):
108 if level < 0 or level > 2 or level < letters_saved.get(key, 0): 111 var ap = global.get_node("Archipelago")
112 var true_level = 0
113
114 if ap.get_letter_behavior(key, false) == ap.kLETTER_BEHAVIOR_VANILLA:
115 true_level += 1
116 if level == 2 and ap.get_letter_behavior(key, true) == ap.kLETTER_BEHAVIOR_VANILLA:
117 true_level += 1
118
119 if true_level < letters_saved.get(key, 0):
109 return 120 return
110 121
111 letters_saved[key] = level 122 letters_saved[key] = true_level
123
124 ap.client.updateKeyboard({key: true_level})
112 125
113 if letters_blocked.has(key): 126 if letters_blocked.has(key):
114 letters_blocked.erase(key) 127 letters_blocked.erase(key)
@@ -197,3 +210,22 @@ func reset_keyholders():
197 save() 210 save()
198 211
199 return cleared_anything 212 return cleared_anything
213
214
215func remote_keyboard_updated(updates):
216 var reverse = {}
217 var should_update = false
218
219 for k in updates:
220 if not letters_saved.has(k) or updates[k] > letters_saved[k]:
221 letters_saved[k] = updates[k]
222 should_update = true
223 elif updates[k] < letters_saved[k]:
224 reverse[k] = letters_saved[k]
225
226 if should_update:
227 update_unlocks()
228
229 if not reverse.is_empty():
230 var ap = global.get_node("Archipelago")
231 ap.client.updateKeyboard(reverse)
diff --git a/apworld/client/manager.gd b/apworld/client/manager.gd index e7765dd..afa3ebe 100644 --- a/apworld/client/manager.gd +++ b/apworld/client/manager.gd
@@ -118,6 +118,7 @@ func _ready():
118 118
119 keyboard = SCRIPT_keyboard.new() 119 keyboard = SCRIPT_keyboard.new()
120 add_child(keyboard) 120 add_child(keyboard)
121 client.keyboard_update_received.connect(keyboard.remote_keyboard_updated)
121 122
122 123
123func saveSettings(): 124func saveSettings():