From 67b721503443274351e0729ac57cbff83d31d753 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 12 Sep 2025 11:53:58 -0400 Subject: [Client] Warn when major version doesn't match --- client/Archipelago/manager.gd | 4 ++++ client/Archipelago/settings_screen.gd | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) (limited to 'client/Archipelago') diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 32882c2..ff1e980 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -41,6 +41,7 @@ const kCYAN_DOOR_BEHAVIOR_H2 = 0 const kCYAN_DOOR_BEHAVIOR_DOUBLE_LETTER = 1 const kCYAN_DOOR_BEHAVIOR_ITEM = 2 +var apworld_version = [0, 0] var cyan_door_behavior = kCYAN_DOOR_BEHAVIOR_H2 var daedalus_roof_access = false var keyholder_sanity = false @@ -367,6 +368,9 @@ func _client_connected(slot_data): shuffle_symbols = bool(slot_data.get("shuffle_symbols", false)) victory_condition = int(slot_data.get("victory_condition", 0)) + if slot_data.has("version"): + apworld_version = [int(slot_data["version"][0]), int(slot_data["version"][1])] + # Set up item locks. _item_locks = {} diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 81e7d3f..14975e5 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -100,6 +100,10 @@ func _ready(): $Panel/player_box.add_theme_font_size_override("font_size", 36) $Panel/password_box.add_theme_font_size_override("font_size", 36) + # Set up version mismatch dialog. + $Panel/VersionMismatch.connect("confirmed", startGame) + $Panel/VersionMismatch.get_cancel_button().pressed.connect(versionMismatchDeclined) + # Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd func installScriptExtension(childScript: Resource): @@ -129,6 +133,33 @@ func connectionStatus(message): func connectionSuccessful(): var ap = global.get_node("Archipelago") + var gamedata = global.get_node("Gamedata") + + # Check for major version mismatch. + if ap.apworld_version[0] != gamedata.objects.get_version(): + $Panel/AcceptDialog.exclusive = false + + var popup = self.get_node("Panel/VersionMismatch") + popup.title = "Version Mismatch!" + popup.dialog_text = ( + "This slot was generated using v%d.%d of the Lingo 2 apworld,\nwhich has a different major version than this client (v%d.%d).\nIt is highly recommended to play using the correct version of the client.\nYou may experience bugs or logic issues if you continue." + % [ + ap.apworld_version[0], + ap.apworld_version[1], + gamedata.objects.get_version(), + ap.MOD_VERSION + ] + ) + popup.exclusive = true + popup.popup_centered() + + return + + startGame() + + +func startGame(): + var ap = global.get_node("Archipelago") # Save connection details var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass] @@ -193,6 +224,10 @@ func connectionUnsuccessful(error_message): popup.popup_centered() +func versionMismatchDeclined(): + $Panel/AcceptDialog.hide() + + func historySelected(index): var ap = global.get_node("Archipelago") var details = ap.connection_history[index] -- cgit 1.4.1