Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Компиляция и сборка Wargus (Warcraft 2) на Debian 9 GNU/Linux, пошаговое руководство

Краткое руководство по компиляции и сборке Wargus + Stratagus (улучшенный Warcraft 2) на операционной системе GNU/Linux Debian 9 (Stretch). Как сконфигурировать и скомпилировать бинарные файлы игры, извлечение ресурсов из оригинального Warcraft II, конвертации и подготовка музыкальных файлов, как это все собрать до кучи и запустить легендарную игру-стратегию под GNU/Linux.

В одной из прошлых статей было рассказано о проекте Wargus (Warcraft II), позже вышла достаточна большая статья с подробным пошаговым описанием компиляции Wargus на GNU/Linux Debian 8 (Jessie).

Прошло время и появилась новая версия Debian - 9 (Stretch). Игра, собранная под 8-ю ветку операционной системы (ОС), на 9-й версии уже не запускается - проблемы с совместимостью и поиском некоторых библиотек.

В этом мануале постараюсь более кратко изложить пошаговый план компиляции и сборки Wargus + Stratagus под операционной системой GNU/Linux Debian 9 Stretch.

Содержание:

  1. Подготовка ОС и инструментов
  2. Компиляция Stratagus
  3. Компиляция Wargus
  4. Распаковка ресурсов из игры Warcraft II
  5. Собираем все до кучи
  6. Музыка для игры - конвертация и настройка
  7. Запуск игры
  8. В завершение

Подготовка ОС и инструментов

Все операции будут выполняться под операционной системой GNU/Linux Debian 9, установленной в вирутальной машине VirtualBox, что в свою очередь позволило провести все необходимые эксперименты с возможностью отката действий используя снепшоты (snapshots) образа с установленной ОС, а также не засорять основную рабочую ОС.

Вывод команды "uname -a" в виртуальном машине:

Linux debian 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u3 (2017-08-06) x86_64 GNU/Linux

Вывод команды "lsb_release -a":

Debian GNU/Linux 9.1 (stretch)

Предполагается что у вас уже установлена операционная система с удобной, по вашему выбору, графической оболочкой (KDE, Gnome и т.п.).

Выполним установку всех необходимых инструментов и библиотек (список команд для запуска из консоли):

sudo apt-get install build-essential cmake pkg-config  
sudo apt-get install mc p7zip 
sudo apt-get install liblua5.1-0-dev zlib1g-dev libpng-dev libsdl1.2-dev libtolua++5.1-dev
sudo apt-get install libvorbis-dev libtheora-dev libfluidsynth-dev libmikmod-dev libbz2-dev libmng-dev
sudo apt-get install ffmpeg2theora libcdparanoia-dev libstorm-dev libgtk2.0-dev
sudo apt-get install timidity vorbis-tools

Этот набор команд установит следующие инструменты и ресурсы:

  • компиляторы, скрипты и утилиты для компиляции программ из исходных кодов;
  • консольный файловый менеджер и универсальный архиватор;
  • набор библиотек для компиляции Stratagus;
  • набор библиотек для компиляции Wargus;
  • программы для работы с музыкальными файлами в форматах MIDI и OGG.

Создадим директорию, в которой будет выполняться вся работа по компиляции и сборке игры:

mkdir /tmp/game

Компиляция Stratagus

Stratagus - это движок для построения стратегических 2D-игр, работающих в реальном времени. Для получения исходных кодов движка переходим на сайт https://launchpad.net/stratagus и качаем архив с самой свежей версией. На момент написания статьи последняя доступная версия - 2.3. Размер скачиваемого файла - примерно 2,5МБ.

Скачивание архива выполним при помощи "wget", потом он будет распакован в рабочую директорию, а в этой поддиректории создадим каталог "build" для компиляции проекта. В конце выполняем конфигурацию (cmake) и саму компиляцию (make).

Для осуществления всего этого процесса нужно выполнить следующие команды (помним что в моем случае версия проекта - 2.3):

cd /tmp/game
wget -c "https://launchpad.net/stratagus/trunk/2.3/+download/stratagus_2.3.0.orig.tar.gz"
tar -xf stratagus_2.3.0.orig.tar.gz
cd stratagus_2.3.0.orig && ls -la
mkdir build && cd build
cmake ..
make

Все должно успешно сконфигурироваться и скомпилироваться.

Успешная компиляция Stratagus в GNU/Linux

Рис. 1. Успешная компиляция Stratagus в GNU/Linux.

Двигаемся дальше...

Компиляция Wargus

На данном этапе нам необходимо скачать файлы с исходным кодом проекта Wargus (отличная реализация игры Warcraft II на основе движка Stratagus).

Необходимо скачать архив с исходными кодами Wargus той же версии, что и скачанный нами на предыдущем этапе Stratagus (в моем случае - 2.3). Архивы и ресурсы проекта размещены здесь: https://launchpad.net/wargus . Размер скачиваемого архива - примерно 43МБ.

Команды для скачивания, распаковки, создания директории сборки проекта и для теста конфигурации:

cd /tmp/game
wget -c "https://launchpad.net/wargus/trunk/2.3/+download/wargus_2.3.0.orig.tar.gz"
tar -xf wargus_2.3.0.orig.tar.gz && cd wargus_2.3.0.orig && ls -la
mkdir build && cd build
cmake ..

 Теперь, чтобы Wargus успешно прошел этап конфигурации, нужно выполнить замены в трех файлах:

  1. CMakeLists.txt: find_package(Stratagus REQUIRED) -> #find_package(Stratagus REQUIRED)
  2. CMakeCache.txt: STRATAGUS_INCLUDE_DIR-NOTFOUND -> /tmp/game/stratagus_2.3.0.orig
  3. wargus.cpp: #include <stratagus-game-launcher.h> -> #include "stratagus-game-launcher.h"

Выполняем эту задачу используя "sed" (stream editor):

sed -i 's/find_package(Stratagus REQUIRED)/#find_package(Stratagus REQUIRED)/g' /tmp/game/wargus_2.3.0.orig/CMakeLists.txt
sed -i 's/STRATAGUS_INCLUDE_DIR-NOTFOUND/\/tmp\/game\/stratagus_2.3.0.orig/g' /tmp/game/wargus_2.3.0.orig/build/CMakeCache.txt
sed -i 's/#include <stratagus-game-launcher.h>/#include "stratagus-game-launcher.h"/g' /tmp/game/wargus_2.3.0.orig/wargus.cpp

Осталось скопировать заголовочный файл из стратагуса в варгус и запустить процесс конфигурации с последующей компиляцией:

cp /tmp/game/stratagus_2.3.0.orig/gameheaders/stratagus-game-launcher.h /tmp/game/wargus_2.3.0.orig
cmake ..
make

 Процесс компиляции займет некоторое время и должен завершиться успешно:

Удачное завершение компиляции Wargus в GNU/Linux

Рис. 2. Удачное завершение компиляции Wargus в GNU/Linux.

Распаковка ресурсов из игры Warcraft II

Для выполнения работ на данном этапе нужно создать две директории:

  1. war2data - для файлов-архивов ресурсов игры Warcraft II;
  2. data - для извлеченных ресурсов, что будут использоваться в Wargus.

Делаем это с помощью следующих команд:

cd /tmp/game/wargus_2.3.0.orig/build/
mkdir war2data && mkdir data && ls -la

Для распаковки ресурсов нам нужны все файлы-архивы (*.ins, *.war ...) из папки "DATA" от оригинальной игры Warcraft 2 Tides of Darkness с дополнением Beyond The Dark Portal.

Допустим что все файлы игры (War2 под DOS/WIN95) уже доступны нам из директории "/mnt" (подмонтирован компакт-диск или сетевая папка с игрой на другом ПК, файлы скопировали в папку из флешки и т.п).

В таком случае копирование нужных файлов данных для Wargus можно выполнить вот такой командой:

cp /mnt/DATA/* /tmp/game/wargus_2.3.0.orig/build/war2data

 Копируем ресурсы из оригинальной игры Warcraft 2 в Linux

Рис. 3. Копируем ресурсы из оригинальной игры Warcraft 2 в Linux.

Запускаем процесс извлечения ресурсов:

cd /tmp/game/wargus_2.3.0.orig/build/
./wartool war2data data

Распаковка пройдет достаточно быстро:

Извлечение ресурсов из игры Warcraft 2 для сборки Wargus под Linux

Рис. 4. Извлечение ресурсов из игры Warcraft 2 для сборки Wargus под Linux.

Собираем все до кучи

Пришло время собрать все результаты нашей работы в одной директории, создадим папку для игры:

mkdir /tmp/game/Wargus

 Выполним копирование бинарных файлов:

cp /tmp/game/stratagus_2.3.0.orig/build/stratagus /tmp/game/Wargus/
cp /tmp/game/stratagus_2.3.0.orig/build/png2stratagus /tmp/game/Wargus/
cp /tmp/game/wargus_2.3.0.orig/build/wargus /tmp/game/Wargus/
cp /tmp/game/wargus_2.3.0.orig/build/wartool /tmp/game/Wargus/
cp /tmp/game/wargus_2.3.0.orig/build/pudconvert /tmp/game/Wargus/

Добавим файлы данных и настроек для скомпилированного Варгуса:

cp -R /tmp/game/wargus_2.3.0.orig/campaigns/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/graphics/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/maps/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/mods/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/music/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/scripts/ /tmp/game/Wargus/
cp -R /tmp/game/wargus_2.3.0.orig/sounds/ /tmp/game/Wargus/

Скопируем извлеченные из игры Warcraft II ресурсы:

cp -R /tmp/game/wargus_2.3.0.orig/build/data/*  /tmp/game/Wargus/

Смотрим получившуюся структуру файлов и директорий в файловом менеджере Midnight Commander:

cd /tmp/game/Wargus && mc

Смотрим содержимое папки с игрой Wargus после сбо

Рис. 5. Смотрим содержимое папки с игрой Wargus после сборки.

Для выхода из "mc" и возврата в консоль жмем F10 (Quit).

Музыка для игры - конвертация и настройка

Выполним конвертацию и сжатие музыкальных файлов: MIDI -> WAV -> OGG -> OGG.GZIP.

cd /tmp/game/Wargus/music
for f in *.mid; do timidity "$f" -Ow -o "${f%.mid}.wav"; done
for f in *.wav; do oggenc "$f"; done
rm ./*.mid && rm ./*.wav
for f in *.ogg; do gzip "$f"; done
ls -la

Изменяем расширение музыкальных файлов в настройках игры:

  • wc2-config.lua: wargus.music_extension = ".mid" -> wargus.music_extension = ".ogg".
sed -i 's/wargus.music_extension = ".mid"/wargus.music_extension = ".ogg"/g' /tmp/game/Wargus/scripts/wc2-config.lua

Задаем музыкальный файл играющий при старте игры, для этого откроем в текстовом редакторе файл настроек:

nano /tmp/game/Wargus/scripts/guichan.lua

Для поиска по тексту в редакторе нажимаем комбинацию клавиш CTRL+W и помещаем в строку запроса ранее скопированный в буфер обмена (CTRL+C) искомый кусок текста (правая клавиша миши, потом Paste и ENTER в редакторе).

Текст для поиска:

function BuildProgramStartMenu

Под этим текстом ищем строчку:

PlayMusic("music/Main Menu" .. wargus.music_extension)

Приводим ее к следующему виду:

PlayMusic("music/Orc Briefing.ogg")

Для выхода из редактора жмем CTRL+X, на запрос сохранять ли файл - подтверждаем с помощью Y и ENTER.

Запуск игры

Запускать игру нужно с помощью бинарного файла "stratagus":

cd /tmp/game/Wargus
./stratagus

Заставка Warcraft 2 при запуске Wargus на GNU/Linux

Рис. 6. Заставка Warcraft 2 при запуске Wargus на GNU/Linux.

Должна зазвучать музыка, когда заставка исчезнет можно покопаться в настройках игры. В меню настроек можно задать нужные возможности, к примеру включить отображение наносимых юнитами повреждений (для применения нужен перезапуск) и многое другое:

еню настроек игры Wargus на GNU/Linux

Рис. 7. Меню настроек игры Wargus на GNU/Linux.

Игра содержит мощный редактор карт, в котором доступны все постройки и юниты, можно создавать карты огромных размеров и на много игроков.

В игре Wargus присутствует мощный редактор карт

Рис. 8. В игре Wargus присутствует мощный редактор карт.

Теперь, убедившись в работоспособности игры, можно перенести ее на основную рабочую систему или другой компьютер с установленной ОС GNU/Linux Debian 9.

Создать файл-архив с игрой можно используя одну из команд:

tar -zcf wargus-linux-debian-9.tar.gz /tmp/game/Wargus/
7z a wargus-linux-debian-9.7z /tmp/game/Wargus/

Несколько скриншотов игры с разрешением экрана 1280х800 (рисунки кликабельны):

Играем в Wargus за орков, режим Skirmish (против компьютера), карта 64x64

Рис. 9. Играем в Wargus за орков, режим Skirmish (против компьютера), карта 64x64.

Играем в Wargus за людей, режим Skirmish (против компьютера), карта 128x128

Рис. 10. Играем в Wargus за людей, режим Skirmish (против компьютеров), карта 128x128.

В завершение

Используя аналогичный алгоритм можно выполнить компиляцию и сборку игры на других версиях GNU/Linux (CentOS, Fedora, Arch...) и на других платформах. Для примера, можно попробовать собрать игрушку на Raspberry Pi 2/3.

Ниже вы можете посмотреть видео с процессом сборки Wargus на GNU/Linux Debian 9, который был освещен в данной статье:

Музыка в видео: Computer Music All-Stars -  Albatross v2.

Wargus содержит множество настроек игры и игровых режимов, позволяет играть как по сети, так и в одиночку на прохождение миссий или сражения с компьютером. Сборник-архив с большим количеством переконвертированных карт (pud в sms) для Варгуса  вы можете найти в моих предыдущих статьях.

Удачной компиляции и приятной игры! )

0 45 Linux