gemlog/public/uk/half-life-on-linux-using-xash3d-fwgs-engine.gmi
2026-02-17 12:22:05 +02:00

240 lines
No EOL
11 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
Змінити його можна в терміналі командами:
* clearmasters
* addmaster IP:port
* listmasters
Також на етапі збірки, змінити можна у вихідному коді, наприклад:
=> 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
```
Налаштування серверу зберігаються у наступних файлах, по яким треба пройтись окремо
* 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.
Репозиторій проєкту доступний на 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
``` bash
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
Вона дозволяє запускати зконфігурованих ботів а не просто рандомних, як це зроблено в оригіналі.
Наприклад, на цьому сервері у якості мішені використовується путін:
```
connect 94.140.114.89:27015
```
## Висновки
В цілому, хоч в Steam більший онлайн, Xash3D має свою спільноту і можливості для розробки.
Гра стабільно працює на стареньких PC, а для запуску власного серверу, згодиться мінімальний тариф VPS (в середньому завантаженість CPU складає 15%).
Якщо тема є цікавою, можливо окремо буде описано спосіб запуску Half-Life 2 на базі рушія Source, наприклад однієї з його версій у відкритому доступі:
=> https://github.com/nillerusr/source-engine
## Посилання
=> https://store.steampowered.com/app/70/HalfLife Придбати файли гри Half-Life в Steam
=> https://github.com/FWGS/xash3d-fwgs Офіційна сторінка рушія Xash3D / FWGS
=> https://www.svencoop.com/manual/server-config.html Опис параметрів конфігурації сервера
=> https://developer.valvesoftware.com/wiki/Server_queries Серверні запити
=> https://developer.valvesoftware.com/wiki/Master_Server_Query_Protocol Команди майстер сервера
=> https://gamebanana.com/mods/cats/7734 Каталог скінів
=> https://github.com/YGGverse/hl-php PHP 8 / Composer бібліотека для веб-розробників
=> https://github.com/YGGverse/hlstate Веб рушій на Symfony для організації серверу аналітики
## Дивіться також
=> build-xash3d-fwgs-half-life-on-haiku-os.gmi Розвідка боєм: Xash3D (FWGS) / Half-Life в Haiku OS
=> create-half-life-graffiti-logo-in-gimp.gmi Створення графіті Half-Life в GIMP