diff options
Diffstat (limited to 'Archipelago/client.gd')
-rw-r--r-- | Archipelago/client.gd | 153 |
1 files changed, 88 insertions, 65 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index 6fe2cab..0944352 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd | |||
@@ -7,6 +7,7 @@ var SCRIPT_multiplayer | |||
7 | var SCRIPT_mypainting | 7 | var SCRIPT_mypainting |
8 | var SCRIPT_notifier | 8 | var SCRIPT_notifier |
9 | var SCRIPT_panel | 9 | var SCRIPT_panel |
10 | var SCRIPT_pilgrimage_terminator | ||
10 | var SCRIPT_uuid | 11 | var SCRIPT_uuid |
11 | 12 | ||
12 | var ap_server = "" | 13 | var ap_server = "" |
@@ -15,55 +16,24 @@ var ap_pass = "" | |||
15 | var confusify_world = false | 16 | var confusify_world = false |
16 | var enable_multiplayer = false | 17 | var enable_multiplayer = false |
17 | var track_player = false | 18 | var track_player = false |
19 | var connection_history = [] | ||
18 | 20 | ||
19 | const my_version = "2.1.1" | 21 | const my_version = "3.0.1" |
20 | const ap_version = {"major": 0, "minor": 4, "build": 5, "class": "Version"} | 22 | const ap_version = {"major": 0, "minor": 4, "build": 6, "class": "Version"} |
21 | const color_items = [ | 23 | const color_items = [ |
22 | "White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow" | 24 | "White", "Black", "Red", "Blue", "Green", "Brown", "Gray", "Orange", "Purple", "Yellow" |
23 | ] | 25 | ] |
24 | const door_progressive_items = { | 26 | const door_progressive_items = { |
25 | "Progressive Orange Tower": | 27 | "Progressive Orange Tower": |
26 | [ | 28 | ["Second Floor", "Third Floor", "Fourth Floor", "Fifth Floor", "Sixth Floor", "Seventh Floor"], |
27 | {"item": "Orange Tower - Second Floor", "display": "Second Floor"}, | ||
28 | {"item": "Orange Tower - Third Floor", "display": "Third Floor"}, | ||
29 | {"item": "Orange Tower - Fourth Floor", "display": "Fourth Floor"}, | ||
30 | {"item": "Orange Tower - Fifth Floor", "display": "Fifth Floor"}, | ||
31 | {"item": "Orange Tower - Sixth Floor", "display": "Sixth Floor"}, | ||
32 | {"item": "Orange Tower - Seventh Floor", "display": "Seventh Floor"}, | ||
33 | ], | ||
34 | "Progressive Art Gallery": | 29 | "Progressive Art Gallery": |
35 | [ | 30 | ["Second Floor", "Third Floor", "Fourth Floor", "Fifth Floor", "Exit"], |
36 | {"item": "Art Gallery - Second Floor", "display": "Second Floor"}, | 31 | "Progressive Hallway Room": ["First Door", "Second Door", "Third Door", "Fourth Door"], |
37 | {"item": "Art Gallery - Third Floor", "display": "Third Floor"}, | 32 | "Progressive Fearless": ["Second Floor", "Third Floor"], |
38 | {"item": "Art Gallery - Fourth Floor", "display": "Fourth Floor"}, | ||
39 | {"item": "Art Gallery - Fifth Floor", "display": "Fifth Floor"}, | ||
40 | {"item": "Art Gallery - Exit", "display": "Exit"}, | ||
41 | ], | ||
42 | "Progressive Hallway Room": | ||
43 | [ | ||
44 | {"item": "Outside The Agreeable - Hallway Door", "display": "First Door"}, | ||
45 | {"item": "Hallway Room (2) - Exit", "display": "Second Door"}, | ||
46 | {"item": "Hallway Room (3) - Exit", "display": "Third Door"}, | ||
47 | {"item": "Hallway Room (4) - Exit", "display": "Fourth Door"}, | ||
48 | ], | ||
49 | "Progressive Fearless": | ||
50 | [ | ||
51 | {"item": "The Fearless (First Floor) - Second Floor", "display": "Second Floor"}, | ||
52 | {"item": "The Fearless (Second Floor) - Third Floor", "display": "Third Floor"}, | ||
53 | ], | ||
54 | "Progressive Colorful": | 33 | "Progressive Colorful": |
55 | [ | 34 | ["White", "Black", "Red", "Yellow", "Blue", "Purple", "Orange", "Green", "Brown", "Gray"], |
56 | {"item": "The Colorful - White Door", "display": "White"}, | 35 | "Progressive Pilgrimage": |
57 | {"item": "The Colorful - Black Door", "display": "Black"}, | 36 | ["1 Sunwarp", "2 Sunwarp", "3 Sunwarp", "4 Sunwarp", "5 Sunwarp", "6 Sunwarp"] |
58 | {"item": "The Colorful - Red Door", "display": "Red"}, | ||
59 | {"item": "The Colorful - Yellow Door", "display": "Yellow"}, | ||
60 | {"item": "The Colorful - Blue Door", "display": "Blue"}, | ||
61 | {"item": "The Colorful - Purple Door", "display": "Purple"}, | ||
62 | {"item": "The Colorful - Orange Door", "display": "Orange"}, | ||
63 | {"item": "The Colorful - Green Door", "display": "Green"}, | ||
64 | {"item": "The Colorful - Brown Door", "display": "Brown"}, | ||
65 | {"item": "The Colorful - Gray Door", "display": "Gray"}, | ||
66 | ] | ||
67 | } | 37 | } |
68 | const panel_progressive_items = { | 38 | const panel_progressive_items = { |
69 | "Progressive Hallway Room": | 39 | "Progressive Hallway Room": |
@@ -103,6 +73,7 @@ const panel_progressive_items = { | |||
103 | const kTHE_END = 0 | 73 | const kTHE_END = 0 |
104 | const kTHE_MASTER = 1 | 74 | const kTHE_MASTER = 1 |
105 | const kLEVEL_2 = 2 | 75 | const kLEVEL_2 = 2 |
76 | const kPILGRIMAGE = 3 | ||
106 | 77 | ||
107 | const kNO_PANEL_SHUFFLE = 0 | 78 | const kNO_PANEL_SHUFFLE = 0 |
108 | const kREARRANGE_PANELS = 1 | 79 | const kREARRANGE_PANELS = 1 |
@@ -115,6 +86,12 @@ const kCLASSIFICATION_REMOTE_NORMAL = 0 | |||
115 | const kCLASSIFICATION_REMOTE_REDUCED = 1 | 86 | const kCLASSIFICATION_REMOTE_REDUCED = 1 |
116 | const kCLASSIFICATION_REMOTE_INSANITY = 2 | 87 | const kCLASSIFICATION_REMOTE_INSANITY = 2 |
117 | 88 | ||
89 | const kSUNWARP_ACCESS_NORMAL = 0 | ||
90 | const kSUNWARP_ACCESS_DISABLED = 1 | ||
91 | const kSUNWARP_ACCESS_UNLOCK = 2 | ||
92 | const kSUNWARP_ACCESS_INDIVIDUAL = 3 | ||
93 | const kSUNWARP_ACCESS_PROGRESSIVE = 4 | ||
94 | |||
118 | var _client = WebSocketClient.new() | 95 | var _client = WebSocketClient.new() |
119 | var _should_process = false | 96 | var _should_process = false |
120 | var _initiated_disconnect = false | 97 | var _initiated_disconnect = false |
@@ -148,10 +125,17 @@ var _panel_door_shuffle = false | |||
148 | var _color_shuffle = false | 125 | var _color_shuffle = false |
149 | var _panel_shuffle = 0 # none, rearrange | 126 | var _panel_shuffle = 0 # none, rearrange |
150 | var _painting_shuffle = false | 127 | var _painting_shuffle = false |
128 | var _sunwarp_access = 0 # normal, disabled, unlock, progressive | ||
151 | var _mastery_achievements = 21 | 129 | var _mastery_achievements = 21 |
152 | var _level_2_requirement = 223 | 130 | var _level_2_requirement = 223 |
153 | var _location_classification_bit = 0 | 131 | var _location_classification_bit = 0 |
154 | var _early_color_hallways = false | 132 | var _early_color_hallways = false |
133 | var _pilgrimage_compatibility = false # set to true for pre-0.4.6 | ||
134 | var _pilgrimage_enabled = false | ||
135 | var _pilgrimage_allows_roof_access = false | ||
136 | var _pilgrimage_allows_paintings = false | ||
137 | var _sunwarp_shuffle = false | ||
138 | var _sunwarp_mapping = [] | ||
155 | var _slot_seed = 0 | 139 | var _slot_seed = 0 |
156 | 140 | ||
157 | var _map_loaded = false | 141 | var _map_loaded = false |
@@ -197,6 +181,8 @@ func _init(): | |||
197 | enable_multiplayer = data[5] | 181 | enable_multiplayer = data[5] |
198 | if data.size() > 6: | 182 | if data.size() > 6: |
199 | track_player = data[6] | 183 | track_player = data[6] |
184 | if data.size() > 7: | ||
185 | connection_history = data[7] | ||
200 | 186 | ||
201 | processDatapackages() | 187 | processDatapackages() |
202 | 188 | ||
@@ -325,6 +311,10 @@ func _on_data(): | |||
325 | _painting_shuffle = _slot_data["shuffle_paintings"] | 311 | _painting_shuffle = _slot_data["shuffle_paintings"] |
326 | if _slot_data.has("shuffle_panels"): | 312 | if _slot_data.has("shuffle_panels"): |
327 | _panel_shuffle = _slot_data["shuffle_panels"] | 313 | _panel_shuffle = _slot_data["shuffle_panels"] |
314 | if _slot_data.has("sunwarp_access"): | ||
315 | _sunwarp_access = _slot_data["sunwarp_access"] | ||
316 | else: | ||
317 | _sunwarp_access = kSUNWARP_ACCESS_NORMAL | ||
328 | if _slot_data.has("seed"): | 318 | if _slot_data.has("seed"): |
329 | _slot_seed = _slot_data["seed"] | 319 | _slot_seed = _slot_data["seed"] |
330 | if _slot_data.has("painting_entrance_to_exit"): | 320 | if _slot_data.has("painting_entrance_to_exit"): |
@@ -342,6 +332,25 @@ func _on_data(): | |||
342 | _location_classification_bit = kCLASSIFICATION_LOCAL_INSANITY | 332 | _location_classification_bit = kCLASSIFICATION_LOCAL_INSANITY |
343 | if _slot_data.has("early_color_hallways"): | 333 | if _slot_data.has("early_color_hallways"): |
344 | _early_color_hallways = _slot_data["early_color_hallways"] | 334 | _early_color_hallways = _slot_data["early_color_hallways"] |
335 | if _slot_data.has("enable_pilgrimage"): | ||
336 | _pilgrimage_enabled = _slot_data["enable_pilgrimage"] | ||
337 | else: | ||
338 | _pilgrimage_compatibility = true | ||
339 | _pilgrimage_enabled = true | ||
340 | if _slot_data.has("pilgrimage_allows_roof_access"): | ||
341 | _pilgrimage_allows_roof_access = _slot_data["pilgrimage_allows_roof_access"] | ||
342 | else: | ||
343 | _pilgrimage_allows_roof_access = true | ||
344 | if _slot_data.has("pilgrimage_allows_paintings"): | ||
345 | _pilgrimage_allows_paintings = _slot_data["pilgrimage_allows_paintings"] | ||
346 | else: | ||
347 | _pilgrimage_allows_paintings = true | ||
348 | if _slot_data.has("shuffle_sunwarps"): | ||
349 | _sunwarp_shuffle = _slot_data["shuffle_sunwarps"] | ||
350 | else: | ||
351 | _sunwarp_shuffle = false | ||
352 | if _slot_data.has("sunwarp_permutation"): | ||
353 | _sunwarp_mapping = _slot_data["sunwarp_permutation"] | ||
345 | 354 | ||
346 | if track_player: | 355 | if track_player: |
347 | setValue("PlayerPos", {"x": 0, "z": 0}) | 356 | setValue("PlayerPos", {"x": 0, "z": 0}) |
@@ -527,7 +536,8 @@ func saveSettings(): | |||
527 | _datapackages, | 536 | _datapackages, |
528 | confusify_world, | 537 | confusify_world, |
529 | enable_multiplayer, | 538 | enable_multiplayer, |
530 | track_player | 539 | track_player, |
540 | connection_history | ||
531 | ] | 541 | ] |
532 | file.store_var(data, true) | 542 | file.store_var(data, true) |
533 | file.close() | 543 | file.close() |
@@ -730,26 +740,35 @@ func processItem(item, index, from, flags): | |||
730 | if painting_node != null: | 740 | if painting_node != null: |
731 | painting_node.get_node("Script").movePainting() | 741 | painting_node.get_node("Script").movePainting() |
732 | 742 | ||
743 | if gamedata.warp_ids_by_item_id.has(int(item)): | ||
744 | var warpsNode = get_tree().get_root().get_node("Spatial/Warps") | ||
745 | for warp_id in gamedata.warp_ids_by_item_id[int(item)]: | ||
746 | warpsNode.get_node(warp_id).unlock_warp() | ||
747 | |||
733 | # Handle progressive items. | 748 | # Handle progressive items. |
734 | if _door_shuffle and item_name in door_progressive_items.keys(): | 749 | var is_progressive_door = int(item) in gamedata.door_items_by_progressive_id |
735 | if not item_name in _progressive_progress: | 750 | var is_progressive_panel = int(item) in gamedata.panel_items_by_progressive_id |
736 | _progressive_progress[item_name] = 0 | 751 | var progitems = null |
737 | 752 | ||
738 | if _progressive_progress[item_name] < door_progressive_items[item_name].size(): | 753 | if is_progressive_door and is_progressive_panel: |
739 | var subitem_name = door_progressive_items[item_name][_progressive_progress[item_name]]["item"] | 754 | if _door_shuffle: |
740 | global._print(subitem_name) | 755 | progitems = gamedata.door_items_by_progressive_id[int(item)] |
741 | processItem(_item_name_to_id[subitem_name], null, null, null) | 756 | else: |
742 | _progressive_progress[item_name] += 1 | 757 | progitems = gamedata.panel_items_by_progressive_id[int(item)] |
743 | 758 | elif is_progressive_door: | |
744 | if _panel_door_shuffle and item_name in panel_progressive_items.keys(): | 759 | progitems = gamedata.door_items_by_progressive_id[int(item)] |
745 | if not item_name in _progressive_progress: | 760 | elif is_progressive_panel: |
746 | _progressive_progress[item_name] = 0 | 761 | progitems = gamedata.panel_items_by_progressive_id[int(item)] |
747 | 762 | ||
748 | if _progressive_progress[item_name] < panel_progressive_items[item_name].size(): | 763 | if progitems != null: |
749 | var subitem_name = panel_progressive_items[item_name][_progressive_progress[item_name]]["item"] | 764 | if not int(item) in _progressive_progress: |
750 | global._print(subitem_name) | 765 | _progressive_progress[int(item)] = 0 |
751 | processItem(_item_name_to_id[subitem_name], null, null, null) | 766 | |
752 | _progressive_progress[item_name] += 1 | 767 | if _progressive_progress[int(item)] < progitems.size(): |
768 | var subitem_id = progitems[_progressive_progress[int(item)]] | ||
769 | global._print("Subitem: %d" % subitem_id) | ||
770 | processItem(subitem_id, null, null, null) | ||
771 | _progressive_progress[int(item)] += 1 | ||
753 | 772 | ||
754 | if _color_shuffle and color_items.has(_item_id_to_name[item]): | 773 | if _color_shuffle and color_items.has(_item_id_to_name[item]): |
755 | var lcol = _item_id_to_name[item].to_lower() | 774 | var lcol = _item_id_to_name[item].to_lower() |
@@ -763,11 +782,11 @@ func processItem(item, index, from, flags): | |||
763 | saveLocaldata() | 782 | saveLocaldata() |
764 | 783 | ||
765 | if _door_shuffle and item_name in door_progressive_items: | 784 | if _door_shuffle and item_name in door_progressive_items: |
766 | var subitem = door_progressive_items[item_name][_progressive_progress[item_name] - 1] | 785 | var subitem = door_progressive_items[item_name][_progressive_progress[int(item)] - 1] |
767 | item_name += " (%s)" % subitem["display"] | 786 | item_name += " (%s)" % subitem["display"] |
768 | 787 | ||
769 | if _panel_door_shuffle and item_name in panel_progressive_items: | 788 | if _panel_door_shuffle and item_name in panel_progressive_items: |
770 | var subitem = panel_progressive_items[item_name][_progressive_progress[item_name] - 1] | 789 | var subitem = panel_progressive_items[item_name][_progressive_progress[int(item)] - 1] |
771 | item_name += " (%s)" % subitem["display"] | 790 | item_name += " (%s)" % subitem["display"] |
772 | 791 | ||
773 | var player_name = "Unknown" | 792 | var player_name = "Unknown" |
@@ -804,6 +823,10 @@ func paintingIsVanilla(painting): | |||
804 | return !$Gamedata.mentioned_paintings.has(painting) | 823 | return !$Gamedata.mentioned_paintings.has(painting) |
805 | 824 | ||
806 | 825 | ||
826 | func warpIsVanilla(warp): | ||
827 | return !$Gamedata.mentioned_warps.has(warp) | ||
828 | |||
829 | |||
807 | func evaluateSolvability(): | 830 | func evaluateSolvability(): |
808 | emit_signal("evaluate_solvability") | 831 | emit_signal("evaluate_solvability") |
809 | 832 | ||
@@ -849,5 +872,5 @@ func compareVersion(lhs, rhs): | |||
849 | return lhs["major"] < rhs["major"] | 872 | return lhs["major"] < rhs["major"] |
850 | 873 | ||
851 | 874 | ||
852 | func wasGeneratedBeforeVersion(rhs): | 875 | func wasGeneratedBeforeVersion(major, minor, build): |
853 | return compareVersion(_gen_version, rhs) | 876 | return compareVersion(_gen_version, {"major": major, "minor": minor, "build": build}) |