extends Node var ap_server = "" var ap_user = "" var ap_pass = "" const my_version = "0.1.0" const ap_version = {"major": 0, "minor": 4, "build": 0, "class": "Version"} const orange_tower = ["Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh"] const color_items = [ "White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow" ] const kTHE_END = 0 const kTHE_MASTER = 1 const kNO_PANEL_SHUFFLE = 0 const kREARRANGE_PANELS = 1 var _client = WebSocketClient.new() var _should_process = false var _initiated_disconnect = false var _datapackages = {} var _item_id_to_name = {} # All games var _location_id_to_name = {} # All games var _item_name_to_id = {} # LINGO only var _location_name_to_id = {} # LINGO only var _remote_version = {"major": 0, "minor": 0, "build": 0} const uuid_util = preload("user://maps/Archipelago/vendor/uuid.gd") # TODO: caching per MW/slot, reset between connections var _authenticated = false var _seed = "" var _team = 0 var _slot = 0 var _players = [] var _player_name_by_slot = {} var _checked_locations = [] var _slot_data = {} var _door_ids_by_item = {} var _mentioned_doors = [] var _painting_ids_by_item = {} var _mentioned_paintings = [] var _panel_ids_by_location = {} var _paintings = {} var _paintings_mapping = {} var _localdata_file = "" var _death_link = false var _victory_condition = 0 # THE END, THE MASTER var _door_shuffle = false var _color_shuffle = false var _panel_shuffle = 0 # none, rearrange var _painting_shuffle = false var _slot_seed = 0 var _map_loaded = false var _held_items = [] var _held_locations = [] var _last_new_item = -1 var _tower_floors = 0 var _has_colors = ["white"] signal could_not_connect signal client_connected signal evaluate_solvability func _init(): global._print("Instantiated APClient") # Read AP settings from file, if there are any var file = File.new() if file.file_exists("user://settings/archipelago"): file.open("user://settings/archipelago", File.READ) var data = file.get_var(true) file.close() if data.size() > 0: ap_server = data[0] if data.size() > 1: ap_user = data[1] if data.size() > 2: ap_pass = data[2] if data.size() > 3: _datapackages = data[3] processDatapackages() func _ready(): _client.connect("connection_closed", self, "_closed") _client.connect("connection_failed", self, "_closed") _client.connect("server_disconnected", self, "_closed") _client.connect("connection_error", self, "_errored") _client.connect("connection_established", self, "_connected") _client.connect("data_received", self, "_on_data") func _reset_state(): _should_process = false _authenticated = false _map_loaded = false func _errored(): global._print("AP connection failed") _reset_state() emit_signal( "could_not_connect", "Could not connect to Archipelago. Check that your server and port are correct. See the error log for more information." ) func _closed(_was_clean = true): global._print("Connection closed") _reset_state() if not _initiated_disconnect: emit_signal("could_not_connect", "Disconnected from Archipelago") _initiated_disconnect = false func _connected(_proto = ""): global._print("Connected!") func disconnect_from_ap(): _initiated_disconnect = true _client.disconnect_from_host() func _on_data(): var packet = _client.get_peer(1).get_packet() global._print("Got data from server: " + packet.get_string_from_utf8()) var data = JSON.parse(packet.get_string_from_utf8()) if data.error != OK: global._print("Error parsing packet from AP: " + data.error_string) return for message in data.result: var cmd = message["cmd"] global._print("Received command: " + cmd) if cmd == "RoomInfo": _seed = message["seed_name"] _remote_version = message["version"] var needed_games = [] for game in message["datapackage_checksums"].ke
display_name: "The Keen"