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.gd261
1 files changed, 0 insertions, 261 deletions
diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd deleted file mode 100644 index d5aa747..0000000 --- a/client/Archipelago/settings_screen.gd +++ /dev/null
@@ -1,261 +0,0 @@
1extends Node2D
2
3
4func _ready():
5 # Some helpful logging.
6 if Steam.isSubscribed():
7 global._print("Provisioning successful! Build ID: %d" % Steam.getAppBuildId())
8 else:
9 global._print("Provisioning failed.")
10
11 # Undo the load screen removing our cursor
12 get_tree().get_root().set_disable_input(false)
13 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
14
15 # Increase the WebSocket input buffer size so that we can download large
16 # data packages.
17 ProjectSettings.set_setting("network/limits/websocket_client/max_in_buffer_kb", 8192)
18
19 switcher.layer = 4
20
21 # Create the global AP manager, if it doesn't already exist.
22 if not global.has_node("Archipelago"):
23 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd")
24 var ap_instance = ap_script.new()
25 ap_instance.name = "Archipelago"
26
27 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd")
28 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd")
29 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd")
30 ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd")
31 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd")
32 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd")
33
34 global.add_child(ap_instance)
35
36 # Let's also inject any scripts we need to inject now.
37 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd"))
38 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/collectable.gd"))
39 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd"))
40 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolder.gd"))
41 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolderChecker.gd"))
42 installScriptExtension(
43 ResourceLoader.load("user://maps/Archipelago/keyHolderResetterListener.gd")
44 )
45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd"))
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panel.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd"))
50 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd"))
51 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd"))
52 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd"))
53 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldport.gd"))
54 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd"))
55
56 var proto_script = load("user://maps/Archipelago/generated/proto.gd")
57 var gamedata_script = load("user://maps/Archipelago/gamedata.gd")
58 var gamedata_instance = gamedata_script.new(proto_script)
59 gamedata_instance.load(
60 FileAccess.get_file_as_bytes("user://maps/Archipelago/generated/data.binpb")
61 )
62 gamedata_instance.name = "Gamedata"
63 global.add_child(gamedata_instance)
64
65 var messages_script = load("user://maps/Archipelago/messages.gd")
66 var messages_instance = messages_script.new()
67 messages_instance.name = "Messages"
68 messages_instance.SCRIPT_rainbowText = load("user://maps/Archipelago/rainbowText.gd")
69 global.add_child(messages_instance)
70
71 var textclient_script = load("user://maps/Archipelago/textclient.gd")
72 var textclient_instance = textclient_script.new()
73 textclient_instance.name = "Textclient"
74 global.add_child(textclient_instance)
75
76 var compass_overlay_script = load("user://maps/Archipelago/compass_overlay.gd")
77 var compass_overlay_instance = compass_overlay_script.new()
78 compass_overlay_instance.name = "Compass"
79 compass_overlay_instance.SCRIPT_compass = load("user://maps/Archipelago/compass.gd")
80 global.add_child(compass_overlay_instance)
81
82 var ap = global.get_node("Archipelago")
83 var gamedata = global.get_node("Gamedata")
84 ap.connect("ap_connected", connectionSuccessful)
85 ap.connect("could_not_connect", connectionUnsuccessful)
86 ap.connect("connect_status", connectionStatus)
87
88 # Populate textboxes with AP settings.
89 $Panel/server_box.text = ap.ap_server
90 $Panel/player_box.text = ap.ap_user
91 $Panel/password_box.text = ap.ap_pass
92
93 var history_box = $Panel/connection_history
94 if ap.connection_history.is_empty():
95 history_box.disabled = true
96 else:
97 history_box.disabled = false
98
99 var i = 0
100 for details in ap.connection_history:
101 history_box.get_popup().add_item("%s (%s)" % [details[1], details[0]], i)
102 i += 1
103
104 history_box.get_popup().connect("id_pressed", historySelected)
105
106 # Show client version.
107 $Panel/title.text = "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION]
108
109 # Increase font size in text boxes.
110 $Panel/server_box.add_theme_font_size_override("font_size", 36)
111 $Panel/player_box.add_theme_font_size_override("font_size", 36)
112 $Panel/password_box.add_theme_font_size_override("font_size", 36)
113
114 # Set up version mismatch dialog.
115 $Panel/VersionMismatch.connect("confirmed", startGame)
116 $Panel/VersionMismatch.get_cancel_button().pressed.connect(versionMismatchDeclined)
117
118
119# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd
120func installScriptExtension(childScript: Resource):
121 # Force Godot to compile the script now.
122 # We need to do this here to ensure that the inheritance chain is
123 # properly set up, and multiple mods can chain-extend the same
124 # class multiple times.
125 # This is also needed to make Godot instantiate the extended class
126 # when creating singletons.
127 # The actual instance is thrown away.
128 childScript.new()
129
130 var parentScript = childScript.get_base_script()
131 var parentScriptPath = parentScript.resource_path
132 global._print("ModLoader: Installing script extension over %s" % parentScriptPath)
133 childScript.take_over_path(parentScriptPath)
134
135
136func connectionStatus(message):
137 var popup = self.get_node("Panel/AcceptDialog")
138 popup.title = "Connecting to Archipelago"
139 popup.dialog_text = message
140 popup.exclusive = true
141 popup.get_ok_button().visible = false
142 popup.popup_centered()
143
144
145func connectionSuccessful():
146 var ap = global.get_node("Archipelago")
147 var gamedata = global.get_node("Gamedata")
148
149 # Check for major version mismatch.
150 if ap.apworld_version[0] != gamedata.objects.get_version():
151 $Panel/AcceptDialog.exclusive = false
152
153 var popup = self.get_node("Panel/VersionMismatch")
154 popup.title = "Version Mismatch!"
155 popup.dialog_text = (
156 "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."
157 % [
158 ap.apworld_version[0],
159 ap.apworld_version[1],
160 gamedata.objects.get_version(),
161 ap.MOD_VERSION
162 ]
163 )
164 popup.exclusive = true
165 popup.popup_centered()
166
167 return
168
169 startGame()
170
171
172func startGame():
173 var ap = global.get_node("Archipelago")
174
175 # Save connection details
176 var connection_details = [ap.ap_server, ap.ap_user, ap.ap_pass]
177 if ap.connection_history.has(connection_details):
178 ap.connection_history.erase(connection_details)
179 ap.connection_history.push_front(connection_details)
180 if ap.connection_history.size() > 10:
181 ap.connection_history.resize(10)
182 ap.saveSettings()
183
184 # Switch to the_entry
185 Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
186 global.user = ap.getSaveFileName()
187 global.universe = "lingo"
188 global.map = "the_entry"
189
190 unlocks.resetCollectables()
191 unlocks.resetData()
192
193 ap.setup_keys()
194
195 unlocks.loadCollectables()
196 unlocks.loadData()
197 unlocks.unlockKey("capslock", 1)
198
199 if ap.shuffle_worldports:
200 settings.worldport_fades = "default"
201 else:
202 settings.worldport_fades = "never"
203
204 clearResourceCache("res://objects/meshes/gridDoor.tscn")
205 clearResourceCache("res://objects/nodes/collectable.tscn")
206 clearResourceCache("res://objects/nodes/door.tscn")
207 clearResourceCache("res://objects/nodes/keyHolder.tscn")
208 clearResourceCache("res://objects/nodes/listeners/animationListener.tscn")
209 clearResourceCache("res://objects/nodes/listeners/keyHolderChecker.tscn")
210 clearResourceCache("res://objects/nodes/listeners/keyHolderResetterListener.tscn")
211 clearResourceCache("res://objects/nodes/listeners/teleportListener.tscn")
212 clearResourceCache("res://objects/nodes/listeners/visibilityListener.tscn")
213 clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn")
214 clearResourceCache("res://objects/nodes/panel.tscn")
215 clearResourceCache("res://objects/nodes/player.tscn")
216 clearResourceCache("res://objects/nodes/saver.tscn")
217 clearResourceCache("res://objects/nodes/teleport.tscn")
218 clearResourceCache("res://objects/nodes/worldport.tscn")
219 clearResourceCache("res://objects/scenes/menus/pause_menu.tscn")
220
221 var paintings_dir = DirAccess.open("res://objects/meshes/paintings")
222 if paintings_dir:
223 paintings_dir.list_dir_begin()
224 var file_name = paintings_dir.get_next()
225 while file_name != "":
226 if not paintings_dir.current_is_dir() and file_name.ends_with(".tscn"):
227 clearResourceCache("res://objects/meshes/paintings/" + file_name)
228 file_name = paintings_dir.get_next()
229
230 switcher.switch_map.call_deferred("res://objects/scenes/the_entry.tscn")
231
232
233func connectionUnsuccessful(error_message):
234 $Panel/connect_button.disabled = false
235
236 var popup = $Panel/AcceptDialog
237 popup.title = "Could not connect to Archipelago"
238 popup.dialog_text = error_message
239 popup.exclusive = true
240 popup.get_ok_button().visible = true
241 popup.popup_centered()
242
243 $Panel/connect_button.disabled = false
244
245
246func versionMismatchDeclined():
247 $Panel/AcceptDialog.hide()
248 $Panel/connect_button.disabled = false
249
250
251func historySelected(index):
252 var ap = global.get_node("Archipelago")
253 var details = ap.connection_history[index]
254
255 $Panel/server_box.text = details[0]
256 $Panel/player_box.text = details[1]
257 $Panel/password_box.text = details[2]
258
259
260func clearResourceCache(path):
261 ResourceLoader.load(path, "", ResourceLoader.CACHE_MODE_REPLACE)