dreamer / boxtron

Steam Play compatibility tool to run DOS games using native Linux DOSBox
https://luxtorpeda.gitlab.io/
GNU General Public License v2.0
406 stars 5 forks source link

Duke Nukem 2 does not run #3

Closed boltronics closed 5 years ago

boltronics commented 5 years ago

I spent a bit of time trying to track down why Duke Nukem 2 won't launch, and I think it's breaking in DosboxConfiguration.__init__() as self.file_tree.get_posix_path(win_path) returns None.

The directory structure of the game is a bit odd. It seems to be executed like this:

$ cat Duke\ Nukem\ 2.bat
@echo off
cd "dosbox"
start dosbox -conf "..\NUKEM2.conf" -noconsole -c
exit

The directory is actually Dosbox and the config is actually ../Nukem2.conf so there will be case issues to deal with. However, the dosbox configuration file also has relative paths. eg. in the [autoexec] section:

@echo off
Mount C ".."
C:
cls
Nukem2.exe
exit

The stderr output is:

run_dosbox: generating steam_dos_240180_3eabc2.conf based on ['-conf', '..\\NUKEM2.conf', '-noconsole', '-c']

It seems to just die at that point due to the path issue.

dreamer commented 5 years ago

Hmm, it's weird... According to steamdb, this game does not use .bat file, but runs dosbox/dosbox.exe -conf "..\NUKEM2.conf" -noconsole -c.

Comparing to game files - it only makes sense if game publisher actually uses Dosbox working directory (working directory is not listed on steamdb)... But if it did, then it should work in steam-dos already (I had the same situation with X-Wing games).

Can you edit the steam_dos_240180_3eabc2.conf file, remove @echo off and exit lines and tell me what does the dosbox say when running the game again?

In the meantime I will add logging of current working directory.

dreamer commented 5 years ago

Just pushed tiny change to help debug this issue. What does Steam print on stderr when running the game? Are there any errors printed after "run_dosbox" lines?

boltronics commented 5 years ago

steam_dos_240180_3eabc2.conf only gets created if I replace path = self.file_tree.get_posix_path(win_path) with path = win_path. When created, it looks like this:

# Generated by steam-dos
# Based on args to Windows version of DOSBox:
# ['-conf', '..\\NUKEM2.conf', '-noconsole', '-c']

[sdl]
fullscreen=true
fullresolution=desktop
output=opengl
autolock=false
waitonerror=true

[autoexec]

I'm guessing that [autoexec] section shouldn't be empty, which is probably a side effect of the path not being set correctly or something. I haven't yet spent the time to track it down.

While unrelated, it's also probably worth noting that my compatibilitytools.d is located directly under .steam and not .steam/root (which doesn't work for me when I move it there). No idea why it's different.

boltronics commented 5 years ago

With the current master I still just get: WARNING:root:run_dosbox: generating steam_dos_240180_3eabc2.conf based on ['-conf', '..\\NUKEM2.conf', '-noconsole', '-c']

With the path = win_path change I get:

WARNING:root:run_dosbox: generating steam_dos_240180_3eabc2.conf based on ['-conf', '..\\NUKEM2.conf', '-noconsole', '-c']
WARNING:root:steam-dos: Detected TiMidity on 128:0
WARNING:root:steam-dos: Setting up DOSBox audio:
WARNING:root:Digital Sound: Sound Blaster 16
    Base Port: 220
          IRQ: 7
          DMA: 1
WARNING:root:        Music: General MIDI (MPU-401 compatible)
         Port: 330

WARNING:root:run_dosbox: working dir: "/home/boltron/.steam"
WARNING:root:run_dosbox:
WARNING:root:['dosbox', '-conf', 'steam_dos_240180_3eabc2.conf', '-conf', 'steam_dos_audio.conf']

Edit: At that point, DOSBox is open at a Z:> prompt with no game directory mounted.

dreamer commented 5 years ago
WARNING:root:run_dosbox: working dir: "/home/boltron/.steam"

This is weird. How do you start game? Do you click "Play" in Steam (with compatibility tool set to "DOSBox (native)") or run it manually somehow? Directory ~/.steam is definitely not a place where your game was installed by Steam.

[edit] And why is there "WARNING:root" message? Are you running Steam as root user?

boltronics commented 5 years ago

You are correct - the game is installed to a separate game installation location under /mnt/games/steam/steamapps/common/Duke Nukem 2 (from memory - not at my computer right now).

By default, I'm not getting any stdout/stderr from Steam. No idea why (although it might be something to do with running it under firejail), so I just worked around the problem by changing print_err() to log to a file that I can tail instead. I'm just logging at the warning level to the root logger, hence that prefix.

Edit: I do just click Play in Steam BTW.

dreamer commented 5 years ago

You are correct - the game is installed to a separate game installation location under /mnt/games/steam/…

Steam most likely changes directory to (…)/Duke Nukem 2 or (…)/Duke Nukem 2/Dosbox - it does this for every game. Just to remove the possibility of this being some Steam bug related to having game library on separate partition - can you try to reinstall game to your default library (which would be either ~/.local/share/Steam or ~/.steam)? I will try to reproduce your bug with different game by creating new library on separate partition in the meantime.

By default, I'm not getting any stdout/stderr from Steam.

When you hack print_err this way, you still will miss asserts and exceptions if they occur in my code. There's no need for any hacks anyway - stdout and stderr is saved in /tmp/dumps/boltronics_stdout.txt. Seems like some Steam installations print this log also to stdout (or maybe it depends on distribution, I don't know).

Just upload this file after you clicked "Play" in Steam client. It might give some additional information.

In the meantime, I added another line to log - original command that was passed from Steam.

dreamer commented 5 years ago

@boltronics Have you had any success with running this game? Any progress with investigation why it does not run?

boltronics commented 5 years ago

Weird. I'm not having any luck with this. I've uninstalled the game and installed it again under ~/.steam. It made no difference. As for /tmp/dumps, All I get are .dmp files, and the boltronics_stdout.txt file just references those. eg. Mon Jun 3 14:00:57 2019 GMT: file ''/tmp/dumps/assert_20190604000035_5.dmp'', upload yes: ''CrashID=bp-2b59d755-5b6d-4bfb-a60b-31dbb2190603'' There is no steam-dos output to be found there. I know it's working:

ps output when executed via Proton:

Z:\home\boltronics\.steam\steamapps\common\Duke Nukem 2\Dosbox\dosbox.exe -conf ..\NUKEM2.conf -noconsole -c

ps outpout when run using steam-dos:

python3 /home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox --wait-before-run /home/boltronics/.steam/steamapps/common/Duke Nukem 2/Dosbox/dosbox.exe -conf ..\NUKEM2.conf -noconsole -c
\_ dosbox -conf steam_dos_240180_3eabc2.conf -conf steam_dos_audio.conf

It's weird, but it behaves the same as Dosbox under Wine in that either way I end up with a Welcome to DOSBOX dialog, a SET BLASTER line and a Z:\> prompt.

dreamer commented 5 years ago

Before you'll do anything, set force = true in ~/.config/steam-dos.conf. Just in case a problem is caused by old, broken .conf file. Also, pull the latest changes from master branch - yesterday I pushed a fix to function converting windows path to posix path - I doubt it was the root cause, but it's worth a shot.

I found that on some distributions Steam redirects log to ~/.steam/error.log as well - does it happen on your system?

I am mostly interested in line run_dosbox: working dir: <path> when you start the game by clicking on "Play".

python3 /home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox …

This is not going to work unless current working dir is /home/boltronics/.steam/steamapps/common/Duke Nukem 2/Dosbox/.

boltronics commented 5 years ago

Bingo - it's in ~/.steam/error.log. Thanks!

I set force = true and unfortunately now launching the game won't launch DOSBox at all. My configuration file now looks as follows:

[confgen]
# Set this value to 'true' if you want steam-dos to re-create
# DOSBox configuration on every run.
force = true

[midi]
# You can disable MIDI support here.
enable = true

# steam-dos will look for a soundfont in following directories:
# /usr/share/soundfonts/
# /usr/share/sounds/sf2/
# /usr/local/share/soundfonts/
# /usr/local/share/sounds/sf2/
# ~/.local/share/sounds/sf2/  (or wherever XDG_DATA_HOME points)
# ~/.local/share/soundfonts/  (or wherever XDG_DATA_HOME points)
soundfont = FluidR3_GM.sf2

Here is the output:

GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to ProcessingInstallScript with ""
steam-dos: original command: ['/home/boltronics/.steam/legacycompat/iscriptevaluator.exe', 'legacycompat\\evaluatorscript_240180.vdf']
run_dosbox: skipping Steam script: ['/home/boltronics/.steam/legacycompat/iscriptevaluator.exe', 'legacycompat\\evaluatorscript_240180.vdf']
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to SiteLicenseSeatCheckout with ""
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to CreatingProcess with ""
GameAction [AppID 240180, ActionID 4] : LaunchApp waiting for user response to CreatingProcess ""
GameAction [AppID 240180, ActionID 4] : LaunchApp continues with user response "CreatingProcess"
Game update: AppID 240180 "", ProcID 421, IP 0.0.0.0:0
SpawnProcessInternal: chdir() failed, errno 2
Starting app 240180
>>> Adding process 421 for game ID 240180
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to WaitingGameWindow with ""
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to Completed with ""
steam-dos: original command: ['/home/boltronics/.steam/steamapps/common/Duke Nukem 2/Dosbox/dosbox.exe', '-conf', '..\\NUKEM2.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_240180_3eabc2.conf based on ['-conf', '..\\NUKEM2.conf', '-noconsole', '-c']
Traceback (most recent call last):
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 157, in <module>
    main()
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 153, in main
    run(run_cmd_line, wait=args.wait_before_run)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 113, in run
    run_dosbox_with_conf(dosbox_args)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 70, in run_dosbox_with_conf
    confgen.create_conf_file(name, args)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/confgen.py", line 240, in create_conf_file
    exit_after_exe=args.exit)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/confgen.py", line 94, in __init__
    conf, enc = parse_dosbox_config(path)
TypeError: 'NoneType' object is not iterable
>>> Adding process 422 for game ID 240180
>>> Adding process 423 for game ID 240180
Game removed: AppID 240180 "", ProcID 421 
Exiting app 240180
No cached sticky mapping in ActivateActionSet.

This is using 5ab402d4fd97bd0cd79da62884f42a927567a03a of the git master branch.

boltronics commented 5 years ago

To help clarify, I made a small change:

diff --git a/confgen.py b/confgen.py
index a3174f9..a58d88e 100644
--- a/confgen.py
+++ b/confgen.py
@@ -91,6 +91,7 @@ class DosboxConfiguration(dict):

         for win_path in (conf_files or self.__get_default_conf__()):
             path = to_posix_path(win_path)
+            print_err('steam-dos', win_path, path)
             conf, enc = parse_dosbox_config(path)
             self.__import_ini_sections__(conf)
             if enc != 'utf-8':

This results in the following line: steam-dos ..\NUKEM2.conf None

So to_posix_path() still seems to return None when given ..\NUKEM2.conf as an input.

dreamer commented 5 years ago

Aha! This is the offending line:

SpawnProcessInternal: chdir() failed, errno 2

Error code 2 means "No such file or directory". I looked again at steamdb page and there's something fishy in there: "gamedir" is "ValveTestApp240180".

Just to confirm it's the real issue here, can you run this command:

ln -s "Duke Nukem 2" ~/.steam/steamapps/common/ValveTestApp240180

and try to start the game again?

In the meantime I'll prepare a tweak to work around this issue for this game.

dreamer commented 5 years ago

Oh, and one more question - does this bug happen only when using steam-dos or with Proton as well? You mentioned running it through Wine, but I need confirmation, so I could forward this issue to Steam, and hopefully it could be fixed in Steam database.

dreamer commented 5 years ago

I just pushed a possible fix to branch: duke_nukem_2_testfix, but please test the game by creating a symlink first, then remove symlink and install steam-dos from the branch.

boltronics commented 5 years ago

Ah, nice find. That looks like it could be the issue. I wonder why the gamedir would be set that way? The symlink approach looks like it could work.

Sorry for my confusing comment earlier - when I said Wine, I meant Proton. It's just that Proton is wine and I was looking at the wine process at the time via ps. :smile: However the problem certainly doesn't exist in Windows, from memory.

I'm at work now so can't test, but will try to test the symlink and your changes tonight. Thanks!

boltronics commented 5 years ago

Tested. The symlink change didn't seem to make any difference, but the patch worked great!

Here are some other games that also don't launch:

Blake Stone: Aliens of Gold https://steamdb.info/app/358190/info/ (has no "gamedir entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Blake Stone Aliens of Gold/Blake Stone - Aliens of Gold/Dosbox/dosbox.exe', '-conf', '..\\BSAOG.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358190_35badd.conf based on ['-conf', '..\\BSAOG.conf', '-noconsole', '-c']

Blake Stone: Planet Strike https://steamdb.info/app/358310/info/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Blake Stone Planet Strike/Blake Stone - Planet Strike/Dosbox/dosbox.exe', '-conf', '..\\BSPS.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358310_2e0de4.conf based on ['-conf', '..\\BSPS.conf', '-noconsole', '-c']

Cosmo's Cosmic Adventure https://steamdb.info/app/358250/info/ (has no "gamedir" entry)

steam-dos: original command: ["/mnt/gaming/steam/steamapps/common/Cosmo's Cosmic Adventure/Cosmo Cosmic Adventure/Dosbox/dosbox.exe", '-conf', '..\\COSMO.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358250_e8a08d.conf based on ['-conf', '..\\COSMO.conf', '-noconsole', '-c']

Duke Nukem https://steamdb.info/app/240160/ (gamedir: ValveTestApp240160)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Duke Nukem 1/Dosbox/dosbox.exe', '-conf', '..\\NUKEM1.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_240160_6de86a.conf based on ['-conf', '..\\NUKEM1.conf', '-noconsole', '-c']

Terminal Velocity https://steamdb.info/app/358370/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Terminal Velocity/Terminal Velocity/Dosbox/dosbox.exe', '-conf', '..\\TV.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358370_00e95d.conf based on ['-conf', '..\\TV.conf', '-noconsole', '-c']

Wacky Wheels https://steamdb.info/app/358380/info/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Wacky Wheels/Wacky Wheels/Dosbox/dosbox.exe', '-conf', '..\\Wacky.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358380_261507.conf based on ['-conf', '..\\Wacky.conf', '-noconsole', '-c']

It looks like the gamedir value is not standard or at least cannot be trusted, as it's frequently wrong or unavailable. I'm guessing you won't want to create overrides for all of these?

boltronics commented 5 years ago

A few more games to add to the list:

Rise of the Triad: Dark War https://steamdb.info/app/358410/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Rise of the Triad Dark War/Rise of the Triad - Dark War/Dosbox/dosbox.exe', '-conf', '..\\ROTT.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358410_35550b.conf based on ['-conf', '..\\ROTT.conf', '-noconsole', '-c']

Phantasmagoria https://steamdb.info/app/501990/ (has no "gamedir" entry, uses a Windows launcher, see https://steamdb.info/depot/501991/ for file structure)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Phantasmagoria/SierraLauncher.exe']
run_dosbox: ignoring command: ['/mnt/gaming/steam/steamapps/common/Phantasmagoria/SierraLauncher.exe']

Math Rescue https://steamdb.info/app/358200/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Math Rescue/Math Rescue/Dosbox/dosbox.exe', '-conf', '..\\MATH.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358200_1dc710.conf based on ['-conf', '..\\MATH.conf', '-noconsole', '-c']

Monuments of Mars https://steamdb.info/app/358240/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Monuments of Mars/Monuments of Mars/Dosbox/dosbox.exe', '-conf', '..\\MARS.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358240_f73355.conf based on ['-conf', '..\\MARS.conf', '-noconsole', '-c']

Secret Agent https://steamdb.info/app/358350/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Secret Agent/Secret Agent/Dosbox/DOSBox.exe', '-conf', '..\\Agent.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358350_0588ee.conf based on ['-conf', '..\\Agent.conf', '-noconsole', '-c']

Pharaoh's Tomb https://steamdb.info/app/358330/ (has no "gamedir" entry)

steam-dos: original command: ["/mnt/gaming/steam/steamapps/common/Pharaoh's Tomb/Pharaoh's Tomb/Dosbox/dosbox.exe", '-conf', '..\\TOMB.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358330_5b82dc.conf based on ['-conf', '..\\TOMB.conf', '-noconsole', '-c']
boltronics commented 5 years ago

Mystic Towers https://steamdb.info/app/358220/info/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Mystic Towers/Mystic Towers/Dosbox/dosbox.exe', '-conf', '..\\TOWERS.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358220_7d6522.conf based on ['-conf', '..\\TOWERS.conf', '-noconsole', '-c']

Major Stryker https://steamdb.info/app/358300/ (has no "gamedir" entry)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Major Stryker/Major Stryker/Dosbox/dosbox.exe', '-conf', '..\\STRYKER.conf', '-noconsole', '-c']
run_dosbox: generating steam_dos_358300_c5d469.conf based on ['-conf', '..\\STRYKER.conf', '-noconsole', '-c']

Phantasmagoria 2 https://steamdb.info/app/501970/ (has no "gamedir" entry, uses a Windows launcher, see https://steamdb.info/depot/501971/ for file structure)

steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Phantasmagoria 2/SierraLauncher.exe']
run_dosbox: ignoring command: ['/mnt/gaming/steam/steamapps/common/Phantasmagoria 2/SierraLauncher.exe']

There's still quite a few more DOS games in my collection to go through, but I need to go to sleep. I'm not sure if much of this will be helpful in the end anyway.

dreamer commented 5 years ago

Just pushed a generic fix to the test branch (duke_nukem_2_testfix) - check it out, please. I can't reproduce your error (and I don't own any of the games you mentioned), so I could test it only using unit tests so far.

It should work for all games you mentioned with the exception of Phantasmagoria 1 & 2 (let's discuss workaround for SierraLauncher in new issue).

boltronics commented 5 years ago

Thanks, but unfortunately no dice. Here's the output from Duke Nukem 2.

GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to ProcessingInstallScript with ""
steam-dos: working dir: "/home/boltronics/.steam"
steam-dos: original command: ['/home/boltronics/.steam/legacycompat/iscriptevaluator.exe', 'legacycompat\\evaluatorscript_240180.vdf']
run_dosbox: skipping Steam script: ['/home/boltronics/.steam/legacycompat/iscriptevaluator.exe', 'legacycompat\\evaluatorscript_240180.vdf']
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to SiteLicenseSeatCheckout with ""
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to CreatingProcess with ""
GameAction [AppID 240180, ActionID 4] : LaunchApp waiting for user response to CreatingProcess ""
GameAction [AppID 240180, ActionID 4] : LaunchApp continues with user response "CreatingProcess"
Game update: AppID 240180 "", ProcID 659, IP 0.0.0.0:0
SpawnProcessInternal: chdir() failed, errno 2
Starting app 240180
>>> Adding process 659 for game ID 240180
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to WaitingGameWindow with ""
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/boltronics/.steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
GameAction [AppID 240180, ActionID 4] : LaunchApp changed task to Completed with ""
steam-dos: working dir: "/home/boltronics/.steam"
steam-dos: original command: ['/mnt/gaming/steam/steamapps/common/Duke Nukem 2/Dosbox/dosbox.exe', '-conf', '..\\NUKEM2.conf', '-noconsole', '-c']
Traceback (most recent call last):
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 173, in <module>
    main()
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 169, in main
    run(run_cmd_line, wait=args.wait_before_run)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/run_dosbox", line 87, in run
    chdir_tweak_needed, path = tweaks.check_cwd(cmd_line)
  File "/home/boltronics/.steam/compatibilitytools.d/steam-dos-git/tweaks.py", line 90, in check_cwd
    prog_path, _ = os.path.split(prog_path)
  File "/usr/lib/python3.5/posixpath.py", line 103, in split
    i = p.rfind(sep) + 1
AttributeError: 'PurePosixPath' object has no attribute 'rfind'
>>> Adding process 660 for game ID 240180
>>> Adding process 661 for game ID 240180
Game removed: AppID 240180 "", ProcID 659 
Exiting app 240180
No cached sticky mapping in ActivateActionSet.[240180]Non-Steam Controller Configs Enabled: 1
Opted-in Controller Mask for AppId 0: 0
Opted-in Controller Mask for AppId 0: 0

I also tried Duke Nukem and Mystic Towers, and both died on the same exception.

dreamer commented 5 years ago

Ah, that's because os.path.split works on path-like objects in Python 3.6+...

I just pushed a fix, try it out :)

boltronics commented 5 years ago

It took some time, but in addition to every game listed above, I also just finished testing:

With the exception of Phantasmagoria 1 and 2, every game works with your latest patch. Nice work!

dreamer commented 5 years ago

That's great :) I will release the fix with version 0.3.0 - today or tomorrow. Fix is now merged into master branch, so I am closing this issue - please create a new one so we can work on Phantasmagoria and other games using SierraLauncher.

dreamer commented 5 years ago

@boltronics I just learned that some Steam installations can have libraries with steamapps and SteamApps (which is legacy) name and it might potentially lead to path errors for some users: https://github.com/ValveSoftware/Proton/issues/2813#issuecomment-505011224

Can you check how this directory is named in your libraries? Maybe this was the root cause for this bug?

boltronics commented 5 years ago

@dreamer I had a look into it (sorry for the delay). I don't think it's related as my steamapps directory is also entirely in lowercase (I checked both of them).

My Steam installation is reasonably old - I've got a lot of game directories that were created back in 2015. However Steam for GNU/Linux officially came out back in 2013 according to Wikipedia (and was in beta since 2012) so perhaps "SteamApps" is just really really old! :)