novoevmire.biz
Программы

World Of Tanks Linux

Решил (не являясь танкистом) ради интереса запустить актуальную версию WoT используя обычный Wine в Linux Mint 17.3
Оказалось, что запустить пресловутые «танки» оказалось довольно легко :smile:

Итак, приступим.
Для начала разумеется потребуется сам wine-staging и winetricks Методику их установки можно посмотреть здесь и здесь соответственно

Теперь доустановим DirectX командой winetricks directx9 (Его предложит заинсталлить и установщик клиента игры, но мы позаботимся заранее).
Затем переназначим две библиотеки в winecfgmsvcr110 и msvcp110 нужно выставить в «Сторонняя, затем встроенная» Можно приступать к установке, для этого я взял веб-инсталлер с официального сайта игры: Игра успешно устанавливается, стартует лаунчер, подгружаются основные файлы игры: Для предотвращения падений лаунчера при обновлении — необходимо отключить торрент-обновление, для этого в файле WoTlauncher.cfg в папке с игрой нужно в строке <launcher_transport>3</launcher_transport> поменять значенчение на двойку.

На этапе когда установка и обновление завершится — потребуется еще одно действие: игра норовит запускаться на d3d11, с которым у меня возникли явные проблемы — интерфейс не видно, текстуры мерцают, все довольно печально и неиграбельно
Лечится это дело ключом запуска -clientGraphicsAPI d3d9 к исполняемому файлу игры WorldOfTanks.exe

Лаунчер запускает игру дефолтным образом, поэтому можно создать отдельный ярлык запуска игры с нужной опцией запуска, строка запуска получается примерно такой: На этом проблемы заканчиваются и жестко указав ей использовать d3d9 — игра успешно стартует и отлично работает:
Для запуска не потребовалось десятков костылей, сторонних скриптов, долгих плясок с мануалами и либами, возможно кому-то этот опыт будет полезным :smile:

 

 

The World of Tanks Development Team wishes to thank player wilderwind for help during the production of this guide.

 


 

Launching World of Tanks under Linux OS: Constructing Wine from scratch.

It should be mentioned that the method described below is related to the so-called Debian-based distributives on GNU/Linux OS. An example is Ubuntu, which is one of the easiest to understand systems of this type. The main difference from Ubuntu is the desktop environment used – KDE instead of Gnome3 or Unity.  However, the instructions will be the same in Gnome, XFCE, LXDE and similar environments. Use of specific shell is a question of taste, and comfort is question of habit.

Everything described below presupposes basic knowledge of the ОS GNU/Linux: such as what the login directory is, what commands are used for data terminal (or command string), what are sudo and root, and what they can do etc. This knowledge will help you to keep your software up to date, to track changes flexibly, to avoid hardware and software incompatibility, to fix occurring errors with the help of various patches and applications, and many more.  In addition, a well-compiled Wine helps to successfully run other Windows applications or games.

In order to launch the game, Wine is needed – this is a layer between Windows-apps and system requests of the ОS GNU/Linux.

Visit http://www.winehq.org/.  To the right you will see the Latest Release block in which there are two lines: Stable and Development. The first is a stable release of Wine and the second is the latest version available at present. Which one to choose is completely up to you.  However it may be better to use the Development version as new features might be added to it, previous functionality could be improved and programs might work faster.

«>

«>

Winetricks from Dan Kegel should be downloaded next – this is a command script which will help to significantly simplify the installation of some Wine components and it further adjusting.

Visit http://wiki.winehq.org/ and save the script to your parent folder according to the instructions, save the script into the root folder. Do not forget to assign an “executive” attribute to it. In order to do so, please open the terminal menu and execute the following command: chmod +x winetricks . After this, the application can be launched with a double click as if it were from the command string. The script is a fairly user-friendly interface.

There is a problem in Wine concerning a raw input API which leads to the in-game cursor not functioning. In order to eliminate this problem a, Wine patch by Vincas Miliūnas should be installed:

  • Download the patch file (In order to improve performance a bit (in-game FPS amount) another patch could be used which is located here).
  • Put both patch files into this folder
  • Launch terminal, go to the extracted files catalog. Catalog shifting is done via the cd command, Tab button helps not write catalogs’ full names.
  • Apply the previously downloaded patches with the help of the patch -p1 < file_name.patch. command. The sequence of the patches does not matter.
  • Execute ./tools/make_requests command (to register the changes made by the patches) 
  • Optionally: execute autoheader and autoconf . However, everything works without them as well.
  • IMPORTANT! The Wine app has a lot of dependencies. In order to tune them all automatically, please execute the sudo apt-get build-dep wine command and accept the presented suggestions.
  • Configure Wine with a sudo ./configure command (Alternatively, use the long form:  cd folder name where dowloanded file is located, then cd downloaded file name, then ./configure). Additional configuration parameters might be needed if there are some errors with the game launching.
  • You should see something like «configure: Finished.  Do 'make' to compile Wine» when finished.
  • Start the build with the help of the sudo make -j4 command, where j4 is the amount of the simultaneously run tasks. If you have multi-core processor this parameter can b changed (increase by several digits) and achieve a faster build process (for tests was used  Intel Core i7, OS identifies 8 cores (4 physical + Hyper-Threading technology), it will take a few minutes for the build with — j8
  • When the build is finished you will see the following message:  Wine build complete. Execute the sudo make install command.
  • After finishing the previous command, restart the Wine app with the wineboot command. When doing so, the program will ask you to install Wine Mono and Wine Gecko — please do it.
  • In order to launch the game, some components need to be installed with the help of the Winetricks. Please execute the winetricks d3dx9_36 vcrun2008 corefonts msxml3 wininet ie7 command.  You may need to run another command afterwards:  sudo apt-get install winetricks This will help to launch not only the game, but the launcher (WOTLauncher.exe) as well, for checking and installing updates.
  • And finally go to the game folder, run WorldofTanks.exe and enjoy the game.
Some peculiarities of the above mentioned method:
  • On Wine 1.5.8 (the latest updated available at the time of the article creation) the artillery regime works without buttons reassigning (Shift button)
  • The game’s configuration file is located in the root folder: .wine/drive_c/users/<username>/Application Data/Wargaming.net/WorldOfTanks/preferences.xml.  The screen resolution can be changed as from the settings of the game itself, by adjusting the configuration file in the Device preferences chapter. If you have adjusted the game in the way that problems with launching it appear — just delete this file. The game will create a brand new one with default settings during the next game launch.
  • On the GNU/Linux OS the game minimized and maximized incorrectly while in the fullscreen mode.
  • Another virtual desktop might be used (not a separate X-server!) for the sake of convenience and launching the game in windowed-mode; these steps will help to easily switch between desktops and not have to close the game every time. The multiple virtual desktop functions are available in the majority of modern distributive kits.
  • The sound works perfectly.

 

ATTENTION! The following addition is only for the owners of the NVidia video card (or laptop with that kind of video card) equipped with the Optimus technology.

What does this technology look like? There are two types of the video cards in the system: motherboard build-in (usually Intel HD Graphics 3000 designed for battery energy economy) and discrete (dynamically plugged in) which is designed for supporting “heavy” video applications. Despite the fact that there are Optimus-video card drivers for Linux on the manufacturer’s website, all attempts to install them lead to the X-server crashing and general unstable behavior of the system. That is why a group of enthusiasts started a project devoted to this problem: http://bumblebee-project.org/, which helps to use the Optimus technology. Although its install instruction does fit the frameworks of this guide, there is already a special command for World of Tanks (which is not differs much from traditional game launching using Wine)

optirun -c proxy wine /route_to_game_folder/World_of_Tanks/WorldOfTanks.exe

Simply create a shortcut for the game launch so that you don’t have to launch it through the terminal every time. A small clarification: optirun – is a Bumblebee itself, -c proxy — is a ‘communication’ method of the build-in and discrete video cards which create the highest FPS rate, i.e. as the resource-intensive video processes are calculated by the discrete card, whereas the build-in one is only responsible  for the display output.

 

Discuss on forums.

Часть 1. Поэтапная сборка
Предупреждение! Здесь ещё не было описано наложение disable-dynamic-vertex-buffers.patch!
Положим, что у вас уже есть портежи, в которых есть wine-1.3.35. Теперь переходим в каталог с ебилдами
~ # cd /usr/portage/app-emulation/wine/
И дальше оперируем им с помощью утилиты ebuild
wine # ebuild wine-1.3.35.ebuild unpack
Где-то в конце вывода ebuild напишет, куда он распаковал исходники.
>>> Source unpacked in /var/tmp/portage/app-emulation/wine-1.3.35/work
Выделяем путь мышкой, жмём среднюю кнопку, дописываем спереди pushd, ибо нам потом возвращаться, жмём End и добиваем путь один раз с помощью клавиши Tab. Должна получиться строка вида:
wine # pushd /var/tmp/portage/app-emulation/wine-1.3.35/work/wine-1.3.35
Выполните команду:
wine-1.3.35 # ls
чтобы убедиться, что вы в нужном каталоге. Вывод должен содержать:
aclocal.m4 dlls LICENSE.OLD po
ANNOUNCE documentation loader programs
AUTHORS fonts Makefile.in README
configure include Make.rules.in server
configure.ac libs Maketest.rules.in tools
COPYING.LIB LICENSE Make.vars.in VERSION
Если вы видите то же самое – значит всё ОК.
Сперва нужно наложить собственно raw3.patch, который починит мышь в World of Tanks, командой:
wine-1.3.35 # patch -p1 < /path/to/raw3.patch
Вы должны увидеть:
patching file dlls/user32/input.c
Hunk #1 succeeded at 486 (offset 10 lines).
Hunk #2 succeeded at 813 (offset 10 lines).
Hunk #3 succeeded at 906 (offset 10 lines).
Hunk #4 succeeded at 947 (offset 10 lines).
patching file dlls/user32/tests/input.c
patching file server/Makefile.in
patching file server/process.c
patching file server/process.h
patching file server/protocol.def
Hunk #1 succeeded at 3370 (offset 5 lines).
patching file server/queue.c
Hunk #6 succeeded at 1463 (offset -3 lines).
Hunk #7 succeeded at 1971 (offset -3 lines).
Hunk #8 succeeded at 2038 (offset -3 lines).
Hunk #9 succeeded at 2272 (offset 4 lines).
patching file server/raw_input.c
patching file server/raw_input.h
После этого следует запустить утилиту make_requests для починки чего-то там. Vincas упоминал это среди тонн флуда на winehq, но не всем же охота читать их, верно? А без этого компиляция не получится.
wine-1.3.35 # ./tools/make_requests
Выхлоп должен быть таким:
include/wine/server_protocol.h updated
server/trace.c updated
server/request.h updated
После этого возвращаемся в каталог с ебилдом.
wine-1.3.35 # popd
И дальше последовательно выполняем команды:
wine # ebuild wine-1.3.35.ebuild prepare
wine # ebuild wine-1.3.35.ebuild configure
wine # ebuild wine-1.3.35.ebuild compile
wine # ebuild wine-1.3.35.ebuild install
wine # ebuild wine-1.3.35.ebuild qmerge
Voila! Пакет собран и установлен.
Часть 2. Использование файла ebuild
Читаем мануал по созданию оверлея в оригинале или на русском и создаём себе один. Здесь и далее каталог локального оверлея будет именоваться /usr/overportage.
Теперь делаем у себя копию из портежей, скачиваем патчи и ебилд wine-1.3.35-r1.
~ # mkdir -p /usr/overportage/app-emulation/wine
~ # cd /usr/overportage/app-emulation/wine
wine # cp -R /usr/portage/app-emulation/wine/* ./
wine # wget -O- http://pastie.org/pa…465832/download > wine-1.3.35-r1.ebuild
wine # wget -O- http://dl.dropbox.co…1628/raw3.patch > files/wine-1.3.35-raw3.patch
wine # wget -O- http://dl.dropbox.co…x-buffers.patch > files/wine-1.3.35-disable-dynamic-vertex-buffers.patch
Обновляем файл манифеста, чтобы отразить текущее состояние дел.
wine # ebuild wine-1.3.35-r1.ebuild digest
Собираем wine. Я обычно добавляю опцию ‘-b’, которая предписывает создать бинарный пакет, который можно сохранить и позднее распаковать (для этого ‘-k’), чтобы иметь возможность сразу установить старый рабочий билд, если новый собрать не получится. Пакет должен по умолчанию лежать в /usr/portage/packages/app-emulation/wine-1.3.35-r1.tbz2
wine # emerge -bav =wine-1.3.35-r1
Если во время сборки ебилда возникнут трудности, следует прежде всего проверить наложились ли патчи, поскольку выхлоп epatch в автоматической сборке отсутствует. Тогда советую обратиться к первой части этой статьи и посмотреть, что произойдёт, если сделать это вручную. Если патчи накладываются успешно, следует проверить, успешно ли выполняется вызов make_requests. Как должен выглядеть правильный выхлоп, можно увидеть опять же в первой части статьи, и отследить в выводе emerge по словам «calling make_requests» и «eof calling make_requests». Могут быть также виноваты опции компилятора, вы можете найти и раскомментировать строчку по умолчанию и закомментировать специальные. Все мои изменения легко отследить по двойному символу решётки ‘##’ в начале строки.
Пост-инсталляционная доводка.
Теперь, если этого ещё не сделано, следует установить directx, vcrun2008, а также опционально включить GLSL, с ней можно получить больше 10…15 fps в «World of Tanks».
$ winetricks d3dx9
$ winetricks vcrun2008
$ winetricks glsl-enable
Лично у меня игра никак не реагирует на качество текстур и детализацию моделей, но придирчива к наличию эффектов. Для оптимизации ресурсов существует две вещи – репаки текстур, которые следует применять в случае нехватки памяти, и WoT Tweaker, который снизит нагрузку на тормозной движок BigWorld, отлюби его все черти азиатской преисподней…
Также известно, что BigWorld – однопроцесорный движок, поэтому лишний разгон не помешает. Распоточить процесс World of Tanks не получится, можно будет лишь сделать так, что два ядра будут оба загружены на 50%, смотрите сами:
# ps aux | grep -v grep | grep World
root 18121 0.0 0.0 25340 1260 pts/1 S+ Feb26 0:00 sudo -u sszb -H wine /home/sszb/.wine/drive_c/Games/World_of_Tanks/WorldOfTanks.exe
sszb 18122 97.5 7.9 2011856 650964 pts/1 RLl+ Feb26 91:56 /home/sszb/.wine/drive_c/Games/World_of_Tanks/WorldOfTanks.exe
# taskset -pc 1-2 18122
pid 18122’s current affinity list: 0
pid 18122’s new affinity list: 1,2
Изображение
Есть ещё три ключа для реестра wine, которые можно отредактировать во избежание сомнений. Для начала следует запустить редактор реестра.
$ regedit
И пройти по адресу HKCU/Software/Wine/Direct3D/
Первый ключ типа REG_SZ VideoMemorySize следует установить равным числу заявленных мегабайт памяти на видеокарте (то есть, если заявлено 1024 то и писать 1024). Второй и третий ключи должны быть типа DWORD. Это VideoPciVendorID и VideoPciDeviceID. Заполнять в шестнадцатеричном виде. Узнать эти значения можно, выполнив:
# lspci -nn | grep 300
03:00.0 VGA compatible controller [0300]: nVidia Corporation Device [10de:1244] (rev a1)
что расшифровывается так:
<место на шине PCI> <тип устройства> [<да, это видеокарта>]: <название> [<vendorid>:<deviceid>] [ревизия такая-то]
Остаётся только подставить.
Если у вас всё ещё остались какие-то проблемы
Например, остался старый каталог ~/.wine, а игра вылетает с ошибками о ненайденных DLL из комплекта vcrun2008, хотя они вроде бы на месте, или абракадабра, связанная с msvcp90.dll, просто переместите каталог ~/.wine в безопасное место,
$ mv ~/.wine ~/.old-wine
создайте свежий каталог ~/.wine командой
$ winecfg
и выполните команды winetricks, указанные выше. После этого удалите всё из папки ~/.old-wine/drive_c/windows/winsxs/
$ rm -rf ~/.old-wine/drive_c/windows/winsxs/*
и скопируйте то, что появилось в новой
$ cp -R ~/.wine/drive_c/windows/winsxs/* ~/.old-wine/drive_c/windows/winsxs/
после чего верните старый каталог на место,
$ rm -rf ~/.wine
$ mv ~/.old-wine ~/.wine
DLL из пакета MSVC должны теперь видеться и подключаться нормально. Вышеописанный баг имеет место, когда vcrun2008 устанавливалась несколько раз, (в т. ч. старые её версии, установленные вручную, например) и wine путается, какие DLL ему брать в качестве сторонней (windows).
msvcp90.dll необходима World of Tanks, но должна быть выставлена на «стороннюю» (windows) в списке библиотек winecfg вручную. winetricks этого сам не сделает.

Еще по теме