about summary refs log tree commit diff stats
path: root/client/Archipelago/settings_screen.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/settings_screen.gd')
-rw-r--r--client/Archipelago/settings_screen.gd100
1 files changed, 87 insertions, 13 deletions
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index a675f8e..b7bfacf 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd
@@ -22,23 +22,33 @@ func _ready():
22 var ap_instance = ap_script.new() 22 var ap_instance = ap_script.new()
23 ap_instance.name = "Archipelago" 23 ap_instance.name = "Archipelago"
24 24
25 #apclient_instance.SCRIPT_doorControl = load("user://maps/Archipelago/doorControl.gd")
26 #apclient_instance.SCRIPT_effects = load("user://maps/Archipelago/effects.gd")
27 #apclient_instance.SCRIPT_location = load("user://maps/Archipelago/location.gd")
28 #apclient_instance.SCRIPT_mypainting = load("user://maps/Archipelago/mypainting.gd")
29 #apclient_instance.SCRIPT_panel = load("user://maps/Archipelago/panel.gd")
30 #apclient_instance.SCRIPT_textclient = load("user://maps/Archipelago/textclient.gd")
31
32 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") 25 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd")
26 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd")
33 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") 27 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd")
34 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") 28 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd")
29 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd")
35 30
36 global.add_child(ap_instance) 31 global.add_child(ap_instance)
37 32
38 # Let's also inject any scripts we need to inject now. 33 # Let's also inject any scripts we need to inject now.
34 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd"))
35 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/collectable.gd"))
39 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) 36 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd"))
37 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolder.gd"))
38 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolderChecker.gd"))
39 installScriptExtension(
40 ResourceLoader.load("user://maps/Archipelago/keyHolderResetterListener.gd")
41 )
40 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) 42 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd"))
43 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panel.gd"))
44 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd"))
41 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) 45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd"))
50 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldport.gd"))
51 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd"))
42 52
43 var proto_script = load("user://maps/Archipelago/generated/proto.gd") 53 var proto_script = load("user://maps/Archipelago/generated/proto.gd")
44 var gamedata_script = load("user://maps/Archipelago/gamedata.gd") 54 var gamedata_script = load("user://maps/Archipelago/gamedata.gd")
@@ -54,7 +64,19 @@ func _ready():
54 messages_instance.name = "Messages" 64 messages_instance.name = "Messages"
55 global.add_child(messages_instance) 65 global.add_child(messages_instance)
56 66
67 var textclient_script = load("user://maps/Archipelago/textclient.gd")
68 var textclient_instance = textclient_script.new()
69 textclient_instance.name = "Textclient"
70 global.add_child(textclient_instance)
71
72 var compass_overlay_script = load("user://maps/Archipelago/compass_overlay.gd")
73 var compass_overlay_instance = compass_overlay_script.new()
74 compass_overlay_instance.name = "Compass"
75 compass_overlay_instance.SCRIPT_compass = load("user://maps/Archipelago/compass.gd")
76 global.add_child(compass_overlay_instance)
77
57 var ap = global.get_node("Archipelago") 78 var ap = global.get_node("Archipelago")
79 var gamedata = global.get_node("Gamedata")
58 ap.connect("ap_connected", connectionSuccessful) 80 ap.connect("ap_connected", connectionSuccessful)
59 ap.connect("could_not_connect", connectionUnsuccessful) 81 ap.connect("could_not_connect", connectionUnsuccessful)
60 ap.connect("connect_status", connectionStatus) 82 ap.connect("connect_status", connectionStatus)
@@ -78,13 +100,17 @@ func _ready():
78 history_box.get_popup().connect("id_pressed", historySelected) 100 history_box.get_popup().connect("id_pressed", historySelected)
79 101
80 # Show client version. 102 # Show client version.
81 $Panel/title.text = "ARCHIPELAGO (%s)" % ap.my_version 103 $Panel/title.text = "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION]
82 104
83 # Increase font size in text boxes. 105 # Increase font size in text boxes.
84 $Panel/server_box.add_theme_font_size_override("font_size", 36) 106 $Panel/server_box.add_theme_font_size_override("font_size", 36)
85 $Panel/player_box.add_theme_font_size_override("font_size", 36) 107 $Panel/player_box.add_theme_font_size_override("font_size", 36)
86 $Panel/password_box.add_theme_font_size_override("font_size", 36) 108 $Panel/password_box.add_theme_font_size_override("font_size", 36)
87 109
110 # Set up version mismatch dialog.
111 $Panel/VersionMismatch.connect("confirmed", startGame)
112 $Panel/VersionMismatch.get_cancel_button().pressed.connect(versionMismatchDeclined)
113
88 114
89# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd 115# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd
90func installScriptExtension(childScript: Resource): 116func installScriptExtension(childScript: Resource):
@@ -114,6 +140,33 @@ func connectionStatus(message):
114 140
115func connectionSuccessful(): 141func connectionSuccessful():
116 var ap = global.get_node("Archipelago") 142 var ap = global.get_node("Archipelago")
143 var gamedata = global.get_node("Gamedata")
144
145 # Check for major version mismatch.
146 if ap.apworld_version[0] != gamedata.objects.get_version():
147 $Panel/AcceptDialog.exclusive = false
148
149 var popup = self.get_node("Panel/VersionMismatch")
150 popup.title = "Version Mismatch!"
151 popup.dialog_text = (
152 "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."
153 % [
154 ap.apworld_version[0],
155 ap.apworld_version[1],
156 gamedata.objects.get_version(),
157 ap.MOD_VERSION
158 ]
159 )
160 popup.exclusive = true
161 popup.popup_centered()
162
163 return
164
165 startGame()
166
167
168func startGame():
169 var ap = global.get_node("Archipelago")
117 170
118 # Save connection details 171 # Save connection details
119 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass] 172 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass]
@@ -130,16 +183,31 @@ func connectionSuccessful():
130 global.universe = "lingo" 183 global.universe = "lingo"
131 global.map = "the_entry" 184 global.map = "the_entry"
132 185
133 unlocks.resetKeys()
134 unlocks.resetCollectables() 186 unlocks.resetCollectables()
135 unlocks.resetData() 187 unlocks.resetData()
136 unlocks.loadKeys() 188
189 ap.setup_keys()
190
137 unlocks.loadCollectables() 191 unlocks.loadCollectables()
138 unlocks.loadData() 192 unlocks.loadData()
139 unlocks.unlockKey("capslock", 1) 193 unlocks.unlockKey("capslock", 1)
140 194
195 clearResourceCache("res://objects/meshes/gridDoor.tscn")
196 clearResourceCache("res://objects/nodes/collectable.tscn")
141 clearResourceCache("res://objects/nodes/door.tscn") 197 clearResourceCache("res://objects/nodes/door.tscn")
198 clearResourceCache("res://objects/nodes/keyHolder.tscn")
199 clearResourceCache("res://objects/nodes/listeners/animationListener.tscn")
200 clearResourceCache("res://objects/nodes/listeners/keyHolderChecker.tscn")
201 clearResourceCache("res://objects/nodes/listeners/keyHolderResetterListener.tscn")
202 clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn")
203 clearResourceCache("res://objects/nodes/listeners/visibilityListener.tscn")
204 clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn")
205 clearResourceCache("res://objects/nodes/panel.tscn")
142 clearResourceCache("res://objects/nodes/player.tscn") 206 clearResourceCache("res://objects/nodes/player.tscn")
207 clearResourceCache("res://objects/nodes/saver.tscn")
208 clearResourceCache("res://objects/nodes/teleport.tscn")
209 clearResourceCache("res://objects/nodes/worldport.tscn")
210 clearResourceCache("res://objects/scenes/menus/pause_menu.tscn")
143 211
144 var paintings_dir = DirAccess.open("res://objects/meshes/paintings") 212 var paintings_dir = DirAccess.open("res://objects/meshes/paintings")
145 if paintings_dir: 213 if paintings_dir:
@@ -150,7 +218,7 @@ func connectionSuccessful():
150 clearResourceCache("res://objects/meshes/paintings/" + file_name) 218 clearResourceCache("res://objects/meshes/paintings/" + file_name)
151 file_name = paintings_dir.get_next() 219 file_name = paintings_dir.get_next()
152 220
153 switcher.switch_map("res://objects/scenes/the_entry.tscn") 221 switcher.switch_map.call_deferred("res://objects/scenes/the_entry.tscn")
154 222
155 223
156func connectionUnsuccessful(error_message): 224func connectionUnsuccessful(error_message):
@@ -163,6 +231,13 @@ func connectionUnsuccessful(error_message):
163 popup.get_ok_button().visible = true 231 popup.get_ok_button().visible = true
164 popup.popup_centered() 232 popup.popup_centered()
165 233
234 $Panel/connect_button.disabled = false
235
236
237func versionMismatchDeclined():
238 $Panel/AcceptDialog.hide()
239 $Panel/connect_button.disabled = false
240
166 241
167func historySelected(index): 242func historySelected(index):
168 var ap = global.get_node("Archipelago") 243 var ap = global.get_node("Archipelago")
@@ -174,5 +249,4 @@ func historySelected(index):
174 249
175 250
176func clearResourceCache(path): 251func clearResourceCache(path):
177 ResourceLoader.load_threaded_request(path, "", false, ResourceLoader.CACHE_MODE_REPLACE) 252 ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_REPLACE)
178 ResourceLoader.load_threaded_get(path)