devzone.org.ua/post/half-life-v-linux-na-bazi-rushiia-xash3dfwgs.md
2025-11-01 14:28:20 +02:00

13 KiB
Raw Blame History

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

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
  • приклад для Debian, для інших дистрибутивів - дивіться README

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

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

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

./waf install --destdir=/path/to/game/directory

ARM

Рушій Xash3D/FWGS підтримує різні платформи: для ігрового клієнта на смартфоні чи сервера на базі Raspberry Pi. Для такої конфігурації, потрібно зібрати декілька додаткових бібліотек з репозиторію hlsdk-portable:

git clone https://github.com/FWGS/hlsdk-portable.git
cd hlsdk-portable
./waf configure -T release
./waf

Потім скопіювати наступні файли до теки valve:

  1. hlsdk-portable/build/cl_dll/client_armv7hf.so > valve/cl_dlls/client_armv7hf.so
  2. hlsdk-portable/build/dlls/hl_armv7hf.so > valve/dlls/hl_armv7hf.so

Ігрові набори

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

Після завантаження гри до профілю Steam, переходимо з меню до теки з файлами гри та копіюємо їх до valve встановленого рушія Xash3D/FWGS. Якщо при запуску буде помилка:

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
  • опція -dev потрібна тільки для відображення консолі (~) як пункту головного меню
  • для більш детального дебагу, вказуємо рівень, наприклад -dev 2

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

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

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

За замовченням, рушій використовує власний майстер mentality.rip:27010. Змінити його можна командою в терміналі clearmasters / addmaster IP:port а перевірити - командою listmasters. Також на етапі збірки, змінити можна у вихідному коді, наприклад, як це зроблено тут.

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

  • pymaster - не офіційна редакція закинутого майстер сервера на python
  • xash3d-master - після релізу редакції pymaster, розробник опублікував офіційну версію на Rust

xash3d-master

Коротка інструкція для збірки з репозиторію:

git clone https://github.com/FWGS/xash3d-master.git && cd xash3d-master
cargo build --release
sudo install target/release/xash3d-master /usr/local/bin/xash3d-master
  • для встановлення пакетного менеджера cargo, дивіться інструкції rustup.

Типовий сервіс systemd виглядатиме так:

[Unit]
After=network.target

[Service]
Type=simple
User=xash3d-master
Group=xash3d-master
ExecStart=/usr/local/bin/xash3d-master --ip xx:xx:xx:xx
StandardOutput=file:///home/xash3d-master/debug.log
StandardError=file:///home/xash3d-master/error.log
# Restart=on-failure

[Install]
WantedBy=multi-user.target
  • даний приклад передбачає створення окремого користувача useradd -m xash3d-master
  • стандартний порт у цьому випадку - 27010, не забуваємо його відкрити у фаєрволі!

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

Для запуску ігрового серверу, використовується аналогічна збірка 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, яка дозволяє запускати зконфігурованих ботів а не просто рандомних, як це зроблено в оригіналі.

Висновки

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

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

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

Посилання