about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--apworld/__init__.py43
-rw-r--r--apworld/client/animationListener.gd (renamed from client/Archipelago/animationListener.gd)0
-rw-r--r--apworld/client/client.gd (renamed from client/Archipelago/client.gd)0
-rw-r--r--apworld/client/collectable.gd (renamed from client/Archipelago/collectable.gd)0
-rw-r--r--apworld/client/compass.gd (renamed from client/Archipelago/compass.gd)0
-rw-r--r--apworld/client/compass_overlay.gd (renamed from client/Archipelago/compass_overlay.gd)0
-rw-r--r--apworld/client/door.gd (renamed from client/Archipelago/door.gd)0
-rw-r--r--apworld/client/gamedata.gd (renamed from client/Archipelago/gamedata.gd)0
-rw-r--r--apworld/client/keyHolder.gd (renamed from client/Archipelago/keyHolder.gd)0
-rw-r--r--apworld/client/keyHolderChecker.gd (renamed from client/Archipelago/keyHolderChecker.gd)0
-rw-r--r--apworld/client/keyHolderResetterListener.gd (renamed from client/Archipelago/keyHolderResetterListener.gd)0
-rw-r--r--apworld/client/keyboard.gd (renamed from client/Archipelago/keyboard.gd)0
-rw-r--r--apworld/client/locationListener.gd (renamed from client/Archipelago/locationListener.gd)0
-rw-r--r--apworld/client/main.gd (renamed from client/Archipelago/settings_screen.gd)141
-rw-r--r--apworld/client/manager.gd (renamed from client/Archipelago/manager.gd)0
-rw-r--r--apworld/client/messages.gd (renamed from client/Archipelago/messages.gd)0
-rw-r--r--apworld/client/minimap.gd (renamed from client/Archipelago/minimap.gd)0
-rw-r--r--apworld/client/painting.gd (renamed from client/Archipelago/painting.gd)0
-rw-r--r--apworld/client/panel.gd (renamed from client/Archipelago/panel.gd)0
-rw-r--r--apworld/client/pauseMenu.gd (renamed from client/Archipelago/pauseMenu.gd)9
-rw-r--r--apworld/client/player.gd (renamed from client/Archipelago/player.gd)0
-rw-r--r--apworld/client/rainbowText.gd (renamed from client/Archipelago/rainbowText.gd)0
-rw-r--r--apworld/client/run_from_source.tscn23
-rw-r--r--apworld/client/saver.gd (renamed from client/Archipelago/saver.gd)0
-rw-r--r--apworld/client/settings_screen.tscn173
-rw-r--r--apworld/client/source_runtime.gd15
-rw-r--r--apworld/client/teleport.gd (renamed from client/Archipelago/teleport.gd)0
-rw-r--r--apworld/client/teleportListener.gd (renamed from client/Archipelago/teleportListener.gd)0
-rw-r--r--apworld/client/textclient.gd (renamed from client/Archipelago/textclient.gd)0
-rw-r--r--apworld/client/vendor/LICENSE (renamed from client/Archipelago/vendor/LICENSE)0
-rw-r--r--apworld/client/vendor/uuid.gd (renamed from client/Archipelago/vendor/uuid.gd)0
-rw-r--r--apworld/client/victoryListener.gd (renamed from client/Archipelago/victoryListener.gd)0
-rw-r--r--apworld/client/visibilityListener.gd (renamed from client/Archipelago/visibilityListener.gd)0
-rw-r--r--apworld/client/worldport.gd (renamed from client/Archipelago/worldport.gd)0
-rw-r--r--apworld/client/worldportListener.gd (renamed from client/Archipelago/worldportListener.gd)0
-rw-r--r--client/Archipelago/settings_buttons.gd24
36 files changed, 344 insertions, 84 deletions
diff --git a/apworld/__init__.py b/apworld/__init__.py index 2213e33..6ac2926 100644 --- a/apworld/__init__.py +++ b/apworld/__init__.py
@@ -1,7 +1,15 @@
1""" 1"""
2Archipelago init file for Lingo 2 2Archipelago init file for Lingo 2
3""" 3"""
4import asyncio
5import os.path
6import subprocess
7from typing import ClassVar
8
9import Utils
10import settings
4from BaseClasses import ItemClassification, Item, Tutorial 11from BaseClasses import ItemClassification, Item, Tutorial
12from settings import Group, UserFilePath
5from worlds.AutoWorld import WebWorld, World 13from worlds.AutoWorld import WebWorld, World
6from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS 14from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS
7from .options import Lingo2Options 15from .options import Lingo2Options
@@ -9,6 +17,30 @@ from .player_logic import Lingo2PlayerLogic
9from .regions import create_regions, shuffle_entrances, connect_ports_from_ut 17from .regions import create_regions, shuffle_entrances, connect_ports_from_ut
10from .static_logic import Lingo2StaticLogic 18from .static_logic import Lingo2StaticLogic
11from .version import APWORLD_VERSION 19from .version import APWORLD_VERSION
20from ..LauncherComponents import Component, Type, components
21
22
23async def run_game():
24 exe_file = settings.get_settings().lingo2_options.exe_file
25
26 subprocess.Popen(
27 [
28 exe_file,
29 "--scene",
30 Utils.local_path("worlds", "lingo2", "client", "run_from_source.tscn"),
31 "--",
32 Utils.local_path("worlds", "lingo2", "client"),
33 ],
34 cwd=os.path.dirname(exe_file),
35 )
36
37
38async def client_main():
39 Utils.async_start(run_game())
40
41
42def launch_client(*args):
43 asyncio.run(client_main())
12 44
13 45
14class Lingo2WebWorld(WebWorld): 46class Lingo2WebWorld(WebWorld):
@@ -24,6 +56,14 @@ class Lingo2WebWorld(WebWorld):
24 )] 56 )]
25 57
26 58
59class Lingo2Settings(Group):
60 class ExecutableFile(UserFilePath):
61 """Path to the Lingo 2 executable"""
62 is_exe = True
63
64 exe_file: ExecutableFile = ExecutableFile()
65
66
27class Lingo2World(World): 67class Lingo2World(World):
28 """ 68 """
29 Lingo 2 is a first person indie puzzle game where you solve word puzzles in a labyrinthe world. Compared to its 69 Lingo 2 is a first person indie puzzle game where you solve word puzzles in a labyrinthe world. Compared to its
@@ -33,6 +73,9 @@ class Lingo2World(World):
33 game = "Lingo 2" 73 game = "Lingo 2"
34 web = Lingo2WebWorld() 74 web = Lingo2WebWorld()
35 75
76 settings: ClassVar[Lingo2Settings]
77 settings_key = "lingo2_options"
78
36 topology_present = True 79 topology_present = True
37 80
38 options_dataclass = Lingo2Options 81 options_dataclass = Lingo2Options
diff --git a/client/Archipelago/animationListener.gd b/apworld/client/animationListener.gd index c3b26db..c3b26db 100644 --- a/client/Archipelago/animationListener.gd +++ b/apworld/client/animationListener.gd
diff --git a/client/Archipelago/client.gd b/apworld/client/client.gd index 843647d..843647d 100644 --- a/client/Archipelago/client.gd +++ b/apworld/client/client.gd
diff --git a/client/Archipelago/collectable.gd b/apworld/client/collectable.gd index 4a17a2a..4a17a2a 100644 --- a/client/Archipelago/collectable.gd +++ b/apworld/client/collectable.gd
diff --git a/client/Archipelago/compass.gd b/apworld/client/compass.gd index c90475a..c90475a 100644 --- a/client/Archipelago/compass.gd +++ b/apworld/client/compass.gd
diff --git a/client/Archipelago/compass_overlay.gd b/apworld/client/compass_overlay.gd index 56e81ff..56e81ff 100644 --- a/client/Archipelago/compass_overlay.gd +++ b/apworld/client/compass_overlay.gd
diff --git a/client/Archipelago/door.gd b/apworld/client/door.gd index 49f5728..49f5728 100644 --- a/client/Archipelago/door.gd +++ b/apworld/client/door.gd
diff --git a/client/Archipelago/gamedata.gd b/apworld/client/gamedata.gd index 9eeec3b..9eeec3b 100644 --- a/client/Archipelago/gamedata.gd +++ b/apworld/client/gamedata.gd
diff --git a/client/Archipelago/keyHolder.gd b/apworld/client/keyHolder.gd index 3c037ff..3c037ff 100644 --- a/client/Archipelago/keyHolder.gd +++ b/apworld/client/keyHolder.gd
diff --git a/client/Archipelago/keyHolderChecker.gd b/apworld/client/keyHolderChecker.gd index a75a9e4..a75a9e4 100644 --- a/client/Archipelago/keyHolderChecker.gd +++ b/apworld/client/keyHolderChecker.gd
diff --git a/client/Archipelago/keyHolderResetterListener.gd b/apworld/client/keyHolderResetterListener.gd index d5300f3..d5300f3 100644 --- a/client/Archipelago/keyHolderResetterListener.gd +++ b/apworld/client/keyHolderResetterListener.gd
diff --git a/client/Archipelago/keyboard.gd b/apworld/client/keyboard.gd index 450566d..450566d 100644 --- a/client/Archipelago/keyboard.gd +++ b/apworld/client/keyboard.gd
diff --git a/client/Archipelago/locationListener.gd b/apworld/client/locationListener.gd index 71792ed..71792ed 100644 --- a/client/Archipelago/locationListener.gd +++ b/apworld/client/locationListener.gd
diff --git a/client/Archipelago/settings_screen.gd b/apworld/client/main.gd index d5aa747..a31eb89 100644 --- a/client/Archipelago/settings_screen.gd +++ b/apworld/client/main.gd
@@ -1,7 +1,9 @@
1extends Node2D 1extends Node
2 2
3 3
4func _ready(): 4func _ready():
5 var runtime = global.get_node("Runtime")
6
5 # Some helpful logging. 7 # Some helpful logging.
6 if Steam.isSubscribed(): 8 if Steam.isSubscribed():
7 global._print("Provisioning successful! Build ID: %d" % Steam.getAppBuildId()) 9 global._print("Provisioning successful! Build ID: %d" % Steam.getAppBuildId())
@@ -20,63 +22,59 @@ func _ready():
20 22
21 # Create the global AP manager, if it doesn't already exist. 23 # Create the global AP manager, if it doesn't already exist.
22 if not global.has_node("Archipelago"): 24 if not global.has_node("Archipelago"):
23 var ap_script = ResourceLoader.load("user://maps/Archipelago/manager.gd") 25 var ap_script = runtime.load_path("manager.gd")
24 var ap_instance = ap_script.new() 26 var ap_instance = ap_script.new()
25 ap_instance.name = "Archipelago" 27 ap_instance.name = "Archipelago"
26 28
27 ap_instance.SCRIPT_client = load("user://maps/Archipelago/client.gd") 29 ap_instance.SCRIPT_client = runtime.load_path("client.gd")
28 ap_instance.SCRIPT_keyboard = load("user://maps/Archipelago/keyboard.gd") 30 ap_instance.SCRIPT_keyboard = runtime.load_path("keyboard.gd")
29 ap_instance.SCRIPT_locationListener = load("user://maps/Archipelago/locationListener.gd") 31 ap_instance.SCRIPT_locationListener = runtime.load_path("locationListener.gd")
30 ap_instance.SCRIPT_minimap = load("user://maps/Archipelago/minimap.gd") 32 ap_instance.SCRIPT_minimap = runtime.load_path("minimap.gd")
31 ap_instance.SCRIPT_uuid = load("user://maps/Archipelago/vendor/uuid.gd") 33 ap_instance.SCRIPT_uuid = runtime.load_path("vendor/uuid.gd")
32 ap_instance.SCRIPT_victoryListener = load("user://maps/Archipelago/victoryListener.gd") 34 ap_instance.SCRIPT_victoryListener = runtime.load_path("victoryListener.gd")
33 35
34 global.add_child(ap_instance) 36 global.add_child(ap_instance)
35 37
36 # Let's also inject any scripts we need to inject now. 38 # Let's also inject any scripts we need to inject now.
37 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd")) 39 installScriptExtension(runtime.load_path("animationListener.gd"))
38 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/collectable.gd")) 40 installScriptExtension(runtime.load_path("collectable.gd"))
39 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) 41 installScriptExtension(runtime.load_path("door.gd"))
40 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolder.gd")) 42 installScriptExtension(runtime.load_path("keyHolder.gd"))
41 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/keyHolderChecker.gd")) 43 installScriptExtension(runtime.load_path("keyHolderChecker.gd"))
42 installScriptExtension( 44 installScriptExtension(runtime.load_path("keyHolderResetterListener.gd"))
43 ResourceLoader.load("user://maps/Archipelago/keyHolderResetterListener.gd") 45 installScriptExtension(runtime.load_path("painting.gd"))
44 ) 46 installScriptExtension(runtime.load_path("panel.gd"))
45 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) 47 installScriptExtension(runtime.load_path("pauseMenu.gd"))
46 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/panel.gd")) 48 installScriptExtension(runtime.load_path("player.gd"))
47 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd")) 49 installScriptExtension(runtime.load_path("saver.gd"))
48 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) 50 installScriptExtension(runtime.load_path("teleport.gd"))
49 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd")) 51 installScriptExtension(runtime.load_path("teleportListener.gd"))
50 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleport.gd")) 52 installScriptExtension(runtime.load_path("visibilityListener.gd"))
51 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd")) 53 installScriptExtension(runtime.load_path("worldport.gd"))
52 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/visibilityListener.gd")) 54 installScriptExtension(runtime.load_path("worldportListener.gd"))
53 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldport.gd")) 55
54 installScriptExtension(ResourceLoader.load("user://maps/Archipelago/worldportListener.gd")) 56 var proto_script = runtime.load_path("../generated/proto.gd")
55 57 var gamedata_script = runtime.load_path("gamedata.gd")
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) 58 var gamedata_instance = gamedata_script.new(proto_script)
59 gamedata_instance.load( 59 gamedata_instance.load(runtime.read_path("../generated/data.binpb"))
60 FileAccess.get_file_as_bytes("user://maps/Archipelago/generated/data.binpb")
61 )
62 gamedata_instance.name = "Gamedata" 60 gamedata_instance.name = "Gamedata"
63 global.add_child(gamedata_instance) 61 global.add_child(gamedata_instance)
64 62
65 var messages_script = load("user://maps/Archipelago/messages.gd") 63 var messages_script = runtime.load_path("messages.gd")
66 var messages_instance = messages_script.new() 64 var messages_instance = messages_script.new()
67 messages_instance.name = "Messages" 65 messages_instance.name = "Messages"
68 messages_instance.SCRIPT_rainbowText = load("user://maps/Archipelago/rainbowText.gd") 66 messages_instance.SCRIPT_rainbowText = runtime.load_path("rainbowText.gd")
69 global.add_child(messages_instance) 67 global.add_child(messages_instance)
70 68
71 var textclient_script = load("user://maps/Archipelago/textclient.gd") 69 var textclient_script = runtime.load_path("textclient.gd")
72 var textclient_instance = textclient_script.new() 70 var textclient_instance = textclient_script.new()
73 textclient_instance.name = "Textclient" 71 textclient_instance.name = "Textclient"
74 global.add_child(textclient_instance) 72 global.add_child(textclient_instance)
75 73
76 var compass_overlay_script = load("user://maps/Archipelago/compass_overlay.gd") 74 var compass_overlay_script = runtime.load_path("compass_overlay.gd")
77 var compass_overlay_instance = compass_overlay_script.new() 75 var compass_overlay_instance = compass_overlay_script.new()
78 compass_overlay_instance.name = "Compass" 76 compass_overlay_instance.name = "Compass"
79 compass_overlay_instance.SCRIPT_compass = load("user://maps/Archipelago/compass.gd") 77 compass_overlay_instance.SCRIPT_compass = runtime.load_path("compass.gd")
80 global.add_child(compass_overlay_instance) 78 global.add_child(compass_overlay_instance)
81 79
82 var ap = global.get_node("Archipelago") 80 var ap = global.get_node("Archipelago")
@@ -86,11 +84,11 @@ func _ready():
86 ap.connect("connect_status", connectionStatus) 84 ap.connect("connect_status", connectionStatus)
87 85
88 # Populate textboxes with AP settings. 86 # Populate textboxes with AP settings.
89 $Panel/server_box.text = ap.ap_server 87 get_node("../Panel/server_box").text = ap.ap_server
90 $Panel/player_box.text = ap.ap_user 88 get_node("../Panel/player_box").text = ap.ap_user
91 $Panel/password_box.text = ap.ap_pass 89 get_node("../Panel/password_box").text = ap.ap_pass
92 90
93 var history_box = $Panel/connection_history 91 var history_box = get_node("../Panel/connection_history")
94 if ap.connection_history.is_empty(): 92 if ap.connection_history.is_empty():
95 history_box.disabled = true 93 history_box.disabled = true
96 else: 94 else:
@@ -104,16 +102,43 @@ func _ready():
104 history_box.get_popup().connect("id_pressed", historySelected) 102 history_box.get_popup().connect("id_pressed", historySelected)
105 103
106 # Show client version. 104 # Show client version.
107 $Panel/title.text = "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION] 105 get_node("../Panel/title").text = (
106 "ARCHIPELAGO (%d.%d)" % [gamedata.objects.get_version(), ap.MOD_VERSION]
107 )
108 108
109 # Increase font size in text boxes. 109 # Increase font size in text boxes.
110 $Panel/server_box.add_theme_font_size_override("font_size", 36) 110 get_node("../Panel/server_box").add_theme_font_size_override("font_size", 36)
111 $Panel/player_box.add_theme_font_size_override("font_size", 36) 111 get_node("../Panel/player_box").add_theme_font_size_override("font_size", 36)
112 $Panel/password_box.add_theme_font_size_override("font_size", 36) 112 get_node("../Panel/password_box").add_theme_font_size_override("font_size", 36)
113 113
114 # Set up version mismatch dialog. 114 # Set up version mismatch dialog.
115 $Panel/VersionMismatch.connect("confirmed", startGame) 115 get_node("../Panel/VersionMismatch").connect("confirmed", startGame)
116 $Panel/VersionMismatch.get_cancel_button().pressed.connect(versionMismatchDeclined) 116 get_node("../Panel/VersionMismatch").get_cancel_button().pressed.connect(
117 versionMismatchDeclined
118 )
119
120 # Set up buttons.
121 get_node("../Panel/connect_button").connect("pressed", _connect_pressed)
122 get_node("../Panel/quit_button").connect("pressed", _back_pressed)
123
124
125func _connect_pressed():
126 get_node("../Panel/connect_button").disabled = true
127
128 var ap = global.get_node("Archipelago")
129 ap.ap_server = get_node("../Panel/server_box").text
130 ap.ap_user = get_node("../Panel/player_box").text
131 ap.ap_pass = get_node("../Panel/password_box").text
132 ap.saveSettings()
133
134 ap.connectToServer()
135
136
137func _back_pressed():
138 var ap = global.get_node("Archipelago")
139 ap.disconnect_from_ap()
140
141 get_tree().quit()
117 142
118 143
119# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd 144# Adapted from https://gitlab.com/Delta-V-Modding/Mods/-/blob/main/game/ModLoader.gd
@@ -134,7 +159,7 @@ func installScriptExtension(childScript: Resource):
134 159
135 160
136func connectionStatus(message): 161func connectionStatus(message):
137 var popup = self.get_node("Panel/AcceptDialog") 162 var popup = get_node("../Panel/AcceptDialog")
138 popup.title = "Connecting to Archipelago" 163 popup.title = "Connecting to Archipelago"
139 popup.dialog_text = message 164 popup.dialog_text = message
140 popup.exclusive = true 165 popup.exclusive = true
@@ -148,9 +173,9 @@ func connectionSuccessful():
148 173
149 # Check for major version mismatch. 174 # Check for major version mismatch.
150 if ap.apworld_version[0] != gamedata.objects.get_version(): 175 if ap.apworld_version[0] != gamedata.objects.get_version():
151 $Panel/AcceptDialog.exclusive = false 176 get_node("../Panel/AcceptDialog").exclusive = false
152 177
153 var popup = self.get_node("Panel/VersionMismatch") 178 var popup = get_node("../Panel/VersionMismatch")
154 popup.title = "Version Mismatch!" 179 popup.title = "Version Mismatch!"
155 popup.dialog_text = ( 180 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." 181 "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."
@@ -231,30 +256,28 @@ func startGame():
231 256
232 257
233func connectionUnsuccessful(error_message): 258func connectionUnsuccessful(error_message):
234 $Panel/connect_button.disabled = false 259 get_node("../Panel/connect_button").disabled = false
235 260
236 var popup = $Panel/AcceptDialog 261 var popup = get_node("../Panel/AcceptDialog")
237 popup.title = "Could not connect to Archipelago" 262 popup.title = "Could not connect to Archipelago"
238 popup.dialog_text = error_message 263 popup.dialog_text = error_message
239 popup.exclusive = true 264 popup.exclusive = true
240 popup.get_ok_button().visible = true 265 popup.get_ok_button().visible = true
241 popup.popup_centered() 266 popup.popup_centered()
242 267
243 $Panel/connect_button.disabled = false
244
245 268
246func versionMismatchDeclined(): 269func versionMismatchDeclined():
247 $Panel/AcceptDialog.hide() 270 get_node("../Panel/AcceptDialog").hide()
248 $Panel/connect_button.disabled = false 271 get_node("../Panel/connect_button").disabled = false
249 272
250 273
251func historySelected(index): 274func historySelected(index):
252 var ap = global.get_node("Archipelago") 275 var ap = global.get_node("Archipelago")
253 var details = ap.connection_history[index] 276 var details = ap.connection_history[index]
254 277
255 $Panel/server_box.text = details[0] 278 get_node("../Panel/server_box").text = details[0]
256 $Panel/player_box.text = details[1] 279 get_node("../Panel/player_box").text = details[1]
257 $Panel/password_box.text = details[2] 280 get_node("../Panel/password_box").text = details[2]
258 281
259 282
260func clearResourceCache(path): 283func clearResourceCache(path):
diff --git a/client/Archipelago/manager.gd b/apworld/client/manager.gd index b170c77..b170c77 100644 --- a/client/Archipelago/manager.gd +++ b/apworld/client/manager.gd
diff --git a/client/Archipelago/messages.gd b/apworld/client/messages.gd index ab4f071..ab4f071 100644 --- a/client/Archipelago/messages.gd +++ b/apworld/client/messages.gd
diff --git a/client/Archipelago/minimap.gd b/apworld/client/minimap.gd index 5640716..5640716 100644 --- a/client/Archipelago/minimap.gd +++ b/apworld/client/minimap.gd
diff --git a/client/Archipelago/painting.gd b/apworld/client/painting.gd index 276d4eb..276d4eb 100644 --- a/client/Archipelago/painting.gd +++ b/apworld/client/painting.gd
diff --git a/client/Archipelago/panel.gd b/apworld/client/panel.gd index fdaaf0e..fdaaf0e 100644 --- a/client/Archipelago/panel.gd +++ b/apworld/client/panel.gd
diff --git a/client/Archipelago/pauseMenu.gd b/apworld/client/pauseMenu.gd index cd1813c..448f690 100644 --- a/client/Archipelago/pauseMenu.gd +++ b/apworld/client/pauseMenu.gd
@@ -32,7 +32,14 @@ func _main_menu():
32 global.get_node("Archipelago").disconnect_from_ap() 32 global.get_node("Archipelago").disconnect_from_ap()
33 global.get_node("Messages").clear() 33 global.get_node("Messages").clear()
34 global.get_node("Compass").visible = false 34 global.get_node("Compass").visible = false
35 super._main_menu() 35
36 autosplitter.reset()
37 _unpause_game()
38 Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
39 musicPlayer.stop()
40
41 var runtime = global.get_node("Runtime")
42 get_tree().change_scene_to_packed(runtime.load_path("settings_screen.tscn"))
36 43
37 44
38func _toggle_compass(): 45func _toggle_compass():
diff --git a/client/Archipelago/player.gd b/apworld/client/player.gd index e58f1bc..e58f1bc 100644 --- a/client/Archipelago/player.gd +++ b/apworld/client/player.gd
diff --git a/client/Archipelago/rainbowText.gd b/apworld/client/rainbowText.gd index 9a4c1d0..9a4c1d0 100644 --- a/client/Archipelago/rainbowText.gd +++ b/apworld/client/rainbowText.gd
diff --git a/apworld/client/run_from_source.tscn b/apworld/client/run_from_source.tscn new file mode 100644 index 0000000..b710677 --- /dev/null +++ b/apworld/client/run_from_source.tscn
@@ -0,0 +1,23 @@
1[gd_scene load_steps=11 format=2]
2
3[sub_resource id=2 type="GDScript"]
4script/source = "extends Node2D
5
6
7func _ready():
8 var args = OS.get_cmdline_user_args()
9 var source_path = args[0]
10
11 var runtime_script = ResourceLoader.load(\"%s/source_runtime.gd\" % source_path)
12 var runtime = runtime_script.new(source_path)
13 runtime.name = \"Runtime\"
14
15 global.add_child(runtime)
16
17 var settings_screen = runtime.load_path(\"settings_screen.tscn\")
18 get_tree().change_scene_to_packed(settings_screen)
19
20"
21
22[node name="loader" type="Node2D"]
23script = SubResource( 2 )
diff --git a/client/Archipelago/saver.gd b/apworld/client/saver.gd index 44bc179..44bc179 100644 --- a/client/Archipelago/saver.gd +++ b/apworld/client/saver.gd
diff --git a/apworld/client/settings_screen.tscn b/apworld/client/settings_screen.tscn new file mode 100644 index 0000000..63d5dbe --- /dev/null +++ b/apworld/client/settings_screen.tscn
@@ -0,0 +1,173 @@
1[gd_scene load_steps=11 format=2]
2
3[ext_resource path="res://images/unchecked.png" type="Texture" id=7]
4[ext_resource path="res://images/checked.png" type="Texture" id=8]
5[ext_resource type="Theme" uid="uid://7w454egydi41" path="res://assets/themes/baseUI.tres" id="2_g4bvn"]
6
7[sub_resource type="StyleBoxFlat" id=1]
8bg_color = Color( 0, 0, 0, 0 )
9
10[sub_resource type="StyleBoxFlat" id=2]
11bg_color = Color( 1, 1, 1, 1 )
12border_width_left = 1
13border_width_top = 1
14border_width_right = 1
15border_width_bottom = 1
16border_color = Color( 1, 1, 0, 1 )
17border_blend = true
18corner_radius_top_left = 3
19corner_radius_top_right = 3
20corner_radius_bottom_right = 3
21corner_radius_bottom_left = 3
22expand_offset_left = 5.0
23expand_offset_right = 5.0
24expand_offset_top = 5.0
25expand_offset_bottom = 5.0
26
27[sub_resource id=4 type="GDScript"]
28script/source = "extends Node2D
29
30
31func _ready():
32 var runtime = global.get_node(\"Runtime\")
33 var main_script = runtime.load_path(\"main.gd\")
34 var main_node = main_script.new()
35 main_node.name = \"Main\"
36 add_child(main_node)
37
38"
39
40[node name="settings_screen" type="Node2D"]
41script = SubResource( 4 )
42
43[node name="Panel" type="Panel" parent="."]
44offset_right = 1920.0
45offset_bottom = 1080.0
46
47[node name="title" parent="Panel" type="Label"]
48offset_left = 0.0
49offset_top = 75.0
50offset_right = 1920.0
51offset_bottom = 225.0
52text = "ARCHIPELAGO"
53valign = 1
54horizontal_alignment = 1
55theme = ExtResource("2_g4bvn")
56
57[node name="credit" parent="Panel" type="Label"]
58visible = false
59offset_left = 1278.0
60offset_top = 974.0
61offset_right = 1868.0
62offset_bottom = 1034.0
63text = "Brenton Wildes"
64theme = ExtResource("2_g4bvn")
65
66[node name="connect_button" parent="Panel" type="Button"]
67offset_left = 255.0
68offset_top = 875.0
69offset_right = 891.0
70offset_bottom = 1025.0
71custom_colors/font_color_hover = Color( 1, 0.501961, 0, 1 )
72text = "CONNECT"
73theme = ExtResource("2_g4bvn")
74
75[node name="quit_button" parent="Panel" type="Button"]
76offset_left = 1102.0
77offset_top = 875.0
78offset_right = 1738.0
79offset_bottom = 1025.0
80custom_colors/font_color_hover = Color( 1, 0, 0, 1 )
81text = "QUIT"
82theme = ExtResource("2_g4bvn")
83
84[node name="credit2" parent="Panel" type="Label"]
85offset_left = -105.0
86offset_top = 346.0
87offset_right = 485.0
88offset_bottom = 410.0
89custom_styles/normal = SubResource( 1 )
90text = "SERVER"
91align = 2
92theme = ExtResource("2_g4bvn")
93
94[node name="credit5" parent="Panel" type="Label"]
95offset_left = 1239.0
96offset_top = 422.0
97offset_right = 1829.0
98offset_bottom = 486.0
99custom_styles/normal = SubResource( 1 )
100text = "OPTIONS"
101theme = ExtResource("2_g4bvn")
102
103[node name="credit3" parent="Panel" type="Label"]
104offset_left = -105.0
105offset_top = 519.0
106offset_right = 485.0
107offset_bottom = 583.0
108custom_styles/normal = SubResource( 1 )
109text = "PLAYER"
110align = 2
111theme = ExtResource("2_g4bvn")
112
113[node name="credit4" parent="Panel" type="Label"]
114offset_left = -105.0
115offset_top = 704.0
116offset_right = 485.0
117offset_bottom = 768.0
118custom_styles/normal = SubResource( 1 )
119text = "PASSWORD"
120align = 2
121theme = ExtResource("2_g4bvn")
122
123[node name="server_box" type="LineEdit" parent="Panel"]
124offset_left = 502.0
125offset_top = 295.0
126offset_right = 1144.0
127offset_bottom = 445.0
128custom_colors/selection_color = Color( 0.482353, 0, 0, 1 )
129custom_colors/cursor_color = Color( 0, 0, 0, 1 )
130custom_colors/font_color = Color( 0, 0, 0, 1 )
131custom_styles/focus = SubResource( 2 )
132align = 1
133caret_blink = true
134
135[node name="player_box" type="LineEdit" parent="Panel"]
136offset_left = 502.0
137offset_top = 477.0
138offset_right = 1144.0
139offset_bottom = 627.0
140custom_colors/selection_color = Color( 0.482353, 0, 0, 1 )
141custom_colors/cursor_color = Color( 0, 0, 0, 1 )
142custom_colors/font_color = Color( 0, 0, 0, 1 )
143custom_styles/focus = SubResource( 2 )
144align = 1
145caret_blink = true
146
147[node name="password_box" type="LineEdit" parent="Panel"]
148offset_left = 502.0
149offset_top = 659.0
150offset_right = 1144.0
151offset_bottom = 809.0
152custom_colors/selection_color = Color( 0.482353, 0, 0, 1 )
153custom_colors/cursor_color = Color( 0, 0, 0, 1 )
154custom_colors/font_color = Color( 0, 0, 0, 1 )
155custom_styles/focus = SubResource( 2 )
156align = 1
157caret_blink = true
158
159[node name="AcceptDialog" type="AcceptDialog" parent="Panel"]
160offset_right = 83.0
161offset_bottom = 58.0
162
163[node name="VersionMismatch" type="ConfirmationDialog" parent="Panel"]
164offset_right = 83.0
165offset_bottom = 58.0
166
167[node name="connection_history" type="MenuButton" parent="Panel"]
168offset_left = 1239.0
169offset_top = 276.0
170offset_right = 1829.0
171offset_bottom = 372.0
172text = "connection history"
173flat = false
diff --git a/apworld/client/source_runtime.gd b/apworld/client/source_runtime.gd new file mode 100644 index 0000000..fbb7009 --- /dev/null +++ b/apworld/client/source_runtime.gd
@@ -0,0 +1,15 @@
1extends Node
2
3var source_path
4
5
6func _init(path):
7 source_path = path
8
9
10func load_path(path):
11 return ResourceLoader.load("%s/%s" % [source_path, path])
12
13
14func read_path(path):
15 return FileAccess.get_file_as_bytes("%s/%s" % [source_path, path])
diff --git a/client/Archipelago/teleport.gd b/apworld/client/teleport.gd index 428d50b..428d50b 100644 --- a/client/Archipelago/teleport.gd +++ b/apworld/client/teleport.gd
diff --git a/client/Archipelago/teleportListener.gd b/apworld/client/teleportListener.gd index 6f363af..6f363af 100644 --- a/client/Archipelago/teleportListener.gd +++ b/apworld/client/teleportListener.gd
diff --git a/client/Archipelago/textclient.gd b/apworld/client/textclient.gd index 26831b4..26831b4 100644 --- a/client/Archipelago/textclient.gd +++ b/apworld/client/textclient.gd
diff --git a/client/Archipelago/vendor/LICENSE b/apworld/client/vendor/LICENSE index 115ba15..115ba15 100644 --- a/client/Archipelago/vendor/LICENSE +++ b/apworld/client/vendor/LICENSE
diff --git a/client/Archipelago/vendor/uuid.gd b/apworld/client/vendor/uuid.gd index b63fa04..b63fa04 100644 --- a/client/Archipelago/vendor/uuid.gd +++ b/apworld/client/vendor/uuid.gd
diff --git a/client/Archipelago/victoryListener.gd b/apworld/client/victoryListener.gd index e9089d7..e9089d7 100644 --- a/client/Archipelago/victoryListener.gd +++ b/apworld/client/victoryListener.gd
diff --git a/client/Archipelago/visibilityListener.gd b/apworld/client/visibilityListener.gd index 5ea17a0..5ea17a0 100644 --- a/client/Archipelago/visibilityListener.gd +++ b/apworld/client/visibilityListener.gd
diff --git a/client/Archipelago/worldport.gd b/apworld/client/worldport.gd index cdca248..cdca248 100644 --- a/client/Archipelago/worldport.gd +++ b/apworld/client/worldport.gd
diff --git a/client/Archipelago/worldportListener.gd b/apworld/client/worldportListener.gd index 5c2faff..5c2faff 100644 --- a/client/Archipelago/worldportListener.gd +++ b/apworld/client/worldportListener.gd
diff --git a/client/Archipelago/settings_buttons.gd b/client/Archipelago/settings_buttons.gd deleted file mode 100644 index 9e61cb0..0000000 --- a/client/Archipelago/settings_buttons.gd +++ /dev/null
@@ -1,24 +0,0 @@
1extends Button
2
3
4func _ready():
5 pass
6
7
8func _connect_pressed():
9 self.disabled = true
10
11 var ap = global.get_node("Archipelago")
12 ap.ap_server = self.get_parent().get_node("server_box").text
13 ap.ap_user = self.get_parent().get_node("player_box").text
14 ap.ap_pass = self.get_parent().get_node("password_box").text
15 ap.saveSettings()
16
17 ap.connectToServer()
18
19
20func _back_pressed():
21 var ap = global.get_node("Archipelago")
22 ap.disconnect_from_ap()
23
24 get_tree().change_scene_to_file("res://objects/scenes/menus/main_menu.tscn")