about summary refs log tree commit diff stats
path: root/client
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-13 12:43:15 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-13 12:43:15 -0400
commit5dbc46d7d00091b92b178a73f114871d0e0cc806 (patch)
tree67a67d7d1ed46d80544c5a3ea1e8431e06541095 /client
parentc456854263be17264aeb8446986bc401d3921f33 (diff)
downloadlingo2-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.gd7
-rw-r--r--client/Archipelago/keyboard.gd25
-rw-r--r--client/Archipelago/manager.gd3
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 = {}
11var progressive_id_by_ap_id = {} 11var progressive_id_by_ap_id = {}
12var letter_id_by_ap_id = {} 12var letter_id_by_ap_id = {}
13var symbol_item_ids = [] 13var symbol_item_ids = []
14var anti_trap_ids = {}
14 15
15var kSYMBOL_ITEMS 16var 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
101func get_door_for_map_node_path(map_name, node_path): 108func 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
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
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)