about summary refs log tree commit diff stats
path: root/client/Archipelago/keyboard.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/keyboard.gd')
-rw-r--r--client/Archipelago/keyboard.gd25
1 files changed, 23 insertions, 2 deletions
diff --git a/client/Archipelago/keyboard.gd b/client/Archipelago/keyboard.gd index 600a047..450566d 100644 --- a/client/Archipelago/keyboard.gd +++ b/client/Archipelago/keyboard.gd
@@ -4,6 +4,7 @@ const kALL_LETTERS = "abcdefghjiklmnopqrstuvwxyz"
4 4
5var letters_saved = {} 5var letters_saved = {}
6var letters_in_keyholders = [] 6var letters_in_keyholders = []
7var letters_blocked = []
7var letters_dynamic = {} 8var letters_dynamic = {}
8var keyholder_state = {} 9var keyholder_state = {}
9 10
@@ -17,6 +18,7 @@ func _init():
17func reset(): 18func reset():
18 letters_saved.clear() 19 letters_saved.clear()
19 letters_in_keyholders.clear() 20 letters_in_keyholders.clear()
21 letters_blocked.clear()
20 letters_dynamic.clear() 22 letters_dynamic.clear()
21 keyholder_state.clear() 23 keyholder_state.clear()
22 24
@@ -91,6 +93,9 @@ func update_unlocks():
91 level = 2 93 level = 2
92 has_doubles = true 94 has_doubles = true
93 95
96 if letters_blocked.has(k):
97 level = 0
98
94 unlocks.unlockKey(k, level) 99 unlocks.unlockKey(k, level)
95 100
96 if has_doubles and unlocks.data["double_letters"] != "unlocked": 101 if has_doubles and unlocks.data["double_letters"] != "unlocked":
@@ -105,6 +110,9 @@ func collect_local_letter(key, level):
105 110
106 letters_saved[key] = level 111 letters_saved[key] = level
107 112
113 if letters_blocked.has(key):
114 letters_blocked.erase(key)
115
108 update_unlocks() 116 update_unlocks()
109 save() 117 save()
110 118
@@ -115,6 +123,9 @@ func collect_remote_letter(key, level):
115 123
116 letters_dynamic[key] = level 124 letters_dynamic[key] = level
117 125
126 if letters_blocked.has(key):
127 letters_blocked.erase(key)
128
118 update_unlocks() 129 update_unlocks()
119 save() 130 save()
120 131
@@ -148,6 +159,13 @@ func remove_from_keyholder(key, map, kh_path):
148 save() 159 save()
149 160
150 161
162func block_letter(key):
163 if not letters_blocked.has(key):
164 letters_blocked.append(key)
165
166 update_unlocks()
167
168
151func load_keyholders(map): 169func load_keyholders(map):
152 if keyholder_state.has(map): 170 if keyholder_state.has(map):
153 var khs = keyholder_state[map] 171 var khs = keyholder_state[map]
@@ -160,9 +178,11 @@ func load_keyholders(map):
160 178
161 179
162func reset_keyholders(): 180func reset_keyholders():
163 if letters_in_keyholders.is_empty(): 181 if letters_in_keyholders.is_empty() and letters_blocked.is_empty():
164 return false 182 return false
165 183
184 var cleared_anything = not letters_in_keyholders.is_empty() or not letters_blocked.is_empty()
185
166 if keyholder_state.has(global.map): 186 if keyholder_state.has(global.map):
167 for path in keyholder_state[global.map]: 187 for path in keyholder_state[global.map]:
168 get_tree().get_root().get_node("scene").get_node(path).setFromAp( 188 get_tree().get_root().get_node("scene").get_node(path).setFromAp(
@@ -171,8 +191,9 @@ func reset_keyholders():
171 191
172 keyholder_state.clear() 192 keyholder_state.clear()
173 letters_in_keyholders.clear() 193 letters_in_keyholders.clear()
194 letters_blocked.clear()
174 195
175 update_unlocks() 196 update_unlocks()
176 save() 197 save()
177 198
178 return true 199 return cleared_anything