about summary refs log tree commit diff stats
path: root/Archipelago
diff options
context:
space:
mode:
Diffstat (limited to 'Archipelago')
-rw-r--r--Archipelago/client.gd61
-rw-r--r--Archipelago/load.gd16
-rw-r--r--Archipelago/messages.gd35
3 files changed, 103 insertions, 9 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index e8f9bba..be0ef2d 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd
@@ -30,10 +30,12 @@ var _mentioned_doors = []
30var _painting_ids_by_item = {} 30var _painting_ids_by_item = {}
31var _mentioned_paintings = [] 31var _mentioned_paintings = []
32var _panel_ids_by_location = {} 32var _panel_ids_by_location = {}
33var _localdata_file = ""
33 34
34var _map_loaded = false 35var _map_loaded = false
35var _held_items = [] 36var _held_items = []
36var _held_locations = [] 37var _held_locations = []
38var _last_new_item = -1
37var _tower_floors = 0 39var _tower_floors = 0
38 40
39signal client_connected 41signal client_connected
@@ -135,6 +137,18 @@ func _on_data():
135 if _slot_data.has("panel_ids_by_location_id"): 137 if _slot_data.has("panel_ids_by_location_id"):
136 _panel_ids_by_location = _slot_data["panel_ids_by_location_id"] 138 _panel_ids_by_location = _slot_data["panel_ids_by_location_id"]
137 139
140 _localdata_file = "user://archipelago/%s_%d" % [_seed, _slot]
141 var ap_file = File.new()
142 if ap_file.file_exists(_localdata_file):
143 ap_file.open(_localdata_file, File.READ)
144 var localdata = ap_file.get_var(true)
145 ap_file.close()
146
147 if localdata.size() > 0:
148 _last_new_item = localdata[0]
149 else:
150 _last_new_item = -1
151
138 requestSync() 152 requestSync()
139 153
140 emit_signal("client_connected") 154 emit_signal("client_connected")
@@ -150,11 +164,19 @@ func _on_data():
150 _tower_floors = 0 164 _tower_floors = 0
151 _held_items = [] 165 _held_items = []
152 166
167 var i = 0
153 for item in message["items"]: 168 for item in message["items"]:
154 if _map_loaded: 169 if _map_loaded:
155 processItem(item["item"]) 170 processItem(item["item"], message["index"] + i, item["player"])
156 else: 171 else:
157 _held_items.append(item["item"]) 172 _held_items.append(
173 {
174 "item": item["item"],
175 "index": message["index"] + i,
176 "from": item["player"]
177 }
178 )
179 i += 1
158 180
159 181
160func _process(_delta): 182func _process(_delta):
@@ -181,6 +203,23 @@ func saveSettings():
181 file.close() 203 file.close()
182 204
183 205
206func saveLocaldata():
207 # Save the MW/slot specific settings to disk.
208 var dir = Directory.new()
209 var path = "user://archipelago"
210 if dir.dir_exists(path):
211 pass
212 else:
213 dir.make_dir(path)
214
215 var file = File.new()
216 file.open(_localdata_file, File.WRITE)
217
218 var data = [_last_new_item]
219 file.store_var(data, true)
220 file.close()
221
222
184func getSaveFileName(): 223func getSaveFileName():
185 return "zzAP_%s_%d" % [_seed, _slot] 224 return "zzAP_%s_%d" % [_seed, _slot]
186 225
@@ -229,6 +268,9 @@ func requestSync():
229func sendLocation(loc_id): 268func sendLocation(loc_id):
230 if _map_loaded: 269 if _map_loaded:
231 sendMessage([{"cmd": "LocationChecks", "locations": [loc_id]}]) 270 sendMessage([{"cmd": "LocationChecks", "locations": [loc_id]}])
271
272 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages")
273 messages_node.showMessage("Sent %d" % loc_id)
232 else: 274 else:
233 _held_locations.append(loc_id) 275 _held_locations.append(loc_id)
234 276
@@ -240,7 +282,7 @@ func completedGoal():
240func mapFinishedLoading(): 282func mapFinishedLoading():
241 if !_map_loaded: 283 if !_map_loaded:
242 for item in _held_items: 284 for item in _held_items:
243 processItem(item) 285 processItem(item["item"], item["index"], item["from"])
244 286
245 sendMessage([{"cmd": "LocationChecks", "locations": _held_locations}]) 287 sendMessage([{"cmd": "LocationChecks", "locations": _held_locations}])
246 288
@@ -249,7 +291,7 @@ func mapFinishedLoading():
249 _held_locations = [] 291 _held_locations = []
250 292
251 293
252func processItem(item): 294func processItem(item, index, from):
253 global._print(item) 295 global._print(item)
254 296
255 var stringified = String(item) 297 var stringified = String(item)
@@ -270,6 +312,17 @@ func processItem(item):
270 processItem(_item_name_to_id[subitem_name]) 312 processItem(_item_name_to_id[subitem_name])
271 _tower_floors += 1 313 _tower_floors += 1
272 314
315 # Show a message about the item if it's new.
316 if index > _last_new_item:
317 _last_new_item = index
318 saveLocaldata()
319
320 var messages_node = get_tree().get_root().get_node("Spatial/AP_Messages")
321 if from == _slot:
322 messages_node.showMessage("Found %d" % item)
323 else:
324 messages_node.showMessage("Received %d from %d" % [item, from])
325
273 326
274func doorIsVanilla(door): 327func doorIsVanilla(door):
275 return !_mentioned_doors.has(door) 328 return !_mentioned_doors.has(door)
diff --git a/Archipelago/load.gd b/Archipelago/load.gd index d17bfac..ca1269b 100644 --- a/Archipelago/load.gd +++ b/Archipelago/load.gd
@@ -38,11 +38,17 @@ func _load():
38 "answer_correct", location, "handle_correct" 38 "answer_correct", location, "handle_correct"
39 ) 39 )
40 40
41 # Hardcode THE END as the goal for now. 41 # Hardcode THE END as the goal for now.
42 var the_end = self.get_node("Decorations/EndPanel/Panel_end_end") 42 var the_end = self.get_node("Decorations/EndPanel/Panel_end_end")
43 the_end.get_node("Viewport/GUI/Panel/TextEdit").connect( 43 the_end.get_node("Viewport/GUI/Panel/TextEdit").connect(
44 "answer_correct", apclient, "completedGoal" 44 "answer_correct", apclient, "completedGoal"
45 ) 45 )
46
47 # Create the messages node.
48 var messages_script = ResourceLoader.load("user://maps/Archipelago/messages.gd")
49 var messages = messages_script.new()
50 messages.set_name("AP_Messages")
51 self.add_child(messages)
46 52
47 # Proceed with the rest of the load. 53 # Proceed with the rest of the load.
48 global._print("Hooked Load End") 54 global._print("Hooked Load End")
diff --git a/Archipelago/messages.gd b/Archipelago/messages.gd new file mode 100644 index 0000000..63ce182 --- /dev/null +++ b/Archipelago/messages.gd
@@ -0,0 +1,35 @@
1extends Node
2
3
4func _ready():
5 var label = Label.new()
6 label.set_name("label")
7 label.margin_right = 1920.0
8 label.margin_bottom = 1080.0 - 20
9 label.margin_left = 20.0
10 label.align = Label.ALIGN_LEFT
11 label.valign = Label.VALIGN_BOTTOM
12
13 var dynamic_font = DynamicFont.new()
14 dynamic_font.font_data = load("res://fonts/Lingo.ttf")
15 dynamic_font.size = 36
16 dynamic_font.outline_color = Color(0, 0, 0, 1)
17 dynamic_font.outline_size = 2
18 label.add_font_override("font", dynamic_font)
19
20 add_child(label)
21
22
23func showMessage(text):
24 var label = self.get_node("label")
25 if !label.text == "":
26 label.text += "\n"
27 label.text += text
28
29 yield(get_tree().create_timer(10.0), "timeout")
30
31 var newline = label.text.find("\n")
32 if newline == -1:
33 label.text = ""
34 else:
35 label.text = label.text.substr(newline + 1)