CryoByte33 / steam-deck-utilities

A utility to improve performance and help manage storage on Steam Deck.
GNU General Public License v3.0
3.2k stars 79 forks source link

Compatdata information #126

Closed Kazlehoff closed 1 year ago

Kazlehoff commented 1 year ago

Hi Cryobyte. Im looking for a bit of additional information.

I have made a couple of scripts to help people modding Skyrim on the Steam Deck copy files from their windows PC to a USB device, then from the USB device to their steam deck. its a batch file, and a shell script.

None of it is super advanced (if you'd like to take a look, i'll link my archive on mega) but i have a question.

Part of Skyrim involves the Compatdata folder. Its Ini's, two text files relating to mods (plugins.txt and loadorder.txt), plus its save files and logs.

my shell script for copying to the deck takes into account the location for the compatdata folder should always be /home/deck/.local/share/Steam/steamapps/compatdata/48930/.

What im trying to figure out I cant just your app, because your app doesnt like games installed on SD for my particular system for absolutely no known reason, is how that compatdata folder move is accomplished. is it Symlinks?

what happens when a user who has copied their 48930 compatdata folder to a different location with your app then tries to copy to the default compatdata/48930 location on the internal storage?

CryoByte33 commented 1 year ago

It's just a symlink 🙂

The compatdata and shadercache get moved, verified and then symlinked. As long as your script uses standard Linux tooling it should be able to transparently copy into the symlink, but if not then you may need to find the symlink's pointer (if present) then use that to determine where to copy.

Kazlehoff commented 1 year ago

The .sh is pretty simple. Linked here for refrence:

#!/bin/bash

# Copy plugins.txt and loadorder.txt to Skyrim Special Edition directory
echo "Copying Plugin and Loadorder"
cp plugins.txt /home/deck/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/AppData/Local/Skyrim\ Special\ Edition/
cp loadorder.txt /home/deck/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/AppData/Local/Skyrim\ Special\ Edition/

# Copy SkyrimPrefs.ini and Skyrim.ini to My Games/Skyrim Special Edition directory
echo "Copying inis, if they are present."
if [ -f "Skyrim.ini" ] && [ -f "SkyrimPrefs.ini" ] && [ -f "SkyrimCustom.ini" ]; then
    cp "Skyrim.ini" "/home/deck/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Documents/My Games/Skyrim Special Edition/"
    cp "SkyrimPrefs.ini" "/home/deck/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Documents/My Games/Skyrim Special Edition/"
    cp "SkyrimCustom.ini" "/home/deck/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Documents/My Games/Skyrim Special Edition/"
fi

# Ask if the user needs to copy the Skyrim folder
read -p "Do you need to copy the Skyrim folder? (y/n) " copySkyrim
if [ "$copySkyrim" == "y" ]; then
    # Ask if Skyrim is installed on SD or internal storage
    read -p "Is Skyrim installed on SD or internal storage? " storageType
    if [ "$storageType" == "sd" ] || [ "$storageType" == "SD" ]; then
    echo "Copying Skyrim to SD Card. Please be patient. once complete, you will be notified."
        cp -r "Skyrim Special Edition" "/run/media/mmcblk0p1/steamapps/common/"
    elif [ "$storageType" == "internal" ]; then
    echo "Copying Skyrim to Internal Storage. Please be patient. once complete, you will be notified."
        cp -r "Skyrim Special Edition" "/home/deck/.local/share/Steam/steamapps/common/"
    fi
fi
echo "Transfer complete. You can now close this window."
CryoByte33 commented 1 year ago

Yeah that should work just fine through the symlink 🤔

Kazlehoff commented 1 year ago

awesome. thanks, appreciate the info. :D