about 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.gd60
1 files changed, 43 insertions, 17 deletions
diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 218870c..608a106 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd
@@ -46,11 +46,13 @@ var apworld_version = [0, 0]
46var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 46var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2
47var daedalus_roof_access = false 47var daedalus_roof_access = false
48var keyholder_sanity = false 48var keyholder_sanity = false
49var port_pairings = {}
49var shuffle_control_center_colors = false 50var shuffle_control_center_colors = false
50var shuffle_doors = false 51var shuffle_doors = false
51var shuffle_gallery_paintings = false 52var shuffle_gallery_paintings = false
52var shuffle_letters = kSHUFFLE_LETTERS_VANILLA 53var shuffle_letters = kSHUFFLE_LETTERS_VANILLA
53var shuffle_symbols = false 54var shuffle_symbols = false
55var shuffle_worldports = false
54var strict_cyan_ending = false 56var strict_cyan_ending = false
55var strict_purple_ending = false 57var strict_purple_ending = false
56var victory_condition = -1 58var victory_condition = -1
@@ -207,8 +209,6 @@ func _process_item(item, index, from, flags, amount):
207 if client._player_name_by_slot.has(float(from)): 209 if client._player_name_by_slot.has(float(from)):
208 player_name = client._player_name_by_slot[float(from)] 210 player_name = client._player_name_by_slot[float(from)]
209 211
210 var item_color = colorForItemType(flags)
211
212 var full_item_name = item_name 212 var full_item_name = item_name
213 if prog_id != null: 213 if prog_id != null:
214 var door = gamedata.objects.get_doors()[prog_id] 214 var door = gamedata.objects.get_doors()[prog_id]
@@ -216,10 +216,10 @@ func _process_item(item, index, from, flags, amount):
216 216
217 var message 217 var message
218 if from == client._slot: 218 if from == client._slot:
219 message = "Found [color=%s]%s[/color]" % [item_color, full_item_name] 219 message = "Found %s" % wrapInItemColorTags(full_item_name, flags)
220 else: 220 else:
221 message = ( 221 message = (
222 "Received [color=%s]%s[/color] from %s" % [item_color, full_item_name, player_name] 222 "Received %s from %s" % [wrapInItemColorTags(full_item_name, flags), player_name]
223 ) 223 )
224 224
225 if gamedata.anti_trap_ids.has(item): 225 if gamedata.anti_trap_ids.has(item):
@@ -265,13 +265,20 @@ func _process_message(message):
265 if !message.has("found") || !message["found"]: 265 if !message.has("found") || !message["found"]:
266 global.get_node("Messages").showMessage( 266 global.get_node("Messages").showMessage(
267 ( 267 (
268 "Hint: [color=%s]%s[/color]%s is on %s" 268 "Hint: %s%s is on %s"
269 % [item_color, item_name, is_for, location_name] 269 % [
270 wrapInItemColorTags(item_name, message["item"]["flags"]),
271 is_for,
272 location_name
273 ]
270 ) 274 )
271 ) 275 )
272 else: 276 else:
273 if message["receiving"] != client._slot: 277 if message["receiving"] != client._slot:
274 var sentMsg = "Sent [color=%s]%s[/color] to %s" % [item_color, item_name, player_name] 278 var sentMsg = (
279 "Sent %s to %s"
280 % [wrapInItemColorTags(item_name, message["item"]["flags"]), player_name]
281 )
275 #if _hinted_locations.has(message["item"]["location"]): 282 #if _hinted_locations.has(message["item"]["location"]):
276 # sentMsg += " ([color=#fafad2]Hinted![/color])" 283 # sentMsg += " ([color=#fafad2]Hinted![/color])"
277 global.get_node("Messages").showMessage(sentMsg) 284 global.get_node("Messages").showMessage(sentMsg)
@@ -296,9 +303,7 @@ func parse_printjson_for_textclient(message):
296 if client._item_id_to_name[item_player_game].has(int(message_part["text"])): 303 if client._item_id_to_name[item_player_game].has(int(message_part["text"])):
297 item_name = client._item_id_to_name[item_player_game][int(message_part["text"])] 304 item_name = client._item_id_to_name[item_player_game][int(message_part["text"])]
298 305
299 parts.append( 306 parts.append(wrapInItemColorTags(item_name, message_part["flags"]))
300 "[color=%s]%s[/color]" % [colorForItemType(message_part["flags"]), item_name]
301 )
302 elif message_part["type"] == "location_id": 307 elif message_part["type"] == "location_id":
303 var location_name = "Unknown" 308 var location_name = "Unknown"
304 var location_player_game = client._game_by_player[message_part["player"]] 309 var location_player_game = client._game_by_player[message_part["player"]]
@@ -380,6 +385,7 @@ func _client_connected(slot_data):
380 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false)) 385 shuffle_gallery_paintings = bool(slot_data.get("shuffle_gallery_paintings", false))
381 shuffle_letters = int(slot_data.get("shuffle_letters", 0)) 386 shuffle_letters = int(slot_data.get("shuffle_letters", 0))
382 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) 387 shuffle_symbols = bool(slot_data.get("shuffle_symbols", false))
388 shuffle_worldports = bool(slot_data.get("shuffle_worldports", false))
383 strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false)) 389 strict_cyan_ending = bool(slot_data.get("strict_cyan_ending", false))
384 strict_purple_ending = bool(slot_data.get("strict_purple_ending", false)) 390 strict_purple_ending = bool(slot_data.get("strict_purple_ending", false))
385 victory_condition = int(slot_data.get("victory_condition", 0)) 391 victory_condition = int(slot_data.get("victory_condition", 0))
@@ -387,6 +393,13 @@ func _client_connected(slot_data):
387 if slot_data.has("version"): 393 if slot_data.has("version"):
388 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])] 394 apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])]
389 395
396 port_pairings.clear()
397 if slot_data.has("port_pairings"):
398 var raw_pp = slot_data.get("port_pairings")
399
400 for p1 in raw_pp.keys():
401 port_pairings[int(p1)] = int(raw_pp[p1])
402
390 # Set up item locks. 403 # Set up item locks.
391 _item_locks = {} 404 _item_locks = {}
392 405
@@ -404,12 +417,14 @@ func _client_connected(slot_data):
404 _item_locks[door.get_id()] = [progressive.get_ap_id(), i + 1] 417 _item_locks[door.get_id()] = [progressive.get_ap_id(), i + 1]
405 418
406 for door_group in gamedata.objects.get_door_groups(): 419 for door_group in gamedata.objects.get_door_groups():
407 if ( 420 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR:
408 door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.CONNECTOR 421 if shuffle_worldports:
409 or door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP 422 continue
410 ): 423 elif door_group.get_type() != gamedata.SCRIPT_proto.DoorGroupType.SHUFFLE_GROUP:
411 for door in door_group.get_doors(): 424 continue
412 _item_locks[door] = [door_group.get_ap_id(), 1] 425
426 for door in door_group.get_doors():
427 _item_locks[door] = [door_group.get_ap_id(), 1]
413 428
414 if shuffle_control_center_colors: 429 if shuffle_control_center_colors:
415 for door in gamedata.objects.get_doors(): 430 for door in gamedata.objects.get_doors():
@@ -417,7 +432,10 @@ func _client_connected(slot_data):
417 _item_locks[door.get_id()] = [door.get_ap_id(), 1] 432 _item_locks[door.get_id()] = [door.get_ap_id(), 1]
418 433
419 for door_group in gamedata.objects.get_door_groups(): 434 for door_group in gamedata.objects.get_door_groups():
420 if door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR: 435 if (
436 door_group.get_type() == gamedata.SCRIPT_proto.DoorGroupType.COLOR_CONNECTOR
437 and not shuffle_worldports
438 ):
421 for door in door_group.get_doors(): 439 for door in door_group.get_doors():
422 _item_locks[door] = [door_group.get_ap_id(), 1] 440 _item_locks[door] = [door_group.get_ap_id(), 1]
423 441
@@ -497,6 +515,14 @@ func colorForItemType(flags):
497 return "#14de9e" 515 return "#14de9e"
498 516
499 517
518func wrapInItemColorTags(text, flags):
519 var int_flags = int(flags)
520 if int_flags & 1 and int_flags & 2: # proguseful
521 return "[rainbow]%s[/rainbow]" % text
522 else:
523 return "[color=%s]%s[/color]" % [colorForItemType(flags), text]
524
525
500func get_letter_behavior(key, level2): 526func get_letter_behavior(key, level2):
501 if shuffle_letters == kSHUFFLE_LETTERS_UNLOCKED: 527 if shuffle_letters == kSHUFFLE_LETTERS_UNLOCKED:
502 return kLETTER_BEHAVIOR_UNLOCKED 528 return kLETTER_BEHAVIOR_UNLOCKED