summary refs log tree commit diff stats
path: root/client/Archipelago/manager.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/manager.gd')
-rw-r--r--client/Archipelago/manager.gd74
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
3const my_version = "0.1.0" 3const my_version = "0.1.0"
4 4
5var SCRIPT_client 5var SCRIPT_client
6var SCRIPT_keyboard
6var SCRIPT_locationListener 7var SCRIPT_locationListener
7var SCRIPT_uuid 8var SCRIPT_uuid
8var SCRIPT_victoryListener 9var SCRIPT_victoryListener
@@ -13,16 +14,30 @@ var ap_pass = ""
13var connection_history = [] 14var connection_history = []
14 15
15var client 16var client
17var keyboard
16 18
17var _localdata_file = "" 19var _localdata_file = ""
18var _last_new_item = -1 20var _last_new_item = -1
19var _batch_locations = false 21var _batch_locations = false
20var _held_locations = [] 22var _held_locations = []
21var _item_locks = {} 23var _item_locks = {}
24var _held_letters = {}
25var _letters_setup = false
26
27const kSHUFFLE_LETTERS_VANILLA = 0
28const kSHUFFLE_LETTERS_UNLOCKED = 1
29const kSHUFFLE_LETTERS_PROGRESSIVE = 2
30const kSHUFFLE_LETTERS_VANILLA_CYAN = 3
31const kSHUFFLE_LETTERS_ITEM_CYAN = 4
32
33const kLETTER_BEHAVIOR_VANILLA = 0
34const kLETTER_BEHAVIOR_ITEM = 1
35const kLETTER_BEHAVIOR_UNLOCKED = 2
22 36
23var daedalus_roof_access = false 37var daedalus_roof_access = false
24var keyholder_sanity = false 38var keyholder_sanity = false
25var shuffle_doors = false 39var shuffle_doors = false
40var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
26var victory_condition = -1 41var victory_condition = -1
27 42
28signal could_not_connect 43signal 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
70func saveSettings(): 88func saveSettings():
71 # Save the AP settings to disk. 89 # Save the AP settings to disk.
@@ -100,6 +118,8 @@ func saveLocaldata():
100 118
101func connectToServer(): 119func 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
369func 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
394func 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
405func _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)