diff options
Diffstat (limited to 'apworld/client/player.gd')
| -rw-r--r-- | apworld/client/player.gd | 127 |
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 | ||
| 706 | func _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 | |||
| 588 | func _process(_dt): | 715 | func _process(_dt): |
| 589 | compass.update_rotation(global_rotation.y) | 716 | compass.update_rotation(global_rotation.y) |
