about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--client/Archipelago/door.gd8
-rw-r--r--client/Archipelago/manager.gd4
-rw-r--r--client/Archipelago/player.gd103
3 files changed, 115 insertions, 0 deletions
diff --git a/client/Archipelago/door.gd b/client/Archipelago/door.gd index fead818..49f5728 100644 --- a/client/Archipelago/door.gd +++ b/client/Archipelago/door.gd
@@ -28,6 +28,14 @@ func _ready():
28 28
29 call_deferred("_readier") 29 call_deferred("_readier")
30 30
31 if global.map == "the_sun_temple":
32 if name == "spe_EndPlatform" or name == "spe_entry_2":
33 senders = [NodePath("/root/scene/Panels/EndCheck_dog")]
34
35 if global.map == "the_parthenon":
36 if name == "spe_entry_1":
37 senders = [NodePath("/root/scene/Panels/EndCheck_dog")]
38
31 super._ready() 39 super._ready()
32 40
33 41
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 06ae7d9..e46e4f3 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd
@@ -50,6 +50,8 @@ var shuffle_doors = false
50var shuffle_gallery_paintings = false 50var shuffle_gallery_paintings = false
51var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 51var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
52var shuffle_symbols = false 52var shuffle_symbols = false
53var strict_cyan_ending = false
54var strict_purple_ending = false
53var victory_condition = -1 55var victory_condition = -1
54 56
55signal could_not_connect 57signal could_not_connect
@@ -373,6 +375,8 @@ func _client_connected(slot_data):
373 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false)) 375 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false))
374 shuffle_letters = int(slot_data.get("shuffle_letters", 0)) 376 shuffle_letters = int(slot_data.get("shuffle_letters", 0))
375 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) 377 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false))
378 strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false))
379 strict_purple_ending = bool(slot_data.get("strict_purple_ending", false))
376 victory_condition = int(slot_data.get("victory_condition", 0)) 380 victory_condition = int(slot_data.get("victory_condition", 0))
377 381
378 if slot_data.has("version"): 382 if slot_data.has("version"):
diff --git a/client/Archipelago/player.gd b/client/Archipelago/player.gd index f0b214f..583d5d6 100644 --- a/client/Archipelago/player.gd +++ b/client/Archipelago/player.gd
@@ -225,6 +225,109 @@ func _ready():
225 sign2.material = load("res://assets/materials/%s.material" % sign2_color) 225 sign2.material = load("res://assets/materials/%s.material" % sign2_color)
226 get_parent().add_child.call_deferred(sign2) 226 get_parent().add_child.call_deferred(sign2)
227 227
228 # Add the strict purple ending validation.
229 if global.map == "the_sun_temple" and ap.strict_purple_ending:
230 var panel_prefab = preload("res://objects/nodes/panel.tscn")
231 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
232 var reverse_prefab = preload("res://objects/nodes/listeners/reversingListener.tscn")
233
234 var previous_panel = null
235 var next_y = -100
236 var words = ["quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
237 for word in words:
238 var panel = panel_prefab.instantiate()
239 panel.position = Vector3(0, next_y, 0)
240 next_y -= 10
241 panel.clue = word
242 panel.symbol = ""
243 panel.answer = word
244 panel.name = "EndCheck_%s" % word
245
246 var tpl = tpl_prefab.instantiate()
247 tpl.teleport_point = Vector3(0, 1, 0)
248 tpl.teleport_rotate = Vector3(-45, 180, 0)
249 tpl.target_path = panel
250 tpl.name = "Teleport"
251
252 if previous_panel == null:
253 tpl.senders.append(NodePath("/root/scene/Panels/End/panel_24"))
254 else:
255 tpl.senders.append(NodePath("../../%s" % previous_panel.name))
256
257 var reversing = reverse_prefab.instantiate()
258 reversing.senders.append(NodePath(".."))
259 reversing.name = "Reversing"
260 tpl.senders.append(NodePath("../Reversing"))
261
262 panel.add_child.call_deferred(tpl)
263 panel.add_child.call_deferred(reversing)
264 get_parent().get_node("Panels").add_child.call_deferred(panel)
265
266 previous_panel = panel
267
268 # Duplicate the doors that usually wait on EQUINOX. We can't set the senders
269 # here for some reason so we actually set them in the door ready function.
270 var endplat = get_node("/root/scene/Components/Doors/EndPlatform")
271 var endplat2 = endplat.duplicate()
272 endplat2.name = "spe_EndPlatform"
273 endplat.get_parent().add_child.call_deferred(endplat2)
274 endplat.queue_free()
275
276 var entry2 = get_node("/root/scene/Components/Doors/entry_2")
277 var entry22 = entry2.duplicate()
278 entry22.name = "spe_entry_2"
279 entry2.get_parent().add_child.call_deferred(entry22)
280 entry2.queue_free()
281
282 # Add the strict cyan ending validation.
283 if global.map == "the_parthenon" and ap.strict_cyan_ending:
284 var panel_prefab = preload("res://objects/nodes/panel.tscn")
285 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
286 var reverse_prefab = preload("res://objects/nodes/listeners/reversingListener.tscn")
287
288 var previous_panel = null
289 var next_y = -100
290 var words = ["quick", "brown", "fox", "jumps", "over", "the", "lazy", "dog"]
291 for word in words:
292 var panel = panel_prefab.instantiate()
293 panel.position = Vector3(0, next_y, 0)
294 next_y -= 10
295 panel.clue = word
296 panel.symbol = "."
297 panel.answer = "%s%s" % [word, word]
298 panel.name = "EndCheck_%s" % word
299
300 var tpl = tpl_prefab.instantiate()
301 tpl.teleport_point = Vector3(0, 1, -11)
302 tpl.teleport_rotate = Vector3(-45, 0, 0)
303 tpl.target_path = panel
304 tpl.name = "Teleport"
305
306 if previous_panel == null:
307 tpl.senderGroup.append(NodePath("/root/scene/Panels/Rulers"))
308 else:
309 tpl.senders.append(NodePath("../../%s" % previous_panel.name))
310
311 var reversing = reverse_prefab.instantiate()
312 reversing.senders.append(NodePath(".."))
313 reversing.name = "Reversing"
314 tpl.senders.append(NodePath("../Reversing"))
315
316 panel.add_child.call_deferred(tpl)
317 panel.add_child.call_deferred(reversing)
318 get_parent().get_node("Panels").add_child.call_deferred(panel)
319
320 previous_panel = panel
321
322 # Duplicate the door that usually waits on the rulers. We can't set the
323 # senders here for some reason so we actually set them in the door ready
324 # function.
325 var entry1 = get_node("/root/scene/Components/Doors/entry_1")
326 var entry12 = entry1.duplicate()
327 entry12.name = "spe_entry_1"
328 entry1.get_parent().add_child.call_deferred(entry12)
329 entry1.queue_free()
330
228 super._ready() 331 super._ready()
229 332
230 await get_tree().process_frame 333 await get_tree().process_frame