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") | ||
