From a7762441409994c1b46c239ae8fb72d2b914c558 Mon Sep 17 00:00:00 2001 From: Dregu Date: Sun, 11 Dec 2022 05:07:44 +0200 Subject: [PATCH] Add more Overlunky launch options --- src/modlunky2/config.py | 1 + src/modlunky2/ui/overlunky.py | 70 ++++++++++++++++++++++++++++---- src/modlunky2/ui/play/options.py | 18 ++++++++ src/modlunky2/ui/play/play.py | 11 ++++- 4 files changed, 90 insertions(+), 10 deletions(-) diff --git a/src/modlunky2/config.py b/src/modlunky2/config.py index 5e23be4f4..88da5cc66 100644 --- a/src/modlunky2/config.py +++ b/src/modlunky2/config.py @@ -183,6 +183,7 @@ class Config: ) playlunky_version: Optional[str] = field(default=None, skip_if_default=True) playlunky_console: bool = field(default=False, skip_if_default=True) + playlunky_overlunky: bool = field(default=False, skip_if_default=True) playlunky_shortcut: bool = field(default=False, skip_if_default=True) geometry: str = field(default=f"{MIN_WIDTH}x{MIN_HEIGHT}", skip_if_default=True) spelunky_fyi_root: str = field( diff --git a/src/modlunky2/ui/overlunky.py b/src/modlunky2/ui/overlunky.py index ae16cae8e..24f5c2132 100644 --- a/src/modlunky2/ui/overlunky.py +++ b/src/modlunky2/ui/overlunky.py @@ -5,7 +5,8 @@ import zipfile from io import BytesIO from tkinter import ttk - +from functools import partial +import webbrowser import requests from modlunky2.config import Config @@ -45,7 +46,7 @@ def download_overlunky_release(call, install_dir, launch): class DownloadFrame(ttk.Frame): - def __init__(self, parent, modlunky_config: Config, task_manager): + def __init__(self, parent, modlunky_config: Config, task_manager, tab): super().__init__(parent) self.parent = parent @@ -53,6 +54,8 @@ def __init__(self, parent, modlunky_config: Config, task_manager): self.task_manager = task_manager self.columnconfigure(0, weight=1) self.rowconfigure(0, minsize=60) + self.rowconfigure(1, minsize=60) + self.rowconfigure(2, minsize=60) self.task_manager.register_task( "overlunky:start_download", @@ -69,8 +72,22 @@ def __init__(self, parent, modlunky_config: Config, task_manager): "overlunky:download_failed", self.on_download_failed ) - self.button = ttk.Button(self, text="Download Latest", command=self.download) - self.button.grid(row=0, column=0, sticky="nswe") + self.button = ttk.Button( + self, + text="Download latest WHIP build and script bundle", + command=self.download, + ) + self.button.grid(row=0, column=0, pady=5, padx=5, sticky="nswe") + + self.button_update = ttk.Button( + self, + text="Reconfigure automatic updates", + command=partial(tab.launch, ["--update"]), + ) + self.button_update.grid(row=1, column=0, pady=5, padx=5, sticky="nswe") + + self.button_guide = ttk.Button(self, text="Documentation", command=tab.guide) + self.button_guide.grid(row=2, column=0, pady=5, padx=5, sticky="nswe") def download(self, launch=False): self.button["state"] = tk.DISABLED @@ -97,12 +114,19 @@ def on_download_finished(self, launch=False): self.button["state"] = tk.NORMAL -def launch_overlunky(_call, exe_path, command_prefix: Optional[List[str]]): +def launch_overlunky( + _call, + exe_path, + command_prefix: Optional[List[str]], + command_args: Optional[List[str]], +): logger.info("Executing Overlunky Launcher with %s", exe_path) working_dir = exe_path.parent cmd = [f"{exe_path}"] if command_prefix: cmd = command_prefix + cmd + if command_args: + cmd = cmd + command_args proc = subprocess.Popen( cmd, cwd=working_dir, creationflags=subprocess.CREATE_NEW_CONSOLE ) @@ -134,17 +158,41 @@ def __init__(self, tab_control, modlunky_config, task_manager, *args, **kwargs): self.overlunky_frame.rowconfigure(0, weight=0) self.overlunky_frame.rowconfigure(1, weight=1) self.overlunky_frame.rowconfigure(2, minsize=60) + self.overlunky_frame.rowconfigure(3, minsize=60) + self.overlunky_frame.rowconfigure(4, minsize=60) self.overlunky_frame.columnconfigure(0, weight=1) self.download_frame = DownloadFrame( - self.overlunky_frame, self.modlunky_config, self.task_manager + self.overlunky_frame, self.modlunky_config, self.task_manager, self ) self.download_frame.grid(row=1, column=0, pady=5, padx=5, sticky="nswe") self.button_launch = ttk.Button( - self.overlunky_frame, text="Launch!", command=self.launch + self.overlunky_frame, + text="Inject to running game process", + command=partial( + self.launch, + ["--console"], + ), ) - self.button_launch.grid(row=2, column=0, pady=5, padx=5, sticky="nswe") + self.button_launch.grid(row=3, column=0, pady=5, padx=5, sticky="nswe") + + self.button_launch_game = ttk.Button( + self.overlunky_frame, + text="Launch vanilla game with Overlunky", + command=partial( + self.launch, + ["--console", "--launch_game", self.modlunky_config.install_dir], + ), + ) + self.button_launch_game.grid(row=4, column=0, pady=5, padx=5, sticky="nswe") + + ttk.Label( + self.overlunky_frame, + text="To use Overlunky with Playlunky/mods, use 'Inject' or enable 'Load Overlunky' option in the Playlunky tab.", + font="sans 9 bold", + ).grid(row=5, column=0, padx=5, pady=5, sticky="s") + self.on_load() def enable_button(self): @@ -171,7 +219,7 @@ def should_install(self): return answer - def launch(self): + def launch(self, args=None): exe_path = self.modlunky_config.install_dir / OVERLUNKY_EXE self.disable_button() @@ -189,8 +237,12 @@ def launch(self): "overlunky:launch_overlunky", exe_path=exe_path, command_prefix=self.modlunky_config.command_prefix, + command_args=args, ) def overlunky_closed(self): self.enable_button() self.on_load() + + def guide(self): + webbrowser.open_new_tab("https://github.com/spelunky-fyi/overlunky#readme") diff --git a/src/modlunky2/ui/play/options.py b/src/modlunky2/ui/play/options.py index 5d2983e36..756a2404f 100644 --- a/src/modlunky2/ui/play/options.py +++ b/src/modlunky2/ui/play/options.py @@ -40,6 +40,16 @@ def __init__(self, parent, play_tab, modlunky_config: Config): command=self.handle_console_checkbutton, ) + self.enable_overlunky_var = tk.BooleanVar() + self.enable_overlunky_var.set(self.modlunky_config.playlunky_overlunky) + self.enable_overlunky_checkbox = ttk.Checkbutton( + self, + text="Load Overlunky", + variable=self.enable_overlunky_var, + compound="left", + command=self.handle_overlunky_checkbutton, + ) + self.desktop_shortcut_var = tk.BooleanVar() self.desktop_shortcut_var.set(self.modlunky_config.playlunky_shortcut) self.desktop_shortcut_checkbox = ttk.Checkbutton( @@ -102,6 +112,10 @@ def __init__(self, parent, play_tab, modlunky_config: Config): row=row_num, column=0, padx=3, sticky="w" ) row_num += 1 + self.enable_overlunky_checkbox.grid( + row=row_num, column=0, padx=3, sticky="w" + ) + row_num += 1 @staticmethod def format_text(text): @@ -111,6 +125,10 @@ def handle_console_checkbutton(self): self.modlunky_config.playlunky_console = self.enable_console_var.get() self.modlunky_config.save() + def handle_overlunky_checkbutton(self): + self.modlunky_config.playlunky_overlunky = self.enable_overlunky_var.get() + self.modlunky_config.save() + @property def shortcut_path(self): return Path(winshell.desktop(), "Playlunky.lnk") diff --git a/src/modlunky2/ui/play/play.py b/src/modlunky2/ui/play/play.py index 59a17872f..4f32e14c8 100644 --- a/src/modlunky2/ui/play/play.py +++ b/src/modlunky2/ui/play/play.py @@ -28,7 +28,12 @@ def launch_playlunky( - _call, install_dir, exe_path, use_console, command_prefix: Optional[List[str]] + _call, + install_dir, + exe_path, + use_console, + use_overlunky, + command_prefix: Optional[List[str]], ): logger.info( "Executing Playlunky Launcher with %s", exe_path.relative_to(PLAYLUNKY_DATA_DIR) @@ -42,6 +47,9 @@ def launch_playlunky( if use_console: cmd.append("--console") + if use_overlunky: + cmd.append("--overlunky") + proc = subprocess.Popen(cmd, cwd=working_dir) proc.communicate() @@ -327,6 +335,7 @@ def play(self): install_dir=self.modlunky_config.install_dir, exe_path=exe_path, use_console=self.modlunky_config.playlunky_console, + use_overlunky=self.modlunky_config.playlunky_overlunky, command_prefix=self.modlunky_config.command_prefix, )