qsniyg / ksp_stuff

GNU General Public License v3.0
9 stars 4 forks source link

Unable to detect game - Skyrim SE #30

Closed C0rn3j closed 4 years ago

C0rn3j commented 4 years ago

The problem:

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % ./movfs4l.py  --mo_installroot ~/wine/skyrimMods/drive_c/MO2
* Parsing configuration file
* Unable to detect game (use `--game' to specify)

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % ./movfs4l.py  --mo_installroot ~/wine/skyrimMods/drive_c/MO2 --game "Skyrim Special Edition"
* Parsing configuration file
Traceback (most recent call last):
  File "./movfs4l.py", line 1203, in <module>
    game = games[gamename]
KeyError: 'Skyrim Special Edition'

I have SE installed via Proton, and MO2(portable)+LOOT in ~/wine/skyrimMods bottle.

Proton: ~/.local/share/Steam/steamapps/compatdata/489830
Game  : ~/.local/share/Steam/steamapps/common/Skyrim Special Edition

MO2 seems to work just fine, here's a snippet from its .ini

     │ File: /home/c0rn3j/wine/skyrimMods/drive_c/MO2/ModOrganizer.ini
─────┼────────────────────────────────────────────────────────────────────────────────────────────
 1   │ [General]
 2   │ gameName=Skyrim Special Edition
 3   │ gamePath=Z:\\home\\c0rn3j\\.local\\share\\Steam\\steamapps\\common\\Skyrim Special Edition
 4   │ selected_profile=Default
 5   │ version=2.2.1

Using Python 3.7.4

qsniyg commented 4 years ago

Could you share the config.ini file beside movfs4l.py?

C0rn3j commented 4 years ago
[general]
iodelay = True
link_inis = True
fake_inis = False

[game/SkyrimSE]
mo_gameroot = /home/c0rn3j/wine/skyrimMods/drive_c/MO2
game_type = Skyrim Special Edition
default_profile = Default
vfs_meta_log = {game_path}/movfs4l_log.json
wineprefix = /home/c0rn3j/.wine
game_datadir = {game_path}/Data
game_path = /home/c0rn3j/.wine/dosdevices/z:/home/c0rn3j/.local/share/Steam/steamapps/common/Skyrim Special Edition
plugins_txt = {gameappdata}/plugins.txt
gameappdata = {localappdata}/Skyrim Special Edition
localappdata = /home/c0rn3j/.wine/drive_c/users/c0rn3j/Local Settings/Application Data
mo_profile = {mo_gameroot}/profiles/{profile}
loadorder_txt = {gameappdata}/loadorder.txt
game_userdir = {mygames_root}/Skyrim Special Edition
qsniyg commented 4 years ago

Thanks, try:

./movfs4l.py --game SkyrimSE

C0rn3j commented 4 years ago

(Same output with or without --mo_installroot defined)

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[130] % ./movfs4l.py --mo_installroot /home/c0rn3j/wine/skyrimMods/drive_c/MO2 --game SkyrimSE
* Parsing configuration file
* Using profile `Default'
Traceback (most recent call last):
  File "./movfs4l.py", line 1220, in <module>
    fill_variables(args)
  File "./movfs4l.py", line 164, in fill_variables
    value = apply_variables(variables[var], variables)
  File "./movfs4l.py", line 127, in apply_variables
    value = apply_variables(variables[variable], variables, processed)
KeyError: 'mygames_root'
qsniyg commented 4 years ago

Ah I see what the issue is, it used ~/.wine as the wine prefix, instead of ~/wine/skyrimMods.

Could you regenerate the configuration (remove/rename config.ini to something else), but make sure to set WINEPREFIX=~/wine/skyrimMods before? For example:

WINEPREFIX=~/wine/skyrimMods ./movfs4l.py --mo_installroot ~/wine/skyrimMods/drive_c/MO2

C0rn3j commented 4 years ago

Prefix in config changed, but the issue remains

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % WINEPREFIX=~/wine/skyrimMods ./movfs4l.py --mo_installroot ~/wine/skyrimMods/drive_c/MO2

* Generating configuration file
 -> Detected game 'SkyrimSE' at /home/c0rn3j/wine/skyrimMods/dosdevices/z:/home/c0rn3j/.local/share/Steam/steamapps/common/Skyrim Special Edition
* Written auto-generated configuration to `config.ini'. Please check the file, then run this script again.
* You can also re-run this for other installations by using `--generate_config'

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % cat config.ini                                                           
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: config.ini
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ [general]
   2   │ iodelay = True
   3   │ link_inis = True
   4   │ fake_inis = False
   5   │ 
   6   │ [game/SkyrimSE]
   7   │ mo_gameroot = /home/c0rn3j/wine/skyrimMods/drive_c/MO2
   8   │ game_type = Skyrim Special Edition
   9   │ default_profile = Default
  10   │ vfs_meta_log = {game_path}/movfs4l_log.json
  11   │ wineprefix = /home/c0rn3j/wine/skyrimMods
  12   │ game_datadir = {game_path}/Data
  13   │ game_path = /home/c0rn3j/wine/skyrimMods/dosdevices/z:/home/c0rn3j/.local/share/Steam/steamapps/common/Skyrim Special Edition
  14   │ plugins_txt = {gameappdata}/plugins.txt
  15   │ gameappdata = {localappdata}/Skyrim Special Edition
  16   │ localappdata = /home/c0rn3j/wine/skyrimMods/drive_c/users/c0rn3j/Local Settings/Application Data
  17   │ mo_profile = {mo_gameroot}/profiles/{profile}
  18   │ loadorder_txt = {gameappdata}/loadorder.txt
  19   │ game_userdir = {mygames_root}/Skyrim Special Edition
  20   │ 
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % WINEPREFIX=~/wine/skyrimMods ./movfs4l.py --mo_installroot ~/wine/skyrimMods/drive_c/MO2

* Parsing configuration file
* Unable to detect game (use `--game' to specify)

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % WINEPREFIX=~/wine/skyrimMods ./movfs4l.py --mo_installroot ~/wine/skyrimMods/drive_c/MO2 --game SkyrimSE

* Parsing configuration file
* Using profile `Default'
Traceback (most recent call last):
  File "./movfs4l.py", line 1220, in <module>
    fill_variables(args)
  File "./movfs4l.py", line 164, in fill_variables
    value = apply_variables(variables[var], variables)
  File "./movfs4l.py", line 127, in apply_variables
    value = apply_variables(variables[variable], variables, processed)
KeyError: 'mygames_root'
qsniyg commented 4 years ago

Strange... does My Games exist in ~/wine/skyrimMods/drive_c/users/c0rn3j/ ? If not, have you already run Skyrim in that wine prefix before running movfs4l.py? If not, maybe run Skyrim first, and then regenerate the configuration and try it again.

C0rn3j commented 4 years ago

does My Games exist in ~/wine/skyrimMods/drive_c/users/c0rn3j/

It does not, ~/wine/skyrimMods has only LOOT and MO2, the game is installed via Proton, so the 'My Games' folder would be here - /home/c0rn3j/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/My Documents/My Games/Skyrim Special Edition

qsniyg commented 4 years ago

Alright, then set:

mygames_root = /home/c0rn3j/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/My Documents/My Games/

at the end of config.ini

C0rn3j commented 4 years ago

That gets me further

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[0] % ./movfs4l.py --mo_installroot /home/c0rn3j/wine/skyrimMods/drive_c/MO2 --game SkyrimSE
* Parsing configuration file
* Using profile `Default'
* Removing VFS layer
* Parsing MO mods configuration
* Creating VFS index
* Linking mods                                                                                                                                                                                                                                                                   
* Linking plugins list                                                                                                                                                                                                                                                           
Traceback (most recent call last):
  File "./movfs4l.py", line 1312, in <module>
    apply_game_vfs(args)
  File "./movfs4l.py", line 1038, in apply_game_vfs
    updatelink(entry["path"], entry["dest"], vfs_log)
  File "./movfs4l.py", line 1062, in updatelink
    os.symlink(src, dest)
FileNotFoundError: [Errno 2] No such file or directory: '/home/c0rn3j/wine/skyrimMods/drive_c/MO2/profiles/Default/plugins.txt' -> '/home/c0rn3j/wine/skyrimMods/drive_c/users/c0rn3j/Local Settings/Application Data/Skyrim Special Edition/plugins.txt'

c0rn3j@Luxuria : ~/Nextcloud2/Skyrim MODS
[1] % ls -lah /home/c0rn3j/wine/skyrimMods/drive_c/MO2/profiles/Default/plugins.txt                                       
.rw-r--r-- c0rn3j c0rn3j 688 B Thu Oct 17 13:23:02 2019   plugins.txt
qsniyg commented 4 years ago

Ah right, modify /home/c0rn3j/.wine/drive_c/users/c0rn3j/Local Settings/Application Data to /home/c0rn3j/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Local Settings/Application Data in the configuration as well

C0rn3j commented 4 years ago

Aaand that works! Sadly I can't get LOOT(WINE) 0.11.0 to recognize the files.

I've set the game folder toZ:\home\c0rn3j\.local\share\Steam\steamapps\common\Skyrim Special Edition in there and it only detects the original game files.

image

I suppose that is not the fault of this script since I tried the old version and LOOT behaved the same way, I'll take it to their discord.

Thanks a lot for very fast help!

qsniyg commented 4 years ago

Sorry, genuinely no idea what's causing that. The linux version worked for me last time I tried (minus the case-sensitivity problems that more or less broke my plugin setup). Never was able to get the windows version to even load though.

C0rn3j commented 4 years ago

I suppose I'll have to compile that, was really trying to avoid it since I had a flawless setup with windows LOOT last time I was messing with skyrim.

Nowadays Linux filesystems are starting to support case insensitive folders, so for example on ext4 you could possibly eliminate the case issue.

qsniyg commented 4 years ago

@C0rn3j Right, as long as you formatted your hard disk sometime after 2018 (or more specifically, used formatting tools that are later than 2018), it should support it.

Should also mention, the next wine release should mostly support USVFS, so you might not need to use this script anymore. The most important of the two patches has been merged into wine's git, although the second (which will prevent some subtle failures) hasn't yet, and might not for a while unfortunately.

C0rn3j commented 4 years ago

So for the next poor sucker that has to deal with this -

I couldn't get the native linux version to build on Arch, if someone cares issue is here: https://github.com/loot/libloot/issues/61

So I used the prebuilt version - download the latest .tar.xz from https://bintray.com/loot/snapshots/loot#files/

Seems like their build env is 16.04 Ubuntu, so try to run ./LOOT through the terminal and see missing deps. I was able to install all but one - had to steal /usr/lib/x86_64-linux-gnu/libhttp_parser.so.2.1 from an actual 16.04 ubuntu, as such ancient version isn't available even in the Arch archives.

Then you need to edit ~/.config/LOOT/settings.toml and put the appdata and game folders in manually, so the result looks something like this -

[[games]]
        registry = "Software\\Bethesda Softworks\\Skyrim Special Edition\\Installed Path"
        path = "/home/c0rn3j/.local/share/Steam/steamapps/common/Skyrim Special Edition"
        repo = "https://github.com/loot/skyrimse.git"
        name = "TES V: Skyrim Special Edition"
        folder = "Skyrim Special Edition"
        local_path = "/home/c0rn3j/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Local Settings/Application Data/Skyrim Special Edition"
        branch = "v0.14"
        type = "Skyrim Special Edition"
        minimumHeaderVersion = 1.7000000476837158
        master = "Skyrim.esm"

After this, LOOT works.


As a note of warning, something, most likely running an ancient version of the movfs script, renamed my base files to all lowercase(Skyrim.esm->skyrim.esm), making LOOT throw a really unhelpful "Cannot read property 'folder' of undefined" error. If this happens to you you can verify the filenames against https://steamdb.info/depot/489832/

jarrard commented 4 years ago

If your using NTFS for your game and mod manager stuff you can possibly use mount option windows_names to resolve filename case issues. Not 100% sure it works tho.

Or it could be ignore_case, I dunno if that is safe

C0rn3j commented 4 years ago

I'm using ext4 but having trouble figuring out how to apply +F (EXT4_CASEFOLD_FL) to a folder.

qsniyg commented 4 years ago

@C0rn3j I may be wrong here, but does setattr +F directory work?

C0rn3j commented 4 years ago

you meant chattr. I just figured out you most likely need to create the FS with an option casefold explicitly enabled, so am SOL unless I want to format my drive.

chattr +F folder
chattr: Operation not supported while setting flags on folder

mkfs.ext4 -O casefold

But the game seems to work fine without.