about summary refs log tree commit diff stats
path: root/apworld/client/player.gd
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-10-25 11:20:55 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-10-25 11:20:55 -0400
commitea87cbbe4a23ceff72f31e461c7ead32f560031e (patch)
tree2983fb51bc4f9a3f7ccaf0cb71a2dfad54eceeeb /apworld/client/player.gd
parent8b07ae101fb9e0f2fc0e2d46a4cd77ff78d62d13 (diff)
downloadlingo2-archipelago-ea87cbbe4a23ceff72f31e461c7ead32f560031e.tar.gz
lingo2-archipelago-ea87cbbe4a23ceff72f31e461c7ead32f560031e.tar.bz2
lingo2-archipelago-ea87cbbe4a23ceff72f31e461c7ead32f560031e.zip
Made White Ending customizable
Diffstat (limited to 'apworld/client/player.gd')
-rw-r--r--apworld/client/player.gd127
1 files changed, 127 insertions, 0 deletions
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 789d1b7..9acb942 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd
@@ -19,6 +19,84 @@ func _ready():
19 19
20 ap.start_batching_locations() 20 ap.start_batching_locations()
21 21
22 if global.map == "control_center":
23 get_node("/root/scene/Components/Doors/entry_18").queue_free()
24
25 _set_up_mastery_listener("advanced")
26 _set_up_mastery_listener("charismatic")
27 _set_up_mastery_listener("crystalline")
28 _set_up_mastery_listener("icarus")
29 _set_up_mastery_listener("stellar")
30
31 if ap.endings_requirement != 12 or ap.masteries_requirement != 0:
32 # Set up listeners for the potential White Ending requirements.
33 var merging_prefab = preload("res://objects/nodes/listeners/mergingListener.tscn")
34
35 var old_door = get_node("/root/scene/Components/Doors/entry_19")
36 var new_door = old_door.duplicate()
37 new_door.name = "entry_19_new"
38 new_door.senders.clear()
39 new_door.senderGroup.clear()
40 new_door.excludeSenders.clear()
41
42 if ap.endings_requirement == 12:
43 new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners"))
44 elif ap.endings_requirement > 0:
45 if ap.masteries_requirement == 0:
46 new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners"))
47 new_door.complete_at = ap.endings_requirement
48 else:
49 var endings_merge = merging_prefab.instantiate()
50 endings_merge.name = "EndingsMerge"
51 endings_merge.senderGroup.append(
52 NodePath("/root/scene/Meshes/Trophies/Listeners")
53 )
54 endings_merge.complete_at = ap.endings_requirement
55 get_node("/root/scene/Components").add_child.call_deferred(endings_merge)
56 new_door.senders.append(NodePath("/root/scene/Components/EndingsMerge"))
57
58 var max_masteries = 13 + ap.enable_gift_maps.size()
59 if ap.enable_icarus:
60 max_masteries += 1
61
62 if ap.masteries_requirement == max_masteries:
63 new_door.senderGroup.append(
64 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
65 )
66 new_door.excludeSenders.append(
67 NodePath(
68 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
69 )
70 )
71 elif ap.masteries_requirement > 0:
72 if ap.endings_requirement == 0:
73 new_door.senderGroup.append(
74 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
75 )
76 new_door.excludeSenders.append(
77 NodePath(
78 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
79 )
80 )
81 new_door.complete_at = ap.masteries_requirement
82 else:
83 var masteries_merge = merging_prefab.instantiate()
84 masteries_merge.name = "MasteriesMerge"
85 masteries_merge.senderGroup.append(
86 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
87 )
88 masteries_merge.excludeSenders.append(
89 NodePath(
90 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
91 )
92 )
93 masteries_merge.complete_at = ap.masteries_requirement
94 get_node("/root/scene/Components").add_child.call_deferred(masteries_merge)
95 new_door.senders.append(NodePath("/root/scene/Components/MasteriesMerge"))
96
97 old_door.queue_free()
98 get_node("/root/scene/Components/Doors").add_child.call_deferred(new_door)
99
22 # Block off roof access in Daedalus. 100 # Block off roof access in Daedalus.
23 if global.map == "daedalus" and not ap.daedalus_roof_access: 101 if global.map == "daedalus" and not ap.daedalus_roof_access:
24 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) 102 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49)
@@ -297,6 +375,7 @@ func _ready():
297 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 375 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
298 var saver_prefab = preload("res://objects/nodes/saver.tscn") 376 var saver_prefab = preload("res://objects/nodes/saver.tscn")
299 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 377 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
378 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
300 379
301 var mastery = collectable_prefab.instantiate() 380 var mastery = collectable_prefab.instantiate()
302 mastery.name = "collectable" 381 mastery.name = "collectable"
@@ -314,6 +393,13 @@ func _ready():
314 tpl.nested = true 393 tpl.nested = true
315 mastery.add_child.call_deferred(tpl) 394 mastery.add_child.call_deferred(tpl)
316 395
396 var usl = usl_prefab.instantiate()
397 usl.name = "unlockSetterListenerMastery"
398 usl.key = "icarus_mastery"
399 usl.value = "unlocked"
400 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
401 get_node("/root/scene/Components").add_child.call_deferred(usl)
402
317 var saver = saver_prefab.instantiate() 403 var saver = saver_prefab.instantiate()
318 saver.name = "saver_collectables" 404 saver.name = "saver_collectables"
319 saver.type = "collectables" 405 saver.type = "collectables"
@@ -325,6 +411,7 @@ func _ready():
325 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 411 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
326 var saver_prefab = preload("res://objects/nodes/saver.tscn") 412 var saver_prefab = preload("res://objects/nodes/saver.tscn")
327 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 413 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
414 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
328 415
329 var mastery = collectable_prefab.instantiate() 416 var mastery = collectable_prefab.instantiate()
330 mastery.name = "collectable" 417 mastery.name = "collectable"
@@ -343,6 +430,13 @@ func _ready():
343 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_31")) 430 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_31"))
344 mastery.add_child.call_deferred(tpl) 431 mastery.add_child.call_deferred(tpl)
345 432
433 var usl = usl_prefab.instantiate()
434 usl.name = "unlockSetterListenerMastery"
435 usl.key = "advanced_mastery"
436 usl.value = "unlocked"
437 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
438 get_node("/root/scene/Components").add_child.call_deferred(usl)
439
346 var saver = saver_prefab.instantiate() 440 var saver = saver_prefab.instantiate()
347 saver.name = "saver_collectables" 441 saver.name = "saver_collectables"
348 saver.type = "collectables" 442 saver.type = "collectables"
@@ -353,6 +447,7 @@ func _ready():
353 if global.map == "the_charismatic": 447 if global.map == "the_charismatic":
354 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 448 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
355 var saver_prefab = preload("res://objects/nodes/saver.tscn") 449 var saver_prefab = preload("res://objects/nodes/saver.tscn")
450 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
356 451
357 var mastery = collectable_prefab.instantiate() 452 var mastery = collectable_prefab.instantiate()
358 mastery.name = "collectable" 453 mastery.name = "collectable"
@@ -362,6 +457,13 @@ func _ready():
362 mastery.material_override = load("res://assets/materials/gold.material") 457 mastery.material_override = load("res://assets/materials/gold.material")
363 get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) 458 get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery)
364 459
460 var usl = usl_prefab.instantiate()
461 usl.name = "unlockSetterListenerMastery"
462 usl.key = "charismatic_mastery"
463 usl.value = "unlocked"
464 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
465 get_node("/root/scene/Components").add_child.call_deferred(usl)
466
365 var saver = saver_prefab.instantiate() 467 var saver = saver_prefab.instantiate()
366 saver.name = "saver_collectables" 468 saver.name = "saver_collectables"
367 saver.type = "collectables" 469 saver.type = "collectables"
@@ -373,6 +475,7 @@ func _ready():
373 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 475 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
374 var saver_prefab = preload("res://objects/nodes/saver.tscn") 476 var saver_prefab = preload("res://objects/nodes/saver.tscn")
375 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 477 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
478 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
376 479
377 var mastery = collectable_prefab.instantiate() 480 var mastery = collectable_prefab.instantiate()
378 mastery.name = "collectable" 481 mastery.name = "collectable"
@@ -389,6 +492,13 @@ func _ready():
389 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_3")) 492 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_3"))
390 mastery.add_child.call_deferred(tpl) 493 mastery.add_child.call_deferred(tpl)
391 494
495 var usl = usl_prefab.instantiate()
496 usl.name = "unlockSetterListenerMastery"
497 usl.key = "crystalline_mastery"
498 usl.value = "unlocked"
499 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
500 get_node("/root/scene/Components").add_child.call_deferred(usl)
501
392 var saver = saver_prefab.instantiate() 502 var saver = saver_prefab.instantiate()
393 saver.name = "saver_collectables" 503 saver.name = "saver_collectables"
394 saver.type = "collectables" 504 saver.type = "collectables"
@@ -399,6 +509,7 @@ func _ready():
399 if global.map == "the_stellar": 509 if global.map == "the_stellar":
400 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 510 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
401 var saver_prefab = preload("res://objects/nodes/saver.tscn") 511 var saver_prefab = preload("res://objects/nodes/saver.tscn")
512 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
402 513
403 var collectables = Node.new() 514 var collectables = Node.new()
404 collectables.name = "Collectables" 515 collectables.name = "Collectables"
@@ -412,6 +523,13 @@ func _ready():
412 collectables.add_child.call_deferred(mastery) 523 collectables.add_child.call_deferred(mastery)
413 get_node("/root/scene/Components").add_child.call_deferred(collectables) 524 get_node("/root/scene/Components").add_child.call_deferred(collectables)
414 525
526 var usl = usl_prefab.instantiate()
527 usl.name = "unlockSetterListenerMastery"
528 usl.key = "stellar_mastery"
529 usl.value = "unlocked"
530 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
531 get_node("/root/scene/Components").add_child.call_deferred(usl)
532
415 var saver = saver_prefab.instantiate() 533 var saver = saver_prefab.instantiate()
416 saver.name = "saver_collectables" 534 saver.name = "saver_collectables"
417 saver.type = "collectables" 535 saver.type = "collectables"
@@ -585,5 +703,14 @@ func _set_up_invis_wall(x, y, z, sx, sy, sz):
585 get_parent().add_child.call_deferred(newwall) 703 get_parent().add_child.call_deferred(newwall)
586 704
587 705
706func _set_up_mastery_listener(name):
707 var prefab = preload("res://objects/nodes/listeners/unlockReaderListener.tscn")
708 var url = prefab.instantiate()
709 url.name = "unlockReaderListenerMastery_%s" % name
710 url.key = "%s_mastery" % name
711 url.value = "unlocked"
712 get_node("/root/scene/Meshes/Trophies/MasteryListeners").add_child.call_deferred(url)
713
714
588func _process(_dt): 715func _process(_dt):
589 compass.update_rotation(global_rotation.y) 716 compass.update_rotation(global_rotation.y)