about summary refs log tree commit diff stats
path: root/data/maps/daedalus/rooms/Composite Room NW.txtpb
Commit message (Expand)AuthorAgeFilesLines
* Changed how door location names are formattedStar Rauchenberger2025-08-301-1/+1
* Added daedalusStar Rauchenberger2025-08-241-0/+94
id='n42' href='#n42'>42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
const kALL_MASTERIES = 19


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"))

		if ap.masteries_requirement == kALL_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)