Half-Life - чудова гра свого часу, яка досі має чимало шанувальників та високий онлайн.
Вона стандартно працює в Linux через Steam, утім варто знати й про таку альтернативу рушія з відкритим кодом, як 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. Зробити це найкраще у свята, коли бувають розпродажі, знижки іноді сягають 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
.
Змінити його можна командою в терміналі clearmasters
/ addmaster IP:port
а перевірити - командою listmasters
. Також на етапі збірки, змінити можна у вихідному коді, наприклад, як це зроблено тут.
Якщо планується запуск власного майстер сервера, наразі існує два рішення з відкритим кодом:
- pymaster - неофіційна редакція закинутого майстер сервера на python
- xash3d-master - після релізу редакції pymaster, розробник опублікував офіційну версію на мові Rust
Ігровий сервер
Для запуску ігрового серверу, використовується аналогічна збірка Xash3D та файлами з грою, запуск відбувається приблизно так:
xash3d -dedicated -port 27015 -ip xx:xx:xx:xx +maxplayers 8 +map crossfire
При цьому звісно, не забуваємо відкрити порт:
ufw allow 27015
Налаштування серверу зберігаються у наступних файлах, по яким треба пройтись окремо
- valve/server.cfg
- valve/skill.cfg
- valve/listip.cfg
- valve/banned.cfg
Щоб сервер став доступним у спискі обраного майстра, потрібно також вказати:
sv_lan 0
public 1
FastDL
FastDL - це спосіб швидкої передачі ігрових файлів клієнтові. Звичайно організується на базі веб каталогу за допомогою Nginx.
Структура файлів, що передається, має відповідати стандартному їх розташуванню у valve
, наприклад:
- /maps
- /models
- /sound
- /materials
після чого, у файлі server.cfg
вказується шлях до цільових файлів (де /fastdl/half-life/
- довільний шлях, якщо корінь зайнятий):
sv_downloadurl "http://xx.xx.xx.xx/fastdl/half-life/"
sv_allowdownload 1
RESGen
RESGen - найпростіший спосіб згенерувати файли залежностей для ігрової мапи. Наприклад, особливі моделі гравців, для подальшої передачі їх через FastDL.
Для генерації текстового файлу необхідно вказати цільову мапу на сервері:
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.
Є офіційна бінарна збірка для Linux, утім, якщо потрібно модифікувати бота, можна зібрати власну версію з початкового коду, яка є частиною Portable Half-Life SDK:
git clone --recursive https://github.com/FWGS/hlsdk-portable.git
git checkout bot10
cmake -B build -S .
cmake --build build
Існує також альтернативна збірка YGGverse яка дозволяє запускати зконфігурованих ботів а не просто рандомних, як це зроблено в оригіналі. Наприклад, на цьому сервері у якості мішені використовується путін:
connect 94.140.114.89:27015
Висновки
В цілому, хоч в Steam більший онлайн, Xash3D має свою спільноту і можливості для розробки. Гра стабільно працює на стареньких PC, а для запуску власного серверу, згодиться мінімальний тариф VPS (в середньому завантаженість CPU складає 15%).
Якщо тема є цікавою, можливо окремо буде описано спосіб запуску Half-Life 2 на базі рушія Source, наприклад однієї з його версій у відкритому доступі.
Ще немає коментарів