Артемий Светлаков
Артемий Светлаков
2495 просмотров5 комментариев

Играем на Repka Pi 3. Half-Life

!!! Компиляция движка выполнялась на Репке ver 1.3 с частотой 1.4 ГГц (выставил в repka-config), 2 ГБ ОЗУ с активным охлаждением !!!

Обновление от 15.09.2023: В связи с тем что разработчики движка xash3d-fwgs своими обновлениями иногда умудряются что-нибудь сломать и “оно не компилируется“, я “форкнул“ движок xash3d и HLSDK к себе в репозиторий на GitHub, чтобы движок спокойно компилировался и работал на Репке, также я сделал сборку под aarch64, чтобы можно было не собирать из исходников (но инструкцию оставлю, в командах git clone изменил ссылки на свои репозитории).

Содержание

  1. Вариант 1: Установка собранных aarch64-билдов (простой способ)
  2. Вариант 2: Сборка из исходников (на Репке)
  3. Вариант 3: Сборка из исходников (через кросс-компилятор x86_64 -> aarch64)

Данная инструкция ориентирована на новичков (включая тех, кого даже пугает само словосочетание “сборка из исходников“. Как раз именно этим и будем заниматься в вариантах 2 и 3).

Запускать игру мы будем с помощью движка xash3d.

Авторы движка xash3d и open-source версии Half-life SDK: сообщество Flying With Gauss

Вариант 1: Установка собранных aarch64-билдов (простой способ)

  1. Устанавливаем зависимости

    sudo apt install libsdl2-dev libfontconfig-dev libfreetype6-dev

  2. Скачиваем архив с движком xash3d-fwgs-repkapi_aarch64.zip

  3. Скачиваем архив с HLSDK hlsdk-portable-repkapi_aarch64.zip

  4. Распаковываем архив “xash3d-fwgs-repkapi_aarch64.zip”, должна быть папка “xash3d” с содержимым.

  5. Распаковываем архив “hlsdk-portable-repkapi_aarch64.zip”, должны быть папки “dll” и “cl_dll”

  6. Папки “dll” и “cl_dll” перемещаем в папку xash3d/valve

  7. Добываем Half-Life любым способом (пиратство, естественно, осуждаем, я свой half-life покупал в Steam) и перетаскиваем содержимое его папки valve КРОМЕ cl_dlls и dlls в папку xash3d/valve

  8. В папке “xash3d” запускаем терминал и запускаем игру командой ./xash3d

    В игре идём в Configuration → Video → Video modes, ставим renderer GLES1 (nano gl), разрешение экрана 1280×720, сохраняем, перезапускаем игру ). Выход из игры отрабатывает некорректно (точнее вообще не отрабатывает) и приходится “убивать “ процесс.

    ПРИМЕЧАНИЕ: Если при запуске игры движок выдал ошибку видеодрайвера и/или в консоль посыпались ошибки типа “cannot allocate memory”, то перезапустите репку. Возможно косяк видеоядра, точно не знаю.

Вариант 2: Сборка из исходников (на Репке)

Просто введите в терминале последовательно следующие команды:

  1. Установим зависимости

    sudo apt install build-essential python libsdl2-dev libfontconfig-dev libfreetype6-dev

  2. Скачаем движок из репозитория

    git clone --recursive https://github.com/ArtSvetlakov/xash3d-fwgs-repkapi.git

  3. Перейдём в папку с исходниками

    cd xash3d-fwgs-repkapi

  4. Запустим автоконфигуратор

    ./waf configure -T release --jobs=4 --disable-gl --enable-gles1 --enable-stbtt

    Возможно файлу waf потребуется дать разрешение на исполнение файла как программы, это делается командой chmod +x waf или же по файлу щелкнуть правой кнопкой мыши → Свойства → Права и поставить галочку “Разрешить исполнять как программу“.

  5. Компилируем

    ./waf build

  6. Установка в отдельную папку (в моём случае ~/games/half-life/ , но вы можете заменить на свою. Но собранный Half-life SDK, о котором ниже, надо будет ставить в ту же папку)

    ./waf install --destdir=~/games/half-life/

  7. Возвращаемся из папки с исходниками, чтобы скачать и собрать Half-life SDK

    cd ..

  8. Скачиваем Half-life SDK из репозитория

    git clone --recursive https://github.com/ArtSvetlakov/hlsdk-portable-repkapi.git

  9. Переходим в папку с исходниками Half-life SDK

    cd hlsdk-portable-repkapi

  10. Запустим автоконфигуратор

    ./waf configure -T release -j 4

  11. Компилируем

    ./waf

  12. Устанавливаем собранный Half-Life SDK

    ./waf install --destdir=~/games/half-life/

  13. Переходим в папку с установленным движком и проверяем что получилось. Мы должны увидеть папку valve, исполняемый файл xash3d и его библиотеки формата .so

    cd ~/games/half-life/ && ls

  14. Переходим в подпапку valve. Здесь мы должны увидеть две папки, в каждой из которых лежат файлы библиотек (а именно client_arm64.so в cl_dlls и hl_arm64.so в dlls) и один файл extras.pk3

    cd valve && ls

  15. Вышеуказанные папки/файлы можете проверить и из обычного файлового менеджера. Если всё получилось, то добываем Half-Life любым способом (пиратство, естественно, осуждаем, я свой half-life покупал в Steam) и перетаскиваем содержимое его папки valve КРОМЕ cl_dlls и dlls в папку valve, которая в папке с установленным нами движком.

  16. Далее запускаем игру, в игре идём в Configuration → Video → Video modes, ставим renderer GLES1 (nano gl), разрешение экрана 1280×720, сохраняем, перезапускаем игру ). Выход из игры отрабатывает некорректно (точнее вообще не отрабатывает) и приходится “убивать “ процесс.

    Переход в папку с игрой:

    cd ~/games/half-life/

    Запуск:

    ./xash3d

    ПРИМЕЧАНИЕ: Если при запуске игры движок выдал ошибку видеодрайвера и/или в консоль посыпались ошибки типа “cannot allocate memory”, то перезапустите репку. Возможно косяк видеоядра, точно не знаю.

Вариант 3: Сборка из исходников (через кросс-компилятор x86_64 -> aarch64)

Сборка будет проводиться на компьютере с ОС Windows через WSL.

  1. Подготовить кросс-компилятор из статьи Установка кросс-компилятора из x86_64 в aarch64

  2. сначала нужно собрать и установить SDL2 под aarch64, для этого последовательно выполняем:

    git clone --recursive -b release-2.28.x https://github.com/libsdl-org/SDL.git

    cd SDL

    CC=aarch64-linux-gnu-gcc cmake -B build

    cd build

    make -j<количество потоков вашего CPU>


    Если возникнет ошибка компиляции, связанная с файлом ~/SDL/src/video/x11/SDL_x11xinput2.h “error: conflicting types for ‘XGenericEventCookie’“,

    то нужно открыть этот файл и закомментировать строку

    typedef struct XGenericEventCookie XGenericEventCookie;

    чтоб было так

    //typedef struct XGenericEventCookie XGenericEventCookie;

    затем сохранить файл и повторить make -j<количество потоков вашего CPU>


    sudo make install

    собранная библиотека SDL2 установится в /usr/local в папки bin, include, lib (оттуда потом сможете удалить).

    Выходим обратно из папок SDL/build

    cd ../..

  3. см. шаги 1-3 из варианта 2

  4. Запустим автоконфигуратор

    CXX=aarch64-linux-gnu-g++ CC=aarch64-linux-gnu-gcc ./waf configure -T release --jobs=<количество потоков вашего CPU> --disable-gl --enable-gles1 --disable-menu-changegame --enable-stbtt

    Возможно файлу waf потребуется дать разрешение на исполнение файла как программы, это делается командой chmod +x waf

  5. см. шаги 5-9 из варианта 2

  6. Запустим автоконфигуратор

    CXX=aarch64-linux-gnu-g++ CC=aarch64-linux-gnu-gcc ./waf configure -T release --jobs=<количество потоков вашего CPU>

  7. см. шаги 11-15 из варианта 2

  8. в итоге получается готовая папка half-life по пути ~/games/ (то есть /home/<пользователь>/games). Данную папку на флешке/по облаку/как угодно переносите на Репку и уже там запускаете (см. шаг 16 из варианта 2).


Комментарии (5)

Для участия в обсуждении вы должны быть авторизованным пользователем
Юрий  

Компиляция застряла на 171 шаге на файле "celt_decoder.c".
Репка ver. 1.3 на частоте 1 Гигагерц, c памятью 1 Гигабайт без активного охлаждения. Практически не реагирует на клавиатуру и мышь. Сколько должна идти компиляция?

Артемий Светлаков
Артемий Светлаков  

Время компиляции точно не замерял, но не больше 5 минут и нигде надолго не застревала.

У меня Репка тоже 1.3, но 2 гиговая с активным охлаждением и частоту выставил 1.4 ГГц

На всякий случай отмечу вверху статьи.

Юрий  

Охлаждение процессора оказалось не причем. На Репке с активным охлаждением на частоте 1, 4 Гигагерца и памятью 1 Гигабайт компиляция также зависает.
На Репке с двумя гигами памяти все прошло на ура! На всякий случай еще увеличил объем swap файла до 4 Гигабайт.
Интересно, пройдет ли в этом случае компиляция на Репке с 1 Гигабайтом?

Автору большое спасибо за подробную инструкцию.

Михаил  

в результате выполнения команды
./waf build
выдало :
........
........
[140/560] Compiling 3rdparty/opus/opus/silk/ana_filt_bank_1.c
[141/560] Compiling 3rdparty/opus/opus/silk/NSQ_del_dec.c
[142/560] Compiling 3rdparty/opus/opus/silk/NSQ.c
[143/560] Compiling 3rdparty/opus/opus/silk/tables_NLSF_CB_NB_MB.c
[144/560] Compiling 3rdparty/opus/opus/silk/stereo_MS_to_LR.c
[145/560] Compiling 3rdparty/opus/opus/silk/NLSF_unpack.c
gcc: fatal error: Убито signal terminated program cc1
compilation terminated.

Waf: Leaving directory `/root/xash3d-fwgs/build'
Build failed
-> task in 'gl4es' failed with exit status 1 (run with -v to display more information)
root@Repka-Pi:~/xash3d-fwgs#

почему? и что делать?
зы
Репка 1.3 2 Гб 1.4 ГГц с активным охлаждением

Артемий Светлаков
Артемий Светлаков  

Репозиторий xash3d-FWGS разработчики движка активно дорабатывают и обновляют. К сожалению и ломают периодически (уже второй раз за месяц) :D
Судя по изменениям на гитхабе что-то связанное с OpenGL как раз поменяли 3 дня назад.
Попробую "форкнуть" его к себе, откатить изменения и тут обновлю ссылки. Чтоб движок хранился в неизменном виде и спокойно компилировался.

Навигация

ВойтиРегистрацияТемы