LINUX.ORG.RU

Сообщения JeanPierreDubois

 

Нативная Arma: Cold War Assault под FreeBSD

 , , ,

Как только узнал о том, что Cold War Assault выпустили (ни много ни мало!) под GPL-3.0-or-later (с некоторыми дополнительными условиями про торговые марки, правда), немедленно побежал разбираться, что там к чему.

Как и водится в таких случаях, на гитхабе никаких ассетов нет, но их можно абсолютно бесплатно скачать из Steam под лицензией Arma Public License Share Alike (APL-SA), которых там около 250 Мб. Вместе с ними идут бинари PoseidonGameDemo.exe (под винду) и PoseidonGameDemo (соответственно, под линукс, glibc 2.38+, пришлось обновлять чрут с Ubuntu 22.04 до 24.04), из которых можно запустить демо‐миссию и ничего больше, как я понял. К моему удивлению, первое через Wine вместо изображения показывает мне чёрный экран и, иногда, невероятных размеров шакальный курсор, а второе через Linuxulator зависает примерно через минуту; при этом проприетарная CWA из стима прекрасно работала как через Wine, так и через Linuxulator.

На гитхабе инструкции только для винды и линукса, ничего больше разработчики, собственно, и не предусматривали, но меня это совсем не испугало. Зависимости предлагают подтягивать через vcpkg, вместо чего я героическим образом всё ставил собственными руками. При этом нужно обратить внимание на версии некоторых библиотек, которые указаны в vcpkg.json; в частности, не хотело собираться со свежими CLI11 и mimalloc, нужны именно версии 2.4.0 и 2.2.4 соответственно (или, может быть, слегка новее, не проверял). Также споткнулся на том, что opus, libogg, libvorbis, enkiTS и, возможно, некоторые другие библиотеки, которые у меня подтянулись из системы, нужно собирать с -fPIC (ну то есть с -DCMAKE_POSITION_INDEPENDENT_CODE=ON) и что mimalloc из vcpkg по умолчанию устанавливается с -DMI_OVERRIDE=OFF, но цмейком по умолчанию собирается с -DMI_OVERRIDE=ON (с -DMI_OVERRIDE=ON при сборке армы возникают дубликаты при линковке, так что это нужно выключать).

Линукс‐специфичного кода во всём огромном репозитории почти не оказалось. Из обнаруженного:

  1. Хидер linux/sysinfo.h, подключение которого оказалось достаточно тупо закомментировать.
  2. PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP, который заменяется на PTHREAD_MUTEX_INITIALIZER и вызов pthread_mutexattr_settype в конструкторе.
  3. Неоднократные жалобы линкера на undefined reference to 'backtrace', что решается дописыванием -lexecinfo везде, где это необходимо.
  4. В imgui из репозиториев FreeBSD обнаружилось отсутствие imgui_freetype.h, который я просто прилинковал ручками.
  5. В engine/Poseidon/World/Viewer.cpp ругалось на неизвестные переменные major и minor, которые определены парой строк выше. Решилось переименованием major в majorColor, а minor — в minorColor; но вообще не знаю, связано ли это с FreeBSD.

После пары часов ковыряний получил работающий без всяких нареканий самый настоящий нативный бинарь PoseidonGameDemo с самой настоящей армой. В дополнение к нему после сборки вы получите:

  1. PoseidonGame, из которого можно открыть всеми любимый редактор.
  2. PoseidonServer, с помощью которого можно запустить, собственно, игровой сервер, из консольки.
  3. PoseidonStudio, в которой можно разглядывать ассеты.
  4. PoseidonEvaluator, которым можно запускать SQS- и SQF-скрипты.
  5. И даже тетрис PoseidonTetris, и ещё всякого по мелочи.

Помимо всего прочего, в CONTRIBUTING.md указан комьюнити‐форк, в котором открыты пул‐реквесты.

Ну и да, на скриншотах WindowMaker и полтора докаппа.

JeanPierreDubois
()

RSS подписка на новые темы