# 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