diff --git a/data_from_portwine/scripts/add_in_steam.sh b/data_from_portwine/scripts/add_in_steam.sh index 92254b3c..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 'flatpak|start\.sh' "$1" | head -n 1 | awk -F'"' '{print $(NF-1)}' + grep -E '^[^# ]*?(flatpak|start\.sh)' "$1" | head -n 1 | sed 's/ "\$@"//' | awk -F'"' '{print $(NF-1)}' } restartSteam() { @@ -356,10 +356,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 +423,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 +466,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 +475,16 @@ 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 LD_PRELOAD= + export START_FROM_STEAM=1 + export START_FROM_FLATPAK=$(check_flatpak && echo 1 || echo 0) + "${PORT_SCRIPTS_PATH}/start.sh" "${portwine_exe}" "\$@" + EOF chmod u+x "${NOSTSHPATH}" if [[ -f "${SCPATH}" ]] ; then diff --git a/data_from_portwine/scripts/functions_helper b/data_from_portwine/scripts/functions_helper index 862b4b72..38a65694 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}" @@ -4368,6 +4370,35 @@ 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 + 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 + 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..d8ce7c99 100755 --- a/data_from_portwine/scripts/start.sh +++ b/data_from_portwine/scripts/start.sh @@ -6,6 +6,11 @@ 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 ]] && [[ -z "${STEAM_COMPAT_DATA_PATH:-}" ]] && command -v "flatpak" &>/dev/null; then + unset START_FROM_FLATPAK + flatpak run ru.linux_gaming.PortProton "$@" + exit +fi echo ' █░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█ █▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█ @@ -96,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 @@ -191,6 +196,12 @@ 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 +unset WINEPREFIX + # check PortProton theme if [[ -n "$GUI_THEME" ]] \ && [[ -f "$PW_GUI_THEMES_PATH/$GUI_THEME.pptheme" ]]