Compare commits

...

53 Commits

Author SHA1 Message Date
1b81250f39 Scripts version 2274 2024-04-07 18:13:46 +03:00
44fcea77d1 Scripts version 2273 2024-04-06 13:40:52 +03:00
36592917ce fix typos 2024-04-04 21:41:53 +03:00
71cbcb7b65 Scripts version 2272 2024-04-04 21:31:03 +03:00
2972d02f70 major rebase: drop runlib and yad_gui scripts 2024-04-04 20:40:29 +03:00
f28aa3423e update return, again 2024-04-04 15:45:29 +03:00
0fe873e24e update return from setup.sh 2024-04-04 15:25:56 +03:00
4cf9554884 move runlib to start.sh 2024-04-04 15:11:13 +03:00
bfeb559a2f Scripts version 2271 2024-04-03 16:19:40 +03:00
263072994c fixed ru_lang in EAapp and added share pid for flatpak 2024-04-02 19:46:59 +03:00
175a15393f Scripts version 2270 2024-03-31 13:08:33 +03:00
337070718e use runtime in flatpack 2024-03-29 18:01:36 +03:00
8d04691db5 Scripts version 2269 2024-03-29 14:31:39 +03:00
0d879470da Merge branch 'Boria138-fix-flatpak-gamemode' 2024-03-29 11:04:31 +03:00
1a6bb21089 Fix gamemode in flatpak
In flatpak gamemode is built without tools, which includes gamemoded, so the condition does not work
2024-03-28 15:05:20 +05:00
1ebf5e1f0f fixed typo 2024-03-28 11:38:45 +03:00
3422a2da79 Scripts version 2268 2024-03-27 22:48:12 +03:00
8c248618f9 fix typos 2024-03-27 18:09:29 +03:00
467caf6a5e Scripts version 2267 2024-03-27 18:02:50 +03:00
500681865c Scripts version 2266-2 2024-03-26 22:42:55 +03:00
3718b4d3d5 Scripts version 2266 2024-03-26 22:39:30 +03:00
e44a85ac20 Scripts version 2265 2024-03-26 19:18:11 +03:00
f0f0099164 Merge branch 'Boria138-replace-flatpak-id' 2024-03-24 15:35:46 +03:00
d2f5b1d36f Merge branch 'replace-flatpak-id' of https://github.com/Boria138/PortWINE into Boria138-replace-flatpak-id 2024-03-24 15:35:39 +03:00
8b50639a80 updated ProtonLG, dxvk and vkd3d 2024-03-24 15:35:06 +03:00
a6aec0bb95 Replace flatpak id to ru.linux_gaming.PortProton 2024-03-24 17:12:35 +05:00
42feee474b Merge branch 'Boria138-fix-flatpak-wine' 2024-03-21 15:42:42 +03:00
887d64fef4 Merge branch 'fix-flatpak-wine' of https://github.com/Boria138/PortWINE into Boria138-fix-flatpak-wine 2024-03-21 15:42:33 +03:00
97645fe48e Merge branch 'iFoundSilentHouse-master' 2024-03-21 15:39:40 +03:00
c8a35b02cc Fixed "Use system wine" option in flatpak 2024-03-19 12:41:28 +05:00
938fa60a02 Added void linux dependences to README files 2024-03-17 15:15:36 +06:00
53f3d5a13e Added void linux dependences to README files 2024-03-17 14:56:06 +06:00
2d6be9b1b0 Scripts version 2264 2024-03-15 17:49:14 +03:00
e623b589e8 Scripts version 2263 2024-03-15 02:51:01 +03:00
1280cb9ac5 Scripts version 2262 2024-03-14 22:27:18 +03:00
cc3fdaf86a Merge branch 'Boria138-opensuse-xterm-fix' 2024-03-13 19:14:22 +03:00
9e043ce6c1 Merge branch 'opensuse-xterm-fix' of https://github.com/Boria138/PortWINE into Boria138-opensuse-xterm-fix 2024-03-13 19:14:15 +03:00
8b199bfe5a updated DXVK, VKD3D and PROTON_LG 2024-03-13 19:10:33 +03:00
6553d4f6fb Scripts version 2261 2024-03-07 20:57:37 +03:00
1470641e35 Scripts version 2260 2024-03-07 19:49:30 +03:00
641ac18316 Dont use Steam xterm (Fix for OpenSuse) 2024-03-06 15:52:46 +05:00
b0f830f274 Scripts version 2259 2024-03-06 13:24:59 +03:00
cd9df5097a Scripts version 2258 2024-03-06 01:45:31 +03:00
9bc78beae0 enabled check update from steamos gaming mode 2024-02-15 22:58:38 +03:00
4fd30bedb6 minor fixes update pfx 2024-02-15 22:33:37 +03:00
e020be766f drop plugin folder from data 2024-02-15 17:26:29 +03:00
c322b56eed Scripts version 2257 2024-02-15 17:25:15 +03:00
9a6e1f14f9 Merge branch 'Boria138-disable-compositing' 2024-02-14 22:39:14 +03:00
4e5fed3c47 Merge branch 'disable-compositing' of https://github.com/Boria138/PortWINE into Boria138-disable-compositing 2024-02-14 22:38:56 +03:00
d2138ff830 used WINE_LG for all setup.exe 2024-02-14 22:38:17 +03:00
aeaf707fc8 Added Disable Compositing 2024-02-14 13:07:45 +06:00
ac89471590 fix double desktop file 2024-02-13 17:41:10 +03:00
2bb37df6a1 update istall script 2024-02-13 16:10:43 +03:00
63 changed files with 4791 additions and 3185 deletions

View File

@ -176,6 +176,14 @@ sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverl
sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl vulkan vulkan-32bit mesalib-32bit samba
```
* **Void**
```sh
sudo xbps-install -Su void-repo-multilib
sudo xbps-install -S bash wget icoutils yad bubblewrap zstd cabextract gzip tar xz openssl desktop-file-utils curl dbus freetype xdg-utils
gdk-pixbuf noto-fonts-ttf nss xrandr lsof mesa-demos ImageMagick Vulkan-Tools libgcc alsa-plugins-32bit libX11-32bit freetype-32bit libglvnd-32bit libgpg-error-32bit nss-32bit openssl-32bit vulkan-loader vulkan-loader-32bit
```
## Контакты
<p>

View File

@ -178,6 +178,14 @@ sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverla
sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba
```
* **Void**
```sh
sudo xbps-install -Su void-repo-multilib
sudo xbps-install -S bash wget icoutils yad bubblewrap zstd cabextract gzip tar xz openssl desktop-file-utils curl dbus freetype xdg-utils
gdk-pixbuf noto-fonts-ttf nss xrandr lsof mesa-demos ImageMagick Vulkan-Tools libgcc alsa-plugins-32bit libX11-32bit freetype-32bit libglvnd-32bit libgpg-error-32bit nss-32bit openssl-32bit vulkan-loader vulkan-loader-32bit
```
## Contacts
<p>

View File

@ -2,6 +2,112 @@ You can help us in the development of the project on the website: https://linux-
----------------------------------------
Changelog:
###Scripts version 2274### Date: 07.04.2024 / Download update size: 15 megabytes
* added the previous theme for PortProton, enabled by adding "export GUI_THEME=classic" to "data/user.conf"
###Scripts version 2273### Date: 06.04.2024 / Download update size: 15 megabytes
* the PortProton interface has been updated
* improved the quality of the tray icon
* added the CatsLauncher (the Front Edge game) to the AUTOINSTALL
* added initial support .css (GTK+)
* updated DOTNET prefix
###Scripts version 2272### Date: 04.04.2024 / Download update size: 15 megabytes
* script refactoring:
- yad_gui script combined with functions_helper
- runlib script combined with start.sh
- all functions from runlib, yad_gui and start.sh moved to functions_helper
* fixed winetricks update on some systems (thanks to Boria138)
* when cleaning the prefix, Common Files directories are not deleted from Program Files (to save vst libraries)
* updated the interface software (yad) to version 13.0 with Cyrillic support by default
###Scripts version 2271### Date: 03.04.2024 / Download update size: 15 megabytes
* improved interface of the prefix manager (xterm has been replaced with the standard PortProton interface)
* fixed the launch of the game "Dragon Age: Origin" from EAapp
* many small script improvements
###Scripts version 2270### Date: 31.03.2024 / Download update size: 15 megabytes
* added support for the game Horizon Forbidden West (to apply, you need to run the exe of the game and select SETTINGS -> RESET SETTINGS)
* fixed the operation of WINE from Kron4ek and returned the ability to download it using GET-OTHER-WINE
* fixed the launch of GET-OTHER-WINE (the interface for downloading third-party versions of WINE-PROTON) when launching exe files
###Scripts version 2269### Date: 29.03.2024 / Download update size: 15 megabytes
* added improvements when using the system WINE
* the preparation of PortProton scripts for working in flatpak has been completed
###Scripts version 2268### Date: 27.03.2024 / Download update size: 15 megabytes
* fixed the launch of some 32-bit games on the DEFAULT prefix. Examples:
LEGO Marvel Super Heroes
LEGO The Lord Of The Rings
LEGO Star Wars - The Clone Wars
Warhammer 40,000 Space Marine
Star Wars The Force Unleashed
Wolverine
###Scripts version 2267### Date: 27.03.2024 / Download update size: 15 megabytes
* implemented a twofold acceleration of prefix updates on all systems
* improved the functionality of settings for exe files (EDIT_DB)
* fixed the automatic installation of BattleNET
###Scripts version 2266### Date: 26.03.2024 / Download update size: 185 megabytes
* HOTFIX - download plugins from GITHUB
###Scripts version 2265### Date: 26.03.2024 / Download update size: 570 megabytes
* the faudio component has been added to the DEFAULT prefix (required for games running on the Creation Engine, example The Elder Scrolls)
* the plugins_v14 library package has been updated:
transferred from the libs package: d3d_extras, reshade and default_pfx
portable versions have been added: yad_v13_0, perl, exiftool (thanks to Boria138)
* the libs_v47 library package has been updated:
pressure-vessel 0.20240306.0
sniper 0.20240307.80401
* updated PROTON_LG to version "9-2"
* updated versions:
DXVK_GIT "2.3.1"
VKD3D_GIT "1.1-3973"
* added saving of settings changes to EDIT_DB when using the "OPEN SETTINGS FILE" button
* improved support for the PortProton test build in flatpak
* many small script improvements
###Scripts version 2264### Date: 15.03.2024 / Download update size: 15 megabytes
* added the option to end the first PortProton session when starting the second
* added auto-installation of the game "Pulse Online"
###Scripts version 2263### Date: 15.03.2024 / Download update size: 15 megabytes
* the lock file of the second session has been moved to "/tmp/portproton.lock"
* when starting from the terminal, it is clearly indicated that the lock file and its location have been found
###Scripts version 2262### Date: 14.03.2024 / Download update size: 230 megabytes
* added a warning when starting the second PortProton session
* added the ability to disable the container
* added the ability to use system WINE
* updated PROTON_LG to version 9-1
* updated versions:
DXVK_GIT "2.3-90"
VKD3D_GIT "1.1-3954"
* fixed installation of libraries from the prefix manager on openSUSE OS (thanks to Boria138)
* a separate version of PROTON is no longer required for Black Desert Online
###Scripts version 2261### Date: 07.03.2024 / Download update size: 15 megabytes
* HOTFIX - use settings from Black Desert Online launcher
###Scripts version 2260### Date: 07.03.2024 / Download update size: 15 megabytes
* added Black Desert Online to AUTOINSTALL
* fixed the prefix filling request while using the automatic installation of desktop games/launchers
###Scripts version 2259### Date: 06.03.2024 / Download update size: 15 megabytes
* the PortProton update feature has been fixed for Steam Deck in Gaming Mode (the current update needs to be installed from desktop mode)
###Scripts version 2258### Date: 06.03.2024 / Download update size: 15 megabytes
* fixed saving complex arguments for an exe file (example: "- /B/TX /lang:01 /tex:1 /spg:50 KingKongTheGame.bf")
* added automatic recovery shortcut to the menu for Steam Deck after SteamOS update (it is necessary to launch PP with any other shortcut of any game, or from Gaming Mode)
* the use of gamemode is disabled for Steam Deck in Gaming Mode (the session itself uses the pre-installed gamemode in SteamOS)
###Scripts version 2257### Date: 15.02.2024 / Download update size: 15 megabytes
* for all setup.exe is automatically selected by WINE_LG (corrects errors unarc.dll )
* added a function to disable compositing (thanks to Boria138)
* improved prefix update function
* many small script improvements
###Scripts version 2256### Date: 13.02.2024 / Download update size: 15 megabytes
* updated WINE_LG to version 9-2
* updated versions:
@ -1201,7 +1307,7 @@ export WINE_FULLSCREEN_FSR="1" (by default)
* updated db files
###Scripts version 2065###
* HOTFIX - correcting the termination of the yad and yad_v12_3 processes
* HOTFIX - correcting the termination of the yad and yad_v13_0 processes
###Scripts version 2064###
* added notification to the user about possible problems when starting in a Wayland session (once and only under Wayland)

View File

@ -2,6 +2,117 @@
-----------------------------------------
История изменений:
###Scripts version 2274### Дата: 07.04.2024 / Размер скачиваемого обновления: 15 мегабайт
* добавлена предыдущая тема для PortProton, включается добавлением "export GUI_THEME=classic" в "data/user.conf"
###Scripts version 2273### Дата: 06.04.2024 / Размер скачиваемого обновления: 15 мегабайт
* обновлён интерфейс PortProton
* улучшено качество иконки в трее
* улучшена локализация
* добавлен лончер CatsLauncher (игра "Передний край") в "АВТОУСТАНОВКИ"
* добавлена начальная поддержка стилей .css (GTK+)
* обновлен префикс DOTNET
###Scripts version 2272### Дата: 04.04.2024 / Размер скачиваемого обновления: 15 мегабайт
* рефакторинг скриптов:
- скрипт yad_gui объединён с functions_helper
- скрипт runlib объединён с start.sh
- все функции из runlib, yad_gui и start.sh перенесены в functions_helper
* исправлено обновление winetricks на некоторых системах (спасибо Boria138)
* при чистке префикса не удаляются каталоги Common Files из Program Files (для сохранения библиотек vst)
* обновлено ПО интерфейса (yad) до версии 13.0 с поддержкой кириллицы по умолчанию
* дополнительные небольшие улучшения интерфейса
###Scripts version 2271### Дата: 03.04.2024 / Размер скачиваемого обновления: 15 мегабайт
* улучшен интерфейс менеджера префиксов (xterm заменен на стандартный интерфейс PortProton)
* исправлена работа русского языка в EAapp (для применения необходимо запустить EALauncher и в PP выбрать НАСТРОЙКИ -> СБРОСИТЬ НАСТРОЙКИ)
* исправлен запуск игры "DragonAge: Origin" из EAapp
* множество небольших улучшений скриптов
###Scripts version 2270### Дата: 31.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* добавлена поддержка игры Horizon Forbidden West (для применения необходимо запустить exe игры и выбрать НАСТРОЙКИ -> СБРОСИТЬ НАСТРОЙКИ)
* исправлена работа WINE от Kron4ek и возвращена возможность его скачивания с помощью GET-OTHER-WINE
* исправлен запуск GET-OTHER-WINE (интерфейс скачивания сторонних версий WINE-PROTON) при запуске exe файлов
###Scripts version 2269### Дата: 29.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* добавлены улучшения при использовании cистемного WINE
* завершена подготовка скриптов PortProton для работы во flatpak
###Scripts version 2268### Дата: 27.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* исправлен запуск некоторых 32-х битных игр на префиксе DEFAULT. Примеры:
LEGO Marvel Super Heroes
LEGO The Lord Of The Rings
LEGO Star Wars - The Clone Wars
Warhammer 40,000 Space Marine
Star Wars The Force Unleashed
Wolverine
###Scripts version 2267### Дата: 27.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* реализовано двукратное ускорение обновления префикса на всех системах
* улучшен функционал настроек для exe файлов (EDIT_DB)
* исправлена автоустановка BattleNET
###Scripts version 2266### Дата: 26.03.2024 / Размер скачиваемого обновления: 170 мегабайт
* HOTFIX - исправлен баг гитхаба при доступе к plugins
###Scripts version 2265### Дата: 26.03.2024 / Размер скачиваемого обновления: 570 мегабайт
* в префикс DEFAULT добавлен компонент faudio (необходим для игр на движке Creation Engine, пример The Elder Scrolls)
* обновлен пакет библиотек plugins_v14:
перенесены из пакета libs: d3d_extras, reshade и default_pfx
добавлены портативные версии: yad_v13_0, perl, exiftool (спасибо Boria138)
* обновлен пакет библиотек libs_v47:
pressure-vessel 0.20240306.0
sniper 0.20240307.80401
* обновлен PROTON_LG до версии "9-2"
* обновлены версии:
DXVK_GIT "2.3.1"
VKD3D_GIT "1.1-3973"
* добавлено сохранение изменений настроек в EDIT_DB при искользовании кнопки "ОТКРЫТЬ ФАЙЛ НАСТРОЕК"
* улучшена поддержка тестовой сборки PortProton во flatpak
* множество небольших улучшений скриптов
###Scripts version 2264### Дата: 15.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* добавлен выбор завершения первой сессии PortProton при запуске второй
* добавлена автоустановка игры "Pulse Online"
###Scripts version 2263### Дата: 15.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* файл блокировки второй сессии перенесен в "/tmp/portproton.lock"
* при запуске с терминала, явно указано что найден файл блокировки и его месторасположение
###Scripts version 2262### Дата: 14.03.2024 / Размер скачиваемого обновления: 230 мегабайт
* добавлено предупреждение при запуске второй сессии PortProton
* добавлена возможность отключения контейнера
* добавлена возможность использования системного WINE
* обновлен PROTON_LG до версии 9-1
* обновлены версии:
DXVK_GIT "2.3-90"
VKD3D_GIT "1.1-3954"
* исправлена установка библиотек из префикс менеджера на ОС "OpenSUSE" (спасибо Boria138)
* для Black Desert Online более не требуется отдельной версии PROTON
###Scripts version 2261### Дата: 07.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* HOTFIX - изменения настроек игры из лаунчера Black Desert Online
###Scripts version 2260### Дата: 07.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* добавлена автоустановка игры Black Desert Online
* исправлен запрос наполнения префикса во время исползования автоустановки игр/лаунчеров
###Scripts version 2259### Дата: 06.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* для Steam Deck в режиме Gaming Mode исправлена возможность обновления PortProton (текущее обновление требуется устнановить из режима рабочего стола)
###Scripts version 2258### Дата: 06.03.2024 / Размер скачиваемого обновления: 15 мегабайт
* исправлено сохранение сложных аргументов для exe файла (пример: "- /B /TX /lang:01 /tex:1 /spg:50 KingKongTheGame.bf")
* добавлено автовостановление ярлыка в меню для Steam Deck после обновления SteamOS (необходим запуск PP любым другим ярлыком любой игры, или из режима Gaming Mode)
* для Steam Deck в режиме Gaming Mode отключено использование gamemode (сама сессия использует предустановленный gamemode в SteamOS)
###Scripts version 2257### Дата: 15.02.2024 / Размер скачиваемого обновления: 15 мегабайт
* для всех setup.exe автоматически выбирается WINE_LG (исправляет ошибки unarc.dll)
* добавлена функция отключения композитинга (спасибо Boria138)
* для префиксов созданных вручную, добавлен выбор его наполнения (чистый, или с рекомендованными библиотеками)
* улучшена функция обновления префикса при смене версии WINE-PROTON
* улучшение переводов
* множество небольших улучшений скриптов
###Scripts version 2256### Дата: 13.02.2024 / Размер скачиваемого обновления: 15 мегабайт
* обновлен WINE_LG до версии 9-2
* обновлены версии:
@ -1012,7 +1123,7 @@ export WINE_FULLSCREEN_FSR="1" (используется по умолчанию
* обновлены db файлы
###Scripts version 2065###
* HOTFIX - корректировка завершения процессов yad и yad_v12_3
* HOTFIX - корректировка завершения процессов yad и yad_v13_0
###Scripts version 2064###
* добавлено уведомление пользователю о возможных проблемах при запуске в Wayland сессии (один раз и только под Wayland)
@ -1419,7 +1530,7 @@ PS: не забывает для активации добавить перем
###Scripts version 1104###
* крупное обновлеение контейнера (libs_v16):
- добавлен /bin/yad_v12_3 версии 10.1 скомпилированный специально для будущего меню в трее)
- добавлен /bin/yad_v13_0 версии 10.1 скомпилированный специально для будущего меню в трее)
- обновлен MANGOHUD (требуется проверка под OpenGL)
- обновлен 7z необходимый для будущей автоматической установки Rockstar Game Launcher
* для тестовой поддержки wayland добавлена переменная в скрипт var: GDK_BACKEND="x11"

BIN
data_from_portwine/img/gui/24.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
data_from_portwine/img/gui/28.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
data_from_portwine/img/gui/32.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
data_from_portwine/img/gui/36.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
data_from_portwine/img/gui/40.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,602 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="28"
version="1.1"
height="28"
viewBox="0 0 28 28"
id="svg1"
sodipodi:docname="wine_file.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="22.627417"
inkscape:cx="15.512155"
inkscape:cy="13.390835"
inkscape:window-width="2991"
inkscape:window-height="1194"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs5455"><linearGradient
id="linearGradient4256"><stop
style="stop-color:#8cbdf8"
id="stop4258" /><stop
offset="1"
style="stop-color:#d5e8ff"
id="stop4260" /></linearGradient><linearGradient
id="linearGradient4232"><stop
style="stop-color:#3889e9"
id="stop4234-0" /><stop
offset="1"
style="stop-color:#5ea5fb"
id="stop4236" /></linearGradient><linearGradient
id="a"
x1="300"
x2="300"
y1="44"
y2="556"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#46bac6"
id="stop1" /><stop
offset="1"
stop-color="#1497a5"
id="stop2" /></linearGradient><linearGradient
id="linearGradient4194"><stop
style="stop-color:#b5006a"
id="stop4196" /><stop
offset="1"
style="stop-color:#c70073"
id="stop4198" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient848"
id="linearGradient854"
gradientUnits="userSpaceOnUse"
x1="203.3689"
y1="55.640129"
x2="244.86897"
y2="55.640129" /><linearGradient
inkscape:collect="always"
id="linearGradient848"><stop
style="stop-color:#4b8bd4;stop-opacity:1"
offset="0"
id="stop844" /><stop
style="stop-color:#3b6ca7;stop-opacity:1"
offset="1"
id="stop846" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient848"
id="linearGradient1004"
gradientUnits="userSpaceOnUse"
x1="387.57144"
y1="505.798"
x2="445.57141"
y2="505.798"
gradientTransform="matrix(1.3888828,0,0,1,-172.49732,0)" /><linearGradient
id="linearGradient4301"><stop
style="stop-color:#f10000;stop-opacity:1"
offset="0"
id="stop4303" /><stop
style="stop-color:#b20000;stop-opacity:1"
offset="1"
id="stop4305" /></linearGradient><linearGradient
id="linearGradient4305"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4307" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop4309" /></linearGradient><linearGradient
id="linearGradient4428"
y1="4.7160001"
x1="17.483"
y2="39.833"
x2="37.757999"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"><stop
stop-color="#3fc380"
id="stop4430"
style="stop-color:#3cc6ae;stop-opacity:1" /><stop
offset="1"
stop-color="#3f8ed3"
id="stop4432"
style="stop-color:#3f7ad3;stop-opacity:1" /></linearGradient><linearGradient
id="a-2"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-384.57,-499.8)"><stop
stop-color="#2a2c2f"
id="stop7" /><stop
offset="1"
stop-color="#424649"
id="stop9" /></linearGradient><linearGradient
id="b"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop12" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop14" /></linearGradient><linearGradient
id="c"
y1="522.79999"
x1="403.57001"
y2="534.79999"
x2="413.26001"
gradientUnits="userSpaceOnUse"><stop
stop-color="#020303"
id="stop17" /><stop
offset="1"
stop-color="#424649"
stop-opacity="0"
id="stop19" /></linearGradient><linearGradient
xlink:href="#c"
id="d"
y1="521.79999"
x1="400.76999"
y2="533.59998"
gradientUnits="userSpaceOnUse"
x2="412.57001" /><path
fill-rule="evenodd"
id="e"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-3"><stop
id="stop4268"
stop-color="#2a2c2f" /><stop
id="stop4270"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-6"><stop
id="stop4273"
stop-color="#989a9b" /><stop
id="stop4275"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-5"
fill-rule="evenodd" /><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="a-35"><stop
id="stop4339"
stop-color="#3fc380" /><stop
id="stop4341"
stop-color="#3f8ed3"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,31.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="b-62"
xlink:href="#a-35" /><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,16.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="c-9"
xlink:href="#a-35" /><linearGradient
gradientTransform="matrix(-0.99376,-0.0067,0.00423,1.56572,47.823,12.372)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="d-1"><stop
id="stop4346"
stop-color="#148e76" /><stop
id="stop4348"
stop-color="#218059"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(0,-2)"
gradientUnits="userSpaceOnUse"
x2="43"
y2="31"
x1="4"
y1="18"
id="e-2"><stop
id="stop4351"
stop-color="#292c2f"
style="stop-color:#000000;stop-opacity:1" /><stop
id="stop4353"
stop-opacity="0"
offset="1"
style="stop-color:#000000;stop-opacity:0.32644629" /></linearGradient><linearGradient
gradientTransform="translate(0,14)"
gradientUnits="userSpaceOnUse"
x2="44"
y2="28"
x1="30.625"
y1="14"
id="f"
xlink:href="#e-2" /><linearGradient
gradientTransform="matrix(0.99376,0.0067,-0.00423,-1.56572,50.177,5.628)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="g"
xlink:href="#d-1" /><linearGradient
x1="428.81601"
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="388.86499"
y2="499.67899"
y1="547.63397"
id="a-9"><stop
id="stop7-3"
stop-color="#2a2c2f" /><stop
id="stop9-6"
stop-color="#536161"
offset="1" /></linearGradient><linearGradient
x1="36"
gradientUnits="userSpaceOnUse"
x2="14"
y2="12"
y1="44"
id="b-0"><stop
style="stop-color:#bfc9c9;stop-opacity:1"
id="stop12-6"
stop-color="#536161" /><stop
style="stop-color:#fbfbfb;stop-opacity:1"
id="stop14-2"
stop-color="#f4f5f5"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="419.974"
y2="539.82501"
x1="418.57001"
y1="529.79999"
id="c-61"><stop
id="stop17-8"
stop-color="#292c2f" /><stop
id="stop19-7"
stop-opacity="0"
offset="1" /></linearGradient><style
type="text/css"
id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient
gradientTransform="translate(-404.99,-523.8)"
gradientUnits="userSpaceOnUse"
x2="419.974"
y2="539.82501"
x1="406.50101"
y1="527.01398"
id="c-6"><stop
id="stop17-7"
stop-color="#292c2f" /><stop
id="stop19-5"
stop-opacity="0"
offset="1" /></linearGradient><linearGradient
xlink:href="#linearGradient4428"
id="linearGradient4408-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,43.823,-1.66)"
x1="9.875"
y1="-2.3239999"
x2="44.278"
y2="42.318001" /><linearGradient
id="a-8"><stop
id="stop4631"
stop-opacity=".742"
stop-color="#dcedfe" /><stop
id="stop4633"
stop-opacity="0"
stop-color="#dcedfe"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(15.653,1.018)"
x2="40.709"
gradientUnits="userSpaceOnUse"
y2="30.416"
x1="10.972"
y1="-0.017999999"
id="b-4"><stop
id="stop4636" /><stop
id="stop4638"
stop-opacity="0"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(23.03,5.02)"
x2="29.129999"
gradientUnits="userSpaceOnUse"
y2="22.129999"
x1="11"
y1="4"
id="c-5"
xlink:href="#b-4" /><linearGradient
gradientTransform="translate(-99.4835,-40.4835)"
x2="30.347"
gradientUnits="userSpaceOnUse"
y2="45.981998"
x1="7.3470001"
y1="6.9819999"
id="d-0"><stop
id="stop4642"
stop-color="#eeeeee" /><stop
id="stop4644"
stop-color="#cccccc"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"
x2="0"
gradientUnits="userSpaceOnUse"
y2="32"
y1="36"
id="e-3"><stop
id="stop4647"
stop-color="#c58c00" /><stop
id="stop4649"
stop-color="#ffc318"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(1,0,0,1.25,-111.4835,-50.4855)"
x2="19"
gradientUnits="userSpaceOnUse"
y2="33"
x1="23.219999"
y1="42.986"
id="f-6"><stop
id="stop4652"
stop-color="#70431c" /><stop
id="stop4654"
stop-color="#be8c5a"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(-106.4835,-44.4855)"
x2="21"
gradientUnits="userSpaceOnUse"
y2="46"
x1="13.98"
y1="38.957001"
id="g-1"
xlink:href="#b-4" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="2.987"
y1="43.922001"
id="h"
gradientTransform="translate(-122.5135,-45.5035)"><stop
id="stop4658"
stop-color="#22a7f0" /><stop
id="stop4660"
stop-color="#19b5fe"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="34.040001"
y1="43.922001"
id="i"><stop
id="stop4663"
stop-color="#c8e3fe" /><stop
id="stop4665"
stop-color="#e4f1fe"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="27"
x1="19"
y2="44"
y1="33.998001"
id="j"><stop
id="stop4668"
stop-color="#383e51" /><stop
id="stop4670"
stop-opacity="0"
stop-color="#655c6f"
offset="1" /></linearGradient><radialGradient
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)"
gradientUnits="userSpaceOnUse"
r="16"
id="k"
xlink:href="#a-8"
cy="48.672001"
cx="31.01" /><radialGradient
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)"
gradientUnits="userSpaceOnUse"
r="16"
id="l"
xlink:href="#a-8"
cy="38.130001"
cx="30.299999" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-0"><stop
id="stop4858"
stop-color="#2a2c2f" /><stop
id="stop4860"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-63"><stop
id="stop4863"
stop-color="#989a9b" /><stop
id="stop4865"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-0"
fill-rule="evenodd" /><linearGradient
xlink:href="#linearGradient4305"
id="linearGradient4311"
x1="16.75"
y1="-4.5"
x2="36"
y2="32"
gradientUnits="userSpaceOnUse" /><radialGradient
xlink:href="#linearGradient4301"
id="radialGradient4309"
cx="20.853001"
cy="17.349001"
fx="20.853001"
fy="17.349001"
r="8.1289997"
gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)"
gradientUnits="userSpaceOnUse" /><linearGradient
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-09"><stop
id="stop7-36"
stop-color="#2a2c2f" /><stop
id="stop9-0"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-626"><stop
id="stop12-1"
stop-color="#989a9b" /><stop
id="stop14-8"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-02"
fill-rule="evenodd" /><linearGradient
id="a-3-3"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4268-7" /><stop
offset="1"
stop-color="#424649"
id="stop4270-5" /></linearGradient><linearGradient
id="b-6-9"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4273-2" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4275-2" /></linearGradient><path
fill-rule="evenodd"
id="e-5-8"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style
id="current-color-scheme-8"
type="text/css">
.ColorScheme-Text { color:#4d4d4d; }
</style><linearGradient
id="e-3-3"
y1="36"
y2="32"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop
stop-color="#c58c00"
id="stop4647-2" /><stop
offset="1"
stop-color="#ffc318"
id="stop4649-0" /></linearGradient><linearGradient
gradientTransform="translate(-122.5135,-45.5035)"
id="h-5"
y1="43.922001"
y2="2.987"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#22a7f0"
id="stop4658-5" /><stop
offset="1"
stop-color="#19b5fe"
id="stop4660-4" /></linearGradient><linearGradient
id="i-7"
y1="43.922001"
y2="34.040001"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#c8e3fe"
id="stop4663-6" /><stop
offset="1"
stop-color="#e4f1fe"
id="stop4665-5" /></linearGradient><radialGradient
cx="31.01"
cy="48.672001"
xlink:href="#a-8"
id="k-3"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient
cx="30.299999"
cy="38.130001"
xlink:href="#a-8"
id="l-7"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient
id="a-0-4"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4858-5" /><stop
offset="1"
stop-color="#424649"
id="stop4860-2" /></linearGradient><linearGradient
id="b-63-5"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4863-4" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4865-7" /></linearGradient><path
fill-rule="evenodd"
id="e-0-4"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /></defs><metadata
id="metadata5458" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-384.57143,-515.798)"><circle
style="opacity:1;fill:#09bec8;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0"
id="path1"
cx="398.57144"
cy="529.79797"
r="14" /><path
id="rect11"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.337561"
d="m 390.91518,522.15542 c -1.17836,0 -2.12695,1.02085 -2.12695,2.29102 v 3.53125 c 0,-1.39758 0.85081,-1.98047 2.12695,-1.98047 h 3.4043 c 4.67925,-0.46574 3.86782,-2.29688 6.8457,-2.29688 h 5.00977 c 1.17828,0 2.18164,0.49449 2.18164,1.78516 v -1.03906 c 0,-1.27017 -0.9486,-2.29102 -2.12696,-2.29102 z m 10.24805,2.1543 c -2.97788,0 -2.16643,1.83309 -6.84571,2.29883 h -3.40429 c -1.27614,0 -2.12696,0.5829 -2.12696,1.98046 v 6.52149 c 0,1.29066 0.94866,2.33008 2.12696,2.33008 h 15.31445 c 1.1783,0 2.12695,-1.03977 2.12695,-2.33008 v -0.52735 c 2.9e-4,-0.0157 0.002,-0.0311 0.002,-0.0469 v -0.0352 c 0,0.0159 -0.002,0.0311 -0.002,0.0469 v -8.45313 c 0,-1.29067 -1.00334,-1.78515 -2.18164,-1.78515 z m -6.08008,2.87304 h 0.69726 5.58204 0.002 0.69531 v 2.44336 c 0,1.80869 -1.3761,3.2955 -3.13867,3.47071 v 2.45898 h 1.74414 c 0.38651,0 0.69727,0.31076 0.69727,0.69727 h -5.58204 c 0,-0.38651 0.31076,-0.69727 0.69727,-0.69727 h 1.74414 v -2.45898 c -1.76257,-0.17521 -3.13867,-1.66202 -3.13867,-3.47071 z m 0.69726,2.47461 c 0.002,0.17292 0.0214,0.34158 0.0527,0.50586 l 0.54101,-0.043 0.0371,-0.46289 z m 0.7129,0 0.0371,0.46289 0.96485,0.0781 -0.96485,0.0801 -0.0781,0.96289 -0.0781,-0.96289 -0.52734,-0.043 c 0.27399,1.25618 1.37505,2.20312 2.71289,2.20312 1.54008,0 2.79116,-1.2439 2.80274,-2.78125 z m 0.58984,0.72657 0.041,0.55078 0.55079,0.041 -0.55079,0.043 -0.041,0.55078 -0.041,-0.55078 -0.55078,-0.043 0.55078,-0.041 z" /></g></svg>

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,866 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="28"
version="1.1"
height="28"
viewBox="0 0 28 28"
id="svg1"
sodipodi:docname="wine_system.svg"
inkscape:version="1.3.2 (091e20ef0f, 2023-11-25, custom)"
xml:space="preserve"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="16"
inkscape:cx="7.5"
inkscape:cy="8.5"
inkscape:window-width="2991"
inkscape:window-height="1194"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs
id="defs5455"><linearGradient
id="linearGradient4256"><stop
style="stop-color:#8cbdf8"
id="stop4258" /><stop
offset="1"
style="stop-color:#d5e8ff"
id="stop4260" /></linearGradient><linearGradient
id="linearGradient4232"><stop
style="stop-color:#3889e9"
id="stop4234-0" /><stop
offset="1"
style="stop-color:#5ea5fb"
id="stop4236" /></linearGradient><linearGradient
id="a"
x1="300"
x2="300"
y1="44"
y2="556"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#46bac6"
id="stop1" /><stop
offset="1"
stop-color="#1497a5"
id="stop2" /></linearGradient><linearGradient
id="linearGradient4194"><stop
style="stop-color:#b5006a"
id="stop4196" /><stop
offset="1"
style="stop-color:#c70073"
id="stop4198" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient848"
id="linearGradient854"
gradientUnits="userSpaceOnUse"
x1="203.3689"
y1="55.640129"
x2="244.86897"
y2="55.640129" /><linearGradient
inkscape:collect="always"
id="linearGradient848"><stop
style="stop-color:#4b8bd4;stop-opacity:1"
offset="0"
id="stop844" /><stop
style="stop-color:#3b6ca7;stop-opacity:1"
offset="1"
id="stop846" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient848"
id="linearGradient1004"
gradientUnits="userSpaceOnUse"
x1="387.57144"
y1="505.798"
x2="445.57141"
y2="505.798"
gradientTransform="matrix(1.3888828,0,0,1,-172.49732,0)" /><linearGradient
id="linearGradient4301"><stop
style="stop-color:#f10000;stop-opacity:1"
offset="0"
id="stop4303" /><stop
style="stop-color:#b20000;stop-opacity:1"
offset="1"
id="stop4305" /></linearGradient><linearGradient
id="linearGradient4305"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop4307" /><stop
style="stop-color:#ffffff;stop-opacity:0;"
offset="1"
id="stop4309" /></linearGradient><linearGradient
id="linearGradient4428"
y1="4.7160001"
x1="17.483"
y2="39.833"
x2="37.757999"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"><stop
stop-color="#3fc380"
id="stop4430"
style="stop-color:#3cc6ae;stop-opacity:1" /><stop
offset="1"
stop-color="#3f8ed3"
id="stop4432"
style="stop-color:#3f7ad3;stop-opacity:1" /></linearGradient><linearGradient
id="a-2"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-384.57,-499.8)"><stop
stop-color="#2a2c2f"
id="stop7" /><stop
offset="1"
stop-color="#424649"
id="stop9" /></linearGradient><linearGradient
id="b"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop12" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop14" /></linearGradient><linearGradient
id="c"
y1="522.79999"
x1="403.57001"
y2="534.79999"
x2="413.26001"
gradientUnits="userSpaceOnUse"><stop
stop-color="#020303"
id="stop17" /><stop
offset="1"
stop-color="#424649"
stop-opacity="0"
id="stop19" /></linearGradient><linearGradient
xlink:href="#c"
id="d"
y1="521.79999"
x1="400.76999"
y2="533.59998"
gradientUnits="userSpaceOnUse"
x2="412.57001" /><path
fill-rule="evenodd"
id="e"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-3"><stop
id="stop4268"
stop-color="#2a2c2f" /><stop
id="stop4270"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-6"><stop
id="stop4273"
stop-color="#989a9b" /><stop
id="stop4275"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-5"
fill-rule="evenodd" /><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,47.823,2.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="a-35"><stop
id="stop4339"
stop-color="#3fc380" /><stop
id="stop4341"
stop-color="#3f8ed3"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,31.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="b-62"
xlink:href="#a-35" /><linearGradient
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,97.823,16.34)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="c-9"
xlink:href="#a-35" /><linearGradient
gradientTransform="matrix(-0.99376,-0.0067,0.00423,1.56572,47.823,12.372)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="d-1"><stop
id="stop4346"
stop-color="#148e76" /><stop
id="stop4348"
stop-color="#218059"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(0,-2)"
gradientUnits="userSpaceOnUse"
x2="43"
y2="31"
x1="4"
y1="18"
id="e-2"><stop
id="stop4351"
stop-color="#292c2f"
style="stop-color:#000000;stop-opacity:1" /><stop
id="stop4353"
stop-opacity="0"
offset="1"
style="stop-color:#000000;stop-opacity:0.32644629" /></linearGradient><linearGradient
gradientTransform="translate(0,14)"
gradientUnits="userSpaceOnUse"
x2="44"
y2="28"
x1="30.625"
y1="14"
id="f"
xlink:href="#e-2" /><linearGradient
gradientTransform="matrix(0.99376,0.0067,-0.00423,-1.56572,50.177,5.628)"
gradientUnits="userSpaceOnUse"
x2="37.757999"
y2="39.833"
x1="17.483"
y1="4.7160001"
id="g"
xlink:href="#d-1" /><linearGradient
x1="428.81601"
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="388.86499"
y2="499.67899"
y1="547.63397"
id="a-9"><stop
id="stop7-3"
stop-color="#2a2c2f" /><stop
id="stop9-6"
stop-color="#536161"
offset="1" /></linearGradient><linearGradient
x1="36"
gradientUnits="userSpaceOnUse"
x2="14"
y2="12"
y1="44"
id="b-0"><stop
style="stop-color:#bfc9c9;stop-opacity:1"
id="stop12-6"
stop-color="#536161" /><stop
style="stop-color:#fbfbfb;stop-opacity:1"
id="stop14-2"
stop-color="#f4f5f5"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="419.974"
y2="539.82501"
x1="418.57001"
y1="529.79999"
id="c-61"><stop
id="stop17-8"
stop-color="#292c2f" /><stop
id="stop19-7"
stop-opacity="0"
offset="1" /></linearGradient><style
type="text/css"
id="current-color-scheme">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient
gradientTransform="translate(-404.99,-523.8)"
gradientUnits="userSpaceOnUse"
x2="419.974"
y2="539.82501"
x1="406.50101"
y1="527.01398"
id="c-6"><stop
id="stop17-7"
stop-color="#292c2f" /><stop
id="stop19-5"
stop-opacity="0"
offset="1" /></linearGradient><linearGradient
xlink:href="#linearGradient4428"
id="linearGradient4408-1"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.99376,-0.00423,0.00423,0.98887,43.823,-1.66)"
x1="9.875"
y1="-2.3239999"
x2="44.278"
y2="42.318001" /><linearGradient
id="a-8"><stop
id="stop4631"
stop-opacity=".742"
stop-color="#dcedfe" /><stop
id="stop4633"
stop-opacity="0"
stop-color="#dcedfe"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(15.653,1.018)"
x2="40.709"
gradientUnits="userSpaceOnUse"
y2="30.416"
x1="10.972"
y1="-0.017999999"
id="b-4"><stop
id="stop4636" /><stop
id="stop4638"
stop-opacity="0"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(23.03,5.02)"
x2="29.129999"
gradientUnits="userSpaceOnUse"
y2="22.129999"
x1="11"
y1="4"
id="c-5"
xlink:href="#b-4" /><linearGradient
gradientTransform="translate(-99.4835,-40.4835)"
x2="30.347"
gradientUnits="userSpaceOnUse"
y2="45.981998"
x1="7.3470001"
y1="6.9819999"
id="d-0"><stop
id="stop4642"
stop-color="#eeeeee" /><stop
id="stop4644"
stop-color="#cccccc"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"
x2="0"
gradientUnits="userSpaceOnUse"
y2="32"
y1="36"
id="e-3"><stop
id="stop4647"
stop-color="#c58c00" /><stop
id="stop4649"
stop-color="#ffc318"
offset="1" /></linearGradient><linearGradient
gradientTransform="matrix(1,0,0,1.25,-111.4835,-50.4855)"
x2="19"
gradientUnits="userSpaceOnUse"
y2="33"
x1="23.219999"
y1="42.986"
id="f-6"><stop
id="stop4652"
stop-color="#70431c" /><stop
id="stop4654"
stop-color="#be8c5a"
offset="1" /></linearGradient><linearGradient
gradientTransform="translate(-106.4835,-44.4855)"
x2="21"
gradientUnits="userSpaceOnUse"
y2="46"
x1="13.98"
y1="38.957001"
id="g-1"
xlink:href="#b-4" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="2.987"
y1="43.922001"
id="h"
gradientTransform="translate(-122.5135,-45.5035)"><stop
id="stop4658"
stop-color="#22a7f0" /><stop
id="stop4660"
stop-color="#19b5fe"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="34.040001"
y1="43.922001"
id="i"><stop
id="stop4663"
stop-color="#c8e3fe" /><stop
id="stop4665"
stop-color="#e4f1fe"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="27"
x1="19"
y2="44"
y1="33.998001"
id="j"><stop
id="stop4668"
stop-color="#383e51" /><stop
id="stop4670"
stop-opacity="0"
stop-color="#655c6f"
offset="1" /></linearGradient><radialGradient
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)"
gradientUnits="userSpaceOnUse"
r="16"
id="k"
xlink:href="#a-8"
cy="48.672001"
cx="31.01" /><radialGradient
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)"
gradientUnits="userSpaceOnUse"
r="16"
id="l"
xlink:href="#a-8"
cy="38.130001"
cx="30.299999" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-0"><stop
id="stop4858"
stop-color="#2a2c2f" /><stop
id="stop4860"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-63"><stop
id="stop4863"
stop-color="#989a9b" /><stop
id="stop4865"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-0"
fill-rule="evenodd" /><linearGradient
xlink:href="#linearGradient4305"
id="linearGradient4311"
x1="16.75"
y1="-4.5"
x2="36"
y2="32"
gradientUnits="userSpaceOnUse" /><radialGradient
xlink:href="#linearGradient4301"
id="radialGradient4309"
cx="20.853001"
cy="17.349001"
fx="20.853001"
fy="17.349001"
r="8.1289997"
gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)"
gradientUnits="userSpaceOnUse" /><linearGradient
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-09"><stop
id="stop7-36"
stop-color="#2a2c2f" /><stop
id="stop9-0"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-626"><stop
id="stop12-1"
stop-color="#989a9b" /><stop
id="stop14-8"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-02"
fill-rule="evenodd" /><linearGradient
id="a-3-3"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4268-7" /><stop
offset="1"
stop-color="#424649"
id="stop4270-5" /></linearGradient><linearGradient
id="b-6-9"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4273-2" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4275-2" /></linearGradient><path
fill-rule="evenodd"
id="e-5-8"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style
id="current-color-scheme-8"
type="text/css">
.ColorScheme-Text { color:#4d4d4d; }
</style><linearGradient
id="e-3-3"
y1="36"
y2="32"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop
stop-color="#c58c00"
id="stop4647-2" /><stop
offset="1"
stop-color="#ffc318"
id="stop4649-0" /></linearGradient><linearGradient
gradientTransform="translate(-122.5135,-45.5035)"
id="h-5"
y1="43.922001"
y2="2.987"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#22a7f0"
id="stop4658-5" /><stop
offset="1"
stop-color="#19b5fe"
id="stop4660-4" /></linearGradient><linearGradient
id="i-7"
y1="43.922001"
y2="34.040001"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#c8e3fe"
id="stop4663-6" /><stop
offset="1"
stop-color="#e4f1fe"
id="stop4665-5" /></linearGradient><radialGradient
cx="31.01"
cy="48.672001"
xlink:href="#a-8"
id="k-3"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient
cx="30.299999"
cy="38.130001"
xlink:href="#a-8"
id="l-7"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient
id="a-0-4"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4858-5" /><stop
offset="1"
stop-color="#424649"
id="stop4860-2" /></linearGradient><linearGradient
id="b-63-5"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4863-4" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4865-7" /></linearGradient><path
fill-rule="evenodd"
id="e-0-4"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient
id="a-87"
x1="300"
x2="300"
y1="44"
y2="556"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#46bac6"
id="stop1-9" /><stop
offset="1"
stop-color="#1497a5"
id="stop2-2" /></linearGradient><linearGradient
id="a-2-7"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(-384.57,-499.8)"><stop
stop-color="#2a2c2f"
id="stop7-361" /><stop
offset="1"
stop-color="#424649"
id="stop9-2" /></linearGradient><linearGradient
id="b-9"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop12-3" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop14-1" /></linearGradient><path
fill-rule="evenodd"
id="e-7"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-3-8"><stop
id="stop4268-4"
stop-color="#2a2c2f" /><stop
id="stop4270-50"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-6-3"><stop
id="stop4273-6"
stop-color="#989a9b" /><stop
id="stop4275-1"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-5-0"
fill-rule="evenodd" /><style
type="text/css"
id="current-color-scheme-6">.ColorScheme-Text { color: #fcfcfc; } </style><linearGradient
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"
x2="0"
gradientUnits="userSpaceOnUse"
y2="32"
y1="36"
id="e-3-7"><stop
id="stop4647-4"
stop-color="#c58c00" /><stop
id="stop4649-4"
stop-color="#ffc318"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="2.987"
y1="43.922001"
id="h-7"
gradientTransform="translate(-122.5135,-45.5035)"><stop
id="stop4658-8"
stop-color="#22a7f0" /><stop
id="stop4660-6"
stop-color="#19b5fe"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="34.040001"
y1="43.922001"
id="i-8"><stop
id="stop4663-8"
stop-color="#c8e3fe" /><stop
id="stop4665-4"
stop-color="#e4f1fe"
offset="1" /></linearGradient><radialGradient
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)"
gradientUnits="userSpaceOnUse"
r="16"
id="k-4"
xlink:href="#a-8"
cy="48.672001"
cx="31.01" /><radialGradient
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)"
gradientUnits="userSpaceOnUse"
r="16"
id="l-9"
xlink:href="#a-8"
cy="38.130001"
cx="30.299999" /><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-0-2"><stop
id="stop4858-0"
stop-color="#2a2c2f" /><stop
id="stop4860-6"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-63-8"><stop
id="stop4863-9"
stop-color="#989a9b" /><stop
id="stop4865-2"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-0-6"
fill-rule="evenodd" /><radialGradient
xlink:href="#linearGradient4301"
id="radialGradient4309-6"
cx="20.853001"
cy="17.349001"
fx="20.853001"
fy="17.349001"
r="8.1289997"
gradientTransform="matrix(-0.01162882,1.1950891,-1.274916,-0.0124056,46.239569,-9.6229889)"
gradientUnits="userSpaceOnUse" /><linearGradient
gradientTransform="translate(-384.57,-499.8)"
gradientUnits="userSpaceOnUse"
x2="0"
y2="503.79999"
y1="543.79999"
id="a-09-4"><stop
id="stop7-36-9"
stop-color="#2a2c2f" /><stop
id="stop9-0-5"
stop-color="#424649"
offset="1" /></linearGradient><linearGradient
gradientUnits="userSpaceOnUse"
x2="0"
y2="506.79999"
y1="532.79999"
id="b-626-0"><stop
id="stop12-1-4"
stop-color="#989a9b" /><stop
id="stop14-8-8"
stop-color="#f6f6f7"
offset="1" /></linearGradient><path
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z"
id="e-02-7"
fill-rule="evenodd" /><linearGradient
id="a-3-3-1"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4268-7-7" /><stop
offset="1"
stop-color="#424649"
id="stop4270-5-2" /></linearGradient><linearGradient
id="b-6-9-7"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4273-2-2" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4275-2-2" /></linearGradient><path
fill-rule="evenodd"
id="e-5-8-6"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /><style
id="current-color-scheme-8-1"
type="text/css">
.ColorScheme-Text { color:#4d4d4d; }
</style><linearGradient
id="e-3-3-0"
y1="36"
y2="32"
gradientUnits="userSpaceOnUse"
x2="0"
gradientTransform="matrix(1,0,0,1.0091,-110.9855,-40.7775)"><stop
stop-color="#c58c00"
id="stop4647-2-6" /><stop
offset="1"
stop-color="#ffc318"
id="stop4649-0-1" /></linearGradient><linearGradient
gradientTransform="translate(-122.5135,-45.5035)"
id="h-5-5"
y1="43.922001"
y2="2.987"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#22a7f0"
id="stop4658-5-9" /><stop
offset="1"
stop-color="#19b5fe"
id="stop4660-4-4" /></linearGradient><linearGradient
id="i-7-9"
y1="43.922001"
y2="34.040001"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#c8e3fe"
id="stop4663-6-0" /><stop
offset="1"
stop-color="#e4f1fe"
id="stop4665-5-9" /></linearGradient><radialGradient
cx="31.01"
cy="48.672001"
xlink:href="#a-8"
id="k-3-1"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.59169,-0.93256,2.10028,1.33257,-80.07,8.555)" /><radialGradient
cx="30.299999"
cy="38.130001"
xlink:href="#a-8"
id="l-7-7"
r="16"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.53188,-0.49081,0.78529,0.851,-19.809,-0.579)" /><linearGradient
id="a-0-4-7"
y1="543.79999"
y2="503.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#2a2c2f"
id="stop4858-5-1" /><stop
offset="1"
stop-color="#424649"
id="stop4860-2-1" /></linearGradient><linearGradient
id="b-63-5-5"
y1="532.79999"
y2="506.79999"
x2="0"
gradientUnits="userSpaceOnUse"><stop
stop-color="#989a9b"
id="stop4863-4-9" /><stop
offset="1"
stop-color="#f6f6f7"
id="stop4865-7-7" /></linearGradient><path
fill-rule="evenodd"
id="e-0-4-7"
d="m 426.57,529.8 -16,11 -8,-8 -2,-9 17,-5 z" /></defs><metadata
id="metadata5458" /><g
inkscape:label="Capa 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-384.57143,-515.798)"><circle
style="opacity:1;fill:#09bec8;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0"
id="path1"
cx="398.57144"
cy="529.79797"
r="14" /><g
id="g4"
transform="translate(-0.1974492,1.22754)"><path
id="rect4364"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.07519;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 392.60073,522.03433 v 4.18359 c 0,3.09604 2.35596,5.6415 5.37304,5.94141 v 4.20898 h -2.98632 c -0.66161,0 -1.19336,0.53175 -1.19336,1.19336 h 9.55468 c 0,-0.66161 -0.53175,-1.19336 -1.19336,-1.19336 h -2.98632 v -4.20898 c 2.65921,-0.26434 4.80387,-2.2746 5.27539,-4.86719 -0.019,0.006 -0.0376,0.012 -0.0566,0.0176 -0.0884,0.0258 -0.18291,0.008 -0.25391,-0.0508 l -0.40039,-0.33008 c -0.14585,0.0187 -0.29271,0.0277 -0.43945,0.0273 -0.34833,2.30652 -2.33891,4.07618 -4.74219,4.07618 -2.29007,0 -4.17552,-1.6212 -4.64453,-3.77149 l 0.90234,0.0723 0.13477,1.64843 0.13281,-1.64843 1.65234,-0.13672 -1.65234,-0.13281 -0.0625,-0.79297 h 5.92969 l 0.004,-0.26758 c -0.2074,-0.201 -0.38726,-0.42891 -0.53711,-0.67578 l -0.50781,-0.10742 c -0.0901,-0.0189 -0.16422,-0.0809 -0.19922,-0.16602 -0.1643,-0.39935 -0.26191,-0.82286 -0.28711,-1.25391 -0.005,-0.0919 0.0346,-0.18014 0.10743,-0.23632 l 0.4121,-0.31641 c 0.0279,-0.2876 0.0917,-0.57073 0.19141,-0.8418 l -0.18555,-0.37109 h -6.14843 z m 1.19336,4.23633 h 1.08007 l -0.0645,0.79297 -0.92578,0.0723 c -0.0537,-0.28121 -0.0865,-0.56922 -0.0898,-0.86523 z m 2.23047,1.24414 -0.0703,0.94336 -0.94336,0.0703 0.94336,0.0723 0.0703,0.94336 0.0703,-0.94336 0.9414,-0.0723 -0.9414,-0.0703 z" /><path
id="path1-9-6"
style="fill:#ffffff;stroke-width:0.139005"
d="m 403.61335,519.57925 c -0.21517,0 -0.43035,0.0178 -0.6433,0.0535 -0.0908,0.0153 -0.16807,0.0744 -0.20657,0.15792 l -0.21698,0.4708 c -0.27413,0.091 -0.53546,0.21699 -0.77761,0.37448 1.5e-4,0 -0.50335,-0.124 -0.50335,-0.124 -0.0894,-0.022 -0.18373,0.002 -0.25227,0.0631 -0.32124,0.28844 -0.59244,0.62843 -0.8022,1.00596 -0.0446,0.0804 -0.0467,0.17764 -0.005,0.25994 l 0.23281,0.46316 c -0.0997,0.27107 -0.16413,0.55381 -0.19207,0.84141 l -0.41078,0.31625 c -0.0728,0.0562 -0.11329,0.1447 -0.10787,0.23659 0.0252,0.43105 0.12192,0.85499 0.28622,1.25434 0.035,0.0851 0.1098,0.14738 0.19988,0.16628 l 0.50737,0.10675 c 0.14985,0.24687 0.33071,0.47373 0.53811,0.67473 l -0.009,0.51833 c -0.001,0.092 0.0426,0.17877 0.1176,0.23187 0.3528,0.2491 0.74468,0.43775 1.15933,0.55826 0.0884,0.0257 0.18362,0.006 0.25465,-0.0525 l 0.39979,-0.3301 c 0.28634,0.0368 0.57643,0.0368 0.86292,0 l 0.39979,0.3301 c 0.071,0.0585 0.16624,0.0783 0.25465,0.0525 0.41465,-0.12051 0.8065,-0.30916 1.15929,-0.55826 0.0751,-0.0531 0.11916,-0.13985 0.11763,-0.23187 l -0.009,-0.51833 c 0.20739,-0.201 0.38825,-0.42772 0.5381,-0.67473 l 0.50737,-0.10675 c 0.0901,-0.0189 0.16485,-0.0812 0.19988,-0.16628 0.1643,-0.39935 0.26105,-0.82329 0.28621,-1.25434 0.006,-0.0919 -0.035,-0.18043 -0.10786,-0.23659 l -0.41078,-0.31625 c -0.0278,-0.28746 -0.0924,-0.57034 -0.19211,-0.84141 l 0.23285,-0.46316 c 0.0414,-0.0823 0.0394,-0.17959 -0.005,-0.25994 -0.20976,-0.37753 -0.48096,-0.71752 -0.8022,-1.00596 -0.0685,-0.0614 -0.16289,-0.0851 -0.25227,-0.0631 l -0.50349,0.124 c -0.242,-0.15749 -0.50334,-0.2833 -0.77745,-0.37448 l -0.217,-0.4708 c -0.0385,-0.0835 -0.11579,-0.14263 -0.20655,-0.15792 -0.21296,-0.0357 -0.42813,-0.0535 -0.64332,-0.0535 z m 0,2.25755 a 1.5628182,1.5628182 0 0 1 1.56283,1.56283 1.5628182,1.5628182 0 0 1 -1.56283,1.56282 1.5628182,1.5628182 0 0 1 -1.56282,-1.56282 1.5628182,1.5628182 0 0 1 1.56282,-1.56283 z" /></g></g></svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -1,484 +0,0 @@
#!/usr/bin/env python3
import os
import re
import shlex
import shutil
import logging
from configparser import RawConfigParser
from pathlib import Path
from subprocess import run
from types import SimpleNamespace
try:
from PyQt6.QtCore import * # type: ignore
from PyQt6.QtGui import * # type: ignore
from PyQt6.QtWidgets import * # type: ignore
except ModuleNotFoundError:
from PyQt5.QtCore import * # type: ignore
from PyQt5.QtGui import * # type: ignore
from PyQt5.QtWidgets import * # type: ignore
settings = QSettings('PPGL', 'PortProtonGamesLib')
g = SimpleNamespace(locale = '')
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(QSize(800, 600))
geometry = settings.value('geometry_main')
if geometry:
self.restoreGeometry(geometry)
shortcut = RawConfigParser()
shortcut.read(os.getenv('HOME') + '/.local/share/applications/PortProton.desktop')
scripts_dir = shortcut.get('Desktop Entry', 'Path', fallback=os.getenv('HOME') + '/.local/share/PortWINE/PortProton/data/scripts')
if not scripts_dir or not Path(scripts_dir).is_dir():
QMessageBox.critical(self, 'Error', 'Can not find installed PortProton')
exit(1)
g.scripts_dir = scripts_dir.rstrip('/')
g.pp_icon = shortcut.get('Desktop Entry', 'Icon', fallback='/usr/share/pixmaps/portproton.png')
pp_icon = QIcon(g.pp_icon)
self.setWindowIcon(pp_icon)
self.setWindowTitle('PortProton games library')
g.base_dir = str(Path(scripts_dir + '/../..').resolve())
g.install_pfx = g.base_dir + '/data/prefixes/INSTALL'
g.shortcuts_dir = g.base_dir + '/shortcuts'
g.games_dir = g.base_dir + '/games'
loc_path = Path(g.base_dir + '/data/tmp/PortProton_loc')
if loc_path.exists():
g.locale = loc_path.read_text().strip()
Path(g.shortcuts_dir).mkdir(parents=True, exist_ok=True)
Path(g.games_dir).mkdir(parents=True, exist_ok=True)
sep = QFrame(self)
sep.setFrameShape(QFrame.Shape.VLine)
sep.setFrameShadow(QFrame.Shadow.Sunken)
self._status_size = QLabel(self)
self._status_dir = QLabel(self)
self._status_wine = QLabel(self)
self.statusBar().setVisible(False)
self.statusBar().addWidget(self._status_dir, 1)
self.statusBar().addWidget(self._status_wine)
self.statusBar().addWidget(sep)
self.statusBar().addWidget(self._status_size)
self.game_list = GameList(self)
self.setCentralWidget(self.game_list)
self.toolbar = self.addToolBar('Main')
self.toolbar.setIconSize(QSize(32, 32))
self.toolbar.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
self.toolbar.setMovable(False)
action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogNewFolder), _tr('Install new game'), self)
action.triggered.connect(self.install_game)
self.toolbar.addAction(action)
action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_FileLinkIcon), _tr('Add game entry'), self)
action.triggered.connect(self.add_game)
self.toolbar.addAction(action)
action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_BrowserReload), _tr('Reload list'), self)
action.triggered.connect(self.reload_list)
self.toolbar.addAction(action)
action = QAction(self.style().standardIcon(QStyle.StandardPixmap.SP_TrashIcon), _tr('Drop install prefix'), self)
action.triggered.connect(self.drop_prefix)
self.toolbar.addAction(action)
spacer = QWidget(self)
spacer.setSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
self.toolbar.addWidget(spacer)
action = QAction(pp_icon, 'PortProton', self)
action.triggered.connect(self.run_pp)
self.toolbar.addAction(action)
def install_game(self):
InstallGame(self)
def add_game(self):
InstallGame(self, False)
def reload_list(self):
self.game_list.reload()
def drop_prefix(self):
res = QMessageBox.question(self, _tr('Are you sure ?'), _tr('Do you really want to remove<br/><b>{0}</b> ?', g.install_pfx))
if res == QMessageBox.StandardButton.Yes:
shutil.rmtree(g.install_pfx, True)
def run_pp(self):
self.setDisabled(True)
app.processEvents()
run([g.scripts_dir + '/start.sh'])
self.setDisabled(False)
def set_status(self, item):
self.statusBar().setVisible(bool(item))
if item:
self._status_size.setText('Size: ' + item.dir_size_human)
self._status_dir.setText(' ' + item.game_dir)
self._status_wine.setText(item.wine_use)
def closeEvent(self, event):
geometry = self.saveGeometry()
settings.setValue('geometry_main', geometry)
super().closeEvent(event)
class LoadListThread(QThread):
completed = pyqtSignal(list)
def __init__(self, parent, install_dir):
super().__init__(parent)
self.install_dir = install_dir
def run(self):
exe_list = list(Path(self.install_dir).glob('**/*.exe'))
self.completed.emit(exe_list)
class InstallGame(QDialog):
def __init__(self, parent, installing=True):
super().__init__(parent)
self._installing = installing
self.install_dir = g.install_pfx + '/drive_c/Games' if installing else g.games_dir
self._exe_list_widget = QListWidget(self)
self._exe_list_widget.setIconSize(QSize(16, 16))
self._exe_list_widget.itemDoubleClicked.connect(self._handleDoubleClick)
layout = QVBoxLayout()
layout.addWidget(self._exe_list_widget)
self._pbar = QProgressBar(self)
self._pbar.setMaximum(0)
layout.addWidget(self._pbar)
thread = LoadListThread(self, self.install_dir)
thread.completed.connect(self.load)
thread.start()
if self._installing:
setup_btn = QPushButton(self)
setup_btn.setIcon(self.style().standardIcon(QStyle.StandardPixmap.SP_FileDialogStart))
setup_btn.setText(_tr('Run another setup'))
setup_btn.clicked.connect(self._runSetup)
layout.addWidget(setup_btn)
self.setLayout(layout)
self.resize(400, 300)
self.setModal(True)
self.setWindowTitle(_tr('Select game exe file'))
geometry = settings.value('geometry_install')
if geometry:
self.restoreGeometry(geometry)
self.show()
def load(self, exe_list):
if self._installing and len(exe_list) == 0:
self._runSetup()
exe_list = list(Path(self.install_dir).glob('**/*.exe'))
if len(exe_list) == 0:
return self.close()
def render_list():
pixmap = QPixmap(16, 16)
pixmap.fill(Qt.GlobalColor.transparent)
empty_icon = QIcon(pixmap)
for exe in sorted(exe_list):
ico_file = str(exe) + '.ico'
item = QListWidgetItem(self._exe_list_widget)
item.setText(str(exe)[len(self.install_dir)+1:])
try:
if not Path(ico_file).exists():
run(['wrestool', '-x', '-t14', '-o', ico_file, exe], capture_output=True)
item.setIcon(QIcon(ico_file))
except Exception:
pass
if item.icon().pixmap(16, 16).isNull():
item.setIcon(empty_icon)
self._exe_list_widget.addItem(item)
self._pbar.setVisible(False)
thread = QThread(self)
thread.run = render_list
thread.start()
def _runSetup(self):
downloads_dir = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.DownloadLocation)
exe_file, _ = QFileDialog.getOpenFileName(self, caption=_tr('Choose setup file'), filter='Exe files (*.exe)', directory=downloads_dir)
if not exe_file:
return
ppdb = shlex.quote(exe_file + '.ppdb')
script = f"""
mkdir -p {shlex.quote(g.install_pfx + '/drive_c/Games')}
echo '
export PW_VULKAN_USE=1
export PW_GUI_DISABLED_CS=1
export PW_PREFIX_NAME=INSTALL
export PW_DLL_INSTALL=mfc42
' > {ppdb}
{shlex.quote(g.scripts_dir + '/start.sh')} {shlex.quote(exe_file)}
rm -f {ppdb}
"""
self.setDisabled(True)
app.processEvents()
run(['bash', '-c', script])
self.setDisabled(False)
def _handleDoubleClick(self, item):
game_dir = item.text().split('/')[0]
dlg = QInputDialog(self)
dlg.setWindowTitle(_tr('Please enter game entry name'))
dlg.setLabelText(_tr('New game entry'))
dlg.setTextValue(game_dir)
dlg.resize(300, 0)
ok = dlg.exec()
shortcut_name = dlg.textValue()
if not ok or not shortcut_name:
return
file_name = re.sub(r'[<>:/\\|?*]', '_', shortcut_name)
shortcut = f"{g.shortcuts_dir}/{file_name}.desktop"
if Path(shortcut).exists():
res = QMessageBox.question(self, _tr('Shortcut already exists'), _tr('Shortcut <b>{0}</b> already exists. Overwrite ?', file_name))
if res != QMessageBox.StandardButton.Yes:
return
src_dir = self.install_dir + '/' + game_dir
dst_dir = g.games_dir + '/' + game_dir
exe_file = shlex.quote(g.games_dir + '/' + item.text())
ppdb = shlex.quote(g.games_dir + '/' + item.text() + '.ppdb')
self.setDisabled(True)
if self._installing and Path(dst_dir).exists():
res = QMessageBox.question(self, _tr('Dir already exists'), _tr('Dir <b>{0}</b> already exists. Overwrite ?', game_dir))
if res != QMessageBox.StandardButton.Yes:
return
if self._installing:
os.rename(src_dir, dst_dir)
script = f"""
export INSTALLING_PORT=1
export portwine_exe={exe_file}
cd {shlex.quote(g.scripts_dir)}
. {shlex.quote(g.scripts_dir + '/runlib')}
pw_init_db
[ -f {ppdb} ] && . {ppdb}
echo -e "export PW_VULKAN_USE=${{PW_VULKAN_USE:-1}}\nexport PW_GUI_DISABLED_CS=1" >> {ppdb}
"""
run(['bash', '-c', script])
icon_path = g.games_dir + '/' + item.text() + '.ico'
if not Path(icon_path).exists():
icon_path = g.pp_icon
Path(shortcut).write_text(f"""[Desktop Entry]
Name={shortcut_name}
Exec=env {shlex.quote(g.scripts_dir + '/start.sh')} {exe_file}
Type=Application
Categories=Game
StartupNotify=true
Path={shlex.quote(g.scripts_dir)}
Icon={icon_path}
""", encoding='utf-8')
os.chmod(shortcut, 0o755)
win.reload_list()
self.close()
def closeEvent(self, event):
geometry = self.saveGeometry()
settings.setValue('geometry_install', geometry)
super().closeEvent(event)
class GameList(QListWidget):
def __init__(self, parent):
super().__init__(parent)
self.itemActivated.connect(self.runGame)
self.currentItemChanged.connect(self.selectItem)
self.setViewMode(QListWidget.ViewMode.IconMode)
self.setResizeMode(QListWidget.ResizeMode.Adjust)
self.setIconSize(QSize(64, 64))
self.setWordWrap(True)
self.setSpacing(3)
self.reload()
def reload(self):
self.clear()
shortcuts = list(Path(g.shortcuts_dir).glob('*.desktop'))
shortcuts += list(Path(g.base_dir).glob('*.desktop'))
for shortcut in shortcuts:
try:
item = GameItem(self, shortcut)
self.addItem(item)
except ValueError:
pass
except:
logging.exception('Error while parse "%s"', shortcut)
self.sortItems()
self.setCurrentIndex(QModelIndex())
def runGame(self, item):
win.setDisabled(True)
app.processEvents()
run(['bash', '-c', item.get('Exec')])
win.setDisabled(False)
def selectItem(self, item):
win.set_status(item)
def contextMenuEvent(self, event):
selected = self.selectedItems()
if len(selected) == 0:
return
selected = selected[0]
menu = QMenu(self)
desktop = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DesktopIcon), _tr('Add to desktop'))
restore_gui = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogResetButton), _tr('Restore PortProton GUI'))
default_wine = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogOkButton), _tr('Set default wine'))
remove = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_TrashIcon), _tr('Remove game entry'))
uninstall = menu.addAction(self.style().standardIcon(QStyle.StandardPixmap.SP_DialogCloseButton), _tr('Uninstall game'))
if not selected.pp_gui_disabled:
restore_gui.setVisible(False)
if not selected.wine_use:
default_wine.setVisible(False)
if not selected.game_dir.startswith(g.games_dir):
uninstall.setVisible(False)
action = menu.exec(self.mapToGlobal(event.pos()))
desktop_shortcut = QStandardPaths.writableLocation(QStandardPaths.StandardLocation.DesktopLocation) + '/' + Path(selected.desktop_file).name
if action == desktop:
if Path(desktop_shortcut).exists():
res = QMessageBox.question(self, _tr('Shortcut already exists'), _tr('Shortcut <b>{0}</b> already exists. Overwrite ?', desktop_shortcut))
if res != QMessageBox.StandardButton.Yes:
return
shutil.copy(selected.desktop_file, desktop_shortcut)
if action == restore_gui or action == default_wine:
ignore_line = 'PW_GUI_DISABLED_CS' if action == restore_gui else 'PW_WINE_USE'
ppdb = shlex.split(selected.get('Exec'))[-1] + '.ppdb'
if not Path(ppdb).exists():
return
with open(ppdb, 'r') as read:
with open(ppdb + '.new', 'w') as write:
while (line := read.readline()):
if ignore_line not in line:
write.write(line)
os.rename(ppdb + '.new', ppdb)
if action == restore_gui:
selected.pp_gui_disabled = False
if action == default_wine:
selected.wine_use = None
self.selectItem(selected)
def remove_shortcut():
Path(desktop_shortcut).unlink(True)
Path(selected.desktop_file).unlink(True)
def_icon_path = g.base_dir + '/data/img/' + Path(shlex.split(selected.get('Exec'))[-1]).stem + '.png'
Path(def_icon_path).unlink(True)
if action == remove:
remove_shortcut()
self.reload()
if action == uninstall:
res = QMessageBox.question(self,
_tr('Are you sure ?'),
_tr('Do you really want to uninstall <b>{0}</b><br/>located in "<b>{1}</b>" ?', selected.get('Name'), selected.game_dir)
)
if res != QMessageBox.StandardButton.Yes:
return
remove_shortcut()
if selected.game_dir.startswith(g.games_dir):
shutil.rmtree(selected.game_dir, True)
self.reload()
def human_size(num):
if not num:
return "-"
for unit in ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi"]:
if abs(num) < 1024.0:
return f"{num:.2f} {unit}B"
num /= 1024.0
return f"{num:.2f} YiB"
class GameItem(QListWidgetItem):
def __init__(self, parent, desktop_file):
self.desktop_file = desktop_file
self.config = RawConfigParser()
self.config.read(desktop_file)
text = self.get('Name', Path(desktop_file).stem)
if not self.get('Exec') or text == 'PortProton':
raise ValueError('Validation fail')
exe_file = shlex.split(self.get('Exec'))[-1]
if exe_file.startswith(g.games_dir):
self.game_dir = g.games_dir + '/' + exe_file[len(g.games_dir)+1:].split('/')[0]
else:
self.game_dir = str(Path(exe_file).parent)
if self.game_dir == '.':
raise ValueError('Can not determine game dir')
self.pp_gui_disabled = False
self.wine_use = None
ppdb = exe_file + '.ppdb'
if Path(ppdb).exists():
ppdb_conf = RawConfigParser(strict=False)
with open(ppdb) as f:
ppdb_conf.read_string('[dummy]\n' + f.read())
pp_gui_disabled = ppdb_conf.get('dummy', 'export PW_GUI_DISABLED_CS', fallback='').strip('"')
try: self.pp_gui_disabled = bool(int(pp_gui_disabled))
except: self.pp_gui_disabled = bool(pp_gui_disabled)
self.wine_use = ppdb_conf.get('dummy', 'export PW_WINE_USE', fallback='').strip('"')
super().__init__(parent)
self.setToolTip(text)
self.setText(text)
icon_path = self.get('Icon') if Path(self.get('Icon')).exists() else g.pp_icon
qicon = QIcon(icon_path)
self.setIcon(qicon)
self.setTextAlignment(Qt.AlignmentFlag.AlignHCenter | Qt.AlignmentFlag.AlignTop)
self.setSizeHint(QSize(100, 105))
self._set_dir_size(None)
dir_size_cache = self.game_dir + '/.size'
if Path(dir_size_cache).exists():
self._set_dir_size(int(Path(dir_size_cache).read_text()))
else:
def calc_dir_size():
if not Path(self.game_dir).exists():
return
dir_size = sum(p.stat(follow_symlinks=False).st_size for p in Path(self.game_dir).rglob('*'))
self._set_dir_size(dir_size)
Path(dir_size_cache).write_text(str(dir_size))
thread = QThread(parent)
thread.run = calc_dir_size
thread.start()
def get(self, name, fallback=None):
return self.config.get('Desktop Entry', name, fallback=fallback)
def _set_dir_size(self, size):
self.dir_size = size
self.dir_size_human = human_size(size)
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
lang = {
'RUS': {
'Install new game': 'Установить игру',
'Add game entry': 'Добавить в список',
'Reload list': 'Обновить список',
'Drop install prefix': 'Удалить установочный префикс',
'Are you sure ?': 'Вы уверены ?',
'Do you really want to remove<br/><b>{0}</b> ?': 'Вы действительно хотите удалить<br/><b>{0}</b> ?',
'Run another setup': 'Запустить установку',
'Select game exe file': 'Выберите exe файл игры',
'Choose setup file': 'Выберите установочный файл',
'Please enter game entry name': 'Введите название игры',
'New game entry': 'Название игры',
'Shortcut already exists': 'Ярлык уже существует',
'Shortcut <b>{0}</b> already exists. Overwrite ?': 'Ярлык <b>{0}</b> уже существует. Перезаписать ?',
'Dir already exists': 'Директория уже существует',
'Dir <b>{0}</b> already exists. Overwrite ?': 'Директория <b>{0}</b> уже существует. Перезаписать ?',
'Add to desktop': 'Добавить на рабочий стол',
'Restore PortProton GUI': 'Восстановить PortProton GUI',
'Set default wine': 'Выбрать дефолтный wine',
'Remove game entry': 'Убрать из списка',
'Uninstall game': 'Удалить игру',
'Do you really want to uninstall <b>{0}</b><br/>located in "<b>{1}</b>" ?': 'Вы действительно хотите удалить <b>{0}</b><br/>расположеную в "<b>{1}</b>" ?'
}
}
def _tr(text, *fmt):
res = lang.get(g.locale, {}).get(text, text)
if fmt:
res = res.format(*fmt)
return res
app = QApplication([])
app.setDesktopFileName('PortProton')
win = MainWindow()
win.show()
app.exec()

View File

@ -5,7 +5,7 @@ if [ "${update_loc}" = "RUS" ]
then
KEY_CREDITS=$RANDOM
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
--image-path="$PW_GUI_ICON_PATH" --image="port_proton" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--text-align=center --scroll --text="PortProton v. ${install_ver}
scripts v. ${scripts_install_ver}
@ -18,7 +18,7 @@ https://linux-gaming.ru
Подробнее см. в Лицензия." 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=2 \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=2 \
--text-align=center --scroll --text="Автор: Casro-Fidel (Михаил Тергоев)
Помощники разработчика и тестировщики:
@ -44,7 +44,7 @@ Boria138
Akai
" 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< " Лицензия Массачусетского технологического института (MIT License)
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< " Лицензия Массачусетского технологического института (MIT License)
Авторские права © $(date +'%Y') Castro-Fidel (linux-gaming.ru)
@ -67,7 +67,7 @@ Akai
ВНЕ ИЛИ В СВЯЗИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ИЛИ ДРУГИМИ СДЕЛКАМИ В
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ." 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=4 \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=4 \
--text-info --fontname="Serif bold italic 12" --show-uri --scroll \
<<< ' Проект поддержали:
https://boosty.to/portwine-linux.ru
@ -139,7 +139,7 @@ Akai
Haschwalth
haunteduser
Homyakin
horuno2020
horuno2020
Igor14936
Ivan Vlasov
ivboss
@ -315,7 +315,7 @@ Akai
Роман Игнатьев
Роман Паженский
Ростислав Кузнецов
Саша
Саша
Семён
Семён Клишин
Семён Сорокин
@ -337,7 +337,7 @@ Akai
Список будет дополняться...' 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Хотите присоединится и помочь в развитии проекта:" \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Хотите присоединится и помочь в развитии проекта:" \
--title=JOIN --window-icon=group --image=system-config-users --uri-color=red --show-uri \
--text-info --scroll <<< \
"Website: https://linux-gaming.ru/
@ -349,7 +349,7 @@ boosty: https://boosty.to/portwine-linux.ru
Yandex кошелек: 410012267513818
-------------------------------------------" 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \
--fontname="Serif bold italic 10" --text-info <<< " Сторонние библиотеки, которые используются в PortProton
PortProton собран на основе бесплатных библиотек программного обеспечения:
@ -358,20 +358,21 @@ WINE-PROTON: https://github.com/ValveSoftware/Proton
WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/
Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad" 2>/dev/null &
"${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \
"${pw_yad_v13_0}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom --expand \
--tab="О PORTPROTON" --tab="АВТОРЫ" --tab="ЛИЦЕНЗИЯ" --tab="СПОНСОРЫ" --tab="ПРИСОЕДИНИТЬСЯ" \
--tab="БИБЛИОТЕКИ"
echo "Exit from credits"
/usr/bin/env bash -c ${pw_full_command_line[*]}
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
else
KEY_CREDITS=$RANDOM
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
--image-path="$PW_GUI_ICON_PATH" --image="port_proton" \
--text-align=center --scroll --text="PortProton v. ${install_ver}
scripts v. ${scripts_install_ver}
@ -385,7 +386,7 @@ This program comes with absolutely no warranty.
See the License for details." 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=2 \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=2 \
--text-align=center --scroll --text="Author: Casro-Fidel (Mikhail Tergoev)
Developer assistants and testers:
@ -411,7 +412,7 @@ Boria138
Akai
" 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "MIT License
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=3 --text-info --scroll <<< "MIT License
Copyright (©) 2022 Castro-Fidel (linux-gaming.ru)
@ -433,7 +434,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE." 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=4 \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=4 \
--text-info --fontname="Serif bold italic 12" --show-uri --scroll \
<<< ' The project was supported:
https://boosty.to/portwine-linux.ru:
@ -505,7 +506,7 @@ SOFTWARE." 2>/dev/null &
Haschwalth
haunteduser
Homyakin
horuno2020
horuno2020
Igor14936
Ivan Vlasov
ivboss
@ -681,7 +682,7 @@ SOFTWARE." 2>/dev/null &
Роман Игнатьев
Роман Паженский
Ростислав Кузнецов
Саша
Саша
Семён
Семён Клишин
Семён Сорокин
@ -704,7 +705,7 @@ SOFTWARE." 2>/dev/null &
The list will be updated...' 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Do you want to join and help in the development of the project:" \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=5 --text="Do you want to join and help in the development of the project:" \
--title=JOIN --window-icon=group --image=system-config-users --uri-color=red --show-uri \
--text-info --scroll <<< \
"Website: http://linux-gaming.ru
@ -716,7 +717,7 @@ boosty: https://boosty.to/portwine-linux.ru
Yandex wallet: 410012267513818
-------------------------------------------" 2>/dev/null &
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \
"${pw_yad_v13_0}" --plug="${KEY_CREDITS}" --tabnum=6 --show-uri --title="THIRD PARTY LIBRARIES" \
--fontname="Serif bold italic 10" --text-info <<< " Third-party libraries that are used in PortProton
PortProton is built on the basis of the following free software libraries:
@ -727,11 +728,12 @@ Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad" 2>/dev/null &
"${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \
"${pw_yad_v13_0}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom --expand \
--tab="ABOUT PORTPROTON" --tab="AUTORS" --tab="LICENSE" --tab="SPONSORS" --tab="JOIN" \
--tab="THIRD PARTY LIBRARIES"
echo "Exit from credits"
/usr/bin/env bash -c ${pw_full_command_line[*]}
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ else
if [[ "${update_loc}" == "RUS" || "${update_loc}" == "ENG" ]] && [[ -f "${PORT_WINE_TMP_PATH}/${portname}_loc" ]] ; then
echo ""
else
[[ ! -f "${pw_yad_v12_3}" ]] && pw_yad_v12_3="yad"
SET_LANG=$("$pw_yad_v12_3" --title "LAUNGUAGE" --text "Select the language:" --list --radiolist \
[[ ! -f "${pw_yad_v13_0}" ]] && pw_yad_v13_0="yad"
SET_LANG=$("${pw_yad_v13_0}" --title "LAUNGUAGE" --text "Select the language:" --list --radiolist \
--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" --width=300 --height=150)
SET_LANG="$(echo $SET_LANG | awk -F'|' '{print $2}')"
@ -122,9 +122,14 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export loc_winetricks="Запустить префикс менеджер для установки доп. библиотек в выбранный префикс"
export loc_edit_db="Изменить файл настроек для"
export loc_download_other_wine="Открыть меню для скачивания других версий WINE-PROTON"
export loc_downloading="Скачивание"
export loc_clear_pfx="Очистить префикс для исправления проблем"
export loc_gui_dll_new_pfx="Установить рекомендованные библиотеки в новый префикс: "
export loc_gui_portproton_lock='Обнаружена запущенная сессия PortProton.\nХотите завершить предыдущую сессию?'
export ENABLE_VKBASALT_INFO='Включить vkBasalt по умолчанию для улучшение графики в играх работающих под Vulkan. (Горячая клавиша HOME отключает vkbasalt)'
export PW_NO_ESYNC_INFO='Не использовать примитивы внутрипроцессной синхронизации на основе eventfd. (Рекомендуется не изменять значение)'
export PW_NO_FSYNC_INFO='Не использовать примитивы внутрипроцессной синхронизации на основе фьютексов. (Автоматически отключается в системах без FUTEX_WAIT_MULTIPLE поддержки) (Рекомендуется не изменять значение)'
@ -153,6 +158,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export PW_USE_SHADER_CACHE_INFO='Использовать кеширование шейдеров средствами WINE (отключать только при наличии микрофризов в игре)'
export PW_WINE_FULLSCREEN_FSR_INFO='Работает во время использования любой версии ProtonGE в полноэкранном режиме при разрешении ниже стандартного для экрана'
export PW_USE_FAKE_DLSS_INFO='Включить транслятор DLSS в FSR 2 в играх DirectX 12 (проект CyberFSR2)'
export PW_USE_FAKE_DLSS_3_INFO='Включить транслятор DLSS в FSR 3 в играх DirectX 12 (Эксперементальный проект dlssg-to-fsr3)'
export PW_USE_EAC_AND_BE_INFO='Включить Easy Anti-Cheat and BattlEye Anti-Cheat (требуется если игра использует какой-то из этих античитов)'
export PW_REDUCE_PULSE_LATENCY_INFO='Уменьшить задержку pulseaudio для исправления прерывистого звука'
export PW_USE_US_LAYOUT_INFO='Принудительное использование английской раскладки (полезно для игр в которых управление верно работает исключительно на английской раскладке)'
@ -160,6 +166,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export PW_USE_SYSTEM_VK_LAYERS_INFO='Использовать системные mangohud, vkBasalt, obs-vkcapture и прочие приложения использующие vulkan layers'
export PW_USE_OBS_VKCAPTURE_INFO='Включить возможность записи в OBS Studio с помощью obs-vkcapture (ВНИМАНИЕ: будет включено принудительное использование системных mangohud, vkBasalt, obs-vkcapture и прочих приложений использующих vulkan layers)'
export PW_USE_GALLIUM_ZINK_INFO='Использовать драйвер zink (OpenGL поверх Vulkan), позволяет использовать vkBasalt в играх на OpenGL (ВНИМАНИЕ: необходима поддержка vulkan, используется wined3d (opengl) вместо dxvk, подходит для игр на OpenGL и старых версий DirectX, на более новых версиях DirectX возможны артефакты)'
export PW_DISABLE_COMPOSITING_INFO='Отключить композитинг (эффекты) рабочего стола. Зачастую улучшает производительность.'
export PW_3DFX_INFO='Имитация старого графического ускорителя 3dfx (добавляет горизонтальные полосы)'
export PW_AdaptiveSharpen_INFO='Увеличение резкости, можно использовать совместно с CAS'
@ -275,8 +282,8 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export PW_MH_wine_INFO='Показать используемую версию Wine или Proton'
export PW_PFX_BACKUP_INFO="Внимание! Не передавайте резевную копию третьим лицам, есть риск потери аккаунтов"
export PW_PFX_BACKUP_SUCCESS="Резервная копия префикса: \"${PW_PREFIX_NAME}\" успешно создана"
export PW_PFX_BACKUP_ERROR="Во время создания резервной копии префикса: \"${PW_PREFIX_NAME}\" произошла ошибка"
export PW_PFX_BACKUP_SUCCESS="Успешно создана резервная копия префикса:"
export PW_PFX_BACKUP_ERROR="Произошла ошибка во время создания резервной копии префикса:"
export loc_find_d3dadapter9_error="не найден в системе.\nУстановите недостающий пакет: </Sb>d3dadapter9</b>"
@ -376,7 +383,7 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export loc_gui_disabled_mh="ВЫКЛЮЧИТЬ MANGOHUD"
export loc_gui_disabled_mh_help="Выключить MangoHud и перейти в предыдущее меню."
export loc_gui_mh_top="Настройки MangoHud (Клавишы <b>R_SHIFT + F12</b> отключают MangoHud)\n<b>ПРИМЕЧАНИЕ:</b> Для вывода справки по каждому пункту, просто наведите курсор мыши на текст.\n"
export loc_gui_mh_top="Настройки MangoHud (Клавиши <b>R_SHIFT + F12</b> отключают MangoHud)\n<b>ПРИМЕЧАНИЕ:</b> Для вывода справки по каждому пункту, просто наведите курсор мыши на текст.\n"
export loc_gui_no="НЕТ"
export loc_gui_yes="ДА"
@ -422,14 +429,18 @@ if [[ "${update_loc}" == "RUS" ]] ; then
export loc_prefix_manager_font='Выберите шрифт для установки в префикс:'
export loc_prefix_manager_conf='Изменить дополнительные настройки префикса:'
export loc_prefix_manager_wine='используя wine:'
export loc_pm='МЕНЕДЖЕР ПРЕФИКСА'
export loc_pm_dlls='БИБЛИОТЕКИ'
export loc_pm_fonts='ШРИФТЫ'
export loc_pm_settings='НАСТРОЙКИ'
export loc_start_pfx_manager="Запускается менеджер префикса:"
export loc_warn_cyrillic_in_path="Путь до исполняемого файла содержит кириллические символы.\nИногда это может привести к неработоспособности приложения."
export loc_gui_terminal="ТЕРМИНАЛ"
export loc_gui_logo="ЛОГО"
elif [[ "${update_loc}" == "ENG" ]] ; then
export loc_gui_pw_reinstall_pp="REINSTALL ${portname}"
@ -526,9 +537,14 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
export loc_winetricks="Run winetricks to install additional libraries to the selected prefix"
export loc_edit_db="Edit database file for"
export loc_download_other_wine="Open the menu to download other versions of WINE-PROTON "
export loc_downloading="Downloading"
export loc_clear_pfx="Clear the prefix to fix problems"
export loc_gui_dll_new_pfx="Do you want to installing recommended libraries in the new prefix: "
export loc_gui_portproton_lock='A running PortProton session was detected.\nDo you want to end the previous session?'
export ENABLE_VKBASALT_INFO='Enable vkBasalt by default to improve graphics in games running on Vulkan. (The HOME hotkey disables vkbasalt)'
export PW_NO_ESYNC_INFO='Do not use in-process synchronization primitives based on eventfd. (It is recommended not to change the value.)'
export PW_NO_FSYNC_INFO='Do not use futex-based in-process synchronization primitives. (Automatically disabled on systems without FUTEX_WAIT_MULTIPLE support) (It is recommended not to change the value)'
@ -557,6 +573,7 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
export PW_USE_SHADER_CACHE_INFO='Use WINE shader caching (disable only if there are microfreezes in the game)'
export PW_WINE_FULLSCREEN_FSR_INFO='Works while using any version of ProtonGE in full screen mode at a resolution below the standard screen'
export PW_USE_FAKE_DLSS_INFO='Enable DLSS translator in FSR 2 in DirectX 12 games (CyberFSR2)'
export PW_USE_FAKE_DLSS_3_INFO='Enable DLSS translator in FSR 3 in DirectX 12 games (Experimental project dlssg-to-fsr3)'
export PW_USE_EAC_AND_BE_INFO='Enable Easy Anti-Cheat and BattlEye Anti-Cheat runtimes (required if game used this anti-cheats)'
export PW_REDUCE_PULSE_LATENCY_INFO='Reduce pulseaudio latency to fix intermittent sound'
export PW_USE_US_LAYOUT_INFO='Forced use of the us layout (useful for games in which the control works correctly only on the us layout)'
@ -564,6 +581,8 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
export PW_USE_SYSTEM_VK_LAYERS_INFO='Use system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers'
export PW_USE_OBS_VKCAPTURE_INFO='Enable the ability to write to OBS Studio using obs-vkcapture (ATTENTION: the forced use of system mangohud, vkBasalt, obs-vkcapture and other applications using vulkan layers will be enabled)'
export PW_USE_GALLIUM_ZINK_INFO='Use the zink driver (OpenGL on top of Vulkan), allows you to use vkBasalt in OpenGL games (ATTENTION: vulkan support is required, wined3d (opengl) is used instead of dxvk, suitable for games on OpenGL and older versions of DirectX, artifacts are possible on newer versions of DirectX)'
export PW_DISABLE_COMPOSITING_INFO='Disable desktop compositing (effects). It often improves performance.'
export PW_3DFX_INFO='Simulation of an old 3dfx graphics accelerator (adds horizontal stripes)'
export PW_AdaptiveSharpen_INFO='Sharpness increase, can be used with CAS'
export PW_Bloom_INFO='Adds glow from bright light sources in the game'
@ -678,8 +697,8 @@ elif [[ "${update_loc}" == "ENG" ]] ; then
export PW_MH_wine_INFO='Show current Wine or Proton version in use'
export PW_PFX_BACKUP_INFO="Attention! Do not pass the resev copy to third parties, there is a risk of losing accounts"
export PW_PFX_BACKUP_SUCCESS="Prefix backup: \"${PW_PREFIX_NAME}\" has been successfully created"
export PW_PFX_BACKUP_ERROR="An error occurred while backing up the prefix: \"${PW_PREFIX_NAME}\" error occurred"
export PW_PFX_BACKUP_SUCCESS="Backup has been successfully created for prefix:"
export PW_PFX_BACKUP_ERROR="An error occurred while backing up the prefix:"
export loc_find_d3dadapter9_error="Not found in the system.\nInstall the missing package: </Sb>d3dadapter9</b>"
@ -830,7 +849,12 @@ A brief instruction:
export loc_pm_dlls='DLLS'
export loc_pm_fonts='FONTS'
export loc_pm_settings='SETTINGS'
export loc_start_pfx_manager="Starting prefix manager:"
export loc_warn_cyrillic_in_path="The path to the executable file contains Cyrillic characters.\nSometimes this can cause the application to malfunction."
export loc_gui_terminal="TERMINAL"
export loc_gui_logo="LOGO"
fi

View File

@ -12,6 +12,7 @@ export PW_DLL_INSTALL="vcrun2019 d3dx11_42 d3dx11_43"
export PW_WINDOWS_VER=10
export PW_WINE_FULLSCREEN_FSR="0"
export PW_USE_EAC_AND_BE="0"
export PW_WINE_USE="PROTON_LG"
add_in_start_portwine () {
rm -fr "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c/ProgramData/Agent/data"

View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
#Author: fidel
#BlackDesertLauncher.exe
#Rating=1-5
#####################examples###########################
export PW_WINDOWS_VER="10"
export PW_VULKAN_USE="2"
export PW_WINE_USE=PROTON_LG
export PW_PREFIX_NAME="BLACK_DESERT_ONLINE"
# export DISABLE_CP_DEFPFX=1
export PW_USE_EAC_AND_BE="1"

View File

@ -4,6 +4,6 @@
#Rating=1-5
#####################examples###########################
export PW_VULKAN_USE="2"
export PW_WINE_USE="WINE_LG_9-0"
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="CALIBER"
export DISABLE_CP_DEFPFX=1

View File

@ -0,0 +1,10 @@
#!/usr/bin/env bash
#Author: fidel
#CatsLauncher.exe
#Rating=5
#####################examples###########################
export PW_WINDOWS_VER="10"
export PW_VULKAN_USE="2"
export PW_WINE_USE="WINE_LG"
export PW_PREFIX_NAME="DOTNET"
# export WINEDLLOVERRIDES="libglesv2="

View File

@ -41,4 +41,4 @@ export PW_DLL_INSTALL=""
export WINEDLLOVERRIDES=""
export PW_WINE_CPU_TOPOLOGY="disabled"
export GAMESCOPE_ARGS="-F fsr"
add_in_start_portwine () { export LANG=C ;}
add_in_start_portwine () { export LC_CTYPE=C ;}

View File

@ -17,8 +17,3 @@ Grub Customizer utility"
fi
export PW_VULKAN_USE="2"
add_in_start_portwine () {
if [ "${update_loc}" = "RUS" ] ; then
sed -i "s/Language=english/Language=russian/g" "${PATH_TO_GAME}/Engine/Binaries/ThirdParty/Steamworks/Steamv154/Win64/steam_api64.ini"
fi
}

View File

@ -0,0 +1,18 @@
#!/usr/bin/env bash
#Author: fidel
#HorizonForbiddenWest.exe
#Rating=5
#####################examples###########################
export PW_WINE_USE="WINE-9.5-AMD64"
export PW_WINDOWS_VER="10"
export PW_DLL_INSTALL=""
export WINEDLLOVERRIDES=""
export PW_VULKAN_USE="2"
export PW_USE_GSTREAMER="1"
export PW_USE_D3D_EXTRAS="1"
export PW_FIX_VIDEO_IN_GAME="1"
export PW_USE_SHADER_CACHE="0"
export PW_USE_EAC_AND_BE="0"
export LAUNCH_PARAMETERS="-EpicPortal"
gui_proton_downloader silent "$PW_WINE_USE"

View File

@ -3,4 +3,4 @@
#LOTF2.exe
#Rating=5
#####################examples###########################
export PW_WINE_USE="WINE_LG_8-18-1"
export PW_WINE_USE="WINE_LG"

View File

@ -9,7 +9,7 @@
#Rating=1-5
#####################examples###########################
export TEXT_OPSSL=""
[[ -z `which openssl` ]] && export TEXT_OPSSL="Install openssl in your system!!!\n"
[[ -z `which openssl` ]] && export TEXT_OPSSL="Install openssl in your system!\n"
export PW_COMMENT_DB="${TEXT_OPSSL}Dwnload and start League of Legends can take a long time"
# export WINEDLLOVERRIDES="mscoree,mshtml="
export LAUNCH_PARAMETERS="--launch-product=league_of_legends --launch-patchline=live"

View File

@ -0,0 +1,8 @@
#!/usr/bin/env bash
#Author: fidel
#PulseOnlineLauncher.exe
#Rating=5
#####################examples###########################
export PW_VULKAN_USE="2"
export PW_WINE_USE="PROTON_LG"
export PW_PREFIX_NAME="DOTNET"

View File

@ -15,7 +15,8 @@ export PW_NO_ESYNC=1 # Do not use eventfd-based in-process synchronizatio
export PW_USE_GAMEMODE=0 # Force disabele gamemod
export PW_FORCE_LARGE_ADDRESS_AWARE=1 # Force Wine to enable the LARGE_ADDRESS_AWARE flag for all executables. Enabled by default.
export PW_DLL_INSTALL=""
export WINEDLLOVERRIDES="mscoree,mshtml="
# export WINEDLLOVERRIDES="mscoree,mshtml="
export PW_WINE_USE=WINE_LG
add_in_stop_portwine () {
pw_find_exe news

View File

@ -3,14 +3,15 @@
########################################################################
[ "${update_loc}" = "RUS" ] && export BN_LOC=ruRU || export BN_LOC=enUS
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Battle.net-Setup-${BN_LOC}.exe"
export PW_WINE_USE="WINE_LG"
start_portwine
if try_download_no_mirror "https://battle.net/download/getInstallerForGame?os=win&version=LIVE&gameProgram=BATTLENET_APP" "${PW_AUTOINSTALL_EXE}"
then
# PW_START_PROGRESS_BAR "${loc_gui_installing_the} Battle Net. ${loc_gui_please_wait} "
try_remove_dir "$WINEPREFIX/drive_c/ProgramData/Battle.net"
pw_kill_autostart Battle.net.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
pw_start_progress_bar_block "${loc_gui_installing_the} Battle Net. ${loc_gui_please_wait} "
portwine_exe=`find "$WINEPREFIX/drive_c/" -type f -name "Battle.net.exe" | grep "Battle.net/Battle.net.exe"`
pw_stop_progress_bar
portwine_create_shortcut

View File

@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
########################################################################
export PW_PREFIX_NAME="BLACK_DESERT_ONLINE"
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/BlackDesert_Installer_RU.exe"
export LAUNCH_PARAMETERS="/silent"
export PW_MUST_HAVE_DLL=""
export PW_VULKAN_USE=1
export PW_USE_D3D_EXTRAS=1
export PW_WINE_USE=PROTON_LG
# export DISABLE_CP_DEFPFX=1
pw_clear_pfx
start_portwine
wait_wineserver
if try_download_no_mirror "https://nez-o-dn.playblackdesert.com/UploadData/installer/BlackDesert_Installer_RU.exe" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "${loc_gui_installing_the} Black Desert Online. ${loc_gui_please_wait} "
pw_run "${PW_AUTOINSTALL_EXE}"
portwine_exe="$WINEPREFIX/drive_c/Pearlabyss/BlackDesert/BlackDesertLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${portwine_exe}.ppdb"
kill_portwine
pw_stop_progress_bar
export PORTWINE_CREATE_SHORTCUT_NAME="Black Desert Online"
portwine_create_shortcut
fi
stop_portwine

View File

@ -4,7 +4,7 @@
export PW_PREFIX_NAME="CALIBER"
export LAUNCH_PARAMETERS=("/VERYSILENT")
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CaliberSetup.exe"
export PW_WINE_USE=WINE_LG_9-0
export PW_WINE_USE=WINE_LG
export DISABLE_CP_DEFPFX=1
export PORTWINE_CREATE_SHORTCUT_NAME="CALIBER"

View File

@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
########################################################################
export LAUNCH_PARAMETERS=("/q" )
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/CatsLauncher.msi"
export PW_PREFIX_NAME=DOTNET
export PW_USE_D3D_EXTRAS=1
export PORTWINE_CREATE_SHORTCUT_NAME="CatsLauncher"
start_portwine
if try_download_no_mirror "https://catswhoplay.com/downloads/CatsLauncher_0.1.10.msi" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "${loc_gui_installing_the} CatsLauncher. ${loc_gui_please_wait} "
pw_run msiexec /i "${PW_AUTOINSTALL_EXE}"
portwine_exe="${WINEPREFIX}/drive_c/Program Files/CatsWhoPlay/Cats Launcher/CatsLauncher.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${portwine_exe}.ppdb"
kill_portwine
pw_stop_progress_bar
portwine_create_shortcut
fi
stop_portwine

View File

@ -1,18 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
########################################################################
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/duckstation-windows-x64-release.zip"
start_portwine
if try_download_no_mirror "https://github.com/stenzek/duckstation/releases/download/preview/duckstation-windows-x64-release.zip" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "${loc_gui_installing_the} VBA-M. ${loc_gui_please_wait} "
"$pw_7z" x -y "${PW_AUTOINSTALL_EXE}" -o"$WINEPREFIX/drive_c/Program Files (x86)/Duckstation"
portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/Duckstation/duckstation-qt-x64-ReleaseLTCG.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${portwine_exe}.ppdb"
kill_portwine
pw_stop_progress_bar
export PORTWINE_CREATE_SHORTCUT_NAME="DuckStation"
portwine_create_shortcut
fi
stop_portwine

View File

@ -11,7 +11,7 @@ try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
start_portwine
if try_download_no_mirror "https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/installer/download/EpicGamesLauncherInstaller.msi" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "Installing Epic Games Launcher. ${loc_gui_please_wait} "
pw_start_progress_bar_block "${loc_gui_installing_the} Epic Games Launcher. ${loc_gui_please_wait} "
# try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Epic Online Services/"
# try_remove_dir "${WINEPREFIX}/drive_c/Program Files (x86)/Epic Games/Launcher/"
# try_remove_dir "${WINEPREFIX}/drive_c/ProgramData/Epic"

View File

@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Author: cefeiko
########################################################################
export PW_PREFIX_NAME=DOTNET
export PORTWINE_CREATE_SHORTCUT_NAME="Pulse Online"
start_portwine
mkdir -p "${WINEPREFIX}/drive_c/games/PulseOnline/"
export PW_AUTOINSTALL_EXE="${WINEPREFIX}/drive_c/games/PulseOnline/PulseOnlineLauncher.exe"
if try_download_no_mirror "https://pulseonline.ru/game_download/PulseOnlineLauncher.exe" "${PW_AUTOINSTALL_EXE}"
then
export portwine_exe="$PW_AUTOINSTALL_EXE"
try_remove_file "${portwine_exe}.ppdb"
pw_stop_progress_bar
portwine_create_shortcut
kill_portwine
fi
stop_portwine

View File

@ -1,18 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
########################################################################
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/rpcs3-v0.0.29-15676-9fce7080_win64.7z"
start_portwine
if try_download_no_mirror "https://github.com/RPCS3/rpcs3-binaries-win/releases/download/build-9fce70809ee06a7e61a3dbe5bb9b0179fc541d9f/rpcs3-v0.0.29-15676-9fce7080_win64.7z" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "${loc_gui_installing_the} RPCS3. ${loc_gui_please_wait} "
"$pw_7z" x -y "${PW_AUTOINSTALL_EXE}" -o"$WINEPREFIX/drive_c/Program Files (x86)/RPCS3"
portwine_exe="$WINEPREFIX/drive_c/Program Files (x86)/RPCS3/rpcs3.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${portwine_exe}.ppdb"
kill_portwine
pw_stop_progress_bar
export PORTWINE_CREATE_SHORTCUT_NAME="RPCS3"
portwine_create_shortcut
fi
stop_portwine

View File

@ -1,20 +0,0 @@
#!/usr/bin/env bash
# Author: chal55rus (Sergey P.)
##########################################################################
export LAUNCH_PARAMETERS=("/VERYSILENT")
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/scummvm-2.7.1-win32.exe"
start_portwine
if try_download_no_mirror "https://downloads.scummvm.org/frs/scummvm/2.7.1/scummvm-2.7.1-win32.exe" "${PW_AUTOINSTALL_EXE}"
then
pw_start_progress_bar_block "${loc_gui_installing_the} ScummVM. ${loc_gui_please_wait} "
#pw_kill_autostart launcher101xp.exe &
pw_run "${PW_AUTOINSTALL_EXE}"
portwine_exe="$WINEPREFIX/drive_c/Program Files/ScummVM/scummvm.exe"
try_remove_file "${PW_AUTOINSTALL_EXE}"
try_remove_file "${portwine_exe}.ppdb"
kill_portwine
pw_stop_progress_bar
export PORTWINE_CREATE_SHORTCUT_NAME="ScummVM"
portwine_create_shortcut
fi
stop_portwine

View File

@ -1,906 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
# Development assistants: Cefeiko; Dezert1r; Taz_mania; Anton_Famillianov; gavr; RidBowt; chal55rus; UserDiscord; Boria138; Vano; Akai
########################################################################
echo '
█░░ █ █▄░█ █░█ ▀▄▀ ▄▄ █▀▀ ▄▀█ █▀▄▀█ █ █▄░█ █▀▀ ░ █▀█ █░█
█▄▄ █ █░▀█ █▄█ █░█ ░░ █▄█ █▀█ █░▀░█ █ █░▀█ █▄█ ▄ █▀▄ █▄█
██████╗░░█████╗░██████╗░████████╗██████╗░██████╗░░█████╗░████████╗░█████╗░███╗░░██╗
██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗██╔══██╗██╔══██╗╚══██╔══╝██╔══██╗████╗░██║
██████╔╝██║░░██║██████╔╝░░░██║░░░██████╔╝██████╔╝██║░░██║░░░██║░░░██║░░██║██╔██╗██║
██╔═══╝░██║░░██║██╔══██╗░░░██║░░░██╔═══╝░██╔══██╗██║░░██║░░░██║░░░██║░░██║██║╚████║
██║░░░░░╚█████╔╝██║░░██║░░░██║░░░██║░░░░░██║░░██║╚█████╔╝░░░██║░░░╚█████╔╝██║░╚███║
╚═╝░░░░░░╚════╝░╚═╝░░╚═╝░░░╚═╝░░░╚═╝░░░░░╚═╝░░╚═╝░╚════╝░░░░╚═╝░░░░╚════╝░╚═╝░░╚══╝
'
if [[ $(id -u) = 0 ]] ; then
echo "Do not run this script as root!"
exit 1
fi
. "$(dirname $(readlink -f "$0"))/functions_helper"
start_portwine () {
var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}"
export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")"
if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then
yad_error "Path to PREFIX not found:\n$WINEPREFIX"
exit 1
fi
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${WINEPREFIX}/drive_c/"
export WINEARCH="win64"
if [[ "${PW_VULKAN_USE}" == 3 ]] ; then
export PW_WINE_USE="${PW_PROTON_LG_VER}"
echo "Force to use $PW_WINE_USE"
if [ ! -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ] ; then
if try_download "github.com/Castro-Fidel/wine_builds/releases/download/${PW_WINE_USE}/${PW_WINE_USE}.tar.xz" \
"${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" ; then
if unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz" "${PORT_WINE_PATH}/data/dist/" ; then
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
UNPACK_STATUS=0
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}.tar.xz"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
fi
fi
[[ "${UNPACK_STATUS}" != 0 ]] && exit 1
fi
edit_db_from_gui PW_WINE_USE
else
pw_check_and_download_wine "${PW_WINE_USE}"
fi
pw_install_dll_in_prefix
init_wine_ver
if [[ -f "$portwine_exe" ]] && [[ "${WARN_CYRILLIC_IN_PATH}" == 1 ]] ; then
edit_db_from_gui WARN_CYRILLIC_IN_PATH
unset WARN_CYRILLIC_IN_PATH
fi
if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then
export OBS_VKCAPTURE="1"
export PW_USE_SYSTEM_VK_LAYERS="1"
print_warning "System mangohud, vkBasalt, obs-vk capture and other applications using vulkan layers are forcibly used."
fi
pw_init_runtime
check_variables VKD3D_DEBUG none
check_variables DXVK_LOG_LEVEL none
check_variables VK_LOADER_DEBUG none
check_variables VKBASALT_LOG_LEVEL none
check_variables DXVK_NVAPI_LOG_LEVEL none
if [[ "${PW_LOG}" == 1 ]] ; then
export WINEDEBUG="fixme-all,err+loaddll,err+dll,err+file,err+reg"
export WINE_MONO_TRACE="E:System.NotImplementedException"
export VKBASALT_LOG_LEVEL="error"
else
export WINEDEBUG="-all"
unset WINE_MONO_TRACE
fi
if [[ "${PW_NO_ESYNC}" == 1 ]]
then export WINEESYNC="0"
else export WINEESYNC="1"
fi
if [[ "${PW_NO_FSYNC}" == 1 ]] ; then
export WINEFSYNC="0"
export WINEFSYNC_FUTEX2="0"
else
export WINEFSYNC="1"
export WINEFSYNC_FUTEX2="1"
export WINEFSYNC_SPINCOUNT=100
fi
if [[ "${PW_FORCE_LARGE_ADDRESS_AWARE}" == 1 ]]
then export WINE_LARGE_ADDRESS_AWARE="1"
else export WINE_LARGE_ADDRESS_AWARE="0"
fi
if [[ "${PW_OLD_GL_STRING}" == 1 ]] ; then
export MESA_EXTENSION_MAX_YEAR="2003" #mesa override
export __GL_ExtensionStringVersion="17700" #nvidia override
fi
if [[ "${PW_NO_WRITE_WATCH}" == 1 ]] ; then
export WINE_DISABLE_WRITE_WATCH="1"
fi
if [[ "${PW_VULKAN_NO_ASYNC}" == 1 ]] ; then
export RADV_DEBUG="llvm"
var_vkd3d_config_update single_queue
fi
if [[ "${PW_USE_GAMESCOPE}" == 1 ]] && command -v gamescope &>/dev/null && ! check_gamescope_session ; then
# Workaround for https://gitlab.freedesktop.org/mesa/mesa/-/issues/6029
if [[ -d "/sys/module/i915" ]] ; then
export INTEL_DEBUG="norbc"
fi
if [[ "${PW_GPU_USE}" != "disabled" ]] ; then
PW_vendorID="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -B3 "${PW_GPU_USE}" | grep vendorID | sort -u | awk -F'0x' '{print $2}')"
PW_deviceID="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -B3 "${PW_GPU_USE}" | grep deviceID | sort -u | awk -F'0x' '{print $2}')"
PW_ID_VIDEO="--prefer-vk-device ${PW_vendorID}:${PW_deviceID}"
else
unset PW_ID_VIDEO
fi
export PW_RUN_GAMESCOPE="gamescope -o 30 ${PW_ID_VIDEO} ${GAMESCOPE_ARGS} --"
export PW_WINE_FULLSCREEN_FSR="0"
export vk_xwayland_wait_ready="false"
else
export PW_USE_GAMESCOPE="0"
export PW_RUN_GAMESCOPE=""
fi
enabled_fake_nvidia_videocard ()
{
if [[ "${1}" == old ]] ; then
sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu =' "${DXVK_CONFIG_FILE}"
unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU
unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS
elif [[ "${1}" == new ]] ; then
sed -i /'dxgi.customDeviceDesc =/c dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}"
export WINE_HIDE_NVIDIA_GPU=0
export WINE_HIDE_AMD_GPU=1
export DXVK_NVAPI_DRIVER_VERSION=53713
export DXVK_NVAPI_ALLOW_OTHER_DRIVERS=1
elif [[ "${1}" == 0 ]] ; then
sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c # dxgi.customVendorId =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu =' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu =' "${DXVK_CONFIG_FILE}"
unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU
unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS
fi
}
for rm_dll in "nvml.dll" "nvngx.ini" "nvngx.dll" "_nvngx.dll" ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/$rm_dll"
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/$rm_dll"
done
# TODO: LFX (wait new LFX v2)
# if [[ "${PW_USE_LFX}" == 1 ]] ; then
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.so" "${WINEDIR}/lib64/wine/x86_64-unix/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_wine.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# enabled_fake_nvidia_videocard 1
# export LFX2=1
# fi
export DXVK_ENABLE_NVAPI=1
if [[ "${PW_USE_FAKE_DLSS_3}" == 1 ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss_3/${PW_FAKE_DLSS_3_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_3_VER}/dlssg_to_fsr3_amd_is_better.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "nvapi,nvapi64,nvngx,_nvngx,dlssg_to_fsr3_amd_is_better=n;nvcuda=b"
enabled_fake_nvidia_videocard new
export WINEHAGS=1
elif [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/"
enabled_fake_nvidia_videocard old
var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b"
elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then
FIND_NVNGX="$(dirname $(find /usr/* -type f -name "nvngx.dll" 2>/dev/null | head -n 1 | awk '{print $1}'))"
if [[ ! -z "$FIND_NVNGX" ]] ; then
try_copy_file "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_copy_file "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
else
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
fi
enabled_fake_nvidia_videocard 0
var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b"
else
enabled_fake_nvidia_videocard 0
export DXVK_ENABLE_NVAPI=0
var_winedlloverride_update "nvngx,_nvngx="
fi
if [[ "${PW_USE_GALLIUM_ZINK}" == 1 ]] ; then
export PW_VULKAN_USE=5
fi
if [[ "${PW_HEAP_DELAY_FREE}" == 1 ]]
then export WINE_HEAP_DELAY_FREE="1"
else export WINE_HEAP_DELAY_FREE="0"
fi
if [[ "${PW_WINE_ALLOW_XIM}" == 1 ]]
then export WINE_ALLOW_XIM="1"
else export WINE_ALLOW_XIM="0"
fi
if [[ "${PW_FIX_VIDEO_IN_GAME}" == 1 ]]
then export WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER="1"
else export WINE_DO_NOT_CREATE_DXGI_DEVICE_MANAGER="0"
fi
[[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG
[[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
if [[ "${PW_USE_DXR11}" == 1 ]] \
|| [[ "${PW_USE_DXR10}" == 1 ]] \
|| [[ "${PW_USE_RAY_TRACING}" == 1 ]]
then
export VKD3D_FEATURE_LEVEL="12_1"
var_vkd3d_config_update dxr
var_radv_perftest_config_update rt
else
var_vkd3d_config_update nodxr
fi
if [[ "${PW_GPU_USE}" != "disabled" ]] ; then
export DXVK_FILTER_DEVICE_NAME="${PW_GPU_USE}"
export VKD3D_FILTER_DEVICE_NAME="${PW_GPU_USE}"
if echo "${PW_GPU_USE}" | grep -i nvidia &>/dev/null ; then
if [[ -f "/usr/share/vulkan/icd.d/nvidia_icd.json" ]] ; then
export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json"
fi
fi
fi
# if [[ "${PW_AMD_VULKAN_USE}" == "amdvlk" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then
# export VK_ICD_FILENAMES="/opt/amdgpu/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu/etc/vulkan/icd.d/amd_icd64.json"
# elif grep -i -q "altlinux" '/etc/os-release' ; then
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd.json"
# else
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_icd32.json:/usr/share/vulkan/icd.d/amd_icd64.json"
# fi
# elif [[ "${PW_AMD_VULKAN_USE}" == "amdgpupro" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# if grep -i -q -E '(rosa|redos|nobara|linuxmint|ubuntu|centos|rhel|fedora)' "/etc/os-release" ; then
# export VK_ICD_FILENAMES="/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd32.json:/opt/amdgpu-pro/etc/vulkan/icd.d/amd_icd64.json"
# var_ld_library_path_update "/opt/amdgpu/libdrm/lib64:/opt/amdgpu/libdrm/lib32"
# else
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/amd_pro_icd32.json:/usr/share/vulkan/icd.d/amd_pro_icd64.json"
# fi
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv_aco" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# var_radv_perftest_config_update aco
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# elif [[ "${PW_AMD_VULKAN_USE}" == "radv_gpl" ]] ; then
# export DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
# var_radv_perftest_config_update gpl
# export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json"
# fi
case "$PW_FORCE_USE_VSYNC" in # 0-FORCE_OFF, 1-FORCE_ON, 2-BY_DEFAULT
0)
export vblank_mode=0
export __GL_SYNC_TO_VBLANK=0
;;
1)
export vblank_mode=1
export __GL_SYNC_TO_VBLANK=1
;;
*)
unset vblank_mode __GL_SYNC_TO_VBLANK
;;
esac
export int_xneur=0
if [[ ! -z "`pgrep xneur`" ]]; then
killall xneur
export int_xneur=1
fi
if [[ "$PW_USE_GAMEMODE" = "1" ]] ; then
if command -v gamemoded ; then
export GAMEMODERUN=1
PW_GAMEMODERUN_SLR="gamemoderun"
systemctl enable --now --user gamemoded &>/dev/null
print_info "Gamemod will be launched."
else
export GAMEMODERUN=1
if ! pidof gamemoded &>/dev/null ; then
GAMEMODEAUTO_NAME="libgamemodeauto.so.0"
if [[ ! -z "${PW_LD_PRELOAD}" ]]
then export PW_LD_PRELOAD="${PW_LD_PRELOAD}:${GAMEMODEAUTO_NAME}"
else export PW_LD_PRELOAD="${GAMEMODEAUTO_NAME}"
fi
env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \
"${PW_PLUGINS_PATH}/portable/bin/gamemoded" &>/dev/null &
print_info "Gamemod will be launched."
sleep 0.1
fi
fi
else
export GAMEMODERUN=0
export PW_GAMEMODERUN_SLR=""
print_info "Gamemod is not installed or disabled in vars script or db file: PW_USE_GAMEMODE=$PW_USE_GAMEMODE"
fi
pw_other_fixes
check_dirs_and_files_in_pfx () {
create_new_dir "${WINEPREFIX}"
create_new_dir "${WINEPREFIX}/drive_c"
create_new_dir "${WINEPREFIX}/dosdevices"
create_new_dir "${WINEPREFIX}/drive_c/windows/syswow64/"
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/$USER/"
create_new_dir "${WINEPREFIX}/drive_c/tmp/.private/steamuser/"
[ ! -d "${WINEPREFIX}/dosdevices/c:" ] && try_force_link_dir "${WINEPREFIX}/drive_c/" "${WINEPREFIX}/dosdevices/c:"
[ ! -d "${WINEPREFIX}/dosdevices/z:" ] && try_force_link_dir "/" "${WINEPREFIX}/dosdevices/z:"
[ ! -d "${WINEPREFIX}/dosdevices/h:" ] && try_force_link_dir "$HOME" "${WINEPREFIX}/dosdevices/h:"
create_new_dir "${WINEPREFIX}/drive_c/windows/Fonts/"
LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf"
for link_font in $LN_FONTS ; do
if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then
try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/"
fi
done
find "${WINEPREFIX}/dosdevices" -xtype l -maxdepth 1 2>/dev/null -exec rm {} \;
rm -f "${WINEPREFIX}/dosdevices/"*::
DRIVES=(d e f g i j k l m n o p q r s t u v w x y)
DEF_MOUNT_DIRS=('/media' "/media/$USER" '/mnt' '/run/media' "/run/media/$USER")
MOUNT_DIRS=($(find "${DEF_MOUNT_DIRS[@]}" -maxdepth 1 -type d 2>/dev/null | sort -u))
for drive_dir in "${MOUNT_DIRS[@]}" ; do
if [[ ! "${DEF_MOUNT_DIRS[@]}" =~ "$drive_dir" ]] \
&& ! realpath "${WINEPREFIX}/dosdevices"/*: | grep "$drive_dir" &>/dev/null ; then
drive_num=0
while [[ "$drive_num" -lt "${#DRIVES[@]}" ]] ; do
drive_path="${WINEPREFIX}/dosdevices/${DRIVES[$drive_num]}:"
if [ ! -d "$drive_path" ] ; then
ln -sf "$drive_dir" "$drive_path"
break
else
((drive_num++))
fi
done
fi
done
}
PROGPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/progpfx${PROGPFX_VER}/progpfx${PROGPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "PROGRAMS" && ! -f "${WINEPREFIX}"/.progpfx ]] ; then
print_info "Download and install PROGRAMS pfx..."
if try_download "${PROGPFX_URL}" "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
yad_error_download && exit 1
fi
fi
DOTPFX_URL="github.com/Castro-Fidel/PortWINE/releases/download/dotpfx${DOTPFX_VER}/dotpfx${DOTPFX_VER}.tar.xz"
if [[ "${PW_PREFIX_NAME}" == "DOTNET" ]] && [[ ! -f "${WINEPREFIX}"/.dotnet${DOTPFX_VER} ]] ; then
print_info "Download and install DOTNET pfx..."
if try_download "${DOTPFX_URL}" "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" ; then
unpack_tar_xz "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/"
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
yad_error_download && exit 1
fi
fi
pw_update_pfx_cover_gui
if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}" \
|| ! -d "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/drive_c/windows \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/userdef.reg \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/system.reg \
|| ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/user.reg ]]
then
pw_clear_pfx
check_dirs_and_files_in_pfx
if [[ -f "${PW_WINELIB}/default_pfx.tar.xz" ]] && [[ "${DISABLE_CP_DEFPFX}" != 1 ]] ; then
unpack_tar_xz "${PW_WINELIB}/default_pfx.tar.xz" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/" silent
fi
fi
echo "${PW_WINE_USE}" > "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
check_dirs_and_files_in_pfx
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser"
if [ ! -d "${WINEPREFIX}/drive_c/users/${USER}" ]; then
try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser" "${WINEPREFIX}/drive_c/users/${USER}"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/Public/Documents/Steam"
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents/Steam"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/My Documents" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/Documents" "${WINEPREFIX}/drive_c/users/steamuser/My Documents"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Application Data" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Roaming" "${WINEPREFIX}/drive_c/users/steamuser/Application Data"
fi
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local"
create_new_dir "${WINEPREFIX}/drive_c/users/steamuser/Local Settings"
if [ ! -d "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data" ]
then try_force_link_dir "${WINEPREFIX}/drive_c/users/steamuser/AppData/Local" "${WINEPREFIX}/drive_c/users/steamuser/Local Settings/Application Data"
fi
#enabled BattleEye_Runtime and EasyAntiCheat_Runtime
if [[ "${PW_USE_EAC_AND_BE}" == 1 ]] ; then
export PROTON_BATTLEYE_RUNTIME="${PW_PLUGINS_PATH}/BattlEye_Runtime"
export PROTON_EAC_RUNTIME="${PW_PLUGINS_PATH}/EasyAntiCheat_Runtime"
var_winedlloverride_update "beclient,beclient_x64=b,n"
else
unset PROTON_BATTLEYE_RUNTIME PROTON_EAC_RUNTIME
fi
if [[ "${PW_REDUCE_PULSE_LATENCY}" == 1 ]] ; then
export PULSE_LATENCY_MSEC=60
# export PIPEWIRE_LATENCY=128/48000
else
unset PULSE_LATENCY_MSEC
fi
if [[ "$PW_USE_US_LAYOUT" == "1" ]] && [[ "${XDG_SESSION_TYPE}" != "wayland" ]] && command -v setxkbmap &>/dev/null ; then
setxkbmap -model pc101 us -print | xkbcomp - $DISPLAY &>/dev/null
else
export PW_USE_US_LAYOUT="0"
fi
D3D_EXTRAS_LIBS="d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37
d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46
d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41
d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30
d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43"
if [[ "${PW_USE_D3D_EXTRAS}" == 1 ]] ; then
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ]] \
|| [[ -z "`grep d3dx9 "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]]
then
echo "d3dx9" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
#try link d3d extras libs
PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras"
for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
try_force_link_file "${PATH_TO_D3DEXTRAS}/x64/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PATH_TO_D3DEXTRAS}/x32/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
var_winedlloverride_update "${d3d_extras_from_plugins}=n"
if [[ -z "`grep "${d3d_extras_from_plugins}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]] ; then
echo "${d3d_extras_from_plugins}" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
done
else
for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done
fi
print_info "Try link wine d3d files by default..."
for rm_vulkan_dll in libvkd3d-1 libvkd3d-shader-1 dxvk_config nvapi nvapi64 d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${rm_vulkan_dll}.dll"
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_vulkan_dll}.dll"
done
for wine_build_dll in d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done
create_new_dir "${PW_VULKAN_DIR}/opengl"
PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/opengl"
PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/opengl"
if [[ "${PW_VULKAN_USE}" == "0" ]] ; then
print_info "Use OpenGL"
export GL_YIELD="NOTHING"
export mesa_glthread=true
export WINE_D3D_CONFIG='renderer=gl'
elif [[ "${PW_VULKAN_USE}" == "5" ]] ; then
print_info "Use OpenGL Zink"
export GL_YIELD="NOTHING"
export mesa_glthread=true
export WINE_D3D_CONFIG='renderer=gl'
export __GLX_VENDOR_LIBRARY_NAME=mesa
export MESA_LOADER_DRIVER_OVERRIDE=zink
export GALLIUM_DRIVER=zink
if [[ "${XDG_SESSION_TYPE}" != "wayland" ]] || [[ "${PW_USE_GAMESCOPE}" != 1 ]] ; then
export LIBGL_KOPPER_DRI2=1
fi
elif [[ "${PW_VULKAN_USE}" == "3" ]] ; then
print_info "Use GALLIUM-NINE (Native DX9 on MESA drivers)"
export PW_GALLIUM_NINE_PATH="${PW_PLUGINS_PATH}/gallium_nine_v.${PW_GALLIUM_NINE_VER}"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib32/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/syswow64/d3d9.dll"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib64/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/system32/d3d9.dll"
var_winedlloverride_update "d3d9=n;wined3d=b;dxvk_config,vulkan-1,winevulkan="
unset FIND_D3D_MODULE D3D_MODULE_PATH
FIND_D3D_MODULE=`dirname $(find /usr/ -maxdepth 4 -type f -name "d3dadapter9.so.*") 2>/dev/null`
if [[ ! -z "$FIND_D3D_MODULE" ]] ; then
old_IFS=$IFS
IFS=$'\n'
for D3D_MP in $FIND_D3D_MODULE ; do
if [[ ! -z "$D3D_MODULE_PATH" ]]
then export D3D_MODULE_PATH="$D3D_MODULE_PATH:/run/host${D3D_MP}"
else export D3D_MODULE_PATH="/run/host${D3D_MP}"
fi
done
IFS=$old_IFS
print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}"
else
pw_stop_progress_bar
yad_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}"
stop_portwine
fi
export mesa_glthread=true
export ENABLE_VKBASALT=0
export PW_MANGOHUD=0
export WINE_FULLSCREEN_FSR=0
elif [[ "${PW_VULKAN_USE}" == "4" ]] ; then
print_info "Use DAMAVAND (DirectX to wined3d vulkan)"
export WINE_D3D_CONFIG='renderer=vulkan'
else
print_info "Use VKD3D-PROTON, DXVK and D8VK (DirectX 8-12 to vulkan)"
if [[ "${PW_USE_WINE_DXGI}" == 1 ]] ; then
export CP_DXVK_FILES="d3d11 d3d10core d3d9 dxvk_config" # openvr_api_dxvk
var_winedlloverride_update dxgi=b
elif [[ "${USE_ALL_DXVK_DLLS}" == 1 ]] ; then
export CP_DXVK_FILES="d3d11 d3d10core d3d10_1 d3d10 d3d9 dxgi dxvk_config" # openvr_api_dxvk
else
export CP_DXVK_FILES="d3d11 d3d10core d3d9 dxgi dxvk_config" # openvr_api_dxvk
fi
check_variables VKD3D_FEATURE_LEVEL "12_0"
if [[ "${PW_VULKAN_USE}" == "1" ]] ; then
PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_STABLE_VER}"
PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_STABLE_VER}"
print_info "DXVK v.${DXVK_STABLE_VER} in use"
print_info "VKD3D-PROTON v.${VKD3D_STABLE_VER} in use"
elif [[ "${PW_VULKAN_USE}" == "2" ]] ; then
PATH_TO_DXVK_FILES="${PW_VULKAN_DIR}/dxvk-${DXVK_GIT_VER}"
PATH_TO_VKD3D_FILES="${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_GIT_VER}"
print_info "DXVK v.${DXVK_GIT_VER} in use"
print_info "VKD3D-PROTON v.${VKD3D_GIT_VER} in use"
fi
PATH_TO_D8VK_FILES="${PW_VULKAN_DIR}/d8vk-${D8VK_VER}"
print_info "D8VK v.${D8VK_VER} in use"
print_info "Try link native DXVK files..."
for wine_dxvk_dll in ${CP_DXVK_FILES} ; do
if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_dxvk_dll}=n"
fi
done
try_force_link_file "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/"
print_info "Try link native VKD3D files..."
for wine_vkd3d_dll in d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1; do
if [[ -f "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_vkd3d_dll}=n"
fi
done
print_info "Try link native D8VK file..."
try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_D8VK_FILES}/x64/d3d8.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update d3d8=n
fi
if [[ ! -d "${WINEPREFIX}/drive_c/vrclient/bin" ]] ; then
create_new_dir "${WINEPREFIX}/drive_c/vrclient/bin"
try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
fi
if [[ "${PW_USE_SHADER_CACHE}" == 1 ]] ; then
create_new_dir "${PATH_TO_DXVK_FILES}/gl_shader_cache"
export __GL_SHADER_DISK_CACHE=1
export __GL_SHADER_DISK_CACHE_PATH="${PATH_TO_DXVK_FILES}/gl_shader_cache"
export __GL_SHADER_DISK_CACHE_SIZE=50000000000
export __GL_SHADER_DISK_CACHE_SKIP_CLEANUP=1
create_new_dir "${PATH_TO_DXVK_FILES}/dxvk_cache"
export DXVK_STATE_CACHE_PATH="${PATH_TO_DXVK_FILES}"/dxvk_cache
export DXVK_STATE_CACHE=1
create_new_dir "${PATH_TO_VKD3D_FILES}/vkd3d_cache"
export VKD3D_SHADER_CACHE_PATH="${PATH_TO_VKD3D_FILES}/vkd3d_cache"
else
export __GL_SHADER_DISK_CACHE=0
export DXVK_STATE_CACHE=0
export VKD3D_SHADER_CACHE_PATH=0
export RADV_DEBUG=nocache
fi
if [[ "${PW_WINE_FULLSCREEN_FSR}" == 1 ]] || [[ "${WINE_FULLSCREEN_FSR}" == 1 ]] ; then
export WINE_FULLSCREEN_FSR=1
export WINE_FULLSCREEN_FSR_STRENGTH=2
export WINE_FULLSCREEN_INTEGER_SCALING=0
else
export WINE_FULLSCREEN_FSR=0
unset WINE_FULLSCREEN_FAKE_CURRENT_RES WINE_FULLSCREEN_FSR_STRENGTH WINE_FULLSCREEN_INTEGER_SCALING
fi
if [[ "${PW_WINE_CPU_TOPOLOGY}" != "disabled" ]] ; then
export WINE_CPU_TOPOLOGY="${PW_WINE_CPU_TOPOLOGY}"
else
unset WINE_CPU_TOPOLOGY
fi
for try_cp_dll_from_wine in "ntdll.dll" "vulkan-1.dll" "winevulkan.dll" "amd_ags_x64.dll" "ir50_32.dll" ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib/wine/i386-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to syswow64... OK."
fi
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to system32... OK."
fi
done
#run_winetricks_from_db
if [[ ! -z "${PW_MUST_HAVE_DLL}" ]]
then export PW_DLL_INSTALL="`echo "${PW_MUST_HAVE_DLL} ${PW_DLL_INSTALL}" | awk '{ for(i=1;i<=NF;i++){a[$i]++} }END{ for(i in a){printf("%s ",i)} }' `"
fi
if [[ ! -z "${PW_DLL_INSTALL}" ]] ; then
export PW_DLL_NEED_INSTALL=""
export USE_WT_FROM_DB=0
if [ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ] ; then
touch "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
for need_install_dll_to_pfx in ${PW_DLL_INSTALL} ; do
if [[ "${need_install_dll_to_pfx}" == vcrun201[5-9] ]] \
|| [[ "${need_install_dll_to_pfx}" == vcrun2022 ]] ; then
need_install_dll_to_pfx="vcrun2022"
sed -i '/vcrun2015/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
sed -i '/vcrun2017/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
sed -i '/vcrun2019/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi
grep "${need_install_dll_to_pfx}" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" &>/dev/null
if [[ "$?" == "1" ]] ; then
if [[ -z "${PW_DLL_NEED_INSTALL}" ]]
then export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx}"
else export PW_DLL_NEED_INSTALL="${need_install_dll_to_pfx} ${PW_DLL_NEED_INSTALL}"
fi
export USE_WT_FROM_DB=1
fi
done
if [[ "${USE_WT_FROM_DB}" == "1" ]] ; then
update_winetricks
echo "START WINETRICKS..." >> "${PORT_WINE_TMP_PATH}/update_pfx_log"
echo "Try to install DLL in prefix: ${PW_DLL_NEED_INSTALL}" >> "${PORT_WINE_TMP_PATH}/update_pfx_log"
print_info "Try to install DLL in prefix: ${PW_DLL_NEED_INSTALL}"
${pw_runtime} env PATH="${PATH}" LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" GST_PLUGIN_SYSTEM_PATH_1_0="" \
"${PORT_WINE_TMP_PATH}/winetricks" -q -r -f ${PW_DLL_NEED_INSTALL} &>>"${PORT_WINE_TMP_PATH}/update_pfx_log"
wait_wineserver
kill_portwine
fi
fi
if [[ -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg" ]] && [[ -z `grep "Windows $PW_WINDOWS_VER" "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/system.reg"` ]] ; then
if [[ ! -z "${PW_WINDOWS_VER}" && `echo "$PW_WINDOWS_VER" | sed 's/.*/\L&/'` == "xp" ]] ; then
export PW_WINDOWS_VER="xp64"
fi
${pw_runtime} env PATH="${PATH}" LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" GST_PLUGIN_SYSTEM_PATH_1_0="" \
"${WINELOADER}" winecfg -v `echo "win${PW_WINDOWS_VER}" | sed 's/.*/\L&/'`
wait_wineserver
kill_portwine
echo "Set to win${PW_WINDOWS_VER}"
fi
if [[ "${portwine_exe}" == *-Shipping.exe ]] ; then
echo "Disable EAC"
[[ -z "${LAUNCH_PARAMETERS}" ]] && export LAUNCH_PARAMETERS+=" -eac-nop-loaded "
fi
pw_stop_progress_bar &&
if ! check_start_from_steam ; then
pw_tray_icon
sleep 0.5
if [[ "${PW_CHECK_AUTOINSTAL}" != "1" ]] ; then
pw_start_progress_bar_cover "${PW_GUI_ICON_PATH}/covers/loading_${update_loc}.gif"
fi
fi
add_in_start_portwine
if [[ -f "${PATH_TO_GAME}/dxvk.conf" ]] ; then
export DXVK_CONFIG_FILE="${PATH_TO_GAME}/dxvk.conf"
fi
}
pw_run () {
unset GDK_BACKEND
if [[ ! -z "${PATH_TO_GAME}" ]] && [[ -d "${PATH_TO_GAME}" ]] ; then
cd "${PATH_TO_GAME}"
elif [[ -f "$portwine_exe" ]] ; then
export PATH_TO_GAME="$( cd "$( dirname "${portwine_exe}" )" >/dev/null 2>&1 && pwd )"
cd "${PATH_TO_GAME}"
else
cd "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/drive_c"
fi
pw_mangohud_check
pw_vkbasalt_check
PW_LOG_TO_FILE="${PORT_WINE_PATH}/${portname}.log"
print_var "WINEDIR" "WINEPREFIX" "WINEDLLOVERRIDES" "PATH_TO_GAME" "PW_WINE_USE" "PW_VULKAN_USE" "VULKAN_DRIVER_NAME"
print_var "VULKAN_API_DRIVER_VERSION" "VKD3D_CONFIG" "PW_LD_LIBRARY_PATH" "PATH" "WINEESYNC" "WINEFSYNC" "WINEFSYNC_FUTEX2"
print_var "WINEDLLPATH" "WINE_CPU_TOPOLOGY" "PW_RUN_GAMESCOPE" "LD_LIBRARY_PATH"
kill -s SIGUSR1 "$PW_YAD_PID_PFX_COVER_UI" &>/dev/null
if [[ "${PW_LOG}" == 1 ]] ; then
if check_start_from_steam ; then
for VAR_LOGGER in PW_WINE_USE WINEDIR WINEDLLPATH WINEPREFIX PATH_TO_GAME PW_VULKAN_USE PW_LD_LIBRARY_PATH LD_LIBRARY_PATH PATH \
VKD3D_CONFIG WINEESYNC WINEFSYNC WINEFSYNC_FUTEX2 WINE_CPU_TOPOLOGY DESKTOP_SESSION
do
echo "${VAR_LOGGER}=${!VAR_LOGGER}" >> "${PW_LOG_TO_FILE}"
done
fi
echo "WINEDLLOVERRIDES=${WINEDLLOVERRIDES}" >> "${PW_LOG_TO_FILE}"
echo "------------------------------------" >> "${PW_LOG_TO_FILE}"
echo "Log WINE:" >> "${PW_LOG_TO_FILE}"
echo ""
print_info "Log from RUNTIME and WINE:"
${PW_RUN_GAMESCOPE} \
${pw_runtime} \
env PATH="${PATH}" \
LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" \
LD_PRELOAD="${PW_LD_PRELOAD}" \
VK_LAYER_PATH="${PW_VK_LAYER_PATH}" \
VK_INSTANCE_LAYERS=${PW_VK_INSTANCE_LAYERS} \
${PW_GAMEMODERUN_SLR} \
${PW_MANGOHUD_SLR} \
"${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}"
else
if [[ "${PW_USE_TERMINAL}" == "1" ]] ; then
export PW_ADD_TO_ARGS_IN_RUNTIME="--xterm"
pw_init_runtime
fi
echo ""
echo "Log WINE:" > "${PW_LOG_TO_FILE}"
print_info "Log from RUNTIME and WINE:"
${PW_RUN_GAMESCOPE} \
${pw_runtime} \
env PATH="${PATH}" \
LD_LIBRARY_PATH="${PW_LD_LIBRARY_PATH}" \
LD_PRELOAD="${PW_LD_PRELOAD}" \
VK_LAYER_PATH="${PW_VK_LAYER_PATH}" \
VK_INSTANCE_LAYERS="${PW_VK_INSTANCE_LAYERS}" \
${PW_GAMEMODERUN_SLR} \
${PW_MANGOHUD_SLR} \
"${WINELOADER}" "$@" ${LAUNCH_PARAMETERS[@]} &>>"${PW_LOG_TO_FILE}"
cat "${PW_LOG_TO_FILE}"
fi
}
export -f pw_run
###MAIN###
if [[ $(id -u) -eq 0 ]] ; then
yad_error "Do not run the script from the superuser!"
exit 1
fi
if [[ -z "${LANG}" ]] ; then
export LANG=C
export FORCE_ENG_LANG=1
elif [[ "${START_FROM_STEAM}" == 1 ]] ; then
export FORCE_ENG_LANG=1
else
unset FORCE_ENG_LANG
fi
create_new_dir "${HOME}/.local/share/applications"
if [[ "${PW_SILENT_RESTART}" == 1 ]] || [[ "${START_FROM_STEAM}" == 1 ]] ; then
export PW_GUI_DISABLED_CS=1
unset PW_SILENT_RESTART
else
unset PW_GUI_DISABLED_CS
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_AUTOINSTAL PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS PORTWINE_DB PORTWINE_DB_FILE PW_DISABLED_CREATE_DB RADV_PERFTEST
unset CHK_SYMLINK_FILE MESA_GL_VERSION_OVERRIDE PATH_TO_GAME PW_START_DEBUG PORTPROTON_NAME PORTWINE_CREATE_SHORTCUT_NAME
unset PW_PREFIX_NAME WINEPREFIX VULKAN_MOD PW_WINE_VER PW_ADD_TO_ARGS_IN_RUNTIME PW_GAMEMODERUN_SLR AMD_VULKAN_ICD PW_WINE_CPU_TOPOLOGY
unset PW_NAME_D_NAME PW_NAME_D_ICON PW_NAME_D_EXEC PW_EXEC_FROM_DESKTOP PW_ALL_DF PW_GENERATE_BUTTONS PW_NAME_D_ICON PW_NAME_D_ICON_48
export portname=PortProton
cd "$(dirname "`readlink -f "$0"`")" && export PORT_SCRIPTS_PATH="$(pwd)"
cd "${PORT_SCRIPTS_PATH}/../../" && export PORT_WINE_PATH="$(pwd)"
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
rm -f $PORT_WINE_TMP_PATH/*{exe,msi,tar}*
echo "" > "${PORT_WINE_TMP_PATH}/tmp_yad_form"
if [[ -d "${PORT_WINE_PATH}/data/dist" ]] ; then
try_remove_file "${PORT_WINE_PATH}/data/dist/VERSION"
orig_IFS="$IFS"
IFS=$'\n'
for dist_dir in $(ls -1 "${PORT_WINE_PATH}/data/dist/") ; do
dist_dir_new=`echo "${dist_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g`
if [[ ! -d "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}" ]] ; then
mv -- "${PORT_WINE_PATH}/data/dist/$dist_dir" "${PORT_WINE_PATH}/data/dist/${dist_dir_new^^}"
fi
done
IFS="$orig_IFS"
else
create_new_dir "${PORT_WINE_PATH}/data/dist"
fi
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DEFAULT"
create_new_dir "${PORT_WINE_PATH}/data/prefixes/DOTNET"
create_new_dir "${PORT_WINE_PATH}/data/prefixes/PROGRAMS"
try_force_link_dir "${PORT_WINE_PATH}/data/prefixes" "${PORT_WINE_PATH}"
orig_IFS="$IFS"
IFS=$'\n'
for pfx_dir in $(ls -1 "${PORT_WINE_PATH}/data/prefixes/") ; do
pfx_dir_new=`echo "${pfx_dir}" | awk '$1=$1' | sed -e s/[[:blank:]]/_/g`
if [[ ! -d "${PORT_WINE_PATH}/data/prefixes/${pfx_dir_new^^}" ]] ; then
mv -- "${PORT_WINE_PATH}/data/prefixes/$pfx_dir" "${PORT_WINE_PATH}/data/prefixes/${pfx_dir_new^^}"
fi
done
IFS="$orig_IFS"
create_new_dir "${PORT_WINE_TMP_PATH}"/gecko
create_new_dir "${PORT_WINE_TMP_PATH}"/mono
export PW_VULKAN_DIR="${PORT_WINE_TMP_PATH}/VULKAN"
create_new_dir "${PW_VULKAN_DIR}"
export LSPCI_VGA="$(lspci -k | grep -E 'VGA|3D' | tr -d '\n')"
if command -v xrandr &>/dev/null ; then
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_screen_configuration"
export PW_SCREEN_RESOLUTION="$(xrandr | sed -rn 's/^.*primary.* ([0-9]+x[0-9]+).*$/\1/p')"
export PW_SCREEN_PRIMARY="$(xrandr | grep "primary" | awk '{print $1}')"
print_var PW_SCREEN_RESOLUTION PW_SCREEN_PRIMARY
else
print_error "xrandr - not found!"
fi
cd "${PORT_SCRIPTS_PATH}"
. "${PORT_SCRIPTS_PATH}/var"
export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
. "${PORT_SCRIPTS_PATH}"/lang
. "${PORT_SCRIPTS_PATH}"/yad_gui
export urlg="https://linux-gaming.ru/portproton/"
export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_dir "${PW_WINELIB}/var"
export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1`
export WINETRICKS_DOWNLOADER="curl"
export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
check_user_conf
check_variables PW_LOG "0"
if [[ -z "${INSTALLING_PORT}" ]] ; then
. "${USER_CONF}"
if ! check_start_from_steam && [[ "${SKIP_CHECK_UPDATES}" != 1 ]]; then
pw_port_update
fi
unset SKIP_CHECK_UPDATES
pw_check_and_download_plugins
pw_download_libs
export PW_VULKANINFO_PORTABLE="$PW_WINELIB/pressure-vessel/libexec/steam-runtime-tools-0/x86_64-linux-gnu-vulkaninfo"
export VULKAN_API_DRIVER_VERSION="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep "api" | head -n 1 | awk '{print $3}')"
export VULKAN_DRIVER_NAME="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep driverName | awk '{print$3}' | head -1)"
pw_init_db
. "${PORT_SCRIPTS_PATH}"/lang
pw_check_and_download_dxvk_and_vkd3d
. "${USER_CONF}"
fi

View File

@ -1,13 +1,13 @@
#!/usr/bin/env bash
# Author: linux-gaming.ru
. "$(dirname $(readlink -f "$0"))/runlib"
. "$(dirname $(readlink -f "$0"))/start.sh"
if grep -i "flatpak" /etc/os-release &>/dev/null ; then
name_desktop="PortProton"
name_desktop="PortProton"
if check_flatpak ; then
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=flatpak run com.castrofidel.portproton" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=flatpak run ru.linux_gaming.PortProton" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
@ -17,7 +17,6 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then
echo "Icon="${PORT_WINE_PATH}/data/img/w.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
else
name_desktop="PortProton"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
@ -32,7 +31,7 @@ else
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
fi
if [[ ! -f /usr/bin/portproton ]] ; then
if [[ ! -f /usr/bin/portproton ]] && ! check_flatpak ; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/
fi
@ -42,7 +41,7 @@ fi
update-desktop-database -q "${HOME}/.local/share/applications"
if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then
if ! check_flatpak ; then
xdg-mime default PortProton.desktop "application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program"
fi
@ -55,18 +54,16 @@ echo "Icon="${PORT_WINE_PATH}/data/img/readme.png"" >> "${PORT_WINE_PATH}/${nam
echo "URL=${urlg}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
if [ "${PW_SILENT_INSTALL}" = "1" ] ; then
if [ "${PW_AUTOPLAY}" = "1" ] ; then
unset INSTALLING_PORT
unset INSTALLING_PORT
if [[ "${PW_SILENT_INSTALL}" == 1 ]] ; then
if [[ "${PW_AUTOPLAY}" == 1 ]] ; then
if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] && [[ -f /usr/bin/portproton ]] ; then
try_remove_file "${HOME}/.local/share/applications/PortProton.desktop"
fi
echo "Restarting PP after installing..."
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ &
/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ &
exit 0
else
echo "Installation completed successfully."
fi
fi
unset INSTALLING_PORT

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,14 @@
#!/usr/bin/env bash
#Author: Castro-Fidel (linux-gaming.ru)
#SCRIPTS_NEXT_VERSION=2256
#SCRIPTS_NEXT_VERSION=2274
########################################################################
export PW_MANGOHUD="0"
export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode"
export DEFAULT_MANGOHUD_CONFIG="arch,cpu_mhz,cpu_temp,engine_version,gamemode,gpu_core_clock,gpu_mem_clock,gpu_name,gpu_temp,ram,resolution,vkbasalt,vram,vulkan_driver,wine"
export PW_VKBASALT_EFFECTS="Curves:cas"
export PW_VKBASALT_FFX_CAS="0.66"
export ENABLE_VKBASALT=1
export GAMESCOPE_ARGS="-F fsr"
export PW_USE_RUNTIME="1"
export PW_RT_MOUNT_RO=("")
export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}")
#export PW_SANDBOX_HOME_PATH="${PORT_WINE_PATH}"
@ -17,7 +18,7 @@ export PW_FORCE_USE_VSYNC="2"
export PW_USE_TERMINAL="0"
export PW_WINDOWS_VER="10"
export WINEARCH="win64"
export PW_LIBS_VER="_v46"
export PW_LIBS_VER="_v47"
export GDK_BACKEND="x11"
export PW_USE_GSTREAMER="1"
export PW_USE_D3D_EXTRAS="1"
@ -37,36 +38,37 @@ export PW_USE_GAMESCOPE="0"
# export GTK_THEME="Adwaita:dark"
###DEFAULT_WINE###
export PW_WINE_USE="PROTON_LG"
export PW_PLUGINS_VER="_v13"
export PW_PLUGINS_VER="_v15"
export PW_FAKE_DLSS_VER="230506"
export PW_FAKE_DLSS_3_VER="090"
export PW_GALLIUM_NINE_VER="0.9"
###WINE_AND_PROTON_LG###
export PW_PROTON_LG_VER="PROTON_LG_8-25-2"
export PW_PROTON_LG_VER="PROTON_LG_9-2"
export PW_WINE_LG_VER="WINE_LG_9-2"
export PW_WINE_FULLSCREEN_FSR="1"
###DXVK_AND_VKD3D###
export VKD3D_LIMIT_TESS_FACTORS="64"
export D8VK_VER="1.7.1-2367"
export DXVK_STABLE_VER="1.10.3-28"
export DXVK_GIT_VER="2.3-57"
export DXVK_GIT_VER="2.3.1"
export VKD3D_STABLE_VER="1.1-2602"
export VKD3D_GIT_VER="1.1-3908"
export VKD3D_GIT_VER="1.1-3973"
###PREFIX_VERSION###
export DOTPFX_VER="48v2"
export DOTPFX_VER="48v4"
export DEFPFX_VER="v1"
export PROGPFX_VER="v1"
export PW_MUST_WINEDLLOVERRIDES="steam_api,steam_api64,steamclient,steamclient64=n;dotnetfx35.exe,dotnetfx35setup.exe=b;winemenubuilder.exe="
#################################################################
export DXVK_CONFIG_FILE="${PORT_WINE_PATH}/data/dxvk.conf"
#################################################################
pw_install_dll_in_prefix ()
pw_list_install_dll_in_prefix ()
{
STANDART_DLL="d3dx9 d3dcompiler_43 d3dcompiler_47 physx mfc42 vcrun2022 sandbox corefonts tahoma lucida calibri faudio"
case $PW_PREFIX_NAME in
DEFAULT) export PW_MUST_HAVE_DLL="d3dx9 d3dcompiler_43 physx mfc42 vcrun2022 sandbox" ;;
DOTNET) export PW_MUST_HAVE_DLL="physx mfc42 vcrun2019 faudio dotnet48" ;;
PROGRAMS) export PW_MUST_HAVE_DLL="d3dx9 d3dcompiler_43 physx mfc42 vcrun2019 riched20 corefonts msxml3 msxml4 msxml6" ;;
*) export PW_MUST_HAVE_DLL="" ;;
DEFAULT) export PW_MUST_HAVE_DLL="$STANDART_DLL" ;;
DOTNET) export PW_MUST_HAVE_DLL="dotnet48" ;;
PROGRAMS) export PW_MUST_HAVE_DLL="riched20 msxml3 msxml4 msxml6" ;;
*) export PW_MUST_HAVE_DLL="sandbox" ;;
esac
}
########################################################################

View File

@ -1,811 +0,0 @@
#!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru)
########################################################################
yad_info () {
print_info "$@"
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --height=50 --borders=15 --title "INFO" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.png" \
--center --text-align=center --button=OK 2>/dev/null
}
export -f yad_info
yad_error () {
print_error "$@"
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --borders=15 --title "ERROR" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.png" \
--center --text-align=center --button=EXIT 2>/dev/null
}
export -f yad_error
yad_error_download () {
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --text "$loc_gui_error_download" --width=400 --borders=15 --title "$loc_gui_error" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.png" \
--no-wrap --center --text-align=center --button=SKIP:1 --button=REPEAT:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
}
gui_question () {
if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --text "${1}" --width=400 --borders=15 --title "${inst_set}." \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.png" \
--no-wrap --center --text-align=center --button=NO:1 --button=YES:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
}
pw_start_progress_bar_cover () {
if ! check_start_from_steam ; then
PW_GIF_FILE="$1"
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
return 0
fi
}
pw_start_progress_bar_cover_block () {
if ! check_start_from_steam ; then
[[ ! -f "${pw_yad}" ]] && local pw_yad="yad"
PW_GIF_FILE="$1"
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!"
return 0
fi
}
pw_update_pfx_cover_gui () {
if ! check_start_from_steam ; then
PW_KEY_PROGRESS_BAR=$RANDOM
PW_GIF_FILE="${PW_GUI_ICON_PATH}/covers/update_prefix_${update_loc}.gif"
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 40}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 80}'`
echo "UPDATE PREFIX..." > "${PORT_WINE_TMP_PATH}/update_pfx_log"
export PW_TIMER=0
while read -r line || [[ ! -z `pgrep -a yad | grep "yad_v12_3 --notebook --key="$PW_KEY_PROGRESS_BAR"" | awk '{print $1}'` ]] ; do
sleep 0.005
if [[ ! -z "${line}" ]] && [[ -z "`echo "${line}" | grep -i "gstreamer"`" ]] \
&& [[ -z "`echo "${line}" | grep -i "kerberos"`" ]] \
&& [[ -z "`echo "${line}" | grep -i "ntlm"`" ]]
then
echo "# ${line}"
fi
if [[ "${PW_TIMER}" != 1 ]] ; then
sleep 3
PW_TIMER=1
fi
done < "${PORT_WINE_TMP_PATH}/update_pfx_log" | "${pw_yad_v12_3}" --plug=$PW_KEY_PROGRESS_BAR --tabnum="2" --text-info --tail 2>/dev/null &
"${pw_yad_v12_3}" --plug=$PW_KEY_PROGRESS_BAR --tabnum="1" --picture --filename="${PW_GIF_FILE}" --image-on-top 2>/dev/null &
"${pw_yad_v12_3}" --notebook --key="$PW_KEY_PROGRESS_BAR" --tab=LOGO --tab=TERMINAL --no-buttons --undecorated \
--center --auto-close --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --tab-pos=bottom 2>/dev/null &
export PW_YAD_PID_PFX_COVER_UI="$!"
return 0
fi
}
pw_start_progress_bar_cs () {
if ! check_start_from_steam ; then
"${pw_yad}" --progress --progress-text="$@" --pulsate --close-on-unfocus \
--no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &>/dev/null &
export PW_YAD_PID_PROGRESS_BAR_CS="$!"
return 0
fi
}
pw_start_progress_bar_block () {
if ! check_start_from_steam ; then
"${pw_yad}" --progress --progress-text="$@" --pulsate \
--no-buttons --undecorated --center --skip-taskbar --width=500 --wrap-width=500 &>/dev/null &
export PW_YAD_PID_PROGRESS_BAR_BLOCK="$!"
return 0
fi
}
pw_stop_progress_bar () {
for PW_KILL_YAD_PID in "$PW_YAD_PID_PROGRESS_BAR_BLOCK" "$PW_YAD_PID_PROGRESS_BAR_CS" \
"$PW_YAD_PID_PFX_COVER_UI" "$PW_YAD_PID_PROGRESS_BAR_COVER"
do
kill -s SIGUSR1 "$PW_KILL_YAD_PID" &>/dev/null
done
return 0
}
export -f pw_stop_progress_bar
pw_stop_progress_bar_cover () {
kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER" &>/dev/null
return 0
}
export -f pw_stop_progress_bar_cover
pw_stop_progress_bar_cover_block () {
kill -s KILL "$PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK" &>/dev/null
return 0
}
export -f pw_stop_progress_bar_cover_block
open_changelog () {
"${pw_yad}" --title="$loc_gui_changelog" --borders=${YAD_BORDERS} --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \
--filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" &>/dev/null
}
export -f open_changelog
pw_tray_icon () {
if [ ! -z "`pgrep -a yad_v12_3 | grep "\--notification" | awk '{print $1}'`" ] ; then
kill -s SIGUSR1 "`pgrep -a yad_v12_3 | grep "\--notification" | awk '{print $1}'`"
fi
tray_icon_click () {
echo ""
}
export -f tray_icon_click
pw_tray_winefile () {
pw_run winefile "C:\\users\\${USER}\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\"
}
export -f pw_tray_winefile
pw_tray_taskmgr () {
pw_run taskmgr
}
export -f pw_tray_taskmgr
tray_icon_click_exit () {
pw_stop_progress_bar
stop_portwine
}
export -f tray_icon_click_exit
# --window-icon="$PW_GUI_ICON_PATH/portproton_tray.png" \
"${pw_yad_v12_3}" --notification --no-middle \
--image="$PW_GUI_ICON_PATH/portproton_tray.png" \
--command="bash -c tray_icon_click" \
--tooltip="PortProton" \
--menu="| \
${loc_tray_winefile}!bash -c pw_tray_winefile!"$PW_GUI_ICON_PATH/port_winefile.png"|| \
${loc_tray_tascmng}!bash -c pw_tray_taskmgr!"$PW_GUI_ICON_PATH/port_winefile.png"|| \
${loc_tray_cangelog}!bash -c open_changelog!"$PW_GUI_ICON_PATH/port_changelog.png"|| \
${loc_tray_force_exit} !bash -c tray_icon_click_exit!"$PW_GUI_ICON_PATH/port_exit.png"||" 2>/dev/null &
return 0
}
pw_gui_for_edit_db () {
KEY_EDIT_DB_GUI=$RANDOM
if [[ "${PW_WINE_CPU_TOPOLOGY}" == *[0-9]:* ]] && [[ "${PW_WINE_CPU_TOPOLOGY}" != "disabled" ]] ; then
CPU_LIMIT_VAR="`echo ${PW_WINE_CPU_TOPOLOGY%%:*}`"
else
CPU_LIMIT_VAR="disabled"
fi
# if [[ ! -z "${PW_AMD_VULKAN_USE}" ]] && [[ "${PW_AMD_VULKAN_USE}" != "disabled" ]] ; then
# AMD_VULKAN_VAR="${PW_AMD_VULKAN_USE}"
# else
# AMD_VULKAN_VAR="disabled"
# fi
if [[ ! -z "${PW_GPU_USE}" ]] && [[ "${PW_GPU_USE}" != "disabled" ]] ; then
GPU_VAR="${PW_GPU_USE}"
else
GPU_VAR="disabled"
fi
GET_GPU_NAMES=$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | awk -F '=' '/deviceName/{print $2}' | sed '/llvm/d'| sort -u | sed 's/^ //' | paste -sd '!')
logical_cores=$(grep -c "^processor" /proc/cpuinfo)
if [[ "${logical_cores}" -le "4" ]] ; then
GET_LOGICAL_CORE="1!$(seq -s! 1 $((${logical_cores} - 1)))"
else
GET_LOGICAL_CORE="1!2!$(seq -s! 4 4 $((${logical_cores} - 1)))"
fi
unset ADD_CHK_BOX_EDIT_DB
edit_db_field_add () {
for int_to_boole in $@ ; do
if [ "${!int_to_boole}" == "1" ]
then export ${int_to_boole}="TRUE"
else export ${int_to_boole}="FALSE"
fi
TMP_HELP_FOR_GUI="${int_to_boole}_INFO"
int_to_boole_non_pw="`echo ${int_to_boole} | sed 's/^PW_//' `"
ADD_CHK_BOX_EDIT_DB+="--field= ${int_to_boole_non_pw} !${!TMP_HELP_FOR_GUI}:CHK%${!int_to_boole}%"
done
}
edit_db_field_add $@
old_IFS=$IFS
IFS="%"
"${pw_yad_v12_3}" --plug=$KEY_EDIT_DB_GUI --tabnum="1" --form --separator=" " --columns=4 ${ADD_CHK_BOX_EDIT_DB} \
1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_edit_db" 2>/dev/null &
IFS=$old_IFS
case ${PW_WINDOWS_VER} in
"7") ADD_WINVER_EDIT_DB="7!10!XP" ;;
"XP") ADD_WINVER_EDIT_DB="XP!7!10" ;;
*) ADD_WINVER_EDIT_DB="10!7!XP" ;;
esac
# --field="${loc_gui_amd_vulkan_select}!${loc_gui_amd_vulkan_select_help} :CB" "${AMD_VULKAN_VAR}!disabled!amdvlk!amdgpupro!radv!radv_gpl!radv_aco"
"${pw_yad_v12_3}" --plug=$KEY_EDIT_DB_GUI --tabnum="2" --form --separator="%" --columns=1 \
--field="${loc_gui_ver_windows}!${loc_gui_ver_windows_help} :CB" "${ADD_WINVER_EDIT_DB}" \
--field="${loc_gui_aut_winetricks}!${loc_gui_aut_winetricks_help} :CBE" "${PW_DLL_INSTALL}!vcrun2019 corefonts lucida" \
--field="${loc_gui_winedllover}!${loc_gui_winedllover_help} :CBE" "${WINEDLLOVERRIDES}!libglesv2=!d3dx9_36,d3dx9_42=n,b;mfc120=b,n" \
--field=":LBL" "" \
--field="${loc_gui_arg_exe}!${loc_gui_arg_exe_help} :CBE" "\\${LAUNCH_PARAMETERS[@]}!-dx11 -skipintro 1" \
--field=":LBL" "" \
--field="${loc_gui_cpu_limit}!${loc_gui_cpu_limit_help} :CB" "${CPU_LIMIT_VAR}!disabled!${GET_LOGICAL_CORE}" \
--field="${loc_gui_gpu_select}!${loc_gui_gpu_select_help} :CB" "${GPU_VAR}!disabled!${GET_GPU_NAMES}" \
--field="${loc_gui_arg_gamescope}!${loc_gui_arg_gamescope_help} :CBE" "\\${GAMESCOPE_ARGS}!-r 60 -F fsr!" 2>/dev/null 1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_EDIT_DB_GUI" --title "EDIT_DB" --text-align=center --height="800" \
--text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=${YAD_BORDERS} \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="${loc_gui_cancel}"!!"${loc_gui_cancel_help}":1 \
--button="${loc_gui_reset_db}"!!"${loc_gui_reset_db_help}":2 \
--button="${loc_gui_open_db}"!!"${loc_gui_open_db_help}":150 \
--button="${loc_gui_save_changes}"!!"${loc_gui_save_changes_help}":0 2>/dev/null
YAD_STATUS="$?"
export SKIP_CHECK_UPDATES=1
case "$YAD_STATUS" in
1) /usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;;
2) try_remove_file "$portwine_exe".ppdb
/usr/bin/env bash -c ${pw_full_command_line[*]} & exit 0 ;;
150) xdg-open "${PORTWINE_DB_FILE}" & exit 0 ;;
252) exit 0 ;;
esac
output_yad_edit_db=(`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_edit_db"`)
bool_from_yad=0
edit_db_field_read () {
for boole_to_int in $@ ; do
export ${boole_to_int}=${output_yad_edit_db[$bool_from_yad]}
if [ "${!boole_to_int}" == "TRUE" ]
then export ${boole_to_int}="1"
else export ${boole_to_int}="0"
fi
export bool_from_yad=$(( ${bool_from_yad} + 1 ))
done
}
edit_db_field_read $@
PW_WINDOWS_VER="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $1}'`"
PW_DLL_INSTALL=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $2}'`
WINEDLLOVERRIDES=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $3}'`
LAUNCH_PARAMETERS=`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $5}'`
CPU_LIMIT="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $7}'`"
PW_GPU_USE="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $8}'`"
GAMESCOPE_ARGS="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $9}'`"
# PW_AMD_VULKAN_USE="`cat "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" | awk -F"%" '{print $10}'`"
if [[ "${CPU_LIMIT}" != "disabled" ]] ; then
export PW_WINE_CPU_TOPOLOGY="${CPU_LIMIT}:$(seq -s, 0 $((${CPU_LIMIT} - 1)))"
else
export PW_WINE_CPU_TOPOLOGY="disabled"
fi
echo "pw_gui_for_edit_db PORTWINE_DB_FILE=$PORTWINE_DB_FILE"
edit_db_from_gui $@ LAUNCH_PARAMETERS PW_WINDOWS_VER PW_DLL_INSTALL WINEDLLOVERRIDES PW_WINE_CPU_TOPOLOGY GAMESCOPE_ARGS
edit_user_conf_from_gui PW_GPU_USE
# PW_AMD_VULKAN_USE
return 0
}
gui_proton_downloader () {
if [[ "$PW_WINE_USE" == PROTON_LG ]]
then export PW_WINE_USE="${PW_PROTON_LG_VER}"
elif [[ "$PW_WINE_USE" == WINE_*_LG ]] || [[ "$PW_WINE_USE" == WINE_LG ]]
then export PW_WINE_USE="${PW_WINE_LG_VER}"
fi
if [[ "$1" == "silent" ]] && [[ -d "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" ]] ; then
return 0
fi
pw_start_progress_bar_block "$loc_gui_check_new_wine"
#PROTON_GE
export PROTON_GE_GIT=($(curl -s "https://api.github.com/repos/GloriousEggroll/proton-ge-custom/releases" | grep "browser_download_url.*\.tar\.gz" | cut -d \" -f 4))
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
if [[ ! -z "${PROTON_GE_GIT}" ]] ; then
for PGEGIT in ${PROTON_GE_GIT[@]} ; do
echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.gz//' >> "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
done
sed -i '/Proton-6.5-GE-2/,$d' "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
sed -i '/github-action/d' "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
fi
#WINE_KRON4EK
export WINE_KRON4EK=($(curl -s "https://api.github.com/repos/Kron4ek/Wine-Builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4))
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
if [[ ! -z "${WINE_KRON4EK}" ]] ; then
for PGEGIT in ${WINE_KRON4EK[@]} ; do
echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
done
sed -i '/6.3/,$d' "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
sed -i '/-x86/d' "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
fi
#WINE_GE_CUSTOM
export WINE_GE_CUSTOM=($(curl -s "https://api.github.com/repos/GloriousEggroll/wine-ge-custom/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4))
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git"
if [[ ! -z "${WINE_GE_CUSTOM}" ]] ; then
for PGEGIT in ${WINE_GE_CUSTOM[@]} ; do
echo ${PGEGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git"
done
sed -i '/6.23/,$d' "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git"
fi
#PROTON_LG
export PROTON_PW_GIT=($(curl -s "https://api.github.com/repos/Castro-Fidel/wine_builds/releases" | grep "browser_download_url.*\.tar\.xz" | cut -d \" -f 4))
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
if [[ ! -z "${PROTON_PW_GIT}" ]] ; then
for PPWGIT in ${PROTON_PW_GIT[@]} ; do
echo ${PPWGIT} | awk -F/ '{print $NF}' | sed 's/.tar.xz//' >> "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
done
sed -i /${PW_WINE_LG_VER}/d "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
sed -i '/plugins/d' "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
fi
pw_stop_progress_bar
if [[ -z "${PROTON_GE_GIT}" ]] || [[ -z "${PROTON_PW_GIT}" ]] ; then
yad_error "$loc_gui_check_new_wine_error"
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
for INSTALLING_VERSION_IN_DIST in `ls "${PORT_WINE_PATH}/data/dist/"` ; do
sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
sed -i "/${INSTALLING_VERSION_IN_DIST}$/Id" "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git"
done
#Installed wine
ls -l ${PORT_WINE_PATH}/data/dist | awk '{print $9}' | sed '/^$/d' > ${PORT_WINE_TMP_PATH}/tmp_installed_wine
if [[ "$1" != "silent" ]] ; then
#GUI
export KEY_WINE=$RANDOM
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_set"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set"
`"${pw_yad}" --plug=$KEY_WINE --tabnum=1 --list --separator="" --listen \
--column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git" 1> "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set" 2>/dev/null` &
`"${pw_yad}" --plug=$KEY_WINE --tabnum=2 --list --separator="" --listen \
--column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git" 1> "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set" 2>/dev/null` &
`"${pw_yad}" --plug=$KEY_WINE --tabnum=3 --list --separator="" --listen \
--column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git" 1> "${PORT_WINE_TMP_PATH}/tmp_proton_set" 2>/dev/null` &
`"${pw_yad}" --plug=$KEY_WINE --tabnum=4 --list --separator="" --listen \
--column "$loc_gui_set_new_wine" < "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git" 1> "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set" 2>/dev/null` &
`"${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --separator="" --listen \
--column "$loc_gui_del_wine" < "${PORT_WINE_TMP_PATH}/tmp_installed_wine" 1> "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" 2>/dev/null` &
`"${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "WINE MANAGER" --separator="" \
--tab-pos=top --tab="PROTON-LG" --tab="WINE-KRON4EK" --tab="PROTON-GE" --tab="WINE-GE-CUSTOM" --tab="$loc_gui_installed_wine" 2>/dev/null`
YAD_WINE_STATUS="$?"
if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
if [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_proton_set" | awk '{print $1}'` ] ; then
export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_proton_set"`"
elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set" | awk '{print $1}'` ] ; then
export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_proton_pw_set"`"
elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set" | awk '{print $1}'` ] ; then
export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_kron4ek_set"`"
elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set" | awk '{print $1}'` ] ; then
export VERSION_WINE_GIT="`cat "${PORT_WINE_TMP_PATH}/tmp_ge_custom_set"`"
elif [ ! -z `cat "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" | awk '{print $1}'` ] ; then
export VERSION_INSTALLED_WINE="`cat "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set"`"
else
print_info "Nothing to do."
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_pw_git"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_kron4ek_git"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_proton_ge_git"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_wine_ge_custom_git"
try_remove_file "${PORT_WINE_TMP_PATH}/tmp_installed_wine"
elif [[ "$1" == "silent" ]] && [[ ! -z "$2" ]] ; then
VERSION_WINE_GIT="$2"
fi
for GIVE_WINE_URL in ${PROTON_GE_GIT[@]} ${PROTON_PW_GIT[@]} ${WINE_KRON4EK[@]} ${WINE_GE_CUSTOM[@]} ; do
if [ ! -z `echo ${GIVE_WINE_URL} | grep -i "${VERSION_WINE_GIT}"` ] ; then
export URL_VERSION_PROTON_GIT="${GIVE_WINE_URL}"
break
fi
done
if [[ ! -z "${VERSION_INSTALLED_WINE}" ]]; then
try_remove_dir "${PORT_WINE_PATH}/data/dist/${VERSION_INSTALLED_WINE}"
unset VERSION_INSTALLED_WINE
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
fi
print_info "Download and install ${VERSION_WINE_GIT}..."
PW_WINE_ARCHIVE="$(echo ${URL_VERSION_PROTON_GIT} | awk -F'/' '{print $NF}' | awk -F'.tar' '{print $1}')"
if try_download_to_path "${URL_VERSION_PROTON_GIT}" "${PORT_WINE_PATH}/data/tmp/" ; then
for archive_type in "gz" "xz" ; do
if [ -f "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" ] ; then
if unpack_tar_${archive_type} "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" "${PORT_WINE_PATH}/data/dist/" ; then
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}"
if [ ! -z "${portwine_exe}" ]; then
PW_WINE_USE=${VERSION_WINE_GIT}
edit_db_from_gui PW_WINE_USE
fi
else
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_ARCHIVE}"
yad_error_download && gui_proton_downloader || exit 1
fi
fi
done
else
yad_error_download && gui_proton_downloader || exit 1
fi
if [[ "$1" != "silent" ]] ; then
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
else
init_wine_ver
fi
}
export -f gui_proton_downloader
gui_vkBasalt () {
KEY_FX_GUI=$RANDOM
FILE_VKBASALT_CONF="${PORT_WINE_PATH}/data/vkBasalt.conf"
LIST_FX=(`grep -E '.fx$|.fxh$' "${FILE_VKBASALT_CONF}" | awk '{print $1}'`)
GET_FX_IN_FILE=(`echo ${PW_VKBASALT_EFFECTS} | sed s/"cas:"// | sed s/":"/" "/g`)
unset ADD_GUI_FX GUI_FX_RESULT
for add_list_fx in ${LIST_FX[@]} ; do
PW_VKBASALT_GUI_HELP="PW_${add_list_fx}_INFO"
if [[ ! -z `echo " ${GET_FX_IN_FILE[@]} " | grep " ${add_list_fx} "` ]] ; then
ADD_GUI_FX+="--field=$add_list_fx!${!PW_VKBASALT_GUI_HELP}:CHK%TRUE%"
else
ADD_GUI_FX+="--field=$add_list_fx!${!PW_VKBASALT_GUI_HELP}:CHK%FALSE%"
fi
done
if [[ ! -z "${PW_VKBASALT_FFX_CAS}" ]] ; then
if [[ "$PW_VKBASALT_FFX_CAS" == "0" ]]
then export VKBASALT_FFX_CAS_GUI="0"
elif [[ "$PW_VKBASALT_FFX_CAS" == "1" ]]
then export VKBASALT_FFX_CAS_GUI="100"
elif [[ "$PW_VKBASALT_FFX_CAS" == 0.0* ]]
then export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.0' '{print $2}')"
else export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.' '{print $2}')"
fi
else
VKBASALT_FFX_CAS_GUI=66
fi
export old_IFS=$IFS
export IFS="%"
"${pw_yad_v12_3}" --plug=$KEY_FX_GUI --tabnum="1" --form --columns=5 --separator=" " \
--text-align=center --text="$loc_gui_vkbasalt_top" \
${ADD_GUI_FX} 1> "${PORT_WINE_TMP_PATH}/tmp_yad_basalt_set" 2>/dev/null &
export IFS="${old_IFS}"
"${pw_yad_v12_3}" --plug=$KEY_FX_GUI --tabnum="2" --separator=" " --form \
--field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$loc_gui_ffx_cas":SCL "${VKBASALT_FFX_CAS_GUI}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_vkbas"!!"$loc_gui_disabled_vkbas_help":180 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":182 2>/dev/null
YAD_VKBASALT_STATUS="$?"
case "${YAD_VKBASALT_STATUS}" in
1|252)
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0 ;;
180)
export ENABLE_VKBASALT=0 ;;
182)
export ENABLE_VKBASALT=1 ;;
esac
YAD_BASALT_SET=`cat "${PORT_WINE_TMP_PATH}/tmp_yad_basalt_set"`
YAD_CAS_SET=`cat "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" | sed s/" "//g`
INT_COUNT_FX=0
for read_list_fx in ${YAD_BASALT_SET} ; do
if [[ "$read_list_fx" == "TRUE" ]] ; then
export GUI_FX_RESULT+="${LIST_FX[$INT_COUNT_FX]}:"
fi
((INT_COUNT_FX++))
done
GUI_FX_RESULT="${GUI_FX_RESULT}cas"
export PW_VKBASALT_EFFECTS="${GUI_FX_RESULT}"
if [[ "$YAD_CAS_SET" == "0" ]]
then export PW_VKBASALT_FFX_CAS="0"
elif [[ "$YAD_CAS_SET" == "100" ]]
then export PW_VKBASALT_FFX_CAS="1"
elif [[ "$YAD_CAS_SET" -lt 10 ]]
then export PW_VKBASALT_FFX_CAS="0.0$YAD_CAS_SET"
else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET"
fi
edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS ENABLE_VKBASALT
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0
}
gui_MangoHud () {
KEY_MH_GUI=$RANDOM
LIST_MH=(
arch battery battery_icon battery_time battery_watt core_bars core_load
cpu_mhz cpu_power cpu_temp device_battery_icon engine_short_names
engine_version exec_name fcat fps_metrics frame_count frametime full
gamemode gpu_core_clock gpu_fan gpu_junction_temp gpu_mem_clock
gpu_mem_temp gpu_name gpu_power gpu_temp gpu_voltage histogram horizontal
horizontal_stretch hud_compact hud_no_margin io_read io_write no_display
no_small_font procmem procmem_shared procmem_virt ram resolution
show_fps_limit swap temp_fahrenheit throttling_status throttling_status_graph
time version vkbasalt vram vulkan_driver wine
)
# fps_only
unset ADD_GUI_MH GUI_MH_RESULT
GET_REFRESH_RATE="30!45!60!75!120!144!165!240"
if [[ -z "$FPS_LIMIT" ]]; then
FPS_LIMIT_VAR="disabled"
else
FPS_LIMIT_VAR="${FPS_LIMIT}"
fi
if [ -n "$MANGOHUD_CONFIG" ]; then
PW_MANGOHUD_CONFIG=($(echo "$MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '='))
else
PW_MANGOHUD_CONFIG=($(echo "$DEFAULT_MANGOHUD_CONFIG" | tr ',' '\n' | grep -v '='))
fi
for add_list_mh in "${LIST_MH[@]}"; do
PW_MH_GUI_HELP="PW_MH_${add_list_mh}_INFO"
if [[ -n "$(grep -wo "$add_list_mh" <<<"${PW_MANGOHUD_CONFIG[@]}")" ]]; then
ADD_GUI_MH+="--field= $add_list_mh !${!PW_MH_GUI_HELP}:CHK%TRUE%"
else
ADD_GUI_MH+="--field= $add_list_mh !${!PW_MH_GUI_HELP}:CHK%FALSE%"
fi
done
export old_IFS=$IFS
export IFS="%"
"${pw_yad_v12_3}" --plug=$KEY_MH_GUI --tabnum="1" --form --columns=5 --separator=" " \
--text-align=center --text="$loc_gui_mh_top" \
${ADD_GUI_MH} 1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_set" 2>/dev/null &
export IFS="${old_IFS}"
"${pw_yad_v12_3}" --plug=$KEY_MH_GUI --tabnum="2" --separator=" " --form \
--field="${loc_gui_mango_fps}!${loc_gui_mango_fps_help} :CB" "${FPS_LIMIT_VAR}!disabled!${GET_REFRESH_RATE}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_mh"!!"$loc_gui_disabled_mh_help":182 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":184 2>/dev/null
YAD_MANGOHUD_STATUS="$?"
case "${YAD_MANGOHUD_STATUS}" in
1 | 252)
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c "${pw_full_command_line[*]}" &
exit 0
;;
182)
export PW_MANGOHUD=0
export FPS_LIMIT="disabled"
edit_db_from_gui PW_MANGOHUD FPS_LIMIT
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c "${pw_full_command_line[*]}" &
exit 0
;;
184)
export PW_MANGOHUD=1
;;
esac
YAD_MH_SET=$(<"${PORT_WINE_TMP_PATH}/tmp_yad_mh_set")
FPS_LIMIT=$(cat "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" | awk '{print $1}')
MONITOR_HEIGHT="$(echo $PW_SCREEN_RESOLUTION | awk -F'x' '{print $2}')"
MH_FONT_SIZE="font_size=$(( MONITOR_HEIGHT / 45 ))"
export INT_COUNT_MH=0
for read_list_mh in ${YAD_MH_SET} ; do
if [[ "$read_list_mh" == "TRUE" ]]
then export GUI_MH_RESULT+="${LIST_MH[$INT_COUNT_MH]},"
fi
((INT_COUNT_MH++))
done
if [[ -n "$MH_FONT_SIZE" ]]
then GUI_MH_RESULT="${GUI_MH_RESULT}${MH_FONT_SIZE}"
else GUI_MH_RESULT="${GUI_MH_RESULT%,}"
fi
if [[ "${FPS_LIMIT}" != "disabled" ]] ; then
export GUI_MH_RESULT=${GUI_MH_RESULT},fps_limit=${FPS_LIMIT}
export PW_MANGOHUD=1
elif [[ "${FPS_LIMIT}" == "disabled" ]]
then export GUI_MH_RESULT="$(echo ${GUI_MH_RESULT} | sed "s/,fps_limit=${FPS_LIMIT_VAR}//" | sed "s/,fps_limit=disabled//")"
fi
if [[ "${GUI_MH_RESULT}" =~ "fps_only" ]]; then
export GUI_MH_RESULT="fps_only"
print_info "In the MangoHud config fps_only is detected all settings are reseted"
fi
export MANGOHUD_CONFIG="${GUI_MH_RESULT}"
edit_db_from_gui MANGOHUD_CONFIG PW_MANGOHUD FPS_LIMIT
export SKIP_CHECK_UPDATES=1
/usr/bin/env bash -c "${pw_full_command_line[*]}" &
exit 0
}
portwine_create_shortcut () {
pw_create_gui_png
pw_stop_progress_bar
if [[ "$1" == "block_name" ]] ; then
export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \
--field=" ${name_desktop}":LBL "" \
--field=" ${sc_menu_desktop}":CHK "TRUE" \
--field=" ${sc_desktop_desktop}":CHK "TRUE" \
--field=" ${sc_add_in_steam}":CHK "FALSE" \
--button="$loc_gui_create_shortcut":0)
PW_YAD_OUT=$?
else
export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \
--field="${sc_name}:" "${name_desktop}" \
--field=" ${sc_menu_desktop}":CHK "TRUE" \
--field=" ${sc_desktop_desktop}":CHK "TRUE" \
--field=" ${sc_add_in_steam}":CHK "FALSE" \
--button="$loc_gui_create_shortcut":0)
PW_YAD_OUT=$?
fi
if [[ "$PW_YAD_OUT" == "0" ]] ; then
if [[ "$1" == "block_name" ]]
then name_desktop="$PORTWINE_CREATE_SHORTCUT_NAME"
else name_desktop=$(echo "$OUTPUT" | awk -F'|' '{print $2}')
fi
create_menu_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $3}')
create_desktop_desktop_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $4}')
create_menu_steam_shortcut=$(echo "$OUTPUT" | awk -F'|' '{print $5}')
try_remove_file "${PORT_WINE_PATH}/${name_desktop}.desktop"
if [[ "${PORTPROTON_NAME}" != "${name_desktop}" ]]
then mv -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" "${PORT_WINE_PATH}/data/img/${name_desktop}.png"
fi
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
if grep -i "flatpak" /etc/os-release &>/dev/null
then echo "Exec=flatpak run com.castrofidel.portproton \"${portwine_exe}\" " >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
else echo "Exec=env "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" "" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
fi
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/${name_desktop}.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
if [[ "${create_menu_desktop_shortcut}" == "TRUE" ]] ; then
try_remove_file "${HOME}/.local/share/applications/${name_desktop}.desktop"
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/.local/share/applications/"
fi
if [[ "${create_desktop_desktop_shortcut}" == "TRUE" ]] ; then
if [[ -d "${HOME}/Desktop" ]] ; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Desktop/"
elif [[ -d "${HOME}/Рабочий стол" ]] ; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "${HOME}/Рабочий стол/"
elif [[ $(xdg-user-dir DESKTOP) ]] ; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" "$(xdg-user-dir DESKTOP)"
fi
fi
if [[ "${create_menu_steam_shortcut}" == "TRUE" ]] ; then
export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts"
create_new_dir "${STEAM_SCRIPTS}"
echo "#!/usr/bin/env bash" > "${STEAM_SCRIPTS}/${name_desktop}.sh"
echo "export START_FROM_STEAM=1" >> "${STEAM_SCRIPTS}/${name_desktop}.sh"
echo "export LD_PRELOAD=" >> "${STEAM_SCRIPTS}/${name_desktop}.sh"
if grep -i "flatpak" /etc/os-release &>/dev/null
then echo "flatpak run com.castrofidel.portproton \"${portwine_exe}\" " >> "${STEAM_SCRIPTS}/${name_desktop}.sh"
else echo "\"${PORT_SCRIPTS_PATH}/start.sh\" \"${portwine_exe}\" " >> "${STEAM_SCRIPTS}/${name_desktop}.sh"
fi
chmod u+x "${STEAM_SCRIPTS}/${name_desktop}.sh"
export SCVDF="shortcuts.vdf"
for STUIDPATH in "${HOME}"/.local/share/Steam/userdata/*/ ; do
create_new_dir "${STUIDPATH}/config/"
export SCPATH="${STUIDPATH}/config/$SCVDF"
"${PORT_SCRIPTS_PATH}/add_in_steam.sh"
done
if [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && pgrep -i steam &>/dev/null ; then
if gui_question "$sc_restert_steam" ; then
pw_start_progress_bar_block "Restarting STEAM... Please wait."
kill -s SIGTERM $(pgrep -a steam) &>/dev/null
while pgrep -i steam &>/dev/null ; do
sleep 0.5
done
steam &
sleep 5
pw_stop_progress_bar
exit 0
fi
fi
unset PW_SKIP_RESTART_STEAM
fi
[[ "$1" != silent ]] && [[ "${PW_SKIP_RESTART_STEAM}" != 1 ]] && "${PORT_WINE_PATH}" 2>1 >/dev/null &
fi
}
portwine_delete_shortcut () {
rm -f "$(grep -il "${portwine_exe}" "${HOME}/.local/share/applications"/*.desktop)" &>/dev/null
rm -f "$(grep -il "${portwine_exe}" "${PORT_WINE_PATH}"/*.desktop)" &>/dev/null
# rm -f "$(grep -il "${portwine_exe}" "${STEAM_SCRIPTS}"/*.sh)" &>/dev/null
if [[ -d "${HOME}/Desktop" ]] ; then
rm -f "$(grep -il "${portwine_exe}" "${HOME}/Desktop"/*.desktop)" &>/dev/null
elif [[ -d "${HOME}/Рабочий стол" ]] ; then
rm -f "$(grep -il "${portwine_exe}" "${HOME}/Рабочий стол"/*.desktop)" &>/dev/null
elif [[ $(xdg-user-dir DESKTOP) ]] ; then
rm -f "$(grep -il "${portwine_exe}" "$(xdg-user-dir DESKTOP)"/*.desktop)" &>/dev/null
fi
}
portwine_missing_shortcut () {
"${pw_yad}" --title="${loc_gui_error}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "$PW_GUI_ICON_PATH/error_file.png" \
--text "$loc_gui_missing_shortcut" \
--button="$loc_gui_delete_shortcut":0 \
--button="$loc_cancel":1
if [ $? -eq "0" ] ; then
portwine_delete_shortcut
fi
exit 0
}

View File

@ -0,0 +1,22 @@
export THEME_NAME="$(basename .pptheme)"
export THEME_PATH="$PW_GUI_THEMES_PATH/$THEME_NAME"
export YAD_OPTIONS="--css=$THEME_PATH/style.css \
--borders=5 \
--tab-borders=3 \
--keep-icon-size \
"
export THEME_CHKBOX=CHK
export CHKBOX_SPACE=" "
export BUTTON_SIZE_MM=32
export BUTTON_SIZE=24
export TAB_SIZE=28
export PW_MAIN_SIZE_W=1100
export PW_MAIN_SIZE_H=350
export MAIN_GUI_COLUMNS=3
export PROGRESS_BAR_BORDERS_SIZE=20
export PROGRESS_BAR_WIDTH_SIZE=500

View File

@ -0,0 +1,34 @@
# определение названия и пути темы
export THEME_NAME="$(basename .pptheme)"
export THEME_PATH="$PW_GUI_THEMES_PATH/$THEME_NAME"
# глобальные настройки YAD
export YAD_OPTIONS="--css=$THEME_PATH/style.css \
--borders=3 \
--tab-borders=0 \
--keep-icon-size \
"
# настройка переключателей
export THEME_CHKBOX=SW # CHK - галки, SW - слайдер
export CHKBOX_SPACE=" " # растояние перед текстом
# размер кнопок в главном меню
export BUTTON_SIZE_MM=36 # 24, 28, 32, 36, 40
# размер остальных кнопок
export BUTTON_SIZE=28 # 24, 28, 32, 36, 40
# размер вкладок
export TAB_SIZE=32 # 24, 28, 32, 36, 40
# размер главного меню
export PW_MAIN_SIZE_W=1100
export PW_MAIN_SIZE_H=350
# количество столбцов в главном меню
export MAIN_GUI_COLUMNS=4
# настройки индикатора прогресса
export PROGRESS_BAR_BORDERS_SIZE=20
export PROGRESS_BAR_WIDTH_SIZE=500

View File

@ -4,7 +4,7 @@
########################################################################
unset PW_AUTOPLAY PW_SET_LANG PW_SILENT_INSTALL
export portname="PortProton"
export port_ver=1.4
export port_ver=1.5
########################################################################
cd "$(dirname "$(readlink -f "$0")")"
script_path="$(pwd)"
@ -14,27 +14,12 @@ fatal () {
echo -e "\n${1}\n"
exit 1
}
pw_notify_send () {
if command -v notify-send &>/dev/null ; then
if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]]
then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}"
fi
fi
}
########################################################################
if [ "$(id -u)" == "0" ] ; then
$yad_gui --error --text "\nDo not run ${portname} from the superuser!" 2>/dev/null
fatal "Do not run the script from the superuser!"
fi
########################################################################
unset PW_USE_NS
if command -v yad &>/dev/null
then yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center"
else PW_USE_NS=1
fi
[ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share"
PP_CONFIG_FILE="${HOME}/.config/${portname}.conf"
if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
@ -53,11 +38,39 @@ if [ "$script_path" == "/usr/bin" ] && [ -f "${PP_CONFIG_FILE}" ] ; then
rm -f "${PP_CONFIG_FILE}"
fi
fi
if locale | grep "LANG=ru_RU.UTF-8" 2>/dev/null
if [[ "${LANG}" == "ru_RU.UTF-8" ]]
then PW_SET_LANG="Russian"
else PW_SET_LANG="English"
fi
########################################################################
pw_notify_send () {
if command -v notify-send &>/dev/null ; then
if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]]
then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}"
fi
fi
}
########################################################################
unset PW_USE_NS
YAD_PORTABLE_VER="12_3"
if command -v yad &>/dev/null ; then
yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center"
elif curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \
-H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
-L "https://github.com/Castro-Fidel/PortWINE/releases/download/yad_portable_v${YAD_PORTABLE_VER}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz" \
-o "${HOME}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz"
then
mkdir -p "${HOME}/.local/bin/" &>/dev/null
tar -Jxhvf "${HOME}/yad_portable_v${YAD_PORTABLE_VER}.tar.xz" -C "${HOME}/.local/bin/"
if [[ -f "${HOME}/.local/bin/yad_portable_v${YAD_PORTABLE_VER}" ]]
then yad_gui="${HOME}/.local/bin/yad_portable_v${YAD_PORTABLE_VER} --borders=10 --center --text-align=center"
else PW_USE_NS=1
fi
else
PW_USE_NS=1
fi
########################################################################
export PW_SILENT_INSTALL=1
export PW_AUTOPLAY=1
export INSTALLING_PORT=1
@ -75,7 +88,6 @@ if [[ "${PW_USE_NS}" != "1" ]] ; then
"${def_path}")
D_PATH="${def_path}" ;;
"Другой путь...")
echo 111
D_PATH="$($yad_gui --file --directory --title="Выберите путь..." --width=800 --height=800)" ;;
esac ;;
"English")
@ -134,12 +146,12 @@ fi
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
cd "${PORT_WINE_PATH}"
echo -e "\nTry download scripts from gitlab.eterfund.ru..."
if ! curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
if ! curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
-L "https://gitlab.eterfund.ru/Castro-Fidel/PortWINE/-/archive/master/PortWINE-master.tar.gz" \
-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
then
echo -e "\nError.\nTry download scripts from github.com..."
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
curl -f -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
-L "https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" \
-o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
[ "$?" != "0" ] && fatal "Critical error during file download!"