1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
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)
# Display White Ending requirements.
var ending_count = 0
var mastery_count = 0
for key in unlocks.data:
if unlocks.data[key] == "unlocked":
if key.ends_with("_ending") and key != "free_ending":
ending_count += 1
elif key.ends_with("_mastery"):
mastery_count += 1
var sign_prefab = preload("res://objects/nodes/sign.tscn")
var sign1 = sign_prefab.instantiate()
sign1.position = Vector3(87.5, 5, -42.01)
sign1.text = "Endings: %d/%d" % [ending_count, ap.endings_requirement]
root.get_node("/root/scene").add_child.call_deferred(sign1)
var sign2 = sign_prefab.instantiate()
sign2.position = Vector3(87.5, 5, -15.99)
sign2.rotation_degrees.y = 180
sign2.text = "Masteries: %d/%d" % [mastery_count, ap.masteries_requirement]
root.get_node("/root/scene").add_child.call_deferred(sign2)
# Handle custom Mint Ending.
if ap.custom_mint_ending != "":
var panel_prefab = preload("res://objects/nodes/panel.tscn")
var tpl_prefab = preload("res://objects/nodes/listeners/teleportListener.tscn")
var mint_ending = root.get_node("/root/scene/Components/Endings/mint_ending")
var mint_panel = panel_prefab.instantiate()
mint_panel.name = "mint_panel"
mint_panel.clue = ap.custom_mint_ending
mint_panel.symbol = ""
mint_panel.answer = ap.custom_mint_ending
mint_panel.position = Vector3(-63, 3, -29)
mint_panel.rotation_degrees = Vector3(-45, 90, 0)
root.get_node("/root/scene").add_child.call_deferred(mint_panel)
var mint_tpl = tpl_prefab.instantiate()
mint_tpl.name = "mint_tpl"
mint_tpl.teleport_point = mint_ending.position
mint_tpl.teleport_rotate = mint_ending.rotation_degrees
mint_tpl.target_path = mint_ending
mint_tpl.senders.append(NodePath("/root/scene/mint_panel"))
root.get_node("/root/scene").add_child.call_deferred(mint_tpl)
var mint_tpl2 = tpl_prefab.instantiate()
mint_tpl2.name = "mint_tpl2"
mint_tpl2.teleport_point = Vector3(0, -1000, 0)
mint_tpl2.target_path = mint_panel
mint_tpl2.senders.append(NodePath("/root/scene/mint_panel"))
root.get_node("/root/scene").add_child.call_deferred(mint_tpl2)
mint_ending.position.y = -1000
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)
|