diff options
Diffstat (limited to 'client/Archipelago/manager.gd')
-rw-r--r-- | client/Archipelago/manager.gd | 74 |
1 files changed, 69 insertions, 5 deletions
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 609e645..07d28a4 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd | |||
@@ -3,6 +3,7 @@ extends Node | |||
3 | const my_version = "0.1.0" | 3 | const my_version = "0.1.0" |
4 | 4 | ||
5 | var SCRIPT_client | 5 | var SCRIPT_client |
6 | var SCRIPT_keyboard | ||
6 | var SCRIPT_locationListener | 7 | var SCRIPT_locationListener |
7 | var SCRIPT_uuid | 8 | var SCRIPT_uuid |
8 | var SCRIPT_victoryListener | 9 | var SCRIPT_victoryListener |
@@ -13,16 +14,30 @@ var ap_pass = "" | |||
13 | var connection_history = [] | 14 | var connection_history = [] |
14 | 15 | ||
15 | var client | 16 | var client |
17 | var keyboard | ||
16 | 18 | ||
17 | var _localdata_file = "" | 19 | var _localdata_file = "" |
18 | var _last_new_item = -1 | 20 | var _last_new_item = -1 |
19 | var _batch_locations = false | 21 | var _batch_locations = false |
20 | var _held_locations = [] | 22 | var _held_locations = [] |
21 | var _item_locks = {} | 23 | var _item_locks = {} |
24 | var _held_letters = {} | ||
25 | var _letters_setup = false | ||
26 | |||
27 | const kSHUFFLE_LETTERS_VANILLA = 0 | ||
28 | const kSHUFFLE_LETTERS_UNLOCKED = 1 | ||
29 | const kSHUFFLE_LETTERS_PROGRESSIVE = 2 | ||
30 | const kSHUFFLE_LETTERS_VANILLA_CYAN = 3 | ||
31 | const kSHUFFLE_LETTERS_ITEM_CYAN = 4 | ||
32 | |||
33 | const kLETTER_BEHAVIOR_VANILLA = 0 | ||
34 | const kLETTER_BEHAVIOR_ITEM = 1 | ||
35 | const kLETTER_BEHAVIOR_UNLOCKED = 2 | ||
22 | 36 | ||
23 | var daedalus_roof_access = false | 37 | var daedalus_roof_access = false |
24 | var keyholder_sanity = false | 38 | var keyholder_sanity = false |
25 | var shuffle_doors = false | 39 | var shuffle_doors = false |
40 | var shuffle_letters = kSHUFFLE_LETTERS_VANILLA | ||
26 | var victory_condition = -1 | 41 | var victory_condition = -1 |
27 | 42 | ||
28 | signal could_not_connect | 43 | signal could_not_connect |
@@ -66,6 +81,9 @@ func _ready(): | |||
66 | 81 | ||
67 | add_child(client) | 82 | add_child(client) |
68 | 83 | ||
84 | keyboard = SCRIPT_keyboard.new() | ||
85 | add_child(keyboard) | ||
86 | |||
69 | 87 | ||
70 | func saveSettings(): | 88 | func saveSettings(): |
71 | # Save the AP settings to disk. | 89 | # Save the AP settings to disk. |
@@ -100,6 +118,8 @@ func saveLocaldata(): | |||
100 | 118 | ||
101 | func connectToServer(): | 119 | func connectToServer(): |
102 | _last_new_item = -1 | 120 | _last_new_item = -1 |
121 | _letters_setup = false | ||
122 | _held_letters = {} | ||
103 | 123 | ||
104 | client.connectToServer(ap_server, ap_user, ap_pass) | 124 | client.connectToServer(ap_server, ap_user, ap_pass) |
105 | 125 | ||
@@ -140,11 +160,10 @@ func _process_item(item, index, from, flags, amount): | |||
140 | var rnode = scene.get_node_or_null(receiver) | 160 | var rnode = scene.get_node_or_null(receiver) |
141 | if rnode != null: | 161 | if rnode != null: |
142 | rnode.handleTriggered() | 162 | rnode.handleTriggered() |
143 | #for painting_id in gamedata.objects.get_doors()[door_id].get_move_paintings(): | 163 | |
144 | # var painting = gamedata.objects.get_paintings()[painting_id] | 164 | var letter_key = gamedata.letter_key_by_ap_id.get(item, null) |
145 | # var pnode = scene.get_node_or_null(painting.get_path() + "/teleportListener") | 165 | if letter_key != null: |
146 | # if pnode != null: | 166 | _process_key_item(letter_key, amount) |
147 | # pnode.handleTriggered() | ||
148 | 167 | ||
149 | # Show a message about the item if it's new. | 168 | # Show a message about the item if it's new. |
150 | if index != null and index > _last_new_item: | 169 | if index != null and index > _last_new_item: |
@@ -293,6 +312,7 @@ func _client_connected(slot_data): | |||
293 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) | 312 | daedalus_roof_access = bool(slot_data.get("daedalus_roof_access", false)) |
294 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) | 313 | keyholder_sanity = bool(slot_data.get("keyholder_sanity", false)) |
295 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) | 314 | shuffle_doors = bool(slot_data.get("shuffle_doors", false)) |
315 | shuffle_letters = int(slot_data.get("shuffle_letters", 0)) | ||
296 | victory_condition = int(slot_data.get("victory_condition", 0)) | 316 | victory_condition = int(slot_data.get("victory_condition", 0)) |
297 | 317 | ||
298 | # Set up item locks. | 318 | # Set up item locks. |
@@ -344,3 +364,47 @@ func colorForItemType(flags): | |||
344 | return "#d63a22" | 364 | return "#d63a22" |
345 | else: # filler | 365 | else: # filler |
346 | return "#14de9e" | 366 | return "#14de9e" |
367 | |||
368 | |||
369 | func get_letter_behavior(key, level2): | ||
370 | if shuffle_letters == kSHUFFLE_LETTERS_UNLOCKED: | ||
371 | return kLETTER_BEHAVIOR_UNLOCKED | ||
372 | |||
373 | if [kSHUFFLE_LETTERS_VANILLA_CYAN, kSHUFFLE_LETTERS_ITEM_CYAN].has(shuffle_letters): | ||
374 | if level2: | ||
375 | if shuffle_letters == kSHUFFLE_LETTERS_VANILLA_CYAN: | ||
376 | return kLETTER_BEHAVIOR_VANILLA | ||
377 | else: | ||
378 | return kLETTER_BEHAVIOR_ITEM | ||
379 | else: | ||
380 | return kLETTER_BEHAVIOR_UNLOCKED | ||
381 | |||
382 | if not level2 and ["h", "i", "n", "t"].has(key): | ||
383 | # This differs from the equivalent function in the apworld. Logically it is | ||
384 | # the same as UNLOCKED since they are in the starting room, but VANILLA | ||
385 | # means the player still has to actually pick up the letters. | ||
386 | return kLETTER_BEHAVIOR_VANILLA | ||
387 | |||
388 | if shuffle_letters == kSHUFFLE_LETTERS_PROGRESSIVE: | ||
389 | return kLETTER_BEHAVIOR_ITEM | ||
390 | |||
391 | return kLETTER_BEHAVIOR_VANILLA | ||
392 | |||
393 | |||
394 | func setup_keys(): | ||
395 | keyboard.load_seed() | ||
396 | |||
397 | _letters_setup = true | ||
398 | |||
399 | for k in _held_letters.keys(): | ||
400 | _process_key_item(k, _held_letters[k]) | ||
401 | |||
402 | _held_letters.clear() | ||
403 | |||
404 | |||
405 | func _process_key_item(key, level): | ||
406 | if not _letters_setup: | ||
407 | _held_letters[key] = max(_held_letters.get(key, 0), level) | ||
408 | return | ||
409 | |||
410 | keyboard.collect_remote_letter(key, level) | ||