diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-13 12:43:15 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-09-13 12:43:15 -0400 |
| commit | 5dbc46d7d00091b92b178a73f114871d0e0cc806 (patch) | |
| tree | 67a67d7d1ed46d80544c5a3ea1e8431e06541095 /client | |
| parent | c456854263be17264aeb8446986bc401d3921f33 (diff) | |
| download | lingo2-archipelago-5dbc46d7d00091b92b178a73f114871d0e0cc806.tar.gz lingo2-archipelago-5dbc46d7d00091b92b178a73f114871d0e0cc806.tar.bz2 lingo2-archipelago-5dbc46d7d00091b92b178a73f114871d0e0cc806.zip | |
[Client] Handle anti collectable traps
Diffstat (limited to 'client')
| -rw-r--r-- | client/Archipelago/gamedata.gd | 7 | ||||
| -rw-r--r-- | client/Archipelago/keyboard.gd | 25 | ||||
| -rw-r--r-- | client/Archipelago/manager.gd | 3 |
3 files changed, 33 insertions, 2 deletions
| diff --git a/client/Archipelago/gamedata.gd b/client/Archipelago/gamedata.gd index d8d16ed..41d966a 100644 --- a/client/Archipelago/gamedata.gd +++ b/client/Archipelago/gamedata.gd | |||
| @@ -11,6 +11,7 @@ var map_id_by_name = {} | |||
| 11 | var progressive_id_by_ap_id = {} | 11 | var progressive_id_by_ap_id = {} |
| 12 | var letter_id_by_ap_id = {} | 12 | var letter_id_by_ap_id = {} |
| 13 | var symbol_item_ids = [] | 13 | var symbol_item_ids = [] |
| 14 | var anti_trap_ids = {} | ||
| 14 | 15 | ||
| 15 | var kSYMBOL_ITEMS | 16 | var kSYMBOL_ITEMS |
| 16 | 17 | ||
| @@ -97,6 +98,12 @@ func load(data_bytes): | |||
| 97 | for symbol_name in kSYMBOL_ITEMS.values(): | 98 | for symbol_name in kSYMBOL_ITEMS.values(): |
| 98 | symbol_item_ids.append(objects.get_special_ids()[symbol_name]) | 99 | symbol_item_ids.append(objects.get_special_ids()[symbol_name]) |
| 99 | 100 | ||
| 101 | for special_name in objects.get_special_ids().keys(): | ||
| 102 | if special_name.begins_with("Anti "): | ||
| 103 | anti_trap_ids[objects.get_special_ids()[special_name]] = ( | ||
| 104 | special_name.substr(5).to_lower() | ||
| 105 | ) | ||
| 106 | |||
| 100 | 107 | ||
| 101 | func get_door_for_map_node_path(map_name, node_path): | 108 | func get_door_for_map_node_path(map_name, node_path): |
| 102 | if not door_id_by_map_node_path.has(map_name): | 109 | if not door_id_by_map_node_path.has(map_name): |
| 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 |
| diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 34f5e27..5a36336 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd | |||
| @@ -215,6 +215,9 @@ func _process_item(item, index, from, flags, amount): | |||
| 215 | "Received [color=%s]%s[/color] from %s" % [item_color, full_item_name, player_name] | 215 | "Received [color=%s]%s[/color] from %s" % [item_color, full_item_name, player_name] |
| 216 | ) | 216 | ) |
| 217 | 217 | ||
| 218 | if gamedata.anti_trap_ids.has(item): | ||
| 219 | keyboard.block_letter(gamedata.anti_trap_ids[item]) | ||
| 220 | |||
| 218 | global._print(message) | 221 | global._print(message) |
| 219 | 222 | ||
| 220 | global.get_node("Messages").showMessage(message) | 223 | global.get_node("Messages").showMessage(message) |
