Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # draft, will be .git'd once finished.
- echo "Users:"
- user=`grep PersonaName ~/.steam/steam/userdata/*/config/localconfig.vdf | \
- cut -d '"' -f4`
- echo $user
- echo
- usercfg=~/.steam/steam/userdata/*/config/localconfig.vdf
- steamapps=~/.steam/steam/steamapps
- folders=`grep BaseInstallFolder ~/.steam/steam/config/config.vdf | \
- cut -d '"' -f4`/steamapps
- echo "========================="
- echo "> listing installed games"
- echo "========================="
- while true; do
- echo "[$steamapps]"
- unset files i
- # grab files
- while IFS= read -r -d $'\n' f; do
- files[i++]="$f";
- done < <(egrep \"name\" $steamapps/appmanifest_* | cut -d '"' -f4 | \
- egrep -v 'Proton|Steamworks' | sort)
- # create select string
- shopt -s extglob # set shell extended globbing to use @(var1|var2)
- string="@(${files[0]}"
- for (( i=1 ; i < ${#files[@]}; i++ )); do
- string+="|${files[$i]}"
- done
- string+=")"
- # create select menu
- PS3=$'\n'"> Select the game to trace: "
- select name in "${files[@]}"
- do
- case $name in
- $string) break ;;
- *) name=""; printf "\nShould be a number [1-$((${#files[@]}+1))]\n" ;;
- esac
- done
- manifest=`grep "$name" $steamapps/appmanifest_* | head -1 | cut -d ':' -f1`
- if [[ -z "$manifest" ]]; then
- manifest=`grep "$name" $folders/appmanifest_* | head -1 | cut -d ':' -f1`
- [ -z "$manifest" ] && echo "Bad paste, try again." || break;
- else
- break
- fi
- done
- dir=$steamapps/common/`grep \"installdir\" $manifest | cut -d '"' -f4`
- id=`grep \"appid\" $manifest | cut -d '"' -f4`
- echo "($id) $name: $dir"
- exit
- echo
- if [[ ! -d "$dir" ]]; then
- echo "[ERROR] Cannot find '$name' folder"
- read -p "> Do you want to validate '$name' files ?" yn
- case $yn in
- [Yy]*) xdg-open steam://validate/$id ;;
- [Nn]*) return 0 ;;
- esac
- exit
- fi
- #echo "> config"
- #grep -A 6 $id $usercfg
- #echo
- exes=`find "$dir" -iname *.exe | sed 's/\ /\\\ /g'`
- [ -z "$exes" ] && exit
- exes=`echo $exes | xargs file`
- if echo $exes | grep PE32+ >/dev/null; then
- arch=win64
- elif echo $exes | grep PE32 >/dev/null; then
- arch=win32
- else
- echo "Could not find ELF format"
- exit
- fi
- cp $arch/* "$dir" && echo "> copied $arch DLLs to $dir"
- echo
- echo "NB: make sure the DLLs are in the same folder as the game .exe"
- find "$dir" -iname *.exe
- echo
- echo "====================================="
- echo "> restarting Steam w/ logs + apitrace"
- echo "====================================="
- xdg-open steam://ExitSteam
- sleep 5
- export WINEDLLOVERRIDES="dxgi,dxgitrace,d3d11,d3d10,d3d9=n,b" PROTON_LOG=1
- echo "> run the game then close Steam to check the trace and log."
- steam >/dev/null 2>&1
- echo
- echo "========================="
- echo "> digging out log + trace"
- echo "========================="
- echo
- echo "Once game exited, press a key to check logs/trace..." ; read -rsn1
- trace="$steamapps/compatdata/$id/pfx/drive_c/users/steamuser/Desktop/*.trace"
- log=~/steam-$id*.log
- ls -l $trace
- ls -l $log
- less $log
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement