luxtorpeda-dev / luxtorpeda

Steam Play compatibility tool to run games using native Linux engines

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Make Luxtorpeda download required Steam files

Jpxe opened this issue · comments

Feature Request

As asked by this user: luxtorpeda-dev/packages#994 (comment)

This feature would allow Luxtorpeda to download Steam files and runtimes if an engine requires them. Such as:

  • Source SDK 2013 Singleplayer
  • Steam Linux Runtime v1
  • Steam Linux Runtime v2
  • Steam Linux Runtime v3

Could also potentially be used for more requirements like:

  • Requires Half-Life 2 Episode 1 to be installed.
  • Requires Half-Life 2 Episode 2 to be installed.
  • Enemy Territory: Quake Wars Demo - Download the linux demo manually, run and follow the steps, then copy the files to demo/ inside the steam installed

Solution

  1. Potential: Luxtorpeda checks if a user has the necessary Steam binaries and runtimes installed.
  2. Luxtorpeda downloads the necessary files and then launches the engine

Additional Context

I've tested this out a bit and installation is possible using either of these commands:

  • steam "steam://dev/console/ +app_install <AppID>" - will download directly and in the background. Works even when user doesn't have console enabled. Does nothing if it's already installed.
  • steam steam://install/<AppID> - will prompt user and ask if they want to install. If already installed: does nothing

I belive these are the AppIDs needed currently:

Name AppID
Source SDK Base 2013 Singleplayer 243730
Steam Linux Runtime 1.0 (Scout) 1070560
Steam Linux Runtime 2.0 (Soldier) 1391110
Steam Linux Runtime 3.0 (Sniper) 1628350
Half-Life 2: Episode One 380
Half-Life 2: Episode Two 420
Enemy Territory: QUAKE Wars Demo 2.0 10050

Example of how to download Steam Linux Runtime 3.0 (Sniper) from a bash script:

#!/bin/bash

# Define the App ID
app_id="1628350"

# Steam command to install the game using the variable
steam "steam://dev/console/ +app_install $app_id"

I've also looked into if it is possible to check if it's already installed. And it is with the console commands
app_status <AppID> for a specific AppID or apps_installed for a list of all installed apps. I haven't found a way to get the information outside of Steam, it only prints in the internal console. So it seems like we would have to check the VDF files for this functionality.

However, since the install command is quick and there's no problem if the app is already installed, I say we just run it steam "steam://dev/console/ +app_install <AppID>" every time an engine needs it.

Thanks for the commands, I do already have some checks that can see if its installed which is what the engines use if it requires. So I could add some logic there where if one is missing, run the install, then run the find command one more time. If one is missing then, then just throw an error.

etqw is the way it is because steam does not provide the linux binaries, so I don't think that;ll be helped by this feature but the rest makes sense.

The engines could be made simpler by this change since they could assume that the app needed is always installed.

Some additional details in luxtorpeda-dev/packages#996

I've added this in this PR - #239

This uses the existing app id searching that was already there plus calling the steam://install (through xdg-open). If it does not find an app, it'll request with that, and then wait 5 minutes (waiting for it to be found and for the directory to exist). Note that the vdf exists as soon as install starts, so just that was not a guarantee that it was complete.

Please feel free to test it out and let me know what you think if you'd like. Soon, I'll create a new client release most likely.

Screenshot_20230909_213614

How do I test this? I've downloaded and compiled the debug build. I guess I need to switch the branch?

There should be a build artifact on the latest action that you can use. If not you should be able to build with cargo build and copy the so file in target/debug to your steam compat tools luxtorpeda folder, replacing the one already there. Using the makefile for the godot part isn't required for this since there aren't any UI changes

I got it to work, it started downloading both apps needed for hl2 downfall but then lux closed/crashed. I restarted it and got this error in console:

2023-09-11 00:56:06 INFO luxtorpeda::command run returned with exit status: 127
ERROR: [RUST] file '/home/jpx/.cargo/registry/src/index.crates.io-6f17d22bba15001f/gdnative-core-0.11.3/src/object/bounds.rs' at line 77: panic occurred: "assume_safe called on an invalid pointer"
   at: <unset> (src/lib.rs:48)
thread '<unnamed>' panicked at 'assume_safe called on an invalid pointer', /home/jpx/.cargo/registry/src/index.crates.io-6f17d22bba15001f/gdnative-core-0.11.3/src/object/bounds.rs:77:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread panicked while processing panic. aborting.
/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda-dev/luxtorpeda.sh: line 16: 56331 Aborted                 (core dumped) "$DIR/luxtorpeda.x86_64" "$@"
Uploaded AppInterfaceStats to Steam

Here's some more output in a gist: https://gist.github.com/Jpxe/ef0c49c19b74a9322ab3ff3de5852d1b
And some screenshots:
Screenshot_20230911_005441
Screenshot_20230911_005342
Screenshot_20230911_005322
Screenshot_20230911_005227

Strange I'll see if I can replicate that, it looks like it got an error from the game launching and then crashed after that. If you run it again does it work? And can you replicate that if you uninstall those two and let it install them again?

I'm not at my computer anymore. I'll try to retest it and get back to you tomorrow.

From your gist, it looks like the source sdk is crashing, not sure why luxtorpeda is crashing for you as well. I tested with another game and it closes cleanly like expected if the game crashes.

So you may have some issues with launching source games in general? You may try launching another one just to see if it works as expected.

Another thing you might try and look at is adding some logs to your debug build, possibly around here:

match command::run_wrapper(cmd_args, &game_info, &sender_err) {
                Ok(()) => {}
                Err(err) => {
                    error!("command::run_wrapper err: {:?}", err);

                    let status_obj = StatusObj {
                        error: Some(err.to_string()),
                        ..Default::default()
                    };
                    let status_str = serde_json::to_string(&status_obj).unwrap();
                    sender_err.send(status_str).unwrap();
                }
            };
        });

to see if it got there and why it's crashing for you. You could also try this build built by github actions (https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6134725511), to see if it's something wrong with your env.

So I tried again. I download the GitHub actions build you linked and I also deleted all Steam files and reinstalled Steam just in case.

  1. First I tried HL2 Downfall in Lux with both dependencies already installed. Worked ok!
  2. Then I deleted Sorce SDK base 2013 & and all runtimes.
  3. I pressed start on Downfall.
  4. Got a popup to install Source SDK (but it is behind the Lux window so easy to miss)
  5. It only started to download the Source SDK (or I missed the other)
  6. Source SDK got to about 80% downloaded then I got an error both in Lux GUI and in terminal:

Screenshot of error:
Screenshot_20230912_225957

Terminal output of error:

0:58:56 [INFO] request_steam_app_id_install checking app of 243730 installed tries = 58
20:59:01 [INFO] request_steam_app_id_install checking app of 243730 installed tries = 59
20:59:06 [ERROR] request_steam_app_id_install. app not found of 243730.
20:59:06 [ERROR] get_app_id_deps_paths. app id 243730 not found. error = Custom { kind: Other, error: "request_steam_app_id_install. app not found of 243730." }
20:59:06 [ERROR] run_game. error: get_app_id_deps_paths not completed, error: Custom { kind: Other, error: "get_app_id_deps_paths. app id 243730 not found. error = Custom { kind: Other, error: \"request_steam_app_id_install. app not found of 243730.\" }" }
  1. I waited for Source SDK to finish downloading.
  2. Lux still running and showing the errror. I pressed the ok button, lux closes, game button goes back to play, new log output:
WARNING: ObjectDB instances leaked at exit (run with --verbose for details).
     at: cleanup (core/object.cpp:2070)
ERROR: Resources still in use at exit (run with --verbose for details).
   at: clear (core/resource.cpp:417)
Uploaded AppInterfaceStats to Steam
  1. I press play in Steam again.
  2. This time I get the download window for the runtime. I press install.
  3. Game launches and works

Some suggestions:

  • Make lux GUI go to background when the Steam Download Windows appear. (or automatically start the downloads)
  • Add clearer text to the Lux GUI on what the user should do and what's going on in the background. Something like this maybe:? "This game needs you to download the Steam Linux Runtime v1 and Source SDK Singelplayer.. Please press install on both and waith for the install to complete. Luxtorpeda will launch the game when it's ready."

As for the errors I'm getting, I'll try to retest it again. Here's a gist of the terminal output: https://gist.github.com/Jpxe/ef76edbc416e37ae4e3826367013a855

I tested again and both download windows appeared. But lux crashed.
Tried restarting Steam and pressing play, lux crashed immediately.

Second try:

[2023-09-12 23:26:49] Client version: 1694466342
[2023-09-12 23:26:49] Loaded SDL version 3.0.0-2074-ge063f662e
[2023-09-12 23:26:49] GetWin32Stats: display was not open yet, good
[2023-09-12 23:26:49] ComputeStartupMode: found registry default startup mode: 0
[2023-09-12 23:26:49] Switching to desktopui (from legacy vgui mode)
[2023-09-12 23:26:49] GetWin32Stats: display was not open yet, good
[2023-09-12 23:26:49] Steam Runtime Launch Service: starting steam-runtime-launcher-service
[2023-09-12 23:26:49] Steam Runtime Launch Service: steam-runtime-launcher-service is running pid 80202
[2023-09-12 23:26:49] Failed to init SteamVR because it isn't installed
[2023-09-12 23:26:49] GLibLog: domain:Gtk  msg:gtk_disable_setlocale() must be called before gtk_init()
[2023-09-12 23:26:49] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:26:49] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:26:49] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:26:49] local (potentially out of sync) copy of roaming config loaded - 306 bytes.
[2023-09-12 23:26:49] roaming config store loaded successfully - 306 bytes.
[2023-09-12 23:26:49] migrating temporary roaming config store
[2023-09-12 23:26:49] System startup time: 16.18 seconds
[2023-09-12 23:28:56] ExecCommandLine: "'/home/jpx/.local/share/Steam/ubuntu12_32/steam'"
[2023-09-12 23:29:24] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to ProcessingInstallScript with ""
[2023-09-12 23:29:24] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to SiteLicenseSeatCheckout with ""
[2023-09-12 23:29:24] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to CreatingProcess with ""
[2023-09-12 23:29:24] GameAction [AppID 587650, ActionID 1] : LaunchApp waiting for user response to CreatingProcess ""
[2023-09-12 23:29:25] GameAction [AppID 587650, ActionID 1] : LaunchApp continues with user response "CreatingProcess"
[2023-09-12 23:29:25] Game process added : AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 81158, IP 0.0.0.0:0
[2023-09-12 23:29:25] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to WaitingGameWindow with ""
[2023-09-12 23:29:25] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to Completed with ""
[2023-09-12 23:29:26] ExecCommandLine: "'~/.steam/root/ubuntu12_32/steam' 'steam://install/243730'"
[2023-09-12 23:29:26] ExecuteSteamURL: "steam://install/243730"
[2023-09-12 23:29:41] ExecCommandLine: "'~/.steam/root/ubuntu12_32/steam' 'steam://install/1070560'"
[2023-09-12 23:29:41] ExecuteSteamURL: "steam://install/1070560"
[2023-09-12 23:30:02] Game process removed: AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 81158 
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81346
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81337
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81314
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81290
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81160
[2023-09-12 23:30:02] ThreadGetProcessExitCode: no such process 81159
[2023-09-12 23:30:11] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:12] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:12] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:13] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:13] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:13] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:13] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:14] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:15] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:15] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:16] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:16] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:17] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:17] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:18] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:18] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:30:19] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp changed task to ProcessingInstallScript with ""
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp changed task to SiteLicenseSeatCheckout with ""
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp changed task to CreatingProcess with ""
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp waiting for user response to CreatingProcess ""
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp continues with user response "CreatingProcess"
[2023-09-12 23:36:37] Game process added : AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 81815, IP 0.0.0.0:0
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp changed task to WaitingGameWindow with ""
[2023-09-12 23:36:37] GameAction [AppID 587650, ActionID 2] : LaunchApp changed task to Completed with ""
[2023-09-12 23:36:40] Game process updated : AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 82031, IP 0.0.0.0:0
[2023-09-12 23:36:57] Game process removed: AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 82031 
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 82031
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 82030
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 81974
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 81972
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 81947
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 81817
[2023-09-12 23:36:57] ThreadGetProcessExitCode: no such process 81816

Third try:

[2023-09-12 23:41:10] Client version: 1694466342
[2023-09-12 23:41:10] Loaded SDL version 3.0.0-2074-ge063f662e
[2023-09-12 23:41:10] GLibLog: domain:GLib  msg:unsetenv() is not thread-safe and should not be used after threads are created
[2023-09-12 23:41:10] GetWin32Stats: display was not open yet, good
[2023-09-12 23:41:10] ComputeStartupMode: found registry default startup mode: 0
[2023-09-12 23:41:10] Switching to desktopui (from legacy vgui mode)
[2023-09-12 23:41:10] GetWin32Stats: display was not open yet, good
[2023-09-12 23:41:10] Steam Runtime Launch Service: starting steam-runtime-launcher-service
[2023-09-12 23:41:10] Steam Runtime Launch Service: steam-runtime-launcher-service is running pid 82387
[2023-09-12 23:41:10] Failed to init SteamVR because it isn't installed
[2023-09-12 23:41:10] local (potentially out of sync) copy of roaming config loaded - 306 bytes.
[2023-09-12 23:41:10] GLibLog: domain:Gtk  msg:gtk_disable_setlocale() must be called before gtk_init()
[2023-09-12 23:41:10] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:41:10] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:41:10] GLibLog: domain:Gtk  msg:Unable to locate theme engine in module_path: "adwaita",
[2023-09-12 23:41:10] roaming config store loaded successfully - 306 bytes.
[2023-09-12 23:41:10] migrating temporary roaming config store
[2023-09-12 23:41:10] System startup time: 15.65 seconds
[2023-09-12 23:43:12] ExecCommandLine: "'/home/jpx/.local/share/Steam/ubuntu12_32/steam'"
[2023-09-12 23:43:33] CAPIJobRequestUserStats - Server response failed 2
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to ProcessingInstallScript with ""
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to SiteLicenseSeatCheckout with ""
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to CreatingProcess with ""
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp waiting for user response to CreatingProcess ""
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp continues with user response "CreatingProcess"
[2023-09-12 23:44:03] Game process added : AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 83134, IP 0.0.0.0:0
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to WaitingGameWindow with ""
[2023-09-12 23:44:03] GameAction [AppID 587650, ActionID 1] : LaunchApp changed task to Completed with ""
[2023-09-12 23:44:05] Game process removed: AppID 587650 "/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=587650 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2 DownFall/hl2.exe' -game downfall", ProcID 83134 
[2023-09-12 23:44:05] ThreadGetProcessExitCode: no such process 83291
[2023-09-12 23:44:05] ThreadGetProcessExitCode: no such process 83266
[2023-09-12 23:44:05] ThreadGetProcessExitCode: no such process 83136
[2023-09-12 23:44:05] ThreadGetProcessExitCode: no such process 83135

On the first thing it looks like that's because the download look longer than 5 minutes which is the current timeout. I could increase that to something much longer.

Once that's taken care of it should work.

For the auto download that's on steams side so I don't have any control of that. As well letting the user pick is probably the best option since most people have multiple libraries.

I could add some additional details to the progress screen that they need to look at the steam window to start the download. I don't have the name of the app at that point but could at least say to look out for a download dialog

Also the logs you mentioned about resources not being freed is normal, that's a godot issue on close that I haven't figured out but it does not hurt anything, since it's on close

I might be able to minimize and show the window, I'll have to see what godot supports on that.

Thanks for testing, I'll have another build soon with some changes

There's a new build here: https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6167481918

It adds some more details to the progress screen and increases the timeout, along with making it configurable. I didn't see a way with Godot to control the window show/hide state, so left that out.

Let me know how that goes, thanks!

I'll see if I can try it out later today.

It is possible to get Steam to download automatically/without prompting the user to press ok:

  • steam "steam://dev/console/ +app_install <AppID>" - will download directly and in the background. Works even when user doesn't have console enabled. Does nothing if it's already installed.

I think this command and auto download might be the best option. Especially when the popup isn't in the front and is easy to miss.

With the download automatically, I prefer to let the user decide with the prompt, in case they don't want to install it for whatever reason, as well that lets them pick their library

There's a new build here: https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6167481918

It adds some more details to the progress screen and increases the timeout, along with making it configurable. I didn't see a way with Godot to control the window show/hide state, so left that out.

Let me know how that goes, thanks!

Both dependencies started to download ok but then Lux GUI crashed immediately. Log here:
luxoutput.log

The one that I've been testing and that crashed was HL2: Downfall. I just tested Minerva and it downloaded HL1 ep1 without problems, lux gui didn't crash and game started. Not sure what's the difference causing the crashes..
Here's the updated log:
luxoutput.log

On the one that's failing to launch, it isn't because of the client it looks like, it's because the engine is failing to launch:

When an error occurs in an engine, lux will exit, unless it's an error with a specific code, so that behavior is expected.

./run-downfall.sh: line 94: /home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/scout-on-soldier-entry-point-v2: No such file or directory

As you can see, this is on the depot, so it should exist: https://steamdb.info/depot/1070561/

Does that file and path exist on your system?

It seems to be there so that's a little strange. Could Lux be checking for the file and closing before the download is finished?

Screenshot_20230915_185133

Currently, lux checks for the vdf being there and the folder being there. There might be a window where the files are being copied from the downloading space and the folder has been created.

I may have to put some metadata in the packages json to say for a particular app id, check if a certain file exists, and then if it does assume that it's ready. That might not be 100% though, because depending on how the files are copied, some might still be missing.

Do you know if there's some sort of signal we could use that the download is complete? Maybe a steam file that if no longer there that means the file is complete?

Do you know if there's some sort of signal we could use that the download is complete? Maybe a steam file that if no longer there that means the file is complete?

What about doing a file size check for all the needed files? You can get the file sizes from the depots on steamdb: https://steamdb.info/depot/1070561/

From looking at the data we're getting from the vdf, looks like that gives us a nice payload to look for:

{ app_id: 243730, path: "/run/media/dnimon/Storage/SteamLibrary/steamapps/common/Source SDK Base 2013 Singleplayer", name: Some("Source SDK Base 2013 Singleplayer"), universe: Some(Public), launcher_path: None, state_flags: Some([FullyInstalled]), last_updated: Some(SystemTime { tv_sec: 1695052190, tv_nsec: 0 }), update_result: Some(0), size_on_disk: Some(8192132063), build_id: Some(397216), bytes_to_download: Some(4973367280), bytes_downloaded: Some(4973367280), bytes_to_stage: Some(8192132063), bytes_staged: Some(8192132063), staging_size: Some(0), target_build_id: Some(397216), auto_update_behavior: KeepUpToDate, allow_other_downloads_while_running: UseGlobalSetting, scheduled_auto_update: None, full_validate_before_next_update: false, full_validate_after_next_update: false, installed_depots: {243731: Depot { manifest: 7649573089460931720, size: 7884009941, dlc_app_id: None }, 243734: Depot { manifest: 2038873838433757169, size: 308720478, dlc_app_id: None }}, staged_depots: {}, user_config: {"BetaKey": "upcoming", "additionalcontent": "380,220", "language": "english", "platform_override_dest": "", "platform_override_source": ""}, mounted_config: {"BetaKey": "upcoming", "additionalcontent": "380,220", "language": "english", "platform_override_dest": "", "platform_override_source": ""}, install_scripts: {}, shared_depots: {}, last_user: Some(SteamID(76561197990646384) {ID: 30380656, Instance: Desktop, Type: Individual, Universe: Public}) }

The main thing in there is state_flags: Some([FullyInstalled])

If I see that, I should be able to use that to consider it ready to go. I'll implement that soon and provide a build, if you can try that out and see what you think.

Implemented in https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6225375926, once that's done, please give that a try and let me know what you think.

Any luck with the latest build?

Any luck with the latest build?

I did try it and got a crash again. It was likely the game engine. Lux closed/crashed but I later realized I had changed the lux config settings, and I think there was a setting for closing lux GUI directly after launch? so that's probably why.

I will try to test it again properly. I'm heading to work now but I should be able to look at it this evening. Do you have any recommendations for how to test a build like this? Last time I changed the vdf file to rename it to luxtorpeda-test in Steam

Tested Downfall, Minerva and Resistance Element. Souce SDK and Linux Runtime 1.0 download works. Lux didn't seem to check for/or download HL2EP1 so Minerva crashed when Lux tried to launch it. I downloaded it manually and then it worked. Resistance Element checked for HL2EP2 and downloaded it.

Fix HL2EP1 check and install for Minerva and then it looks good!

Are there any more games I should test?

Is it implemented for any of these?

  • Jagged Alliance 2 - Wildfire
  • RollerCoaster Tycoon: Deluxe
  • Descent: FreeSpace – The Great War

If you search for "app_ids_deps": [ you'll see a list of games that use it in the packages json metadata. So feel free to test if you would like, thanks!

I'll look at the ep1, that may be something related to it being shared with half life 2, I'm asking for the app_id (380).

Could you provide a log of your attempt with minerva, where you try and want it to install ep1? As well, does it work on a normal case?

Here's the log for all the games I tested: lux6225375926.log

What were the results from those tests? did any of them fail?

Only Minerva. It's the log for the tests I did previously here: #238 (comment)
I haven't done any new tests yet

I wonder if it's because half life 2 episode 1 is part of half life 2 so it's getting confused messages there. While it's downloading and then completed can you check the vdf file for the app id in your steam library and paste the results here

What vdf file is it in and where is it located?

It'll be on your steam library then steamapps/appmanifest_appid.acf

If you could copy the contents of that file when you first do the install of hl 2 ep1 and then when it's finished, that'd be great, thanks!

After I uninstalled HL2EP1 this is the content of appmanifest_380.acf:

"AppState"
{
	"appid"		"380"
	"universe"		"1"
	"name"		"Half-Life 2: Episode One"
	"StateFlags"		"68"
	"installdir"		"Half-Life 2"
	"LastUpdated"		"1695363706"
	"SizeOnDisk"		"1771279148"
	"StagingSize"		"0"
	"buildid"		"10293437"
	"LastOwner"		"76561197982408936"
	"UpdateResult"		"0"
	"BytesToDownload"		"0"
	"BytesDownloaded"		"0"
	"BytesToStage"		"0"
	"BytesStaged"		"0"
	"TargetBuildID"		"0"
	"AutoUpdateBehavior"		"0"
	"AllowOtherDownloadsWhileRunning"		"0"
	"ScheduledAutoUpdate"		"0"
	"InstalledDepots"
	{
		"389"
		{
			"manifest"		"6097040002094797798"
			"size"		"1148800633"
		}
		"380"
		{
			"manifest"		"8345042109147019893"
			"size"		"622478515"
		}
	}
	"UserConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
	"MountedConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
}

After installed (installed directly when I pressed install, so seems to be already on disk):

"AppState"
{
	"appid"		"380"
	"universe"		"1"
	"name"		"Half-Life 2: Episode One"
	"StateFlags"		"4"
	"installdir"		"Half-Life 2"
	"LastUpdated"		"1695363706"
	"SizeOnDisk"		"1771279148"
	"StagingSize"		"0"
	"buildid"		"10293437"
	"LastOwner"		"76561197982408936"
	"AutoUpdateBehavior"		"0"
	"AllowOtherDownloadsWhileRunning"		"0"
	"ScheduledAutoUpdate"		"0"
	"InstalledDepots"
	{
		"389"
		{
			"manifest"		"6097040002094797798"
			"size"		"1148800633"
		}
		"380"
		{
			"manifest"		"8345042109147019893"
			"size"		"622478515"
		}
	}
	"SharedDepots"
	{
		"221"		"220"
		"224"		"220"
	}
	"UserConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
	"MountedConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
}

So it seems like HL2EP1 is automatically installed if you install HL2EP2.

EDIT: yeah checking "BytesToDownload" shows that it's 0 both when uninstalled and installed. So i'ts actually never uninstalled if you have HL2EP2 installed.

I uninstalled HL2EP2 and that changed the behavior of HL2EP1: when I pressed uninstall it removed the VDF file completely. When I pressed install it starts downloading (instead of being done directly like previously).

Here's the VDF during HL2EP1 downloading and HL2EP2 uninstalled:

{
	"appid"		"380"
	"universe"		"1"
	"name"		"Half-Life 2: Episode One"
	"StateFlags"		"1026"
	"installdir"		"Half-Life 2"
	"LastUpdated"		"0"
	"SizeOnDisk"		"0"
	"StagingSize"		"0"
	"buildid"		"0"
	"LastOwner"		"76561197982408936"
	"UpdateResult"		"4"
	"BytesToDownload"		"3193618928"
	"BytesDownloaded"		"371435776"
	"BytesToStage"		"5591013505"
	"BytesStaged"		"677561643"
	"TargetBuildID"		"10293437"
	"AutoUpdateBehavior"		"0"
	"AllowOtherDownloadsWhileRunning"		"0"
	"ScheduledAutoUpdate"		"0"
	"InstalledDepots"
	{
	}
	"SharedDepots"
	{
		"221"		"220"
		"224"		"220"
	}
	"UserConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
	"MountedConfig"
	{
	}
}

Here's the VDF file after HL2EP1 download is completed and HL2EP2 still uninstalled:

"AppState"
{
	"appid"		"380"
	"universe"		"1"
	"name"		"Half-Life 2: Episode One"
	"StateFlags"		"4"
	"installdir"		"Half-Life 2"
	"LastUpdated"		"1695663507"
	"SizeOnDisk"		"1771279148"
	"StagingSize"		"0"
	"buildid"		"10293437"
	"LastOwner"		"76561197982408936"
	"UpdateResult"		"0"
	"BytesToDownload"		"3193618928"
	"BytesDownloaded"		"3193618928"
	"BytesToStage"		"5591013505"
	"BytesStaged"		"5591013505"
	"TargetBuildID"		"10293437"
	"AutoUpdateBehavior"		"0"
	"AllowOtherDownloadsWhileRunning"		"0"
	"ScheduledAutoUpdate"		"0"
	"InstalledDepots"
	{
		"389"
		{
			"manifest"		"6097040002094797798"
			"size"		"1148800633"
		}
		"380"
		{
			"manifest"		"8345042109147019893"
			"size"		"622478515"
		}
	}
	"SharedDepots"
	{
		"221"		"220"
		"224"		"220"
	}
	"UserConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
	"MountedConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
}

Interesting, thanks, what was the behavior of the client if you uninstalled ep2 and ep1? Does it work as expected?

And if you leave all of them installed, does minerva launch?

Interesting, thanks, what was the behavior of the client if you uninstalled ep2 and ep1? Does it work as expected?

Works as intended. It asked the download ep1 and then launched the game when the download had finished.

And if you leave all of them installed, does minerva launch?

Yes

It also worked after I "uninstalled" ep1 from steam.

Is there any case now where minvera is not working? Or is it working as expected now?

Thanks!

It's not working when I paus ep1 downloading. I think it's the same condition as the first time I didn't work.

Here's the log output:

/bin/sh\0-c\0/home/jpx/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=235780 -- /home/jpx/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- '/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper'/_v2-entry-point --verb=waitforexitandrun -- '/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda'/luxtorpeda.sh waitforexitandrun  '/home/jpx/.local/share/Steam/steamapps/common/MINERVA/hl2.exe' -game metastasis\0
ERROR: ld.so: object '/home/jpx/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/jpx/.local/share/Steam/ubuntu12_64/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS64): ignored.
ERROR: ld.so: object '/home/jpx/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/jpx/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/jpx/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
WARNING: discarding _NET_WM_PID 2 as invalid for X11 window - use specialized XCB_X11_TO_PID function!
WARNING: discarding _NET_WM_PID 2 as invalid for X11 window - use specialized XCB_X11_TO_PID function!
WARNING: discarding _NET_WM_PID 2 as invalid for X11 window - use specialized XCB_X11_TO_PID function!
LD_PRELOAD found with /tmp/pressure-vessel-libs-4SJUB2/${PLATFORM}/gameoverlayrenderer.so
pid 22787 != 22786, skipping destruction (fork without exec?)
Initialize GDExtension API for Rust: Godot Engine v4.1.1.stable.official
Fossilize INFO: Overriding serialization path: "/home/jpx/.local/share/Steam/steamapps/shadercache/235780/fozpipelinesv6/steamapprun_pipeline_cache".
20:19:13 [INFO] setup_logging success
20:19:13 [INFO] config_file_path exists, reading
20:19:13 [INFO] luxtorpeda version: 66.1.0
20:19:13 [INFO] steam_app_id: "235780"
20:19:13 [INFO] original command: ["/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda/luxtorpeda.x86_64", "waitforexitandrun", "/home/jpx/.local/share/Steam/steamapps/common/MINERVA/hl2.exe", "-game", "metastasis"]
20:19:13 [INFO] working dir: Ok("/home/jpx/.local/share/Steam/steamapps/common/MINERVA")
20:19:13 [INFO] tool dir: "/home/jpx/.local/share/Steam/compatibilitytools.d/luxtorpeda"
20:19:13 [INFO] config_file_path exists, reading
20:19:13 [INFO] update_packages_json. found hash: 6e87e20934973bcca07d7c77ea041ffb6e947479a598e85af9475ca8434fd2d8
20:19:13 [INFO] update_packages_json. found hash and remote hash: 6e87e20934973bcca07d7c77ea041ffb6e947479a598e85af9475ca8434fd2d8 6e87e20934973bcca07d7c77ea041ffb6e947479a598e85af9475ca8434fd2d8
20:19:13 [INFO] packages_json_file exists, reading
20:19:13 [INFO] "/home/jpx/.config/luxtorpeda/user-packages.json"
20:19:13 [INFO] source-sdk-2013-235780-27.tar.xz found in cache (skip)
20:19:13 [INFO] packages_json_file exists, reading
20:19:13 [INFO] "/home/jpx/.config/luxtorpeda/user-packages.json"
20:19:13 [INFO] source-sdk-2013-235780-27.tar.xz found in cache (skip)
20:19:13 [INFO] Downloads is empty
20:19:13 [INFO] packages_json_file exists, reading
20:19:13 [INFO] "/home/jpx/.config/luxtorpeda/user-packages.json"
20:19:13 [INFO] json:
20:19:13 [INFO] Game { game_name: "MINERVA", engine_name: "Source SDK 2013", command: Some("./run-metastasis.sh"), command_args: [], download_config: None, cloud_not_available: true, cloud_supported: false, cloud_available: false, cloud_issue: false, download: [DownloadItem { name: "source-sdk-2013", url: "https://github.com/luxtorpeda-dev/packages/releases/download/source-sdk-2013-27/", file: "source-sdk-2013-235780-27.tar.xz", cache_by_name: false }], app_id: "235780", choices: None, notices: Some([Notice { label: Some("Requires Half-Life 2 Episode 1 to be installed."), key: Some("app_ids_deps"), value: None }]), controller_steam_default: false, use_original_command_directory: false, app_ids_deps: Some([243730, 1070560, 380]), setup: None, commands: None }
20:19:13 [INFO] config_file_path exists, reading
20:19:13 [INFO] hash_check_install is enabled, checking for source-sdk-2013, game_command_file_found: true
20:19:13 [INFO] source-sdk-2013.hash has been found, checking hash against file
20:19:13 [INFO] cached hash is ac8f24f6df671f71c4b4bc33daeb7700082d4edea635295ac6584819fd6faad2; install file hash is ac8f24f6df671f71c4b4bc33daeb7700082d4edea635295ac6584819fd6faad2
20:19:13 [INFO] hash for source-sdk-2013 is same, skipping install
20:19:13 [INFO] get_app_id_deps_paths. searching for app id 243730.
20:19:13 [INFO] get_app_id_deps_paths. app id 243730 found at "/home/jpx/.local/share/Steam/steamapps/common/Source SDK Base 2013 Singleplayer".
20:19:13 [INFO] get_app_id_deps_paths. searching for app id 1070560.
20:19:13 [INFO] get_app_id_deps_paths. app id 1070560 found at "/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime".
20:19:13 [INFO] get_app_id_deps_paths. searching for app id 380.
20:19:13 [INFO] get_app_id_deps_paths. app id 380 found at "/home/jpx/.local/share/Steam/steamapps/common/Half-Life 2".
20:19:13 [INFO] run_game. get_app_id_deps_paths completed
20:19:13 [INFO] run: "./run-metastasis.sh" with args: [] ["-game", "metastasis"]
20:19:13 [INFO] config_file_path exists, reading
20:19:13 [INFO] controller_detection_change: 
~/.local/share/Steam/steamapps/common/MINERVA/metastasis ~/.local/share/Steam/steamapps/common/MINERVA
'../shorewave003a.vmt' -> 'materials/test/shorewave003a.vmt'
'../gameinfo.txt' -> 'gameinfo.txt'
~/.local/share/Steam/steamapps/common/MINERVA
Automatically detected sdkpath at /home/jpx/.local/share/Steam/steamapps/common/Source SDK Base 2013 Singleplayer
Automatically detected runtimepath at /home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime
Automatically detected hlpath at /home/jpx/.local/share/Steam/steamapps/common/Half-Life 2
~/.local/share/Steam/steamapps/common/MINERVA/metastasis ~/.local/share/Steam/steamapps/common/MINERVA
mkdir: cannot create directory 'bin': File exists
~/.local/share/Steam/steamapps/common/MINERVA
pid 22827 != 22823, skipping destruction (fork without exec?)
/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/scout-on-soldier-entry-point-v2[22823]: Command to run: /home/jpx/.local/share/Steam/steamapps/common/Half-Life\ 2/hl2.sh -game /home/jpx/.local/share/Steam/steamapps/common/MINERVA/metastasis -steam +mat_hdr_level 2 -game metastasis 
pid 22828 != 22823, skipping destruction (fork without exec?)
/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/scout-on-soldier-entry-point-v2[22823]: Using default scout runtime /home/jpx/.local/share/Steam/ubuntu12_32/steam-runtime
pid 22833 != 22823, skipping destruction (fork without exec?)
/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/scout-on-soldier-entry-point-v2[22823]: scout runtime version 'steam-runtime_0.20230801.56012'
pid 22849 != 22823, skipping destruction (fork without exec?)
/home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/scout-on-soldier-entry-point-v2[22823]: Running: /home/jpx/.local/share/Steam/steamapps/common/SteamLinuxRuntime/var/steam-runtime/run.sh env LD_PRELOAD=/tmp/pressure-vessel-libs-4SJUB2/\$\{PLATFORM\}/gameoverlayrenderer.so steam-runtime-launcher-interface-0 scout-in-container:scout-on-soldier /home/jpx/.local/share/Steam/steamapps/common/Half-Life\ 2/hl2.sh -game /home/jpx/.local/share/Steam/steamapps/common/MINERVA/metastasis -steam +mat_hdr_level 2 -game metastasis 
20:19:13 [INFO] run returned with exit status: 127
ERROR: BUG: Unreferenced static string to 0: Physics2DConstraintSolveIslands
   at: unref (core/string/string_name.cpp:129)
ERROR: BUG: Unreferenced static string to 0: Physics2DConstraintSetup
   at: unref (core/string/string_name.cpp:129)
ERROR: BUG: Unreferenced static string to 0: @export_enum
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @export_flags
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @export_placeholder
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @export
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @export_multiline
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @export_range
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: @warning_ignore
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: Variant
   at: unref (core/string/string_name.cpp:129)
ERROR: BUG: Unreferenced static string to 0: @icon
   at: unref (core/string/string_name.cpp:131)
Godot Engine v4.1.1.stable.official.bd6af8e0e - https://godotengine.org
Vulkan API 1.3.242 - Forward+ - Using Vulkan Device #0: NVIDIA - NVIDIA GeForce GTX 980
 
ERROR: Pages in use exist at exit in PagedAllocator: N7Variant5Pools11BucketLargeE
   at: ~PagedAllocator (./core/templates/paged_allocator.h:170)
ERROR: Pages in use exist at exit in PagedAllocator: N7Variant5Pools12BucketMediumE
   at: ~PagedAllocator (./core/templates/paged_allocator.h:170)
ERROR: Pages in use exist at exit in PagedAllocator: N7Variant5Pools11BucketSmallE
   at: ~PagedAllocator (./core/templates/paged_allocator.h:170)
ERROR: BUG: Unreferenced static string to 0: text_set
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: lines_edited_from
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: GodotPhysicsDirectSpaceState2D
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: interface_added
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: frame_pre_draw
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: frame_post_draw
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: SceneReplicationInterface
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: physics_frame
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: bus_layout_changed
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: SceneCacheInterface
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: SceneRPCInterface
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: fallback_changed
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: completed
   at: unref (core/string/string_name.cpp:131)
ERROR: BUG: Unreferenced static string to 0: child_entered_tree
   at: unref (core/string/string_name.cpp:131)
Uploaded AppInterfaceStats to Steam

Here's the vdf for 380:

"AppState"
{
	"appid"		"380"
	"universe"		"1"
	"name"		"Half-Life 2: Episode One"
	"StateFlags"		"1026"
	"installdir"		"Half-Life 2"
	"LastUpdated"		"0"
	"SizeOnDisk"		"0"
	"StagingSize"		"0"
	"buildid"		"0"
	"LastOwner"		"76561197982408936"
	"UpdateResult"		"4"
	"BytesToDownload"		"3193618928"
	"BytesDownloaded"		"118542624"
	"BytesToStage"		"5591013505"
	"BytesStaged"		"300073414"
	"TargetBuildID"		"10293437"
	"AutoUpdateBehavior"		"0"
	"AllowOtherDownloadsWhileRunning"		"0"
	"ScheduledAutoUpdate"		"0"
	"InstalledDepots"
	{
	}
	"SharedDepots"
	{
		"221"		"220"
		"224"		"220"
	}
	"UserConfig"
	{
		"language"		"english"
		"BetaKey"		"public"
	}
	"MountedConfig"
	{
	}
}

On the file, is that when you were paused, or in a different state?

when paused

Can you try this build? https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6314729294

I believe the issue was when you first start, it wasn't checking the fullyinstalled flag, like it does when it asks for the install, so that should fix your issue. Thanks!

Can you try this build? https://github.com/luxtorpeda-dev/luxtorpeda/actions/runs/6314729294

I believe the issue was when you first start, it wasn't checking the fullyinstalled flag, like it does when it asks for the install, so that should fix your issue. Thanks!

The install command doesn't seem to work when the download is paused. But other than that it no longer crashes and when I manually resumed to download it waited until it downloaded and launches the game. So I'd say it's good enough for merging if you feel happy with it. Thanks for implementing it!

Ok great, yeah there probably isn't anything I can do about it being paused, but at least now it'll act correctly.

Thanks! I'll merge this in soon and create a release. Thanks alot for all the help in testing!