diff options
-rw-r--r-- | apworld/__init__.py | 43 | ||||
-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.tscn | 23 | ||||
-rw-r--r-- | apworld/client/saver.gd (renamed from client/Archipelago/saver.gd) | 0 | ||||
-rw-r--r-- | apworld/client/settings_screen.tscn | 173 | ||||
-rw-r--r-- | apworld/client/source_runtime.gd | 15 | ||||
-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.gd | 24 |
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 | """ |
2 | Archipelago init file for Lingo 2 | 2 | Archipelago init file for Lingo 2 |
3 | """ | 3 | """ |
4 | import asyncio | ||
5 | import os.path | ||
6 | import subprocess | ||
7 | from typing import ClassVar | ||
8 | |||
9 | import Utils | ||
10 | import settings | ||
4 | from BaseClasses import ItemClassification, Item, Tutorial | 11 | from BaseClasses import ItemClassification, Item, Tutorial |
12 | from settings import Group, UserFilePath | ||
5 | from worlds.AutoWorld import WebWorld, World | 13 | from worlds.AutoWorld import WebWorld, World |
6 | from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS | 14 | from .items import Lingo2Item, ANTI_COLLECTABLE_TRAPS |
7 | from .options import Lingo2Options | 15 | from .options import Lingo2Options |
@@ -9,6 +17,30 @@ from .player_logic import Lingo2PlayerLogic | |||
9 | from .regions import create_regions, shuffle_entrances, connect_ports_from_ut | 17 | from .regions import create_regions, shuffle_entrances, connect_ports_from_ut |
10 | from .static_logic import Lingo2StaticLogic | 18 | from .static_logic import Lingo2StaticLogic |
11 | from .version import APWORLD_VERSION | 19 | from .version import APWORLD_VERSION |
20 | from ..LauncherComponents import Component, Type, components | ||
21 | |||
22 | |||
23 | async 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 | |||
38 | async def client_main(): | ||
39 | Utils.async_start(run_game()) | ||
40 | |||
41 | |||
42 | def launch_client(*args): | ||
43 | asyncio.run(client_main()) | ||
12 | 44 | ||
13 | 45 | ||
14 | class Lingo2WebWorld(WebWorld): | 46 | class Lingo2WebWorld(WebWorld): |
@@ -24,6 +56,14 @@ class Lingo2WebWorld(WebWorld): | |||
24 | )] | 56 | )] |
25 | 57 | ||
26 | 58 | ||
59 | class 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 | |||
27 | class Lingo2World(World): | 67 | class 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 @@ | |||
1 | extends Node2D | 1 | extends Node |
2 | 2 | ||
3 | 3 | ||
4 | func _ready(): | 4 | func _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 | |||
125 | func _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 | |||
137 | func _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 | ||
136 | func connectionStatus(message): | 161 | func 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 | ||
233 | func connectionUnsuccessful(error_message): | 258 | func 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 | ||
246 | func versionMismatchDeclined(): | 269 | func 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 | ||
251 | func historySelected(index): | 274 | func 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 | ||
260 | func clearResourceCache(path): | 283 | func 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 | ||
38 | func _toggle_compass(): | 45 | func _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"] | ||
4 | script/source = "extends Node2D | ||
5 | |||
6 | |||
7 | func _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"] | ||
23 | script = 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] | ||
8 | bg_color = Color( 0, 0, 0, 0 ) | ||
9 | |||
10 | [sub_resource type="StyleBoxFlat" id=2] | ||
11 | bg_color = Color( 1, 1, 1, 1 ) | ||
12 | border_width_left = 1 | ||
13 | border_width_top = 1 | ||
14 | border_width_right = 1 | ||
15 | border_width_bottom = 1 | ||
16 | border_color = Color( 1, 1, 0, 1 ) | ||
17 | border_blend = true | ||
18 | corner_radius_top_left = 3 | ||
19 | corner_radius_top_right = 3 | ||
20 | corner_radius_bottom_right = 3 | ||
21 | corner_radius_bottom_left = 3 | ||
22 | expand_offset_left = 5.0 | ||
23 | expand_offset_right = 5.0 | ||
24 | expand_offset_top = 5.0 | ||
25 | expand_offset_bottom = 5.0 | ||
26 | |||
27 | [sub_resource id=4 type="GDScript"] | ||
28 | script/source = "extends Node2D | ||
29 | |||
30 | |||
31 | func _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"] | ||
41 | script = SubResource( 4 ) | ||
42 | |||
43 | [node name="Panel" type="Panel" parent="."] | ||
44 | offset_right = 1920.0 | ||
45 | offset_bottom = 1080.0 | ||
46 | |||
47 | [node name="title" parent="Panel" type="Label"] | ||
48 | offset_left = 0.0 | ||
49 | offset_top = 75.0 | ||
50 | offset_right = 1920.0 | ||
51 | offset_bottom = 225.0 | ||
52 | text = "ARCHIPELAGO" | ||
53 | valign = 1 | ||
54 | horizontal_alignment = 1 | ||
55 | theme = ExtResource("2_g4bvn") | ||
56 | |||
57 | [node name="credit" parent="Panel" type="Label"] | ||
58 | visible = false | ||
59 | offset_left = 1278.0 | ||
60 | offset_top = 974.0 | ||
61 | offset_right = 1868.0 | ||
62 | offset_bottom = 1034.0 | ||
63 | text = "Brenton Wildes" | ||
64 | theme = ExtResource("2_g4bvn") | ||
65 | |||
66 | [node name="connect_button" parent="Panel" type="Button"] | ||
67 | offset_left = 255.0 | ||
68 | offset_top = 875.0 | ||
69 | offset_right = 891.0 | ||
70 | offset_bottom = 1025.0 | ||
71 | custom_colors/font_color_hover = Color( 1, 0.501961, 0, 1 ) | ||
72 | text = "CONNECT" | ||
73 | theme = ExtResource("2_g4bvn") | ||
74 | |||
75 | [node name="quit_button" parent="Panel" type="Button"] | ||
76 | offset_left = 1102.0 | ||
77 | offset_top = 875.0 | ||
78 | offset_right = 1738.0 | ||
79 | offset_bottom = 1025.0 | ||
80 | custom_colors/font_color_hover = Color( 1, 0, 0, 1 ) | ||
81 | text = "QUIT" | ||
82 | theme = ExtResource("2_g4bvn") | ||
83 | |||
84 | [node name="credit2" parent="Panel" type="Label"] | ||
85 | offset_left = -105.0 | ||
86 | offset_top = 346.0 | ||
87 | offset_right = 485.0 | ||
88 | offset_bottom = 410.0 | ||
89 | custom_styles/normal = SubResource( 1 ) | ||
90 | text = "SERVER" | ||
91 | align = 2 | ||
92 | theme = ExtResource("2_g4bvn") | ||
93 | |||
94 | [node name="credit5" parent="Panel" type="Label"] | ||
95 | offset_left = 1239.0 | ||
96 | offset_top = 422.0 | ||
97 | offset_right = 1829.0 | ||
98 | offset_bottom = 486.0 | ||
99 | custom_styles/normal = SubResource( 1 ) | ||
100 | text = "OPTIONS" | ||
101 | theme = ExtResource("2_g4bvn") | ||
102 | |||
103 | [node name="credit3" parent="Panel" type="Label"] | ||
104 | offset_left = -105.0 | ||
105 | offset_top = 519.0 | ||
106 | offset_right = 485.0 | ||
107 | offset_bottom = 583.0 | ||
108 | custom_styles/normal = SubResource( 1 ) | ||
109 | text = "PLAYER" | ||
110 | align = 2 | ||
111 | theme = ExtResource("2_g4bvn") | ||
112 | |||
113 | [node name="credit4" parent="Panel" type="Label"] | ||
114 | offset_left = -105.0 | ||
115 | offset_top = 704.0 | ||
116 | offset_right = 485.0 | ||
117 | offset_bottom = 768.0 | ||
118 | custom_styles/normal = SubResource( 1 ) | ||
119 | text = "PASSWORD" | ||
120 | align = 2 | ||
121 | theme = ExtResource("2_g4bvn") | ||
122 | |||
123 | [node name="server_box" type="LineEdit" parent="Panel"] | ||
124 | offset_left = 502.0 | ||
125 | offset_top = 295.0 | ||
126 | offset_right = 1144.0 | ||
127 | offset_bottom = 445.0 | ||
128 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
129 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
130 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
131 | custom_styles/focus = SubResource( 2 ) | ||
132 | align = 1 | ||
133 | caret_blink = true | ||
134 | |||
135 | [node name="player_box" type="LineEdit" parent="Panel"] | ||
136 | offset_left = 502.0 | ||
137 | offset_top = 477.0 | ||
138 | offset_right = 1144.0 | ||
139 | offset_bottom = 627.0 | ||
140 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
141 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
142 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
143 | custom_styles/focus = SubResource( 2 ) | ||
144 | align = 1 | ||
145 | caret_blink = true | ||
146 | |||
147 | [node name="password_box" type="LineEdit" parent="Panel"] | ||
148 | offset_left = 502.0 | ||
149 | offset_top = 659.0 | ||
150 | offset_right = 1144.0 | ||
151 | offset_bottom = 809.0 | ||
152 | custom_colors/selection_color = Color( 0.482353, 0, 0, 1 ) | ||
153 | custom_colors/cursor_color = Color( 0, 0, 0, 1 ) | ||
154 | custom_colors/font_color = Color( 0, 0, 0, 1 ) | ||
155 | custom_styles/focus = SubResource( 2 ) | ||
156 | align = 1 | ||
157 | caret_blink = true | ||
158 | |||
159 | [node name="AcceptDialog" type="AcceptDialog" parent="Panel"] | ||
160 | offset_right = 83.0 | ||
161 | offset_bottom = 58.0 | ||
162 | |||
163 | [node name="VersionMismatch" type="ConfirmationDialog" parent="Panel"] | ||
164 | offset_right = 83.0 | ||
165 | offset_bottom = 58.0 | ||
166 | |||
167 | [node name="connection_history" type="MenuButton" parent="Panel"] | ||
168 | offset_left = 1239.0 | ||
169 | offset_top = 276.0 | ||
170 | offset_right = 1829.0 | ||
171 | offset_bottom = 372.0 | ||
172 | text = "connection history" | ||
173 | flat = 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 @@ | |||
1 | extends Node | ||
2 | |||
3 | var source_path | ||
4 | |||
5 | |||
6 | func _init(path): | ||
7 | source_path = path | ||
8 | |||
9 | |||
10 | func load_path(path): | ||
11 | return ResourceLoader.load("%s/%s" % [source_path, path]) | ||
12 | |||
13 | |||
14 | func 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 @@ | |||
1 | extends Button | ||
2 | |||
3 | |||
4 | func _ready(): | ||
5 | pass | ||
6 | |||
7 | |||
8 | func _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 | |||
20 | func _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") | ||