From 5dbc46d7d00091b92b178a73f114871d0e0cc806 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 13 Sep 2025 12:43:15 -0400 Subject: [Client] Handle anti collectable traps --- client/Archipelago/keyboard.gd | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'client/Archipelago/keyboard.gd') 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" var letters_saved = {} var letters_in_keyholders = [] +var letters_blocked = [] var letters_dynamic = {} var keyholder_state = {} @@ -17,6 +18,7 @@ func _init(): func reset(): letters_saved.clear() letters_in_keyholders.clear() + letters_blocked.clear() letters_dynamic.clear() keyholder_state.clear() @@ -91,6 +93,9 @@ func update_unlocks(): level = 2 has_doubles = true + if letters_blocked.has(k): + level = 0 + unlocks.unlockKey(k, level) if has_doubles and unlocks.data["double_letters"] != "unlocked": @@ -105,6 +110,9 @@ func collect_local_letter(key, level): letters_saved[key] = level + if letters_blocked.has(key): + letters_blocked.erase(key) + update_unlocks() save() @@ -115,6 +123,9 @@ func collect_remote_letter(key, level): letters_dynamic[key] = level + if letters_blocked.has(key): + letters_blocked.erase(key) + update_unlocks() save() @@ -148,6 +159,13 @@ func remove_from_keyholder(key, map, kh_path): save() +func block_letter(key): + if not letters_blocked.has(key): + letters_blocked.append(key) + + update_unlocks() + + func load_keyholders(map): if keyholder_state.has(map): var khs = keyholder_state[map] @@ -160,9 +178,11 @@ func load_keyholders(map): func reset_keyholders(): - if letters_in_keyholders.is_empty(): + if letters_in_keyholders.is_empty() and letters_blocked.is_empty(): return false + var cleared_anything = not letters_in_keyholders.is_empty() or not letters_blocked.is_empty() + if keyholder_state.has(global.map): for path in keyholder_state[global.map]: get_tree().get_root().get_node("scene").get_node(path).setFromAp( @@ -171,8 +191,9 @@ func reset_keyholders(): keyholder_state.clear() letters_in_keyholders.clear() + letters_blocked.clear() update_unlocks() save() - return true + return cleared_anything -- cgit 1.4.1