diff options
Diffstat (limited to 'client/Archipelago/keyboard.gd')
-rw-r--r-- | client/Archipelago/keyboard.gd | 25 |
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 | ||
5 | var letters_saved = {} | 5 | var letters_saved = {} |
6 | var letters_in_keyholders = [] | 6 | var letters_in_keyholders = [] |
7 | var letters_blocked = [] | ||
7 | var letters_dynamic = {} | 8 | var letters_dynamic = {} |
8 | var keyholder_state = {} | 9 | var keyholder_state = {} |
9 | 10 | ||
@@ -17,6 +18,7 @@ func _init(): | |||
17 | func reset(): | 18 | func 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 | ||
162 | func block_letter(key): | ||
163 | if not letters_blocked.has(key): | ||
164 | letters_blocked.append(key) | ||
165 | |||
166 | update_unlocks() | ||
167 | |||
168 | |||
151 | func load_keyholders(map): | 169 | func 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 | ||
162 | func reset_keyholders(): | 180 | func 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 |