From aa1e52602e83b0613129ab4beccb700e4a50cac7 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Thu, 16 Jan 2025 02:54:28 +0500 Subject: [PATCH 1/9] support steamPlay --- data_from_portwine/scripts/add_in_steam.sh | 67 ++++++++++++++++------ 1 file changed, 49 insertions(+), 18 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 92254b3c..a0d316d5 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -293,7 +293,9 @@ parseSteamShortcutEntryLaunchOptions() { } parseSteamTargetExe() { - grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}' + exe=$(sed -n 's/^export portwine_exe="\([^"]*\)"/\1/p' "$1") + [[ -z "${exe}" ]] && exe=$(grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}') + [[ -n "${exe}" ]] && echo "${exe}" } restartSteam() { @@ -356,10 +358,10 @@ addGrids() { fi if [[ -n "${SteamGridDBId}" ]] || [[ -n "${SteamAppId}" ]]; then create_new_dir "${STCFGPATH}/grid" - downloadImageSteamGridDB "grids" "${NOSTAIDGRID:-0}.jpg" "mimes=image/jpeg" "dimensions=460x215,920x430" || downloadImageSteam "header.jpg" "${NOSTAIDGRID:-0}.jpg" || echo "Failed to load header.jpg" - downloadImageSteamGridDB "grids" "${NOSTAIDGRID:-0}p.jpg" "mimes=image/jpeg" "dimensions=600x900,660x930" || downloadImageSteam "library_600x900_2x.jpg" "${NOSTAIDGRID:-0}p.jpg" || echo "Failed to load library_600x900_2x.jpg" - downloadImageSteamGridDB "heroes" "${NOSTAIDGRID:-0}_hero.jpg" "mimes=image/jpeg" || downloadImageSteam "library_hero.jpg" "${NOSTAIDGRID:-0}_hero.jpg" || echo "Failed to load library_hero.jpg" - downloadImageSteamGridDB "logos" "${NOSTAIDGRID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAIDGRID:-0}_logo.png" || echo "Failed to load logo.png" + downloadImageSteamGridDB "grids" "${NOSTAPPID:-0}.jpg" "mimes=image/jpeg" "dimensions=460x215,920x430" || downloadImageSteam "header.jpg" "${NOSTAPPID:-0}.jpg" || echo "Failed to load header.jpg" + downloadImageSteamGridDB "grids" "${NOSTAPPID:-0}p.jpg" "mimes=image/jpeg" "dimensions=600x900,660x930" || downloadImageSteam "library_600x900_2x.jpg" "${NOSTAPPID:-0}p.jpg" || echo "Failed to load library_600x900_2x.jpg" + downloadImageSteamGridDB "heroes" "${NOSTAPPID:-0}_hero.jpg" "mimes=image/jpeg" || downloadImageSteam "library_hero.jpg" "${NOSTAPPID:-0}_hero.jpg" || echo "Failed to load library_hero.jpg" + downloadImageSteamGridDB "logos" "${NOSTAPPID:-0}_logo.png" "mimes=image/png" || downloadImageSteam "logo.png" "${NOSTAPPID:-0}_logo.png" || echo "Failed to load logo.png" else echo "Game is not found" fi @@ -423,16 +425,18 @@ removeNonSteamGame() { if [[ -n "${NOSTSHPATH}" ]]; then mv "${SCPATH}" "${SCPATH//.vdf}_${PROGNAME}_backup.vdf" 2>/dev/null jq --arg id "${appid}" 'map(select(.id != $id))' <<< "${games}" | jq -c '.[]' | while read -r game; do - NOSTAIDGRID=$(jq -r '.id' <<< "${game}") + NOSTAPPID=$(jq -r '.id' <<< "${game}") NOSTAPPNAME=$(jq -r '.name' <<< "${game}") NOSTEXEPATH=$(jq -r '.exe' <<< "${game}") NOSTSTDIR=$(jq -r '.dir' <<< "${game}") NOSTICONPATH=$(jq -r '.icon' <<< "${game}") NOSTARGS=$(jq -r '.args' <<< "${game}") - NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAIDGRID}")) + NOSTAIDVDFHEX=$(bigToLittleEndian $(printf '%08x' "${NOSTAPPID}")) addEntry done rm -f "${STCFGPATH}/grid/${appid}.jpg" "${STCFGPATH}/grid/${appid}p.jpg" "${STCFGPATH}/grid/${appid}_hero.jpg" "${STCFGPATH}/grid/${appid}_logo.png" + rm -rf "${HOME}/.local/share/Steam/steamapps/compatdata/${appid}" + rm -rf "${HOME}/.local/share/Steam/steamapps/shadercache/${appid}" if [[ -f "${NOSTSHPATH}" ]]; then isInstallGame=false for STUIDCUR in $(getUserIds); do @@ -464,8 +468,8 @@ addNonSteamGame() { if [[ -n "${SCPATH}" ]]; then [[ -z "${NOSTSHPATH}" ]] && NOSTSHPATH="${STEAM_SCRIPTS}/${name_desktop}.sh" NOSTAPPNAME="${name_desktop}" - NOSTAIDGRID=$(getAppId "${NOSTSHPATH}") - if [[ -z "${NOSTAIDGRID}" ]]; then + NOSTAPPID=$(getAppId "${NOSTSHPATH}") + if [[ -z "${NOSTAPPID}" ]]; then NOSTEXEPATH="${NOSTSHPATH}" if [[ -z "${NOSTSTDIR}" ]]; then NOSTSTDIR="${STEAM_SCRIPTS}" @@ -473,17 +477,18 @@ addNonSteamGame() { NOSTICONPATH="${PORT_WINE_PATH}/data/img/${name_desktop_png}.png" NOSTAIDVDF="$(generateShortcutVDFAppId "${NOSTAPPNAME}${NOSTEXEPATH}")" # signed integer AppID, stored in the VDF as hexidecimal - ex: -598031679 NOSTAIDVDFHEX="$(generateShortcutVDFHexAppId "$NOSTAIDVDF")" # 4byte little-endian hexidecimal of above 32bit signed integer, which we write out to the binary VDF - ex: c1c25adc - NOSTAIDGRID="$(extractSteamId32 "$NOSTAIDVDF")" # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts + NOSTAPPID="$(extractSteamId32 "$NOSTAIDVDF")" # unsigned 32bit ingeger version of "$NOSTAIDVDF", which is used as the AppID for Steam artwork ("grids"), as well as for our shortcuts create_new_dir "${STEAM_SCRIPTS}" - echo "#!/usr/bin/env bash" > "${NOSTSHPATH}" - echo "export START_FROM_STEAM=1" >> "${NOSTSHPATH}" - echo "export LD_PRELOAD=" >> "${NOSTSHPATH}" - if check_flatpak; then - echo "flatpak run ru.linux_gaming.PortProton \"${portwine_exe}\" " >> "${NOSTSHPATH}" - else - echo "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" " >> "${NOSTSHPATH}" - fi + cat <<-EOF > "${NOSTSHPATH}" + #!/usr/bin/env bash + export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0) + export portwine_exe="${portwine_exe}" + export PORT_WINE_PATH="${PORT_WINE_PATH}" + export PORT_SCRIPTS_PATH="\${PORT_WINE_PATH}/data/scripts" + source "\${PORT_SCRIPTS_PATH}/add_in_steam.sh" + rungame "\$@" + EOF chmod u+x "${NOSTSHPATH}" if [[ -f "${SCPATH}" ]] ; then @@ -504,3 +509,29 @@ addNonSteamGame() { return 1 fi } + +rungame() { + export START_FROM_STEAM=1 + if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then + cd "$(dirname "${portwine_exe}")" + PORTWINE_DB_FILE="${portwine_exe}.ppdb" + if [[ -f "${PORTWINE_DB_FILE}" ]]; then + source "${PORTWINE_DB_FILE}" + fi + for path in "ProgramData" "users/Public" "users/steamuser"; do + if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then + mkdir -p "${WINEPREFIX}/drive_c/users/" + rm -rf "${WINEPREFIX}/drive_c/${path}" + ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" + fi + done + "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" + else + export LD_PRELOAD= + if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then + flatpak run ru.linux_gaming.PortProton "${portwine_exe}" + else + "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" + fi + fi +} From 109b27b3bad3575f4d1d195c682457b4ec773e77 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Thu, 16 Jan 2025 21:52:14 +0500 Subject: [PATCH 2/9] added saving statistics --- data_from_portwine/scripts/add_in_steam.sh | 47 +++++++++++++-------- data_from_portwine/scripts/functions_helper | 10 +++-- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index a0d316d5..4d12f250 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -512,26 +512,37 @@ addNonSteamGame() { rungame() { export START_FROM_STEAM=1 - if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then - cd "$(dirname "${portwine_exe}")" - PORTWINE_DB_FILE="${portwine_exe}.ppdb" - if [[ -f "${PORTWINE_DB_FILE}" ]]; then - source "${PORTWINE_DB_FILE}" - fi - for path in "ProgramData" "users/Public" "users/steamuser"; do - if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then - mkdir -p "${WINEPREFIX}/drive_c/users/" - rm -rf "${WINEPREFIX}/drive_c/${path}" - ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" + if [[ -n "${portwine_exe:-}" ]]; then + if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then + cd "$(dirname "${portwine_exe}")" + PORTWINE_DB_FILE="${portwine_exe}.ppdb" + export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" + source "${PORT_WINE_PATH}/data/user.conf" + source "${PORT_SCRIPTS_PATH}/functions_helper" + if [[ -f "${PORTWINE_DB_FILE}" ]]; then + source "${PORTWINE_DB_FILE}" + fi + for path in "ProgramData" "users/Public" "users/steamuser"; do + if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then + mkdir -p "${WINEPREFIX}/drive_c/users/" + rm -rf "${WINEPREFIX}/drive_c/${path}" + ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" + fi + done + [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" + "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" + if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then + debug_timer --end -s "PW_TIME_IN_GAME" + PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах + search_desktop_file fi - done - "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" - else - export LD_PRELOAD= - if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then - flatpak run ru.linux_gaming.PortProton "${portwine_exe}" else - "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" + export LD_PRELOAD= + if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then + flatpak run ru.linux_gaming.PortProton "${portwine_exe}" + else + "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" + fi fi fi } diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 862b4b72..8bc28868 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -2886,10 +2886,12 @@ edit_db_from_gui () { then for mod_db in "$@" ; do proxy_mod_db="${!mod_db}" - if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then - proxy_mod_db=disabled - elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then - proxy_mod_db=enabled + if (( ${#translations[@]} > 0 )); then + if [[ $proxy_mod_db =~ (${translations[Disabled]}|${translations[Disable]}) ]] ; then + proxy_mod_db=disabled + elif [[ $proxy_mod_db =~ (${translations[Enabled]}|${translations[Enable]}) ]] ; then + proxy_mod_db=enabled + fi fi if [[ $(<"${PORTWINE_DB_FILE}") =~ export\ ${mod_db}= ]] then sed -i "s|export ${mod_db}=.*|export ${mod_db}=\"$proxy_mod_db\"|g" "${PORTWINE_DB_FILE}" From 4c5ce9406742c5bad7c860c514dd6588615bdd7e Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Sat, 18 Jan 2025 03:29:54 +0500 Subject: [PATCH 3/9] cleaned --- data_from_portwine/scripts/add_in_steam.sh | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 4d12f250..d89205c8 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -293,9 +293,7 @@ parseSteamShortcutEntryLaunchOptions() { } parseSteamTargetExe() { - exe=$(sed -n 's/^export portwine_exe="\([^"]*\)"/\1/p' "$1") - [[ -z "${exe}" ]] && exe=$(grep -E 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}') - [[ -n "${exe}" ]] && echo "${exe}" + grep -E '^[^# ]*?(rungame|flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}' } restartSteam() { @@ -483,11 +481,8 @@ addNonSteamGame() { cat <<-EOF > "${NOSTSHPATH}" #!/usr/bin/env bash export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0) - export portwine_exe="${portwine_exe}" - export PORT_WINE_PATH="${PORT_WINE_PATH}" - export PORT_SCRIPTS_PATH="\${PORT_WINE_PATH}/data/scripts" - source "\${PORT_SCRIPTS_PATH}/add_in_steam.sh" - rungame "\$@" + source "${PORT_SCRIPTS_PATH}/add_in_steam.sh" + rungame "${portwine_exe}" "\$@" EOF chmod u+x "${NOSTSHPATH}" @@ -512,28 +507,31 @@ addNonSteamGame() { rungame() { export START_FROM_STEAM=1 + export portwine_exe="${1:-}" if [[ -n "${portwine_exe:-}" ]]; then if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then cd "$(dirname "${portwine_exe}")" - PORTWINE_DB_FILE="${portwine_exe}.ppdb" + export PORTWINE_DB_FILE="${portwine_exe}.ppdb" + export PORT_SCRIPTS_PATH=$(readlink -f "${BASH_SOURCE[0]%/*}") + export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*} export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" - source "${PORT_WINE_PATH}/data/user.conf" + [[ -f "${PORT_WINE_PATH}/data/user.conf" ]] && source "${PORT_WINE_PATH}/data/user.conf" + [[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}" source "${PORT_SCRIPTS_PATH}/functions_helper" - if [[ -f "${PORTWINE_DB_FILE}" ]]; then - source "${PORTWINE_DB_FILE}" - fi + PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}" for path in "ProgramData" "users/Public" "users/steamuser"; do + mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}" if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then mkdir -p "${WINEPREFIX}/drive_c/users/" rm -rf "${WINEPREFIX}/drive_c/${path}" - ln -sr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" + ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" fi done [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" - "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" + "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "${@:2}" if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then debug_timer --end -s "PW_TIME_IN_GAME" - PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) # в секундах + PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) search_desktop_file fi else From 4c0904a5f8d8dc4aadb93b90a8bf1fb5e4950043 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Sat, 18 Jan 2025 03:44:54 +0500 Subject: [PATCH 4/9] check if flatpak is installed --- data_from_portwine/scripts/add_in_steam.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index d89205c8..651429ff 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -536,7 +536,7 @@ rungame() { fi else export LD_PRELOAD= - if [[ "${FLATPAK_IN_USE:-0}" == 1 ]]; then + if [[ "${FLATPAK_IN_USE:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then flatpak run ru.linux_gaming.PortProton "${portwine_exe}" else "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" From c278df4e84d41bcbc2a2fd6f6d1bf41ad99df582 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Sat, 18 Jan 2025 04:24:32 +0500 Subject: [PATCH 5/9] FLATPAK_IN_USE => START_FROM_FLATPAK --- data_from_portwine/scripts/add_in_steam.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 651429ff..2aef70c5 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -480,7 +480,8 @@ addNonSteamGame() { create_new_dir "${STEAM_SCRIPTS}" cat <<-EOF > "${NOSTSHPATH}" #!/usr/bin/env bash - export FLATPAK_IN_USE=$(check_flatpak && echo 1 || echo 0) + export START_FROM_STEAM=1 + export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0) source "${PORT_SCRIPTS_PATH}/add_in_steam.sh" rungame "${portwine_exe}" "\$@" EOF @@ -506,7 +507,6 @@ addNonSteamGame() { } rungame() { - export START_FROM_STEAM=1 export portwine_exe="${1:-}" if [[ -n "${portwine_exe:-}" ]]; then if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then @@ -536,7 +536,7 @@ rungame() { fi else export LD_PRELOAD= - if [[ "${FLATPAK_IN_USE:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then + if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then flatpak run ru.linux_gaming.PortProton "${portwine_exe}" else "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" From e958e49b9373483c93f5f55a7e75b318f3ccd97c Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Sat, 18 Jan 2025 17:02:49 +0500 Subject: [PATCH 6/9] use start.sh --- data_from_portwine/scripts/add_in_steam.sh | 45 ++------------------- data_from_portwine/scripts/functions_helper | 24 +++++++++++ data_from_portwine/scripts/start.sh | 9 +++++ 3 files changed, 36 insertions(+), 42 deletions(-) diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 2aef70c5..d0137db9 100755 --- a/data_from_portwine/scripts/add_in_steam.sh +++ b/data_from_portwine/scripts/add_in_steam.sh @@ -293,7 +293,7 @@ parseSteamShortcutEntryLaunchOptions() { } parseSteamTargetExe() { - grep -E '^[^# ]*?(rungame|flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}' + grep -E '^[^# ]*?(flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}' } restartSteam() { @@ -480,10 +480,10 @@ addNonSteamGame() { create_new_dir "${STEAM_SCRIPTS}" cat <<-EOF > "${NOSTSHPATH}" #!/usr/bin/env bash + export LD_PRELOAD= export START_FROM_STEAM=1 export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0) - source "${PORT_SCRIPTS_PATH}/add_in_steam.sh" - rungame "${portwine_exe}" "\$@" + "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" "\$@" EOF chmod u+x "${NOSTSHPATH}" @@ -505,42 +505,3 @@ addNonSteamGame() { return 1 fi } - -rungame() { - export portwine_exe="${1:-}" - if [[ -n "${portwine_exe:-}" ]]; then - if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then - cd "$(dirname "${portwine_exe}")" - export PORTWINE_DB_FILE="${portwine_exe}.ppdb" - export PORT_SCRIPTS_PATH=$(readlink -f "${BASH_SOURCE[0]%/*}") - export PORT_WINE_PATH=${PORT_SCRIPTS_PATH%/*/*} - export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" - [[ -f "${PORT_WINE_PATH}/data/user.conf" ]] && source "${PORT_WINE_PATH}/data/user.conf" - [[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}" - source "${PORT_SCRIPTS_PATH}/functions_helper" - PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}" - for path in "ProgramData" "users/Public" "users/steamuser"; do - mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}" - if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then - mkdir -p "${WINEPREFIX}/drive_c/users/" - rm -rf "${WINEPREFIX}/drive_c/${path}" - ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" - fi - done - [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" - "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "${@:2}" - if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then - debug_timer --end -s "PW_TIME_IN_GAME" - PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) - search_desktop_file - fi - else - export LD_PRELOAD= - if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then - flatpak run ru.linux_gaming.PortProton "${portwine_exe}" - else - "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" - fi - fi - fi -} diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 8bc28868..f14063fb 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -4370,6 +4370,30 @@ pw_yad_form_vulkan () { fi } +steamplay_launch () { + if [[ -n "${portwine_exe:-}" ]]; then + cd "$(dirname "${portwine_exe}")" + export PORTWINE_DB_FILE="${portwine_exe}.ppdb" + [[ -f "${PORTWINE_DB_FILE}" ]] && source "${PORTWINE_DB_FILE}" + PORT_WINE_PREFIX="${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME:-DEFAULT}" + for path in "ProgramData" "users/Public" "users/steamuser"; do + mkdir -p "${PORT_WINE_PREFIX}/drive_c/${path}" + if [[ ! -L "${WINEPREFIX}/drive_c/${path}" ]]; then + mkdir -p "${WINEPREFIX}/drive_c/users/" + rm -rf "${WINEPREFIX}/drive_c/${path}" + ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" + fi + done + [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" + echo "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@" + if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then + debug_timer --end -s "PW_TIME_IN_GAME" + PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) + search_desktop_file + fi + fi +} + portwine_launch () { start_portwine unset PW_VD_TMP diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index 1d55a7bb..c6d138bc 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -6,6 +6,10 @@ export url_site="https://linux-gaming.ru/portproton/" export url_cloud="https://cloud.linux-gaming.ru/portproton" export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE" ######################################################################## +if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then + flatpak run ru.linux_gaming.PortProton "$@" + exit +fi echo ' █░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█ █▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█ @@ -191,6 +195,11 @@ if [[ $TRANSLATIONS_VER != "$scripts_install_ver" ]] ; then source "$PW_CACHE_LANG_PATH/$LANGUAGE" fi +if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then + steamplay_launch "${@:2}" + exit +fi + # check PortProton theme if [[ -n "$GUI_THEME" ]] \ && [[ -f "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme" ]] From 4446ddd6ab76441c8230d650f63972e682699262 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Sat, 18 Jan 2025 17:04:01 +0500 Subject: [PATCH 7/9] cleaned --- data_from_portwine/scripts/functions_helper | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index f14063fb..d620cfed 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -4385,7 +4385,7 @@ steamplay_launch () { fi done [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" - echo "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@" + "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@" if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then debug_timer --end -s "PW_TIME_IN_GAME" PW_TIME_IN_GAME=$(( PW_TIME_IN_GAME / 1000 )) From 8d71f99b3642f149fbf9dff3c2e18fd088e1c636 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Fri, 24 Jan 2025 01:38:03 +0500 Subject: [PATCH 8/9] unset start_from_flatpak, move unset wineprefix --- data_from_portwine/scripts/start.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/data_from_portwine/scripts/start.sh b/data_from_portwine/scripts/start.sh index c6d138bc..d8ce7c99 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -6,7 +6,8 @@ export url_site="https://linux-gaming.ru/portproton/" export url_cloud="https://cloud.linux-gaming.ru/portproton" export url_git="https://git.linux-gaming.ru/CastroFidel/PortWINE" ######################################################################## -if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && command -v "flatpak" &>/dev/null; then +if [[ "${START_FROM_FLATPAK:-0}" == 1 ]] && [[ -z "${STEAM_COMPAT_DATA_PATH:-}" ]] && command -v "flatpak" &>/dev/null; then + unset START_FROM_FLATPAK flatpak run ru.linux_gaming.PortProton "$@" exit fi @@ -100,7 +101,7 @@ fi unset MANGOHUD MANGOHUD_DLSYM PW_NO_ESYNC PW_NO_FSYNC PW_VULKAN_USE WINEDLLOVERRIDES PW_NO_WRITE_WATCH PW_YAD_SET PW_ICON_FOR_YAD unset PW_CHECK_AUTOINSTALL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE RADV_PERFTEST unset CHK_SYMLINK_FILE PW_MESA_GL_VERSION_OVERRIDE PW_VKD3D_FEATURE_LEVEL PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PW_PATH -unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY +unset PW_PREFIX_NAME VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR PW_WINE_CPU_TOPOLOGY unset MANGOHUD_CONFIG FPS_LIMIT PW_WINE_USE WINEDLLPATH WINE WINEDIR WINELOADER WINESERVER PW_USE_RUNTIME PORTWINE_CREATE_SHORTCUT_NAME MIRROR unset PW_LOCALE_SELECT PW_SETTINGS_INDICATION PW_GUI_START PW_AUTOINSTALL_EXE NOSTSTDIR RADV_DEBUG PW_NO_AUTO_CREATE_SHORTCUT unset PW_TERM PW_EXEC_FROM_DESKTOP WEBKIT_DISABLE_DMABUF_RENDERER PW_AMD_VULKAN_USE PW_VK_ICD_FILENAMES LAUNCH_URI @@ -199,6 +200,7 @@ if [[ -n "${STEAM_COMPAT_DATA_PATH:-}" ]]; then steamplay_launch "${@:2}" exit fi +unset WINEPREFIX # check PortProton theme if [[ -n "$GUI_THEME" ]] \ From fd3cfffcb51494cc2036d6a302afe1b643f515b3 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Fri, 24 Jan 2025 01:38:57 +0500 Subject: [PATCH 9/9] support PW_DLL_INSTALL on steamplay_launch --- data_from_portwine/scripts/functions_helper | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index d620cfed..38a65694 100755 --- a/data_from_portwine/scripts/functions_helper +++ b/data_from_portwine/scripts/functions_helper @@ -4384,6 +4384,11 @@ steamplay_launch () { ln -sr "${PORT_WINE_PREFIX}/drive_c/${path}" "${WINEPREFIX}/drive_c/${path}" fi done + if [[ -n "${PW_DLL_INSTALL:-}" ]] ; then + update_winetricks + PATH="${PATH}:${PW_PLUGINS_PATH}/portable/bin" LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \ + "${PORT_WINE_TMP_PATH}/winetricks" -q ${PW_DLL_INSTALL} + fi [[ $PW_LOG != 1 ]] && debug_timer --start -s "PW_TIME_IN_GAME" "${STEAM_COMPAT_TOOL_PATHS%%:*}/proton" "run" "${portwine_exe}" "$@" if [[ $PW_LOG != 1 ]] && [[ -n $START_PW_TIME_IN_GAME ]] ; then