diff options
Diffstat (limited to 'client/Archipelago')
-rw-r--r-- | client/Archipelago/collectable.gd | 12 | ||||
-rw-r--r-- | client/Archipelago/gamedata.gd | 5 | ||||
-rw-r--r-- | client/Archipelago/keyHolder.gd | 38 | ||||
-rw-r--r-- | client/Archipelago/keyHolderChecker.gd | 24 | ||||
-rw-r--r-- | client/Archipelago/keyHolderResetterListener.gd | 8 | ||||
-rw-r--r-- | client/Archipelago/keyboard.gd | 170 | ||||
-rw-r--r-- | client/Archipelago/manager.gd | 74 | ||||
-rw-r--r-- | client/Archipelago/saver.gd | 6 | ||||
-rw-r--r-- | client/Archipelago/settings_screen.gd | 23 |
9 files changed, 345 insertions, 15 deletions
diff --git a/client/Archipelago/collectable.gd b/client/Archipelago/collectable.gd new file mode 100644 index 0000000..7bbdd8b --- /dev/null +++ b/client/Archipelago/collectable.gd | |||
@@ -0,0 +1,12 @@ | |||
1 | extends "res://scripts/nodes/collectable.gd" | ||
2 | |||
3 | |||
4 | func pickedUp(): | ||
5 | if unlock_type == "key": | ||
6 | var ap = global.get_node("Archipelago") | ||
7 | if ap.get_letter_behavior(unlock_key, level == 2) == ap.kLETTER_BEHAVIOR_VANILLA: | ||
8 | ap.keyboard.collect_local_letter(unlock_key, level) | ||
9 | else: | ||
10 | ap.keyboard.update_unlocks() | ||
11 | |||
12 | super.pickedUp() | ||
diff --git a/client/Archipelago/gamedata.gd b/client/Archipelago/gamedata.gd index 669ad3d..11f4981 100644 --- a/client/Archipelago/gamedata.gd +++ b/client/Archipelago/gamedata.gd | |||
@@ -8,6 +8,7 @@ var painting_id_by_map_node_path = {} | |||
8 | var door_id_by_ap_id = {} | 8 | var door_id_by_ap_id = {} |
9 | var map_id_by_name = {} | 9 | var map_id_by_name = {} |
10 | var progressive_id_by_ap_id = {} | 10 | var progressive_id_by_ap_id = {} |
11 | var letter_key_by_ap_id = {} | ||
11 | 12 | ||
12 | 13 | ||
13 | func _init(proto_script): | 14 | func _init(proto_script): |
@@ -54,6 +55,10 @@ func load(data_bytes): | |||
54 | for progressive in objects.get_progressives(): | 55 | for progressive in objects.get_progressives(): |
55 | progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id() | 56 | progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id() |
56 | 57 | ||
58 | for letter in objects.get_letters(): | ||
59 | if not letter.has_level2() or not letter.get_level2(): | ||
60 | letter_key_by_ap_id[letter.get_ap_id()] = letter.get_key() | ||
61 | |||
57 | 62 | ||
58 | func get_door_for_map_node_path(map_name, node_path): | 63 | func get_door_for_map_node_path(map_name, node_path): |
59 | if not door_id_by_map_node_path.has(map_name): | 64 | if not door_id_by_map_node_path.has(map_name): |
diff --git a/client/Archipelago/keyHolder.gd b/client/Archipelago/keyHolder.gd new file mode 100644 index 0000000..3c037ff --- /dev/null +++ b/client/Archipelago/keyHolder.gd | |||
@@ -0,0 +1,38 @@ | |||
1 | extends "res://scripts/nodes/keyHolder.gd" | ||
2 | |||
3 | |||
4 | func setFromAp(key, level): | ||
5 | if level > 0: | ||
6 | has_key = true | ||
7 | is_complete = "%s%d" % [key, level] | ||
8 | held_key = key | ||
9 | held_level = level | ||
10 | get_node("Hinge/Letter").mesh.text = held_key | ||
11 | get_node("Hinge/Letter2").mesh.text = held_key | ||
12 | setMaterial() | ||
13 | emit_signal("trigger") | ||
14 | else: | ||
15 | has_key = false | ||
16 | held_key = "" | ||
17 | held_level = 0 | ||
18 | setMaterial() | ||
19 | get_node("Hinge/Letter").mesh.text = "-" | ||
20 | get_node("Hinge/Letter2").mesh.text = "-" | ||
21 | is_complete = "" | ||
22 | emit_signal("untrigger") | ||
23 | |||
24 | |||
25 | func addKey(key): | ||
26 | var node_path = String( | ||
27 | get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names() | ||
28 | ) | ||
29 | var ap = global.get_node("Archipelago") | ||
30 | ap.keyboard.put_in_keyholder(key, global.map, node_path) | ||
31 | |||
32 | |||
33 | func removeKey(): | ||
34 | var node_path = String( | ||
35 | get_tree().get_root().get_node("scene").get_path_to(self).get_concatenated_names() | ||
36 | ) | ||
37 | var ap = global.get_node("Archipelago") | ||
38 | ap.keyboard.remove_from_keyholder(held_key, global.map, node_path) | ||
diff --git a/client/Archipelago/keyHolderChecker.gd b/client/Archipelago/keyHolderChecker.gd new file mode 100644 index 0000000..a75a9e4 --- /dev/null +++ b/client/Archipelago/keyHolderChecker.gd | |||
@@ -0,0 +1,24 @@ | |||
1 | extends "res://scripts/nodes/listeners/keyHolderChecker.gd" | ||
2 | |||
3 | |||
4 | func check(): | ||
5 | var ap = global.get_node("Archipelago") | ||
6 | var matches = [] | ||
7 | for map in ap.keyboard.keyholder_state.keys(): | ||
8 | var nodes = ap.keyboard.keyholder_state[map] | ||
9 | for node in nodes.keys(): | ||
10 | matches.append([nodes[node], 1, map, "/root/scene/%s" % node]) | ||
11 | |||
12 | var count = 0 | ||
13 | for key_match in matches: | ||
14 | var active = ( | ||
15 | key_match[2] + String(key_match[3]).replace("/root/scene/Components/KeyHolders/", ".") | ||
16 | ) | ||
17 | if map[active] == key_match[0]: | ||
18 | emit_signal("trigger_letter", key_match[0], true) | ||
19 | count += 1 | ||
20 | else: | ||
21 | emit_signal("trigger_letter", key_match[0], false) | ||
22 | |||
23 | if count > 25: | ||
24 | emit_signal("trigger") | ||
diff --git a/client/Archipelago/keyHolderResetterListener.gd b/client/Archipelago/keyHolderResetterListener.gd new file mode 100644 index 0000000..d5300f3 --- /dev/null +++ b/client/Archipelago/keyHolderResetterListener.gd | |||
@@ -0,0 +1,8 @@ | |||
1 | extends "res://scripts/nodes/listeners/keyHolderResetterListener.gd" | ||
2 | |||
3 | |||
4 | func reset(): | ||
5 | var ap = global.get_node("Archipelago") | ||
6 | var was_removed = ap.keyboard.reset_keyholders() | ||
7 | if was_removed: | ||
8 | sfxPlayer.sfx_play("pickup") | ||
diff --git a/client/Archipelago/keyboard.gd b/client/Archipelago/keyboard.gd new file mode 100644 index 0000000..e43ec9f --- /dev/null +++ b/client/Archipelago/keyboard.gd | |||
@@ -0,0 +1,170 @@ | |||
1 | extends Node | ||
2 | |||
3 | const kALL_LETTERS = "abcdefghjiklmnopqrstuvwxyz" | ||
4 | |||
5 | var letters_saved = {} | ||
6 | var letters_in_keyholders = [] | ||
7 | var letters_dynamic = {} | ||
8 | var keyholder_state = {} | ||
9 | |||
10 | var filename = "" | ||
11 | |||
12 | |||
13 | func _init(): | ||
14 | reset() | ||
15 | |||
16 | |||
17 | func reset(): | ||
18 | letters_saved.clear() | ||
19 | letters_in_keyholders.clear() | ||
20 | letters_dynamic.clear() | ||
21 | keyholder_state.clear() | ||
22 | |||
23 | |||
24 | func load_seed(): | ||
25 | var ap = global.get_node("Archipelago") | ||
26 | |||
27 | reset() | ||
28 | |||
29 | filename = "user://archipelago_keys/%s_%d" % [ap.client._seed, ap.client._slot] | ||
30 | |||
31 | if FileAccess.file_exists(filename): | ||
32 | var ap_file = FileAccess.open(filename, FileAccess.READ) | ||
33 | var localdata = [] | ||
34 | if ap_file != null: | ||
35 | localdata = ap_file.get_var(true) | ||
36 | ap_file.close() | ||
37 | |||
38 | if typeof(localdata) != TYPE_ARRAY: | ||
39 | print("AP keyboard file is corrupted") | ||
40 | localdata = [] | ||
41 | |||
42 | if localdata.size() > 0: | ||
43 | letters_saved = localdata[0] | ||
44 | if localdata.size() > 1: | ||
45 | letters_in_keyholders = localdata[1] | ||
46 | if localdata.size() > 2: | ||
47 | keyholder_state = localdata[2] | ||
48 | |||
49 | for k in kALL_LETTERS: | ||
50 | var level = 0 | ||
51 | |||
52 | if ap.get_letter_behavior(k, false) == ap.kLETTER_BEHAVIOR_UNLOCKED: | ||
53 | level += 1 | ||
54 | if ap.get_letter_behavior(k, true) == ap.kLETTER_BEHAVIOR_UNLOCKED: | ||
55 | level += 1 | ||
56 | |||
57 | letters_dynamic[k] = level | ||
58 | |||
59 | update_unlocks() | ||
60 | |||
61 | |||
62 | func save(): | ||
63 | var dir = DirAccess.open("user://") | ||
64 | var folder = "archipelago_keys" | ||
65 | if not dir.dir_exists(folder): | ||
66 | dir.make_dir(folder) | ||
67 | |||
68 | var file = FileAccess.open(filename, FileAccess.WRITE) | ||
69 | |||
70 | var data = [ | ||
71 | letters_saved, | ||
72 | letters_in_keyholders, | ||
73 | keyholder_state, | ||
74 | ] | ||
75 | file.store_var(data, true) | ||
76 | file.close() | ||
77 | |||
78 | |||
79 | func update_unlocks(): | ||
80 | unlocks.resetKeys() | ||
81 | |||
82 | for k in kALL_LETTERS: | ||
83 | var level = 0 | ||
84 | |||
85 | if not letters_in_keyholders.has(k): | ||
86 | level = letters_saved.get(k, 0) + letters_dynamic.get(k, 0) | ||
87 | |||
88 | if level > 2: | ||
89 | level = 2 | ||
90 | |||
91 | unlocks.unlockKey(k, level) | ||
92 | |||
93 | |||
94 | func collect_local_letter(key, level): | ||
95 | if level < 0 or level > 2 or level < letters_saved.get(key, 0): | ||
96 | return | ||
97 | |||
98 | letters_saved[key] = level | ||
99 | |||
100 | update_unlocks() | ||
101 | save() | ||
102 | |||
103 | |||
104 | func collect_remote_letter(key, level): | ||
105 | if level < 0 or level > 2 or level < letters_dynamic.get(key, 0): | ||
106 | return | ||
107 | |||
108 | letters_dynamic[key] = level | ||
109 | |||
110 | update_unlocks() | ||
111 | save() | ||
112 | |||
113 | |||
114 | func put_in_keyholder(key, map, kh_path): | ||
115 | if not keyholder_state.has(map): | ||
116 | keyholder_state[map] = {} | ||
117 | |||
118 | keyholder_state[map][kh_path] = key | ||
119 | letters_in_keyholders.append(key) | ||
120 | |||
121 | get_tree().get_root().get_node("scene").get_node(kh_path).setFromAp( | ||
122 | key, min(letters_saved.get(key, 0) + letters_dynamic.get(key, 0), 2) | ||
123 | ) | ||
124 | |||
125 | update_unlocks() | ||
126 | save() | ||
127 | |||
128 | |||
129 | func remove_from_keyholder(key, map, kh_path): | ||
130 | if not keyholder_state.has(map): | ||
131 | # This... shouldn't happen. | ||
132 | keyholder_state[map] = {} | ||
133 | |||
134 | keyholder_state[map].erase(kh_path) | ||
135 | letters_in_keyholders.erase(key) | ||
136 | |||
137 | get_tree().get_root().get_node("scene").get_node(kh_path).setFromAp(key, 0) | ||
138 | |||
139 | update_unlocks() | ||
140 | save() | ||
141 | |||
142 | |||
143 | func load_keyholders(map): | ||
144 | if keyholder_state.has(map): | ||
145 | var khs = keyholder_state[map] | ||
146 | |||
147 | for path in khs.keys(): | ||
148 | var key = khs[path] | ||
149 | get_tree().get_root().get_node("scene").get_node(path).setFromAp( | ||
150 | key, min(letters_saved.get(key, 0) + letters_dynamic.get(key, 0), 2) | ||
151 | ) | ||
152 | |||
153 | |||
154 | func reset_keyholders(): | ||
155 | if letters_in_keyholders.is_empty(): | ||
156 | return false | ||
157 | |||
158 | if keyholder_state.has(global.map): | ||
159 | for path in keyholder_state[global.map]: | ||
160 | get_tree().get_root().get_node("scene").get_node(path).setFromAp( | ||
161 | keyholder_state[global.map][path], 0 | ||
162 | ) | ||
163 | |||
164 | keyholder_state.clear() | ||
165 | letters_in_keyholders.clear() | ||
166 | |||
167 | update_unlocks() | ||
168 | save() | ||
169 | |||
170 | return true | ||
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 609e645..07d28a4 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd | |||
@@ -3,6 +3,7 @@ extends Node | |||
3 | const my_version = "0.1.0" | 3 | const my_version = "0.1.0" |
4 | 4 | ||
5 | var SCRIPT_client | 5 | var SCRIPT_client |
6 | var SCRIPT_keyboard | ||
6 | var SCRIPT_locationListener | 7 | var SCRIPT_locationListener |
7 | var SCRIPT_uuid | 8 | var SCRIPT_uuid |
8 | var SCRIPT_victoryListener | 9 | var SCRIPT_victoryListener |
@@ -13,16 +14,30 @@ var ap_pass = "" | |||
13 | var connection_history = [] | 14 | var connection_history = [] |
14 | 15 | ||
15 | var client | 16 | var client |
17 | var keyboard | ||
16 | 18 | ||
17 | var _localdata_file = "" | 19 | var _localdata_file = "" |
18 | var _last_new_item = -1 | 20 | var _last_new_item = -1 |
19 | var _batch_locations = false | 21 | var _batch_locations = false |
20 | var _held_locations = [] | 22 | var _held_locations = [] |
21 | var _item_locks = {} | 23 | var _item_locks = {} |
24 | var _held_letters = {} | ||
25 | var _letters_setup = false | ||
26 | |||
27 | const kSHUFFLE_LETTERS_VANILLA = 0 | ||
28 | const kSHUFFLE_LETTERS_UNLOCKED = 1 | ||
29 | const kSHUFFLE_LETTERS_PROGRESSIVE = 2 | ||
30 | const kSHUFFLE_LETTERS_VANILLA_CYAN = 3 | ||
31 | const kSHUFFLE_LETTERS_ITEM_CYAN = 4 | ||
32 | |||
33 | const kLETTER_BEHAVIOR_VANILLA = 0 | ||
34 | const kLETTER_BEHAVIOR_ITEM = 1 | ||
35 | const kLETTER_BEHAVIOR_UNLOCKED = 2 | ||
22 | 36 | ||
23 | var daedalus_roof_access = false | 37 | var daedalus_roof_access = false |
24 | var keyholder_sanity = false | 38 | var keyholder_sanity = false |
25 | var shuffle_doors = false | 39 | var shuffle_doors = false |
40 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA | ||
26 | var victory_condition = -1 | 41 | var victory_condition = -1 |
27 | 42 | ||
28 | signal could_not_connect | 43 | signal could_not_connect |
@@ -66,6 +81,9 @@ func _ready(): | |||
66 | 81 | ||
67 | add_child(client) | 82 | add_child(client) |
68 | 83 | ||
84 | keyboard = SCRIPT_keyboard.new() | ||
85 | add_child(keyboard) | ||
86 | |||
69 | 87 | ||
70 | func saveSettings(): | 88 | func saveSettings(): |
71 | # Save the AP settings to disk. | 89 | # Save the AP settings to disk. |
@@ -100,6 +118,8 @@ func saveLocaldata(): | |||
100 | 118 | ||
101 | func connectToServer(): | 119 | func connectToServer(): |
102 | _last_new_item = -1 | 120 | _last_new_item = -1 |
121 | _letters_setup = false | ||
122 | _held_letters = {} | ||
103 | 123 | ||
104 | client.connectToServer(ap_server, ap_user, ap_pass) | 124 | client.connectToServer(ap_server, ap_user, ap_pass) |
105 | 125 | ||
@@ -140,11 +160,10 @@ func _process_item(item, index, from, flags, amount): | |||
140 | var rnode = scene.get_node_or_null(receiver) | 160 | var rnode = scene.get_node_or_null(receiver) |
141 | if rnode != null: | 161 | if rnode != null: |
142 | rnode.handleTriggered() | 162 | rnode.handleTriggered() |
143 | #for painting_id in gamedata.objects.get_doors()[door_id].get_move_paintings(): | 163 | |
144 | # var painting = gamedata.objects.get_paintings()[painting_id] | 164 | var letter_key = gamedata.letter_key_by_ap_id.get(item, null) |
145 | # var pnode = scene.get_node_or_null(painting.get_path() + "/teleportListener") | 165 | if letter_key != null: |
146 | # if pnode != null: | 166 | _process_key_item(letter_key, amount) |
147 | # pnode.handleTriggered() | ||
148 | 167 | ||
149 | # Show a message about the item if it's new. | 168 | # Show a message about the item if it's new. |
150 | if index != null and index > _last_new_item: | 169 | if index != null and index > _last_new_item: |
@@ -293,6 +312,7 @@ func _client_connected(slot_data): | |||
293 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) | 312 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) |
294 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) | 313 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) |
295 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) | 314 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) |
315 | shuffle_letters = int(slot_data.get("shuffle_letters", 0)) | ||
296 | victory_condition = int(slot_data.get("victory_condition", 0)) | 316 | victory_condition = int(slot_data.get("victory_condition", 0)) |
297 | 317 | ||
298 | # Set up item locks. | 318 | # Set up item locks. |
@@ -344,3 +364,47 @@ func colorForItemType(flags): | |||
344 | return "#d63a22" | 364 | return "#d63a22" |
345 | else: # filler | 365 | else: # filler |
346 | return "#14de9e" | 366 | return "#14de9e" |
367 | |||
368 | |||
369 | func get_letter_behavior(key, level2): | ||
370 | if shuffle_letters == kSHUFFLE_LETTERS_UNLOCKED: | ||
371 | return kLETTER_BEHAVIOR_UNLOCKED | ||
372 | |||
373 | if [kSHUFFLE_LETTERS_VANILLA_CYAN, kSHUFFLE_LETTERS_ITEM_CYAN].has(shuffle_letters): | ||
374 | if level2: | ||
375 | if shuffle_letters == kSHUFFLE_LETTERS_VANILLA_CYAN: | ||
376 | return kLETTER_BEHAVIOR_VANILLA | ||
377 | else: | ||
378 | return kLETTER_BEHAVIOR_ITEM | ||
379 | else: | ||
380 | return kLETTER_BEHAVIOR_UNLOCKED | ||
381 | |||
382 | if not level2 and ["h", "i", "n", "t"].has(key): | ||
383 | # This differs from the equivalent function in the apworld. Logically it is | ||
384 | # the same as UNLOCKED since they are in the starting room, but VANILLA | ||
385 | # means the player still has to actually pick up the letters. | ||
386 | return kLETTER_BEHAVIOR_VANILLA | ||
387 | |||
388 | if shuffle_letters == kSHUFFLE_LETTERS_PROGRESSIVE: | ||
389 | return kLETTER_BEHAVIOR_ITEM | ||
390 | |||
391 | return kLETTER_BEHAVIOR_VANILLA | ||
392 | |||
393 | |||
394 | func setup_keys(): | ||
395 | keyboard.load_seed() | ||
396 | |||
397 | _letters_setup = true | ||
398 | |||
399 | for k in _held_letters.keys(): | ||
400 | _process_key_item(k, _held_letters[k]) | ||
401 | |||
402 | _held_letters.clear() | ||
403 | |||
404 | |||
405 | func _process_key_item(key, level): | ||
406 | if not _letters_setup: | ||
407 | _held_letters[key] = max(_held_letters.get(key, 0), level) | ||
408 | return | ||
409 | |||
410 | keyboard.collect_remote_letter(key, level) | ||
diff --git a/client/Archipelago/saver.gd b/client/Archipelago/saver.gd index 7e788a8..0fba9e7 100644 --- a/client/Archipelago/saver.gd +++ b/client/Archipelago/saver.gd | |||
@@ -2,4 +2,8 @@ extends "res://scripts/nodes/saver.gd" | |||
2 | 2 | ||
3 | 3 | ||
4 | func levelLoaded(): | 4 | func levelLoaded(): |
5 | reload.call_deferred() | 5 | if type == "keyholders": |
6 | var ap = global.get_node("Archipelago") | ||
7 | ap.keyboard.load_keyholders.call_deferred(global.map) | ||
8 | else: | ||
9 | reload.call_deferred() | ||
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index ed9571d..aaaf72a 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd | |||
@@ -22,14 +22,8 @@ func _ready(): | |||
22 | var ap_instance = ap_script.new() | 22 | var ap_instance = ap_script.new() |
23 | ap_instance.name = "Archipelago" | 23 | ap_instance.name = "Archipelago" |
24 | 24 | ||
25 | #apclient_instance.SCRIPT_doorControl = load("user://maps/Archipelago/doorControl.gd") | ||
26 | #apclient_instance.SCRIPT_effects = load("user://maps/Archipelago/effects.gd") | ||
27 | #apclient_instance.SCRIPT_location = load("user://maps/Archipelago/location.gd") | ||
28 | #apclient_instance.SCRIPT_mypainting = load("user://maps/Archipelago/mypainting.gd") | ||
29 | #apclient_instance.SCRIPT_panel = load("user://maps/Archipelago/panel.gd") | ||
30 | #apclient_instance.SCRIPT_textclient = load("user://maps/Archipelago/textclient.gd") | ||
31 | |||
32 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") | 25 | ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") |
26 | ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") | ||
33 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") | 27 | ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") |
34 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") | 28 | ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") |
35 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") | 29 | ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") |
@@ -38,7 +32,13 @@ func _ready(): | |||
38 | 32 | ||
39 | # Let's also inject any scripts we need to inject now. | 33 | # Let's also inject any scripts we need to inject now. |
40 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd")) | 34 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd")) |
35 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/collectable.gd")) | ||
41 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) | 36 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) |
37 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolder.gd")) | ||
38 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolderChecker.gd")) | ||
39 | installScriptExtension( | ||
40 | ResourceLoader.load("user://maps/Archipelago/keyHolderResetterListener.gd") | ||
41 | ) | ||
42 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) | 42 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) |
43 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd")) | 43 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd")) |
44 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) | 44 | installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) |
@@ -141,17 +141,22 @@ func connectionSuccessful(): | |||
141 | global.universe = "lingo" | 141 | global.universe = "lingo" |
142 | global.map = "the_entry" | 142 | global.map = "the_entry" |
143 | 143 | ||
144 | unlocks.resetKeys() | ||
145 | unlocks.resetCollectables() | 144 | unlocks.resetCollectables() |
146 | unlocks.resetData() | 145 | unlocks.resetData() |
147 | unlocks.loadKeys() | 146 | |
147 | ap.setup_keys() | ||
148 | |||
148 | unlocks.loadCollectables() | 149 | unlocks.loadCollectables() |
149 | unlocks.loadData() | 150 | unlocks.loadData() |
150 | unlocks.unlockKey("capslock", 1) | 151 | unlocks.unlockKey("capslock", 1) |
151 | 152 | ||
152 | clearResourceCache("res://objects/meshes/gridDoor.tscn") | 153 | clearResourceCache("res://objects/meshes/gridDoor.tscn") |
154 | clearResourceCache("res://objects/nodes/collectable.tscn") | ||
153 | clearResourceCache("res://objects/nodes/door.tscn") | 155 | clearResourceCache("res://objects/nodes/door.tscn") |
156 | clearResourceCache("res://objects/nodes/keyHolder.tscn") | ||
154 | clearResourceCache("res://objects/nodes/listeners/animationListener.tscn") | 157 | clearResourceCache("res://objects/nodes/listeners/animationListener.tscn") |
158 | clearResourceCache("res://objects/nodes/listeners/keyHolderChecker.tscn") | ||
159 | clearResourceCache("res://objects/nodes/listeners/keyHolderResetterListener.tscn") | ||
155 | clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn") | 160 | clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn") |
156 | clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn") | 161 | clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn") |
157 | clearResourceCache("res://objects/nodes/player.tscn") | 162 | clearResourceCache("res://objects/nodes/player.tscn") |