about summary refs log tree commit diff stats
path: root/apworld/client/player.gd
diff options
context:
space:
mode:
Diffstat (limited to 'apworld/client/player.gd')
-rw-r--r--apworld/client/player.gd177
1 files changed, 177 insertions, 0 deletions
diff --git a/apworld/client/player.gd b/apworld/client/player.gd index 789d1b7..712a59b 100644 --- a/apworld/client/player.gd +++ b/apworld/client/player.gd
@@ -19,6 +19,85 @@ 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("fuzzy")
29 _set_up_mastery_listener("icarus")
30 _set_up_mastery_listener("stellar")
31
32 if ap.endings_requirement != 12 or ap.masteries_requirement != 0:
33 # Set up listeners for the potential White Ending requirements.
34 var merging_prefab = preload("res://objects/nodes/listeners/mergingListener.tscn")
35
36 var old_door = get_node("/root/scene/Components/Doors/entry_19")
37 var new_door = old_door.duplicate()
38 new_door.name = "entry_19_new"
39 new_door.senders.clear()
40 new_door.senderGroup.clear()
41 new_door.excludeSenders.clear()
42
43 if ap.endings_requirement == 12:
44 new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners"))
45 elif ap.endings_requirement > 0:
46 if ap.masteries_requirement == 0:
47 new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners"))
48 new_door.complete_at = ap.endings_requirement
49 else:
50 var endings_merge = merging_prefab.instantiate()
51 endings_merge.name = "EndingsMerge"
52 endings_merge.senderGroup.append(
53 NodePath("/root/scene/Meshes/Trophies/Listeners")
54 )
55 endings_merge.complete_at = ap.endings_requirement
56 get_node("/root/scene/Components").add_child.call_deferred(endings_merge)
57 new_door.senders.append(NodePath("/root/scene/Components/EndingsMerge"))
58
59 var max_masteries = 13 + ap.enable_gift_maps.size()
60 if ap.enable_icarus:
61 max_masteries += 1
62
63 if ap.masteries_requirement == max_masteries:
64 new_door.senderGroup.append(
65 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
66 )
67 new_door.excludeSenders.append(
68 NodePath(
69 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
70 )
71 )
72 elif ap.masteries_requirement > 0:
73 if ap.endings_requirement == 0:
74 new_door.senderGroup.append(
75 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
76 )
77 new_door.excludeSenders.append(
78 NodePath(
79 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
80 )
81 )
82 new_door.complete_at = ap.masteries_requirement
83 else:
84 var masteries_merge = merging_prefab.instantiate()
85 masteries_merge.name = "MasteriesMerge"
86 masteries_merge.senderGroup.append(
87 NodePath("/root/scene/Meshes/Trophies/MasteryListeners")
88 )
89 masteries_merge.excludeSenders.append(
90 NodePath(
91 "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite"
92 )
93 )
94 masteries_merge.complete_at = ap.masteries_requirement
95 get_node("/root/scene/Components").add_child.call_deferred(masteries_merge)
96 new_door.senders.append(NodePath("/root/scene/Components/MasteriesMerge"))
97
98 old_door.queue_free()
99 get_node("/root/scene/Components/Doors").add_child.call_deferred(new_door)
100
22 # Block off roof access in Daedalus. 101 # Block off roof access in Daedalus.
23 if global.map == "daedalus" and not ap.daedalus_roof_access: 102 if global.map == "daedalus" and not ap.daedalus_roof_access:
24 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49) 103 _set_up_invis_wall(75.5, 11, -24.5, 1, 10, 49)
@@ -141,6 +220,29 @@ func _ready():
141 q_wpl.senders.append(NodePath("../QPanel")) 220 q_wpl.senders.append(NodePath("../QPanel"))
142 giftmap_parent.add_child.call_deferred(q_wpl) 221 giftmap_parent.add_child.call_deferred(q_wpl)
143 222
223 if ap.enable_gift_maps.has("The Fuzzy"):
224 var gongus_panel = panel_prefab.instantiate()
225 gongus_panel.name = "GongusPanel"
226 gongus_panel.answer = "gongus"
227 gongus_panel.position = Vector3(33.5, -260, 5.5)
228 giftmap_panel.proxies.append(NodePath("../GongusPanel"))
229 giftmap_parent.add_child.call_deferred(gongus_panel)
230
231 var kiwi_panel = panel_prefab.instantiate()
232 kiwi_panel.name = "KiwiPanel"
233 kiwi_panel.answer = "kiwi"
234 kiwi_panel.position = Vector3(33.5, -270, 5.5)
235 giftmap_panel.proxies.append(NodePath("../KiwiPanel"))
236 giftmap_parent.add_child.call_deferred(kiwi_panel)
237
238 var fuzzy_wpl = wpl_prefab.instantiate()
239 fuzzy_wpl.name = "FuzzyWpl"
240 fuzzy_wpl.exit = "the_fuzzy"
241 fuzzy_wpl.senders.append(NodePath("../GongusPanel"))
242 fuzzy_wpl.senders.append(NodePath("../KiwiPanel"))
243 fuzzy_wpl.complete_at = 1
244 giftmap_parent.add_child.call_deferred(fuzzy_wpl)
245
144 if ap.enable_gift_maps.has("The Stellar"): 246 if ap.enable_gift_maps.has("The Stellar"):
145 var hatkirby_panel = panel_prefab.instantiate() 247 var hatkirby_panel = panel_prefab.instantiate()
146 hatkirby_panel.name = "HatkirbyPanel" 248 hatkirby_panel.name = "HatkirbyPanel"
@@ -297,6 +399,7 @@ func _ready():
297 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 399 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
298 var saver_prefab = preload("res://objects/nodes/saver.tscn") 400 var saver_prefab = preload("res://objects/nodes/saver.tscn")
299 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 401 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
402 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
300 403
301 var mastery = collectable_prefab.instantiate() 404 var mastery = collectable_prefab.instantiate()
302 mastery.name = "collectable" 405 mastery.name = "collectable"
@@ -314,6 +417,13 @@ func _ready():
314 tpl.nested = true 417 tpl.nested = true
315 mastery.add_child.call_deferred(tpl) 418 mastery.add_child.call_deferred(tpl)
316 419
420 var usl = usl_prefab.instantiate()
421 usl.name = "unlockSetterListenerMastery"
422 usl.key = "icarus_mastery"
423 usl.value = "unlocked"
424 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
425 get_node("/root/scene/Components").add_child.call_deferred(usl)
426
317 var saver = saver_prefab.instantiate() 427 var saver = saver_prefab.instantiate()
318 saver.name = "saver_collectables" 428 saver.name = "saver_collectables"
319 saver.type = "collectables" 429 saver.type = "collectables"
@@ -325,6 +435,7 @@ func _ready():
325 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 435 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
326 var saver_prefab = preload("res://objects/nodes/saver.tscn") 436 var saver_prefab = preload("res://objects/nodes/saver.tscn")
327 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 437 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
438 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
328 439
329 var mastery = collectable_prefab.instantiate() 440 var mastery = collectable_prefab.instantiate()
330 mastery.name = "collectable" 441 mastery.name = "collectable"
@@ -343,6 +454,13 @@ func _ready():
343 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_31")) 454 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_31"))
344 mastery.add_child.call_deferred(tpl) 455 mastery.add_child.call_deferred(tpl)
345 456
457 var usl = usl_prefab.instantiate()
458 usl.name = "unlockSetterListenerMastery"
459 usl.key = "advanced_mastery"
460 usl.value = "unlocked"
461 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
462 get_node("/root/scene/Components").add_child.call_deferred(usl)
463
346 var saver = saver_prefab.instantiate() 464 var saver = saver_prefab.instantiate()
347 saver.name = "saver_collectables" 465 saver.name = "saver_collectables"
348 saver.type = "collectables" 466 saver.type = "collectables"
@@ -353,6 +471,7 @@ func _ready():
353 if global.map == "the_charismatic": 471 if global.map == "the_charismatic":
354 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 472 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
355 var saver_prefab = preload("res://objects/nodes/saver.tscn") 473 var saver_prefab = preload("res://objects/nodes/saver.tscn")
474 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
356 475
357 var mastery = collectable_prefab.instantiate() 476 var mastery = collectable_prefab.instantiate()
358 mastery.name = "collectable" 477 mastery.name = "collectable"
@@ -362,6 +481,13 @@ func _ready():
362 mastery.material_override = load("res://assets/materials/gold.material") 481 mastery.material_override = load("res://assets/materials/gold.material")
363 get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery) 482 get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery)
364 483
484 var usl = usl_prefab.instantiate()
485 usl.name = "unlockSetterListenerMastery"
486 usl.key = "charismatic_mastery"
487 usl.value = "unlocked"
488 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
489 get_node("/root/scene/Components").add_child.call_deferred(usl)
490
365 var saver = saver_prefab.instantiate() 491 var saver = saver_prefab.instantiate()
366 saver.name = "saver_collectables" 492 saver.name = "saver_collectables"
367 saver.type = "collectables" 493 saver.type = "collectables"
@@ -373,6 +499,7 @@ func _ready():
373 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 499 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
374 var saver_prefab = preload("res://objects/nodes/saver.tscn") 500 var saver_prefab = preload("res://objects/nodes/saver.tscn")
375 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn") 501 var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
502 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
376 503
377 var mastery = collectable_prefab.instantiate() 504 var mastery = collectable_prefab.instantiate()
378 mastery.name = "collectable" 505 mastery.name = "collectable"
@@ -389,6 +516,39 @@ func _ready():
389 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_3")) 516 tpl.senders.append(NodePath("/root/scene/Panels/Room_1/panel_3"))
390 mastery.add_child.call_deferred(tpl) 517 mastery.add_child.call_deferred(tpl)
391 518
519 var usl = usl_prefab.instantiate()
520 usl.name = "unlockSetterListenerMastery"
521 usl.key = "crystalline_mastery"
522 usl.value = "unlocked"
523 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
524 get_node("/root/scene/Components").add_child.call_deferred(usl)
525
526 var saver = saver_prefab.instantiate()
527 saver.name = "saver_collectables"
528 saver.type = "collectables"
529 saver.senderGroup.append(NodePath("/root/scene/Components/Collectables"))
530 get_node("/root/scene").add_child.call_deferred(saver)
531
532 # Add the mastery to The Fuzzy.
533 if global.map == "the_fuzzy":
534 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
535 var saver_prefab = preload("res://objects/nodes/saver.tscn")
536 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
537
538 var mastery = collectable_prefab.instantiate()
539 mastery.name = "collectable"
540 mastery.position = Vector3(0, 2, -20)
541 mastery.unlock_type = "smiley"
542 mastery.material_override = load("res://assets/materials/gold.material")
543 get_node("/root/scene/Components/Collectables").add_child.call_deferred(mastery)
544
545 var usl = usl_prefab.instantiate()
546 usl.name = "unlockSetterListenerMastery"
547 usl.key = "fuzzy_mastery"
548 usl.value = "unlocked"
549 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
550 get_node("/root/scene/Components").add_child.call_deferred(usl)
551
392 var saver = saver_prefab.instantiate() 552 var saver = saver_prefab.instantiate()
393 saver.name = "saver_collectables" 553 saver.name = "saver_collectables"
394 saver.type = "collectables" 554 saver.type = "collectables"
@@ -399,6 +559,7 @@ func _ready():
399 if global.map == "the_stellar": 559 if global.map == "the_stellar":
400 var collectable_prefab = preload("res://objects/nodes/collectable.tscn") 560 var collectable_prefab = preload("res://objects/nodes/collectable.tscn")
401 var saver_prefab = preload("res://objects/nodes/saver.tscn") 561 var saver_prefab = preload("res://objects/nodes/saver.tscn")
562 var usl_prefab = preload("res://objects/nodes/listeners/unlockSetterListener.tscn")
402 563
403 var collectables = Node.new() 564 var collectables = Node.new()
404 collectables.name = "Collectables" 565 collectables.name = "Collectables"
@@ -412,6 +573,13 @@ func _ready():
412 collectables.add_child.call_deferred(mastery) 573 collectables.add_child.call_deferred(mastery)
413 get_node("/root/scene/Components").add_child.call_deferred(collectables) 574 get_node("/root/scene/Components").add_child.call_deferred(collectables)
414 575
576 var usl = usl_prefab.instantiate()
577 usl.name = "unlockSetterListenerMastery"
578 usl.key = "stellar_mastery"
579 usl.value = "unlocked"
580 usl.senders.append(NodePath("/root/scene/Components/Collectables/collectable"))
581 get_node("/root/scene/Components").add_child.call_deferred(usl)
582
415 var saver = saver_prefab.instantiate() 583 var saver = saver_prefab.instantiate()
416 saver.name = "saver_collectables" 584 saver.name = "saver_collectables"
417 saver.type = "collectables" 585 saver.type = "collectables"
@@ -585,5 +753,14 @@ func _set_up_invis_wall(x, y, z, sx, sy, sz):
585 get_parent().add_child.call_deferred(newwall) 753 get_parent().add_child.call_deferred(newwall)
586 754
587 755
756func _set_up_mastery_listener(name):
757 var prefab = preload("res://objects/nodes/listeners/unlockReaderListener.tscn")
758 var url = prefab.instantiate()
759 url.name = "unlockReaderListenerMastery_%s" % name
760 url.key = "%s_mastery" % name
761 url.value = "unlocked"
762 get_node("/root/scene/Meshes/Trophies/MasteryListeners").add_child.call_deferred(url)
763
764
588func _process(_dt): 765func _process(_dt):
589 compass.update_rotation(global_rotation.y) 766 compass.update_rotation(global_rotation.y)