guildwars2
Guild Wars 2 sapphiria 1 year ago 100%

I made an account swap script for Steam Deck

I made an account swap script for Steam Deck

Thought I'd share it here in case anyone was looking for something similar. It's based on the Windows instructions found here, but also adds GUI via kdialog.

This will create a folder next to the script named .gw2-account-manage and copy the Local.dat files between this folder and the game's appdata folder. To set it up, you just need to save this script to a file somewhere (I have it in /home/deck/gw2-account-manage), make it executable via chmod +x gw2-account-manage, and update the launch options in Steam.

Launch options should look something like this: /home/deck/gw2-account-manage "gamemoderun %command%"

You should be able to name each entry whatever you want - I just used account name since that's easier for me. Though I haven't tested it very thoroughly with special characters.

#!/bin/bash

datfile="/home/deck/.local/share/Steam/steamapps/compatdata/1284210/pfx/drive_c/users/steamuser/AppData/Roaming/Guild Wars 2/Local.dat"

parentdir=$(readlink -f $(dirname "$0"))
gw2amdir="$parentdir/.gw2-account-manage"

if [ ! -f "$datfile" ]; then
    kdialog --error "Local.dat not found.\n\nExpected at:\n$datfile"
    exit
fi

mkdir -p "$gw2amdir"

choose() {
    options=""
    files=$(find "$gw2amdir" -type f -print0 | xargs -0 ls -tU)
    while read file; do
        options="$options \"$file\" \"$(basename $file)\""
    done < <(echo "$files")
    options="$options \"+\" \"Add a new account...\""

    choice=$(echo "$options" | xargs kdialog --menu \
        "Select an account:")

    if [ "+" = "$choice" ]; then
        newname=$(kdialog --inputbox "Account Name")
        if [ "$newname" ]; then
            cp "$datfile" "$gw2amdir/$newname"
        fi
        choose "$@"
    elif [ -f "$choice" ]; then
        cp -r "$choice" "$datfile"
        eval "$@"
        cp -r "$datfile" "$choice"
    fi
}

choose "$@"

21
5
Comments 5