func on_map_load(root): var ap = global.get_node("Archipelago") # Remove the door blocking the trophy case. root.get_node("/root/scene/Components/Doors/entry_18").queue_free() # Set up mastery listeners for extra maps. _set_up_mastery_listener(root, "advanced") _set_up_mastery_listener(root, "charismatic") _set_up_mastery_listener(root, "crystalline") _set_up_mastery_listener(root, "fuzzy") _set_up_mastery_listener(root, "icarus") _set_up_mastery_listener(root, "stellar") if ap.endings_requirement != 12 or ap.masteries_requirement != 0: # Set up listeners for the potential White Ending requirements. var merging_prefab = preload("res://objects/nodes/listeners/mergingListener.tscn") var old_door = root.get_node("/root/scene/Components/Doors/entry_19") var new_door = old_door.duplicate() new_door.name = "entry_19_new" new_door.senders.clear() new_door.senderGroup.clear() new_door.excludeSenders.clear() if ap.endings_requirement == 12: new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners")) elif ap.endings_requirement > 0: if ap.masteries_requirement == 0: new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners")) new_door.complete_at = ap.endings_requirement else: var endings_merge = merging_prefab.instantiate() endings_merge.name = "EndingsMerge" endings_merge.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/Listeners")) endings_merge.complete_at = ap.endings_requirement root.get_node("/root/scene/Components").add_child.call_deferred(endings_merge) new_door.senders.append(NodePath("/root/scene/Components/EndingsMerge")) var max_masteries = 13 + ap.enable_gift_maps.size() if ap.enable_icarus: max_masteries += 1 if ap.masteries_requirement == max_masteries: new_door.senderGroup.append(NodePath("/root/scene/Meshes/Trophies/MasteryListeners")) new_door.excludeSenders.append( NodePath("/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite") ) elif ap.masteries_requirement > 0: if ap.endings_requirement == 0: new_door.senderGroup.append( NodePath("/root/scene/Meshes/Trophies/MasteryListeners") ) new_door.excludeSenders.append( NodePath( "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite" ) ) new_door.complete_at = ap.masteries_requirement else: var masteries_merge = merging_prefab.instantiate() masteries_merge.name = "MasteriesMerge" masteries_merge.senderGroup.append( NodePath("/root/scene/Meshes/Trophies/MasteryListeners") ) masteries_merge.excludeSenders.append( NodePath( "/root/scene/Meshes/Trophies/MasteryListeners/unlockReaderListenerWhite" ) ) masteries_merge.complete_at = ap.masteries_requirement root.get_node("/root/scene/Components").add_child.call_deferred(masteries_merge) new_door.senders.append(NodePath("/root/scene/Components/MasteriesMerge")) old_door.queue_free() root.get_node("/root/scene/Components/Doors").add_child.call_deferred(new_door) func _set_up_mastery_listener(root, name): var prefab = preload("res://objects/nodes/listeners/unlockReaderListener.tscn") var url = prefab.instantiate() url.name = "unlockReaderListenerMastery_%s" % name url.key = "%s_mastery" % name url.value = "unlocked" root.get_node("/root/scene/Meshes/Trophies/MasteryListeners").add_child.call_deferred(url)