Half-Life в Linux на базі рушія Xash3D / FWGS


Half-Life - чудова гра свого часу, яка досі має чимало шанувальників та високий онлайн.


Вона стандартно працює в Linux через Steam, утім варто знати й про таку альтернативу рушія з відкритим кодом, як Xash3D/FWGS:


https://github.com/FWGS/xash3d-fwgs


Встановлення


Для встановлення, знадобиться підтримка архітектури i386:


dpkg --add-architecture i386
apt update
apt install build-essential gcc-multilib g++-multilib python3 libsdl2-dev:i386 libfontconfig-dev:i386 libfreetype6-dev:i386
export PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig

Після цього клонуємо репозиторій та збираємо бінарний пакет:


git clone https://github.com/FWGS/xash3d-fwgs.git
cd xash3d-fwgs
./waf configure -T release
./waf build

Коли рушій буде скомпільовано, його можна перенести у потрібну теку, де звичайно зберігаються ігри:


./waf install --destdir=/path/to/any/output/directory

Наступним кроком, потрібно придбати саму гру (до якої і досі виходять оновлення).


Купити гру можна безпосередньо у Steam за посиланням:


https://store.steampowered.com/app/70/HalfLife


Зробити це найкраще у свята, коли бувають розпродажі, знижки іноді сягають 90% вартості, тому можна купити повний набір Half-Life, включно з другою версією (про запуск якої в Linux поговоримо окремо).


Не зважаючи на те, що в офіційній інструкції вказано просто скопіювати файли гри в директорію "valve", насправді при запуску ймовірно буде помилка:


Host_InitError: Can't initialize cl_dlls/client.so: vgui.so: cannot open shared object file: No such file or directory

Вирішується вона копіюванням файлу "vgui.so" безпосередньо у кореневу теку, де встановлено Xash3D (тобто рівнем вище "valve")


Запуск гри


Запускається гра виконанням бінарного файлу Xash3D. Для цього можливо треба дати відповідні права:


chmod +x xash3d
xash3d -dev

Якщо все зроблено правильно, з'явиться лаунчер рушія з відповідним меню, де можна грати в одиночну гру або в мережі з друзями.


Щоб відображати консоль в лаунчері, Xash3D запускається з атрибутом "-dev" або "~" під час гри.


Майстер сервер


Майстер сервер використовується для пошуку ігрових серверів, відповідно усі сервери, що ви бачитимете в мультиплеєрі, відправляють свій статус майстер серверу, а той - клієнтові при виборі підключень.


За замовченням, рушій викуристовує власний майстер mentality.rip:27010


Змінити його можна в терміналі командами:



Також на етапі збірки, змінити можна у вихідному коді, наприклад:


https://github.com/FWGS/xash3d-fwgs/commit/05d9cf895e180f25e6e0cbe33e3f02cd222de3b0


Якщо планується запуск власного майстера, наразі існує два відкритих рішення:


pymaster


Неофіційна редакція закинутого майстер сервера на Python:


https://github.com/YGGverse/pymaster/tree/v2


xash3d-master


Після релізу редакції pymaster, розробник опублікував офіційну версію на мові Rust:


https://git.mentality.rip/numas13/xash3d-master


Ігровий сервер


Для запуску ігрового серверу, використовується аналогічна збірка Xash3D та файлами з грою, запуск відбувається приблизно так:


xash3d -dedicated -port 27015 -ip xx:xx:xx:xx +maxplayers 8 +map crossfire

При цьому звісно, не забуваємо відкрити порт:


ufw allow 27015

Налаштування серверу зберігаються у наступних файлах, по яким треба пройтись окремо



Щоб сервер став доступним у спискі обраного майстра, потрібно також вказати:


sv_lan 0
public 1

FastDL


FastDL - це спосіб швидкої передачі ігрових файлів клієнтові. Звичайно організується на базі веб каталогу за допомогою Nginx.


Структура файлів, що передається, має відповідати стандартному їх розташуванню у "valve", наприклад:



після чого, у файлі "server.cfg" вказується шлях до цільових файлів (де "/fastdl/half-life/" - довільний шлях, якщо корінь зайнятий):


sv_downloadurl "http://xx.xx.xx.xx/fastdl/half-life/"
sv_allowdownload 1

RESGen


RESGen - найпростіший спосіб згенерувати файли залежностей для ігрової мапи.


Наприклад, особливі моделі гравців, для подальшої передачі їх через FastDL.


Репозиторій проєкту доступний на GitHub:


https://github.com/kriswema/resgen


Для генерації текстового файлу необхідно вказати цільову мапу на сервері:


Linux.64-bit /valve/maps/crossfire.bsp

Після чого буде згенеровано приблизно такий файл:


// crossfire.res - created with RESGen v2.0.3.
// RESGen is made by Jeroen "ShadowLord" Bogers,
// with serveral improvements and additions by Zero3Cool.
// For more info go to http://resgen.hltools.com

// .res entries (9):
halflife.wad
sound/ambience/jetflyby1.wav
sound/ambience/siren.wav
sound/debris/beamstart11.wav
sound/weapons/electro5.wav
sound/weapons/mortarhit.wav
sound/weapons/sbarrel1.wav
sprites/muzzleflash1.spr
sprites/steam1.spr
models/player/... // тут додаємо нашу кастомну модель гравця

Отриманий файл розміщуємо у теці "/valve/maps" поряд з однойменною мапою.


Таким чином (після перезапуску серверу), нові гравці, що підключились, зможуть бачити відповідні моделі замість стандартних.

Моделі будуть завантажуватись усім учасникам гри до локальної теки "/valve/downloaded/models/player/"


Боти


Щоб гравцям не було самотньо в очікуванні, можна додати ботів, які наприклад будуть зникати із появою онлайну.


Рішень насправді існує багато, але найбільш простий спосіб - це "Bot Number 10":


http://hpb-bot.bots-united.com/downloads.html


Є офіційна бінарна збірка для Linux:


http://hpb-bot.bots-united.com/releases/bot10_linux.tgz


Утім, якщо потрібно модифікувати бота, можна зібрати власну версію з початкового коду, яка є частиною "Portable Half-Life SDK":


https://github.com/FWGS/hlsdk-portable/tree/bot10


git clone --recursive https://github.com/FWGS/hlsdk-portable.git
git checkout bot10
cmake -B build -S .
cmake --build build

Існує також альтернативна збірка "YGGverse":


https://github.com/YGGverse/hlsdk-portable/tree/bot10-yggverse


Вона дозволяє запускати зконфігурованих ботів а не просто рандомних, як це зроблено в оригіналі.


Українська локалізація


На Толоці є озвучка, що цікаво для проходження соло-кампанії (для доступу за посиланнями потрібна авторизація на форумі)


[Win] Half-Life (1998) - Українізатор для Steam (дубляж)


[Win] Антологія Half-Life (1998-2003) - дубляж українською для Steam


Дістати файли з `.exe` можна командою:


innoextract -d /path/to/extract /path/to/exe

Після чого розпакувати теку `sound` на вибір до:



Звертаю увагу, що на трекері є також піратські комплекти гри з перекладом тексту, але в них виявлено троян:

https://toloka.to/t96094-30#2153185

https://toloka.to/t92767-30#2153183


Тим паче, ці збірки повністю не перекривають локалізацію xash. Тому рекомендую тільки згаданий / перевірений аудіо-ряд, а текст, якщо він вам потрібен - інтегрувати вручну на офіційно куплений набір Steam.


Висновки


В цілому, хоч в Steam більший онлайн, Xash3D має свою спільноту і можливості для розробки.


Гра стабільно працює на стареньких PC, а для запуску власного серверу, згодиться мінімальний тариф VPS (в середньому завантаженість CPU складає 15%).


Якщо тема є цікавою, можливо окремо буде описано спосіб запуску Half-Life 2 на базі рушія Source, наприклад однієї з його версій у відкритому доступі:


https://github.com/nillerusr/source-engine


Посилання


Придбати файли гри Half-Life в Steam

Офіційна сторінка рушія Xash3D / FWGS

Опис параметрів конфігурації сервера

Серверні запити

Команди майстер сервера

Каталог скінів

PHP 8 / Composer бібліотека для веб-розробників

Веб рушій на Symfony для організації серверу аналітики


Дивіться також


Flatpak-збірка рушія Xash3D/FWGS з Half-Life на прикладі Radicle/Git

Розвідка боєм: Xash3D (FWGS) / Half-Life в Haiku OS

Створення графіті Half-Life в GIMP



/uk/