diff options
Diffstat (limited to 'Archipelago/client.gd')
-rw-r--r-- | Archipelago/client.gd | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/Archipelago/client.gd b/Archipelago/client.gd index d1f95c8..13a7635 100644 --- a/Archipelago/client.gd +++ b/Archipelago/client.gd | |||
@@ -15,8 +15,10 @@ var ap_user = "" | |||
15 | var ap_pass = "" | 15 | var ap_pass = "" |
16 | var confusify_world = false | 16 | var confusify_world = false |
17 | var enable_multiplayer = false | 17 | var enable_multiplayer = false |
18 | var track_player = false | ||
19 | var connection_history = [] | ||
18 | 20 | ||
19 | const my_version = "sunwarps-beta2" | 21 | const my_version = "2.2.0" |
20 | const ap_version = {"major": 0, "minor": 4, "build": 5, "class": "Version"} | 22 | const ap_version = {"major": 0, "minor": 4, "build": 5, "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" |
@@ -110,6 +112,7 @@ var _item_name_to_id = {} # LINGO only | |||
110 | var _location_name_to_id = {} # LINGO only | 112 | var _location_name_to_id = {} # LINGO only |
111 | 113 | ||
112 | var _remote_version = {"major": 0, "minor": 0, "build": 0} | 114 | var _remote_version = {"major": 0, "minor": 0, "build": 0} |
115 | var _gen_version = {"major": 0, "minor": 0, "build": 0} | ||
113 | 116 | ||
114 | # TODO: caching per MW/slot, reset between connections | 117 | # TODO: caching per MW/slot, reset between connections |
115 | var _authenticated = false | 118 | var _authenticated = false |
@@ -151,6 +154,7 @@ var _puzzle_skips = 0 | |||
151 | var _cached_slowness = 0 | 154 | var _cached_slowness = 0 |
152 | var _cached_iceland = 0 | 155 | var _cached_iceland = 0 |
153 | var _cached_atbash = 0 | 156 | var _cached_atbash = 0 |
157 | var _geronimo_skip = false | ||
154 | 158 | ||
155 | signal could_not_connect | 159 | signal could_not_connect |
156 | signal connect_status | 160 | signal connect_status |
@@ -180,6 +184,10 @@ func _init(): | |||
180 | confusify_world = data[4] | 184 | confusify_world = data[4] |
181 | if data.size() > 5: | 185 | if data.size() > 5: |
182 | enable_multiplayer = data[5] | 186 | enable_multiplayer = data[5] |
187 | if data.size() > 6: | ||
188 | track_player = data[6] | ||
189 | if data.size() > 7: | ||
190 | connection_history = data[7] | ||
183 | 191 | ||
184 | processDatapackages() | 192 | processDatapackages() |
185 | 193 | ||
@@ -249,6 +257,7 @@ func _on_data(): | |||
249 | if cmd == "RoomInfo": | 257 | if cmd == "RoomInfo": |
250 | _seed = message["seed_name"] | 258 | _seed = message["seed_name"] |
251 | _remote_version = message["version"] | 259 | _remote_version = message["version"] |
260 | _gen_version = message["generator_version"] | ||
252 | 261 | ||
253 | var needed_games = [] | 262 | var needed_games = [] |
254 | for game in message["datapackage_checksums"].keys(): | 263 | for game in message["datapackage_checksums"].keys(): |
@@ -332,6 +341,11 @@ func _on_data(): | |||
332 | if _slot_data.has("sunwarp_permutation"): | 341 | if _slot_data.has("sunwarp_permutation"): |
333 | _sunwarp_mapping = _slot_data["sunwarp_permutation"] | 342 | _sunwarp_mapping = _slot_data["sunwarp_permutation"] |
334 | 343 | ||
344 | if track_player: | ||
345 | setValue("PlayerPos", {"x": 0, "z": 0}) | ||
346 | else: | ||
347 | setValue("PlayerPos", null) | ||
348 | |||
335 | _puzzle_skips = 0 | 349 | _puzzle_skips = 0 |
336 | 350 | ||
337 | _localdata_file = "user://archipelago_data/%s_%d" % [_seed, _slot] | 351 | _localdata_file = "user://archipelago_data/%s_%d" % [_seed, _slot] |
@@ -364,6 +378,11 @@ func _on_data(): | |||
364 | else: | 378 | else: |
365 | _cached_atbash = 0 | 379 | _cached_atbash = 0 |
366 | 380 | ||
381 | if localdata.size() > 5: | ||
382 | _geronimo_skip = localdata[5] | ||
383 | else: | ||
384 | _geronimo_skip = false | ||
385 | |||
367 | requestSync() | 386 | requestSync() |
368 | 387 | ||
369 | emit_signal("client_connected") | 388 | emit_signal("client_connected") |
@@ -499,7 +518,16 @@ func saveSettings(): | |||
499 | var file = File.new() | 518 | var file = File.new() |
500 | file.open("user://settings/archipelago", File.WRITE) | 519 | file.open("user://settings/archipelago", File.WRITE) |
501 | 520 | ||
502 | var data = [ap_server, ap_user, ap_pass, _datapackages, confusify_world, enable_multiplayer] | 521 | var data = [ |
522 | ap_server, | ||
523 | ap_user, | ||
524 | ap_pass, | ||
525 | _datapackages, | ||
526 | confusify_world, | ||
527 | enable_multiplayer, | ||
528 | track_player, | ||
529 | connection_history | ||
530 | ] | ||
503 | file.store_var(data, true) | 531 | file.store_var(data, true) |
504 | file.close() | 532 | file.close() |
505 | 533 | ||
@@ -523,7 +551,8 @@ func saveLocaldata(): | |||
523 | _puzzle_skips, | 551 | _puzzle_skips, |
524 | effects_node.slowness_remaining, | 552 | effects_node.slowness_remaining, |
525 | effects_node.iceland_remaining, | 553 | effects_node.iceland_remaining, |
526 | effects_node.atbash_remaining | 554 | effects_node.atbash_remaining, |
555 | _geronimo_skip | ||
527 | ] | 556 | ] |
528 | file.store_var(data, true) | 557 | file.store_var(data, true) |
529 | file.close() | 558 | file.close() |
@@ -777,6 +806,15 @@ func usePuzzleSkip(): | |||
777 | saveLocaldata() | 806 | saveLocaldata() |
778 | 807 | ||
779 | 808 | ||
809 | func geronimo(): | ||
810 | if !_geronimo_skip: | ||
811 | messages.showMessage("Geronimo! You found a puzzle skip.") | ||
812 | |||
813 | _puzzle_skips += 1 | ||
814 | _geronimo_skip = true | ||
815 | saveLocaldata() | ||
816 | |||
817 | |||
780 | func colorForItemType(flags): | 818 | func colorForItemType(flags): |
781 | var int_flags = int(flags) | 819 | var int_flags = int(flags) |
782 | if int_flags & 1: # progression | 820 | if int_flags & 1: # progression |
@@ -787,3 +825,17 @@ func colorForItemType(flags): | |||
787 | return "#d63a22" | 825 | return "#d63a22" |
788 | else: # filler | 826 | else: # filler |
789 | return "#14de9e" | 827 | return "#14de9e" |
828 | |||
829 | |||
830 | func compareVersion(lhs, rhs): | ||
831 | if lhs["major"] == rhs["major"]: | ||
832 | if lhs["minor"] == rhs["minor"]: | ||
833 | return lhs["build"] < rhs["build"] | ||
834 | else: | ||
835 | return lhs["minor"] < rhs["minor"] | ||
836 | else: | ||
837 | return lhs["major"] < rhs["major"] | ||
838 | |||
839 | |||
840 | func wasGeneratedBeforeVersion(major, minor, build): | ||
841 | return compareVersion(_gen_version, {"major": major, "minor": minor, "build": build}) | ||