
Hitman: Agent 47 в библиотеке Steam
Посвящается моему другу Михаилу — геофизику и большому фанату серии игр Hitman. Если бы не его периодические призывы к тому, чтобы наконец-то обратить внимание на серию, я бы и дальше обходил её стороной, так как считал её всё это время скучной.
Проходить её я захотел в хронологическом порядке и начать решил с самого начала — c Hitman: Agent 47, вышедшего исключительно на ПК 21 ноября 2000 года, почти четверть века назад. В ходе экспериментов выяснилось, что под Windows 10 он до сих пор запускается без проблем, а под Linux… что ж, тут не обошлось без проблем.
Моя система — ноутбук HP Victus 16, ОС — EndeavourOS(Arch Linux), ядро — 6.11.5-arch1-1, окружение рабочего стола — Plasma 6.2.2(Wayland), процессор — Ryzen 5 5600H, видеокарта — NVIDIA GeForce RTX 3050 Ti Mobile.
Игра была скачана в стиме, поначалу был выбран Proton Experimental для запуска.

Характеристики моей системы
Запускаем, ииии… Ничего. Игра отказывается запускаться, быстрый поиск в гугле находит другого такого же линуксоида, который советует ставить сразу Proton 5.0-10. И ура, наконец-то всё запустилось! Из интереса проверил, более ранние версии Proton также будут работать, а вот Proton 8 и выше, которые минимально требуются для protontricks, работать наотрез не хотят, но об этом позже.
▍ Настройка игры
Про запуск Hitman: Codename 47 Configuration советую забыть, для нас он бесполезен, мы будем напрямую менять конфиги игры, а заодно установим один мод для увеличения дистанции прорисовки объектов.

Варианты запуска игры
Начнём с мода из репозитория HitmanUnlocker, нам нужно просто скачать находящийся в latest release файл DSOUND.dll, его перемещаем в папку, куда стим установил нашу игру.

Установка мода
▍ Редактирование конфигурационных файлов
Далее подредактируем конфиги, для начала hitman.ini, чтобы игра нормально запускалась в FullHD.
Include SetupLocale.zip
//DrawDll Render3DFX.dll
//DrawDll renderd3d.dll
DrawDll RenderOpenGL.dll
SoundDll Sound.dll
ScriptDll GSC.dll
LocaleDLL Locale.dll
Resolution 1920x1080
//enableconsole
ColorDepth 32
Anisotropy 2
AntiAlias
DisableLight
ShadowDetail 2
TextureResolution 0
Window
//DisableDXT
//DisablePAL
StartUpperPos 0,0
▍ Настройка управления
Уже опционально, так как раскладку клавиш вы можете спокойно поменять в игре, но вот уже готовая, которую вставим в Hitman.cfg. Как можно заметить, в моём случае раскладка сделана под кириллические символы, по непонятной мне причине Hitman вне зависимости от языка раскладки распознавал мои нажатия именно в кириллических символах, хотя как системный язык у меня выбран английский, а на уровне железа раскладка клавиатуры вообще испанская.
<Settings>
<Controls>
<Mapping Action="FireWeapon">
<Key SCode="356"/>
</Mapping>
<Mapping Action="DropItemInHand">
<Key SCode="74"/>
</Mapping>
<Mapping Action="ShowLaptop">
<Key SCode="59"/>
</Mapping>
<Mapping Action="ShowStatus">
<Key SCode="60"/>
</Mapping>
<Mapping Action="ToggleMouseControl">
<Key SCode="4"/>
</Mapping>
<Mapping Action="DoAction">
<Key SCode="57"/>
</Mapping>
<Mapping Action="Binoculars">
<Key SCode="3"/>
</Mapping>
<Mapping Action="WalkForward">
<Key SCode="97"/>
</Mapping>
<Mapping Action="Run">
<Key SCode="42"/>
</Mapping>
<Mapping Action="WalkLeft">
<Key SCode="108"/>
</Mapping>
<Mapping Action="WalkRight">
<Key SCode="110"/>
</Mapping>
<Mapping Action="WalkBackWard">
<Key SCode="109"/>
</Mapping>
<Mapping Action="TurnLeft">
<Key SCode="96"/>
</Mapping>
<Mapping Action="TurnRight">
<Key SCode="98"/>
</Mapping>
<Mapping Action="LeanOutLeft">
<Key SCode="120"/>
</Mapping>
<Mapping Action="LeanOutRight">
<Key SCode="121"/>
</Mapping>
<Mapping Action="ShowMap">
<Key SCode="126"/>
</Mapping>
<Mapping Action="ToggleWeaponMode">
<Key SCode="15"/>
</Mapping>
<Mapping Action="SelectNext2">
<Key SCode="358"/>
</Mapping>
<Mapping Action="SelectPrev2">
<Key SCode="119"/>
</Mapping>
<Mapping Action="EmptyHands">
<Key SCode="78"/>
</Mapping>
<Mapping Action="Sneak">
<Key SCode="56"/>
</Mapping>
<Mapping Action="ReloadWeapon">
<Key SCode="99"/>
</Mapping>
<Mapping Action="IncreaseDrawDistance">
<Key SCode="107"/>
</Mapping>
<Mapping Action="DecreaseDrawDistance">
<Key SCode="106"/>
</Mapping>
<Mouse Speed="13" Invert="0"/>
</Controls>
<Sound SfxVol="80" MusicVol="80" SpeechVol="90" UseEAX="0" UseHW="0" UseStreaming="1" MusicQuality="1" NumBuffers="8"/>
</Settings>
В самом низу конфига можно заметить два действия — Mapping Action="IncreaseDrawDistance"
и Mapping Action="DecreaseDrawDistance"
, их добавляет скачанный нами мод на увеличение дистанции прорисовки объектов, и как можно догадаться из названия, регулируется она уже в самой игре, когда она запущена, в большую либо меньшую сторону.
▍ Запуск игры и решение проблем
Давайте теперь наконец-то запустим игру.

Первый запуск
Для вас это просто скриншот, а вот для меня при первом запуске кое-чего не хватало — того, что было у других, судя по видео на YouTube, — музыки. Задавшись вопросом, где она, я, конечно же, обратился к поиску в Google.
▍ Установка DirectMusic

Поиск решения
Как оказалось, для работы музыки в Hitman: Agent 47 не хватает ещё одного DLL-файла — dmusic32.dll, он же DirectMusic. Но в Steam возможности скачивать дополнительные .dll для Proton нет, так что нам потребуется ещё один инструмент — protontricks.
Чтобы его установить, для начала скачаем все его зависимости:
sudo pacman -S python-pip python-pipx python-setuptools python-virtualenv winetricks
А дальше с помощью pipx и protontricks:
pipx install protontricks
Добавим protontricks в PATH, чтобы не указывать каждый раз путь до его бинарника:
pipx ensurepath
Закроем этот терминал и откроем новый, далее введём туда protontricks:
protontricks
На Wayland сессии вероятно, что открывшийся графический интерфейс будет сыпать на вас одной ошибкой за другой, просто пропускаем их, нажимая OK.

Интерфейс protontricks
Выбираем Select the defaul wineprefix
.

Выбор wineprefix
Далее выбираем Install a Windows DLL or component
.

Установка DLL
И начинаем вводить на клавиатуре directmusic
, выбираем и нажимаем ОК, а дальше ждём, и ждать придётся, по непонятным для меня причинам, весьма долго. К сожалению, не засекал в первый раз, но по ощущениям — минут 5.

Установка DirectMusic
Вместо всех этих манипуляций в графическом интерфейсе можно также воспользоваться одной-единственной командой — protontricks 6900 directmusic
, где 6900
— это ID игры. Плюс, в отличие от графического способа, в моём случае protontricks справился куда быстрее — где-то за минуту.
Далее я советую полностью закрыть и перезапустить Steam и уже после запустить игру.

Успешный запуск
И наконец-то, после стольких стараний, на экране мы видим лучезарную лысину нашего агента 47, а в наушниках, помимо просто звуков, теперь ещё слышна и фоновая музыка. Ура! На удивление, ко всему прочему, Hitman ещё достаточно спокойно относится к alt+Tab, чем не всегда могут похвастаться даже современные, а также нативные, запускаемые не через Wine/Proton, игры.
▍ Дополнительная оптимизация
Ещё небольшое дополнение: пусть игре уже через месяц будет 25 лет, и, скорее всего, современные процессоры смогут её осилить даже в режиме программной отрисовки, без использования интегрированной графики, хотелось бы всё-таки запустить игру на дискретке. А сейчас, судя по nvtop, она запущена на интегрированной. Заодно проверим, нормально ли всё будет работать на современных карточках Nvidia.

Мониторинг GPU
Для этого запустим весь Steam целиком с помощью prime-run, и все его дочерние процессы также будут принудительно работать на дискретке.
prime-run steam

Запуск на дискретной видеокарте
Дискретная графика в отличие от интегрированной не напрягается даже на 1%, настолько лёгок для неё Хитман, из разницы разве что изменилась заполненность видеопамяти с 305Мб, до 704. В целом же, всё работает по ощущениям также стабильно.
И на этом в общем-то всё, дальше можно спокойно играть. Если у кого-то есть что-то дополнить или хотите поделиться, как мечту свою лелея подключались к Галилео запускали упорно отказывающуюся работать игру — приглашаю в комментарии.
Автор: OrkBiotechnologist