Сборка и запуск Wargus (Stratagus) на Linux снуля (WarCraft 2)
Показан процесс компиляции и настройки веселой игры Wargus (Stratagus) - клона WarCraft 2 под GNU Linux.
Статья написана с расчетом на начинающего пользователя Линукс, все описано достаточно подробно и с пояснениями чтобы смог разобраться каждый. Материал получился достаточно большой, сопровождается множеством картинок.
Язык интерфейса игры в данном случае - английский. На данный момент, программа версии "2.3" под GNU/Linux имеет проблемы с отображением кириллических шрифтов.
- В качестве предисловия
- Подготовка
- Компиляция Stratagus;
- Компиляция Wargus;
- Конвертация и подготовка ресурсов из игры WarCraft II;
- Настройка и подготовка музыки.
- Результат
- Заключение
В качестве предисловия
Что это за игра и как ее собрать в ОС Windows вы можете прочитать в публикации: Wargus - старая добрая игра WarCraft II в новом лице.
Чтобы получить готовую игру на Linux нам нужно будет скомпилировать из исходных кодов Stratagus + Wargus. Это увлекательный квест (приключение), который не только подарит вам интересную и обновленную старую игру-клон WarCraft II, но и научит некоторым базовым операциям в Linux, поможет сориентироваться что и где искать, даст толчек к использованию смекалки в подобных Линукс-делах и многое другое.
Сразу оговорюсь что собрать эту связку было не просто, причиной всему - большое количество зависимостей и разнообразных подводных камней на пути к острову Wargus. В то же время мы будем все делать постепенно и по порядку - все обязательно получится!
Команды по поиску и установке пакетов лучше всего выполнять в отдельном окне терминала. Команды для компиляции и сборки Stratagus, Wargus также будем выполнять в своих отдельных окнах (или вкладках) терминала (консоли).
Для каждой задачи - свой терминал, это поможет не запутаться и сэкономить некоторое время и нервы.
Для удобства не ленитесь открывать дополнительные окна терминалов, к примеру если нужно что-то проверить или посмотреть в файловом менеджере MC (Midnight Commander).
Ну что, вы готовы к данному приключению? - тогда поехали...
Подготовка
В наличии у меня имеется чисто установленный GNU/Linux Debian 8.1 (Jessie), на нем и буду показывать весь процесс компиляции и настройки с нуля. У вас же может быть готовая обжитая система Debian GNU Linux, Ubuntu или другая на основе Debian.
Важно! О том как выполнить все описанное здесь и собрать игру для GNU/Linux Debian 9 читайте в новой публикации вот ТУТ (сокращенный мануал).
Что касается других дистрибутивов Линукс - то там все делается подобным образом, могут лишь только отличаться названия команд, путей и пакетов.
Все операции будем выполнять под обычным пользователем, а для критичных операций (установка пакетов и т.п.) будем предоставлять командам привилегии при помощи команды "sudo".
Первым делом обновим источники пакетов и сами пакеты в системе:
sudo apt-get update && apt-get upgrade
Теперь инсталлируемым вспомогательный софт, он будет нам полезен при работе, а также для более удобной навигации по файловой системе:
sudo apt-get install wget mc krusader p7zip p7zip-full zip lynx
Вот так выглядит запущенный в консоли MC(Midnight Commander) и файловый менеджер Krusader под Debian GNU Linux с графической оболочкой KDE:
Откроем другой терминал (текущий у нас будет для поиска и установки пакетов и библиотек) и создадим временную папку где мы будем сохранять и распаковывать архивы, компилировать бинарные файлы, производить все манипуляции:
mkdir /tmp/game
cd /tmp/game
Компиляция Stratagus
Запускаем браузер и идем на сайт launchpad.net где размещается исходный код и файлы проекта Stratagus: https://launchpad.net/stratagus
Видим что на сайте проект Stratagus сейчас доступен в версии 2.3 - будем использовать самую свежую на данный момент версию.
Здесь нам нужен исходный код, качаем архив с исходниками, клацнув зеленую кнопочку скачивания исходников справа, как на рисунке:
Сохраняем скачанный файл в директорию /tmp/game, которую мы создали на подготовительном этапе.
Примечание: можно скопировать ссылку на файл и закачать его при помощи wget, пример для версии 2.3:
wget -c "https://launchpad.net/stratagus/trunk/2.3/+download/stratagus_2.3.0.orig.tar.gz"
Размер архива - порядка 1Мб, качается достаточно быстро, в зависимости от ширины вашего интернет канала.
Распакуем скачанный архив и перейдем в его директорию командами:
cd /tmp/game && tar -xf stratagus_2.3.0.orig.tar.gz && ls -la
cd stratagus_2.3.0.orig
Вот как выглядит мой терминал после этой операции:
Хорошо, теперь будем разбираться как нам собрать Стратагус из исходных кодов. Если посмотреть структуру каталогов в распакованных исходниках то можно заметить директорию "doc" - в ней можем найти что-то полезное, давайте взглянем что там:
cd doc
ls -la
Как видим там есть разная документация, а наиболее нам интересен документ install.html, посмотреть его мы можем открыв в любом веб-браузере который у вас установлен или же в консоли (вначале мы установили консольный браузер Lynx):
lynx install.html
Сразу бросается в глаза список Software Requirements - это список тех библиотек и зависимостей, которые должны быть установлены в системе для корректной компиляции Stratagus:
Пролистав немного ниже мы увидим инструкции по инсталляции:
Итак, начнем с установки библиотек и зависимостей.
Установим CMake, для этого посмотрим в кеше пакетов что у нас есть по ключевому слову "cmake" наиболее близкое к тому что нам нужно:
apt-cache search cmake
Получим списочек, в котором можем увидеть что есть строчка:
cmake - cross-platform, open-source make system
Пожалуй это то что нам нужно и наиболее точно соответствует нашему запросу. Установим пакет "cmake" командой:
sudo apt-get install cmake
Вместе с собой пакет также установит некоторые необходимые дополнительные пакеты.
Идем дальше, будем устанавливать SDL. Что с ним делать и откуда устанавливать - не понятно... Попробуем посмотреть в кеше пакетов что у нас есть по ключевому слову "sdl":
apt-cache search sdl
Огого...хороший списочек получился на несколько страниц, там есть и "libsdl-gfx1.2-5", "libsdl1.2-dev" и "libsdl2-dev" и еще очень много самых разных файлов. Что же с этим списком делать если мы не знаем точно что нам нужно и какой версии? - ответ прост: пока что, ничего!
От этого момента пойдем немного другим путем. Попробуем запустить подготовку пакета Stratagus, а там будем внимательно смотреть чего ему не хватает для сборки и тогда уже будем искать и устанавливать.
Следуя инструкции по установке - перейдем в каталог с распакованными исходными кодами и создадим там папку "build", а также перейдем в только что созданную папку:
cd /tmp/game/stratagus_2.3.0.orig && mkdir build && cd build
Примечание: команда выше - это по сути три отдельные команды, каждая из них разделена от другой двумя символами "&" и выполняться такие команды будут по очереди в том порядке как написано слева направо.
Запускаем команду для конфигурации(подготовки) Stratagus:
cmake ..
Процесс быстро оборвется и оповестит нас о ошибке, вот на что обращаем свое внимание:
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
Эта строчка говорит что не хватает запускаемого бинарного файла PkgConfig. Ищем в кеше пакетов что у нас имеется по ключевым словам "pkg config":
apt-cache search pkg config
В списке явно выделяются строчки что сходны с нашим запросом:
pkg-config - manage compile and link flags for libraries
pkgconf - manage compile and link flags for libraries
Возьмем и поставим первый пакет "pkg-config", єтого должно біть достаточно:
sudo apt-get install pkg-config
Хорошо, теперь возвращаемся к подготовке исходных кодов и повторяем команду "cmake .." в том же окне. После запуска получаем опять ошибку:
Could NOT find Lua51 (missing: LUA_LIBRARIES LUA_INCLUDE_DIR)
Строчка говорит о том что не хватает библиотеки Lua51 для будущей компиляции Stratagus, также у нас в списке необходимого ПО есть пункт "Lua 5.1 (required)" - будем искать и ставить этот пакет.
Смотрим список пакетов что есть по запросу "lua 5"(как это сделать вы уже знаете из предыдущего опыта), видим что есть вот такие пакеты наиболее сходные к нашему запросу:
liblua5.1-bitop-dev - Transitional package for lua-bitop-dev
liblua5.1-iconv0 - Transitional package for lua-iconv
liblua5.1-0 - Shared library for the Lua interpreter version 5.1
liblua5.1-0-dbg - Debug symbols for the Lua shared library interpreter
liblua5.1-0-dev - Development files for the Lua language version 5.1
Почему в названии пакета спереди есть lib - потому что это библиотека, а нам нужна именно она (missing: LUA_LIBRARIES), осталось только разобраться какой из этих пакетов ставить. Можно конечно же установить все, но зачем захламлять лишнее пространство - нам ведь нужна библиотека для сборки из исходных кодов, а значит нужны dev-файлы(файлы для разработки), поэтому нам наиболее подойдет пакет с названием "liblua5.1-0-dev".
Устанавливаем пакет:
sudo apt-get install liblua5.1-0-dev
Пробуем снова подготовить Стратагус командой "cmake ..":
cd /tmp/game/stratagus_2.3.0.orig/build && cmake ..
Отлично, теперь у нас новые ошибочки:
Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
В списке необходимого ПО у нас есть "libpng (required)" и "zlib (required)" - все верно, будем искать и ставить нужные пакеты пока данные ошибки не исчезнут.
Поискав в кеше пакетов претенденты для ZLIB однозначно выделяем строчку:
zlib1g-dev - compression library - development
Ставим данный пакет и пробуем запустить подготовку Стратагуса (команда "cmake .."), теперь строка с ошибкой о ZLIB пропала а на ее месте появилась:
Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.8")
Строчка говорит что библиотека ZLIB найдена и ее версия "1.2.8" - все отлично, мы движемся в правильном направлении.
Весь этот процесс может показаться достаточно сложным, но тем не менее все у нас получается. Для небольшой разгрузки можно сейчас сделать перерыв и сходить попить хорошего чая, немного развеяться, а потом уже продолжить выполнение нашего квеста.
Отлично, вы отдохнули, а значит продолжим...
Будем устанавливать библиотеку PNG - это набор инструментов для работы с рисунками графического формата PNG (Portable Network Graphics).
Пройдясь по списку найденных в кеше (команда apt-cache search) по ключевому слову "png" пакетов находим те что есть библиотеки (начинаются как правило со слова lib).
Поскольку мы знаем что нам нужен именно dev-вариант библиотеки то можем отсеять все рузульаты в списке найденных пакетов при помощи фильтра, вот как это делается:
apt-cache search png | grep dev
Из списка можем выделить:
libpng12-dev - PNG library - development
libpnglite-dev - lightweight C library for loading and writing PNG images
Здесь мы будем устанавливать именно первый пакет, поскольку второй - это облегченная версия библиотеки PNG (lite), а в требованиях к ПО явно не указано что нужен PNG Lite.
sudo apt-get install libpng12-dev
Установили "libpng12-dev"? - хорошо, мы двигаемся к победе!
Запускаем снова процесс подготовки и видим что появилась новая ишибка:
Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR)
Что с ней делать мы уже знаем - ищем и устанавливаем библиотеку для SDL!
apt-cache search sdl | grep dev
Вот что можно выделить в списке:
libsdl1.2-dev - Simple DirectMedia Layer development files
libsdl2-dev - Simple DirectMedia Layer development files
Здесь видим что есть версия 1.2 и версия 2. Какую ставить? - пробуем сначала 2-ю.
sudo apt-get install libsdl2-dev
После запуска "cmake .." для стратагуса снова видим сообщение об ошибке что библиотека SDL не анйдена. Значит "libsdl2-dev" - это не тот пакет что нужен, удалим его и установим пакет "libsdl1.2-dev":
sudo apt-get remove libsdl2-dev
sudo apt-get install libsdl1.2-dev
Пробуем снова запустить подготовку стратагуса командой "cmake .." - ошибки с SDL уже нет но вылезла очередная, к которой мы уже готовы и знаем что делать:
Could not find library or program tolua++
Смотрим в список необходимого ПО и видим что там есть пункт "Tolua++ (required)", также ищем в кеше пакетов что у нас есть по ключевому слову "tolua" в наличии:
libtolua-dev - Tool to integrate C/C++ code with Lua - development files
libtolua++5.1-dev - extended tool to integrate C/C++ code with Lua (devel)
Всего две позиции, ставить будем "libtolua++5.1-dev" потому что в требованиях у нас указано "Tolua++":
sudo apt-get install libtolua++5.1-dev
Теперь после запуска "cmake .." у нас все пройдет отлично, вот отрезок начала и конца из выдачи результатов что свидетельствуют об удачной подготовке (конфигурации) к компиляции:
-- checking for module 'maemo-version'
-- package 'maemo-version' not found
-- Found program tolua++: /usr/bin/tolua++5.1
-- Found library tolua++: /usr/lib/libtolua++5.1.a
-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
-- Could not find FluidSynth
-- Could not find StackTrace
-- Could not find Mikmod
-- Could not find MNG
-- Could NOT find OggVorbis libraries
.................... много текста................
Theora: Not Found
X11: Found and enabled (Disable by param -DWITH_X11=OFF)
Renderer: OpenGL (Disable by param -DWITH_RENDERER=NativeSDL)
==================================
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/game/stratagus_2.3.0.orig/build
В принципе уже можно компилировать Стратагус командой "make", но прежде мы все же доставим еще некоторые библиотеки, которые есть рекомендуемыми и опциональными:
Немного распишу что мы будем ставить:
- libvorbis (recommended) - библиотека для поддержки декодирования и проигрывания звуковых файлов формата *.ogg.
- libtheora (recommended) - библиотека кодека для поддержки проигрывания формата Theora Video.
- libfluidsynth (recommended) - библиотека программного MIDI-синтезатора, пригодится для проигрывания музыки в формате *.mid.
- libmikmod (optional) - библиотека для проигрывания звуковых файлов *.mod (помните чиптюнзы, звуки приставки денди и т.п.).
- libbzip2 (optional) - пригодится для упаковки звуков, карт и других ресурсов.
- libmng (optional) - библиотека для работы с графическими файлами *.mng, *.jng, установим ее пусть будет раз о ней упомянули.
Все эти библиотеки были найдены мною в кеше пакетов командой "apt-cache search" так же как и предыдущие, установим их все сразу одной командой:
sudo apt-get install libvorbis-dev libtheora-dev libfluidsynth-dev libmikmod-dev libbz2-dev libmng-dev
Вот что мы выполнили из списка необходимого ПО:
- CMake (required).
- SDL (required).
- libpng (required).
- zlib (required).
- Lua 5.1 (required).
- Tolua++ (required).
- libogg (recommended).
- libvorbis (recommended).
- libtheora (recommended).
- libfluidsynth (recommended).
- libmikmod (optional).
- libbzip2 (optional).
- libmng (optional).
Все готово к компиляции, переходим в директорию "/tmp/game/stratagus_2.3.0.orig/build", где мы выполняли команду подготовки "cmake .."
cd /tmp/game/stratagus_2.3.0.orig/build && cmake ..
Запускаем компиляцию Стратагуса:
make
В зависимости от мощности вашего компьютера процесс компиляции займет порядка от 2 до 10 минут, слева в процентах мы можем наблюдать прогресс.
На этом пока что все, стратагус готов, об этом свидетельствуют бинарные файлы что появились в директории "build". Оставляем терминал открытым, можно окно на время свернуть чтобы не мешало.
Компиляция Wargus
Ну вот, Стратагус у нас скомпилирован, теперь займемся Wargus'ом.
Открываем браузер и заружаем сайт где размещается содержимое проекта Wargus: https://launchpad.net/wargus
Версия Варгуса должна точно совпадать с версией Стратагуса, как мы помним Стратагус у нас версии 2.3.0 и на страничке с Варгусом версия такая же - значит все хорошо.
Здесь нам также необходим исходный код, поэтому качаем архив с исходниками, клацнув справа зеленую кнопочку скачивания исходников, как на рисунке:
Сохраняем файл в директорию /tmp/game
Для скачивания через WGET выполним команды:
cd /tmp/game
wget -c "https://launchpad.net/wargus/trunk/2.3/+download/wargus_2.3.0.orig.tar.gz"
Размер архива - порядка 45Мб. Распакуем скачанный архив и перейдем в его директорию командами:
tar -xf wargus_2.3.0.orig.tar.gz && cd wargus_2.3.0.orig && ls -la
Вот так выглядит окно консоли с выполненными командами:
В директории с распакованными исходными файлами и ресурсами мы видим много разных папок и файлов, пробежаться и осмотреться по ним можно в файловом менеджере Midnight Commander или же консольными командами, а также используя графический файловый менеджер Krusader.
Сразу бросается в глаза знакомый уже нам из Стратагуса каталог "doc" но там нет информации по инсталляции и установке Wargus, она собрана в файле README - смотрим его содержимое:
cat README
В разделе "Build depends" нам указаны какие библиотеки нужны для сборки Варгуса, а в разделе "Installation Instructions" - инструкции по установке.
Начнем с библиотек:
- Gtk+ - необходим, что именно нужно ставить - узнаем потом, при подготовке к компиляции.
- Hildon - нам не нужен для PC, это для платформы MAEMO (Nokia N900 и т.п.)
- ffmpeg2theora - нужен для конвертации аудио и видео ресурсов.
- cdparanoia - нужен для рипа музыкальных CD-треков, в принципе можно и не ставить.
- cdda2wav - нужен если мы под Windows, значит оно нам не нужно.
Сейчас мы установим две из необходимых библиотек:
sudo apt-get install ffmpeg2theora libcdparanoia-dev
Остальные необходимые библиотеки установим по ходу подготовки к компиляции, приступим...
Переходим в директорию с распакованными исходными кодами Варгуса и создаем в ней директорию "build":
cd /tmp/game/wargus_2.3.0.orig && mkdir build && cd build
Запускаем подготовку:
cmake ..
Видим ошибку:
Could not find stratagus
Все верно, мы скомпилировали стратагус но не установили, устанавливать его мы не будем, а просто отучим Wargus просить этот файл, сделаем небольшой хак, открываем для редактирования файл CMakeLists.txt что лежит в папке /tmp/game/wargus_2.3.0.orig :
nano /tmp/game/wargus_2.3.0.orig/CMakeLists.txt
Появится простой редактор текстовых файлов NANO (название не связано с нано-технологиями, хотя...), в нем мы клавишами-стрелками листаем вниз и ищем строчку:
find_package(Stratagus REQUIRED)
Ставим в начале этой строчки знак решотки "#", то есть закомментируем данное требование, вот как будет выглядеть эта строка:
#find_package(Stratagus REQUIRED)
Для выхода из редактора нажимаем комбинацию клавиш CTRL+X и на запрос о сохранении изменений жмем клавишу "y".
Отлично, теперь запускаем подготовку:
cmake ..
В результате работы команды идим вот что:
-- Could not find StormLib
-- Some or all of the gtk libraries were not found. (missing: GTK2_GTK_LIBRARY
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/game/wargus_2.3.0.orig/build
CMake говорит что не удается найти StormLib - это библиотека, которая нужна для работы с файлами-архивами в формате MPQ от Blizzard. В кеше пакетов ее не удастся найти, пробуем найти что-нибудь по этой библиотеке в поисковых системах.
К примеру в Google вбиваем запрос "linux StormLib" и на первой же позиции странице результатом видим:
Переходим по ссылке из результатов поиска: https://github.com/ladislav-zezula/StormLib
Открываем еще один отдельный терминал и переходим в нашу рабочую директорию:
cd /tmp/game/
Качаем в эту папку архив с сайта:
wget -c "https://github.com/ladislav-zezula/StormLib/archive/master.zip"
Распаковываем архив и переходим в распакованную новую папку:
7z x master.zip && cd StormLib-master
Создаем директорию "build", переходим в нее, запускаем подготовку и компиляцию StormLib:
mkdir build && cd build
cmake ..
make
Процесс должен завершиться успешно:
Теперь в этом же терминале запускаем установку библиотеки с правами суперпользователя:
sudo make install
Отлично, теперь можно закрыть терминал где мы собирали StormLib-master и возвращаемся к терминалу в котором мы работали с Варгусом.
Пробуем запустить подготовку теперь:
cd /tmp/game/wargus_2.3.0.orig/build && cmake ..
Видим что с StormLib теперь все ОК:
-- Found StormLib: /usr/local/lib/libstorm.so
Осталось установить GTK, об этом нам говорит сообщение:
Some or all of the gtk libraries were not found. (missing: GTK2_GTK_LIBRARY...
Набрав в поисковике (Google) запрос "missing: GTK2_GTK_LIBRARY GTK2_GTK_INCLUDE_DIR" буквально сразу нашел ответ - нужно установить пакет "libgtk2.0-dev":
sudo apt-get install libgtk2.0-dev
Осталось еще разобраться с сообщением об ошибке:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
STRATAGUS_INCLUDE_DIR
Для этого откроем для редактирования файл CMakeCache.txt командой:
nano /tmp/game/wargus_2.3.0.orig/build/CMakeCache.txt
В редакторе нажмем сочетание клавиш для поиска строки текста CTRl+W, введем текст "STRATAGUS_INCLUDE" и потом жмем Enter - редактор перебросит нас к найденной строке:
STRATAGUS_INCLUDE_DIR:PATH=STRATAGUS_INCLUDE_DIR-NOTFOUND
Вот здесь и содержится наша проблема, путь к исходным файлам Stratagus не указан, отредактируйте строчку чтобы она местила полный путь к папке "stratagus_2.3.0.orig", вот так выглядит исправленная строка:
STRATAGUS_INCLUDE_DIR:PATH=/tmp/game/stratagus_2.3.0.orig
Теперь выходим из редактора (CTRL+X) и на запрос о сохранении подтверждаем (Y).
Сейчас, запустив "cmake .." там где мы готовим Wargus (/tmp/game/wargus_2.3.0.orig/build/), мы увидим вот что:
Все Ок и все на месте, запускаем компиляцию Варгуса:
make
И что вы думаете...вот что у вас должно получиться:
Да, опять ошибка и чего-то не хватает, а именно: сборщик CMake не знает где лежит заголовочный файл stratagus-game-launcher.h для Stratagus, об этом свидетельствует строчка:
wargus.cpp:34:37: fatal error: stratagus-game-launcher.h: No such file or directory
В свое время мне пришлось помучатся в экспериментах как же это чудо связать, расскажу как это сделать.
Сначала был найден графический конфигуратор CMAKE GUI (cmake-qt-gui) и с помощью его я подключал stratagus-game-launcher.h, но потом нашел более простое решение, оно состоит из двух действий:
1) Копируем stratagus-game-launcher.h в директорию с Варгусом, выполняем:
cp /tmp/game/stratagus_2.3.0.orig/gameheaders/stratagus-game-launcher.h /tmp/game/wargus_2.3.0.orig
2) Редактируем файл wargus.cpp:
nano /tmp/game/wargus_2.3.0.orig/wargus.cpp
и приводим в нем строчку "#include <stratagus-game-launcher.h>" к вот такому виду:
Теперь возвращаемся в директорию где мы собираем Wargus и пробуем запустить компиляцию:
cd /tmp/game/wargus_2.3.0.orig/build
make
Теперь все должно собраться:
Отлично, Stratagus и Wargus у нас скомпилированы, бинарные файлы лежат в папках "build" для каждого из проектов. Идем дальше...
Конвертация и подготовка ресурсов из игры WarCraft II
Ну вот, пожалуй самое сложное позади. Осталось подготовить пак с ресурсами для нашей игры. Вытягивать эти ресурсы мы будем из файлов от оригинальной игры WarCraft II.
Где найти файлы оригинального WarCraft II, а это порядка 50-120Мб, думаю не составит для вас проблемы - возможно остался еще лицензионный диск с игрой, в ином же случае Google вам поможет найти эту старую игру для MS-DOS и Win95.
Отмечу что нужен WarCraft II Tides of Darkness с дополнением Beyond The Dark Portal и желательно на английском языке, на русском не пробовал но думаю что все также будет хорошо.
Создаем папку куда будем распаковывать оригинальные файлы от WarCraft II:
cd /tmp/game/wargus_2.3.0.orig/build/ && mkdir war2data && ls -la
Вот так выглядит результат данных команд:
Также создадим папку где у нас будут готовые извлеченные ресурсы:
mkdir data
Копируем в папку /tmp/game/wargus_2.3.0.orig/build/war2data все файлы из папки "DATA" установленной оригинальной игры WarCraft II, вот к примеру как виглядит содержимое этой папки у меня:
Запускаем распаковку и подготовку файлов командой:
cd /tmp/game/wargus_2.3.0.orig/build/ && ./wartool war2data data
Длительность распаковки зависит от мощности компьютера и длится несколько минут, вот как выглядит результат работы:
@ wargus-warcraft-2-files-extraction-ready.jpg
Посмотрим что у нас есть в директории /tmp/game/wargus_2.3.0.orig/build/data
Все отлично, теперь все ресурсы и файлы можно собирать в кучу.
Создаем папку где у нас будет готовая игра:
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/
Копируем ресурсы из оригинальной игры 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/
Теперь смотрим что у нас получилось:
cd /tmp/game/Wargus && mc
Вот так выглядит директория /tmp/game/Wargus в файловом менеджере MC:
Также можно посмотреть сколько места занимает вся получившаяся игра командой:
du -h --max-depth=1 /tmp/game/Wargus
Вывод команды виглядит примерно вот так:
Не очень то и много - примерно 102 МегаБайта.
Пробуем запускать игру, запуск нужно осуществлять именно при помощи файла "stratagus":
/tmp/game/Wargus/stratagus
Окно приветствия при старте Wargus:
Вы справились, поздравляю Вас!
Настройка и подготовка музыки
Все хорошо, но почему-то не играет на старте бодрая музыка в стиле ВарКрафт, да и при игре ее может не оказаться - давайте это исправим! Музыки может не быть потому что нет установленного ПО для программного MIDI-синтезатора.
Набор пакетов данного ПО весит не мало и для портабельной (переносной) версии игры каждый раз на новой системе все это устанавливать - не очень хорошая идея. Будем конвертировать музыку из формата *.mid в формат .*ogg.
Установим необходимые утилиты и наборы ресурсов:
sudo apt-get install timidity fluid-soundfont-gm vorbis-tools
Теперь добавим поддержку звуковых семплов fluid-soundfont для программного MIDI-синтезатора timidity:
sudo sed -e 's|^source|#source|' -i /etc/timidity/timidity.cfg
sudo sed -e '$a source /etc/timidity/fluidr3_gm.cfg' -i /etc/timidity/timidity.cfg
sudo /etc/init.d/timidity restart
Переходим в директорию с музыкой для игры:
cd /tmp/game/Wargus/music
Выполним перекодировку MIDI-файлов в WAV:
for f in *.mid; do timidity "$f" -Ow -o "${f%.mid}.wav"; done
В итоге размер всех музыкальных файлов вышел около 300 МБ. Готовые файлы формата wav можно прослушать используя VLC или любой другой мультимедиа-плеер. Вот что у меня получилось:
Перекодируем WAV в OGG:
for f in *.wav; do oggenc "$f"; done
В папке должны появиться музыкальные файлы в формате *.ogg. Мы также можем прослушать их при помощи плеера VLC.
Теперь удалим ненужные нам MIDI и WAV файлы:
rm ./*.mid && rm ./*.wav
В папке останутся только файлы, сумарный размер - примерно 24 МБ.
Поскольку Wargus поддерживает сжатые ресурсы - карты, звуки, музыку, то почему бы не попробовать сжать звуковые файлы. Помните при подготовке Stratagus мы устанавливали библиотеку "libbzip2 (optional)" - так вот она нам и пригодится для поддержки сжатых ресурсов.
Сожмем все звуковые файлы *.ogg GZIP'ом:
for f in *.ogg; do gzip "$f"; done
Вот что получится после сжатия:
В итоге сэкономили примерно 200КБ, что есть очень не много. К примеру при сжатии карт коэффициент сжатия будет достаточно высоким и можно сэкономить много места на диске.
Ок, идем дальше...
Открываем редактором NANO для редактирования файл wc2-config.lua - это скриптовый файл на языке LUA, в нем описаны основные параметры для запуска игры.
nano /tmp/game/Wargus/scripts/wc2-config.lua
Заменяем в этом файле строчку
wargus.music_extension = ".mid"
на вот такую:
wargus.music_extension = ".ogg"
Закрываем редактор и сохраняем. Здесь мы изменили формат музыкальных файлов на OGG Vorbis (*.ogg).
Открываем редактором NANO для редактирования файл guichan.lua - в данном файле описаны настройки интерфейса.
nano /tmp/game/Wargus/scripts/guichan.lua
Файл открылся? - ок, теперь нажимаем CTRL+W (от слова: where, где) и пишем туда кусок кода который будем искать:
function BuildProgramStartMenu
Жмем ентер и редактор переместит нас к найденному фрагменту.
Заменяем строчку
PlayMusic("music/Main Menu" .. wargus.music_extension)
на вот такую:
PlayMusic("music/Orc Briefing.ogg")
Выходим из редактора и сохраняем файл: CTRL+X, "y".
Все, пробуем запускать наш Варгус:
cd /tmp/game/Wargus/ && /tmp/game/Wargus/stratagus
В игровом меню, а также в процессе игры теперь везде будет играть музыка, причем треки можно менять в настройках!
Результат
Приведу несколько скриншотов работающего Wargus под Debian GNU Linux:
Заключение
Подготовленную таким образом игру можно переносить на Flash-накопителе на другие компьютеры с Линукс. К примеру, при переносе игры на другой компьютер с Debian GNU Linux может потребоваться установка нескольких пакетов:
sudo apt-get install liblua5.1-0-dev libfluidsynth-dev libmikmod-dev
Как и раньше я вам прилагаю свой собранный из разных уголочков интернета пак карт для Wargus, где вы найдете и сетевые карты и очень много карт для одиночной игры против ИИ (Искусственный Интеллект) - Кампаний.
Скачать подборку карт для Wargus (zip, 10 MB)
Для того чтобы можно было использовать эти карты их нужно распаковать в директорию Wargus/maps/skirmish/. В этой директории можно создать подпапки, а при игре в режиме Skirmish потом можно будет выбрать нужную вам карту из нужной папки.
Доброго времени суток, очень детально все написано, но у меня возникла другая проблема, почему-то манипуляции с CMAKE не дали должного результата. Вот лог:
prouser@ocean-pc:~/Загрузки/wargus_2.3.0.orig/build$ cmake ..
-- checking for module 'maemo-version'
-- package 'maemo-version' not found
-- Found ZLIB: /usr/lib/i386-linux-gnu/libz.so (found version "1.2.8")
-- Found PNG: /usr/lib/i386-linux-gnu/libpng.so (found version "1.2.50")
-- Found BZip2: /usr/lib/i386-linux-gnu/libbz2.so (found version "1.0.6")
-- Looking for BZ2_bzCompressInit in /usr/lib/i386-linux-gnu/libbz2.so
-- Looking for BZ2_bzCompressInit in /usr/lib/i386-linux-gnu/libbz2.so - found
-- Found StormLib: /usr/local/lib/libstorm.so
-- Looking for XOpenDisplay in /usr/lib/i386-linux-gnu/libX11.so;/usr/lib/i386-linux-gnu/libXext.so
-- Looking for XOpenDisplay in /usr/lib/i386-linux-gnu/libX11.so;/usr/lib/i386-linux-gnu/libXext.so - found
-- Looking for gethostbyname
-- Looking for gethostbyname - found
-- Looking for connect
-- Looking for connect - found
-- Looking for remove
-- Looking for remove - found
-- Looking for shmat
-- Looking for shmat - found
-- Looking for IceConnectionNumber in ICE
-- Looking for IceConnectionNumber in ICE - found
-- Found X11: /usr/lib/i386-linux-gnu/libX11.so
-- checking for module 'freetype2'
-- found freetype2, version 17.1.11
-- Found Freetype: /usr/lib/i386-linux-gnu/libfreetype.so (found version "17.1.11")
-- Found GTK2_GTK: /usr/lib/i386-linux-gnu/libgtk-x11-2.0.so
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
STRATAGUS_INCLUDE_DIR
used as include directory in directory /home/prouser/Загрузки/wargus_2.3.0.orig
used as include directory in directory /home/prouser/Загрузки/wargus_2.3.0.orig
used as include directory in directory /home/prouser/Загрузки/wargus_2.3.0.orig
-- Configuring incomplete, errors occurred!
See also "/home/prouser/Загрузки/wargus_2.3.0.orig/build/CMakeFiles/CMakeOutput.log".
Буду признателен, если поможете разобраться, система Lubuntu 14.04.
Доброго времени суток! В приведенном вами логе CMake нашла переменную STRATAGUS_INCLUDE_DIR, которая не содержит значения. Это значит что CMake не может найти папку где содержатся исходные файлы Stratagus или переменная не установлена.
Для того чтобы ошибка пропала в файле /build/CMakeCache.txt правим путь:
"STRATAGUS_INCLUDE_DIR:PATH=STRATAGUS_INCLUDE_DIR-NOTFOUND"
на полный путь(ПУТЬ_К_ПАПКЕ - заменить на реальный полный путь):
"STRATAGUS_INCLUDE_DIR:PATH=/ПУТЬ_К_ПАПКЕ/stratagus_2.3.0.orig".
После этого попробовать запустить cmake снова.
Упустил этот момент поскольку при сборке тестировал графическую утилиту cmake-qt-gui, где и была установлена эта переменная (STRATAGUS_INCLUDE_DIR). Проверил еще раз все по пунктам снуля на чистом Debian - все собралось.
Обновил статью!
ph0en1x спасибо за помощь, все собралось и отлично работает. Остался лишь один вопрос, зачем был нужен диск Beyond_the_Dark_Portal, ведь с него мы не брали никаких ресурсов, или я что-то упустил?
Приведу сравнение WarCraft II Tides of Darkness и Beyond The Dark Portal Expansion Set:
WarCraft II Tides of Darkness
Дата выхода: декабрь 1995 года.
Разработчик: Blizzard Entertainment.
Системные требования: Pentium 166, 32 Мб, Direct3D 5.
Кампании: 2 кампании по 14 миссий.
Игра по сети: модем, нуль-модем, LAN(IPX).
Стратегия реального времени (RTS), добыча ресурсов (золото, лес, нефть), строительство, развитие и сражения. В игре присутствуют две рассы - Люди(Альянс) и Орки(Орда).
WarCraft II Beyond The Dark Portal Expansion Set
Дата выхода: 30 апреля 1996 года.
Кампании: 2 кампании по 12 миссий.
Дополнение к игре WarCraft II Tides of Darkness, которое содержит 2 отдельные уникальные кампании за Альянс и Орду, а также по 5 новых юнитов(герои) для каждой рассы.
В дополнении присутствуют также несколько карт для многопользовательской игры.
Для данного дополнения нужна установленная игра WarCraft II Tides of Darkness.
В примерах для статьи я извлекал ресурсы из установленной игры, которая содержала в себе как оригинальную версию, так и установленное дополнение (Expansion Set).
Таким образом у меня доступны 14 + 14 + 12 + 12 оригинальных миссий + еще пару штук из самого Варгуса. Вот так выглядит меню Campaign Game:
Благодарю за разъяснения, а то я играл лишь Warcraft 2 BNE. Значит мне нужно еще и ресурсы с WarCraft II Beyond The Dark Portal Expansion Set ставить.
вобщем почитал но конешно проше просто скачать виндос эмулятор а на него уже и через торрент вот2 3 1 а так спасибо
Если не хочется возиться с компиляцией под Линукс то можно поступить так: качаем скомпилированные установочные файлы для Windows, выполняем установку и распаковку ресурсов, добиваемся работоспособности игры под Windows. Потом запускаем игру под операционной системой Linux используя Wine или PlayonLinux.
Здравствуйте! Делал, все согласно статье.
Компиляция stratagus. сmake - все успешно. Запустил make.
До 99% все хорошо. А дальше такая ошибка:
[ 99%] Linking CXX executable stratagus
/usr/bin/ld: CMakeFiles/stratagus.dir/src/animation/animation_die.cpp.o: undefined reference to symbol '_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSEPKc@@GLIBCXX_3.4.21'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/stratagus.dir/build.make:5721: recipe for target 'stratagus' failed
make[2]: *** [stratagus] Error 1
CMakeFiles/Makefile2:141: recipe for target 'CMakeFiles/stratagus.dir/all' failed
make[1]: *** [CMakeFiles/stratagus.dir/all] Error 2
Makefile:127: recipe for target 'all' failed
make: *** [all] Error 2
Что делать?
Похоже что это какая-то проблема с линковкой библиотек. Все манипуляции в статье успешно проводились несколько раз под Debian GNU Linux 8.1 x64 (Jessie, 64-битная ОС) с установленным оконным менеджером KDE, возможно у вас другая версия GNU Linux и там нужно установить какие-то дополнительные библиотеки или патчи.
Прежде чем приступать к работе настоятельно рекомендую выполнить обновление пакетов: sudo apt-get update && apt-get upgrade .
Если у вас отличается система и нет времени на поиски причины возникновения проблемы, то можете установить Debian Jessie 8.1 x64 + KDE под VirtualBox, а там уже выполнять все нужные манипуляции по сборке игры - очень удобно для разных экспериментов и не замусоривает основную систему.
при переключении на русский язык текст вообще не отображается нигде.
Есть варианты мыслей по поводу устранения?
Заранее благодарен!!
С Уважением, Дмитрий.
Здравствуйте, demm45.
Попробовал выполнить некоторые манипуляции для получения нормально отображающихся символов кириллицы:
Хочу заметить что перевод в данном порте игры на русский выполнен не полностью, отсутствуют переводы для текстов с заданиями миссий, в основном переведены все элементы интерфейса и сообщения в игре.
Проведя анализ LUA-скриптов с настройками, стало понятно что в программе используются собственные рисованные шрифты из папки "graphics/ui/fonts/". Покопавшись в некоторых файлах с исходным кодом, которые отвечают за перевод и шрифты, пришел к выводу что
обработка текстов с кириллическими символами перевода выполняется в кодировке IBM 866 (CP866), в этой же кодировке сохранены файлы "ru_RU.po" и "stratagus-ru.po".
К сожалению, заставить игру отображать кириллицу под Linux так и не удалось.
Сборка Wargus под Windows имеет те же проблемы не полного перевода: в меню выбора миссий отсутствуют названия миссий, в шрифтах не хватает части символов для отображения и т.п.
А вот с английской локализацией все отлично как под GNU/Linux, так и под MS Windows.
спасибо за то, что уделили время. Но у меня вообще, даже коряво ничего не рисует. И я нашел почему.
В исходниках в файле defaultfont.cpp
int DefaultFont::drawGlyph(Graphics* graphics, unsigned char, int x, int y)
{
graphics->drawRectangle( Rectangle(x, y, 8, 8));
return 8;
}
void DefaultFont::drawString(Graphics* graphics, const std::string& text, int x, int y)
{
unsigned int i;
for (i = 0; i< text.size(); ++i)
{
drawGlyph(graphics, text.at(i), x, y);
x += getWidth(text);
}
}
То есть в функцию отрисовки передается символ, но в ней он не используется а рисуется первый квадрат из *.png. А во всех файлах шрифтов он пустой. Править и пересобирать пока некогда. Попозже попробую.
и ещё одно:
При конвертации mid в ogg пишет:
No instrument mapped to tone bank **, no idea which one is missing
где ** номер отсутствующего инструмента.
После конвертации звучит неприятно.
Выполнил
sudo apt-get install fluid-soundfont-gm
sudo sed -e 's|^source|#source|' -e '$a source /etc/timidity/fluidr3_gm.cfg' -i /etc/timidity/timidity.cfg
sudo /etc/init.d/timidity restart
После конвертации звучать стало приятно, инструменты теперь все и звучат естественней.
С Уважением, Дмитрий.
и ещё нашел в font.cpp функцию
unsigned int CFont:DrawChar(CGraphic &g, int utf8, int x, int y, const CFontColor &fc) const
В моем случае кириллические символы под GNU/Linux также вообще не отображаются. Что интересно, если в файле перевода "ru_RU.po" в одну из строк с русским переводом добавить какие-то английские буквы, то они также не будут отображены.
Если же теперь файл ru_RU.po" пересохранить в кодировке CP1252, то увидим уже следующую ситуацию:
Похоже, что-то работает не так как нужно при обработке символов в кодировке IBM 866. Что до функций, обрабатывающих вывод символов используя графические шрифты, то здесь вполне может быть что какие-то функции не правильно себя ведут или же вообще не используются.
Насчет использования набора инструментов fluid-soundfont для timidity - хорошее замечание. Добавил эту информацию в обе статьи.
Спасибо!
так и не победил. Поставил DosBox и оригинальную игру
Приветствую уважаемый.
Через 2 года вернулся к вашей статье. Делаю игровую панель с 10" сенсорным экраном от промконтроллера на Raspberry Pi3 для старых игр (Quake, Doom, Duke Nukem) И само собой варкрафт.
Намучился с разными эмуляторами QEMU, DOSBOX и т п. Малина их не тащит. И Виндовс НТ и 98 и ХР ставил. Дикие тормоза.
Под Досбоксом тоже тормозят.
Однако обнаружил, что на линукс это всё уже портировали.
Уже стоит и работает Quake, Doom, Duke Nukem и сейчас как раз компилируется статагус под ARM.
Думаю в этот раз русский шрифт добью
Ещё раз спасибо за статью.
Забыл добавить, в новых компиляторах этот код (стратагус) выдает ошибку.
До C ++ 11 синтаксис "foo"__FILE__компилировался бы так "foo""filename.cpp", что приводило к объединенной строке "foofilename.cpp". В C ++ 11 добавлена новая функция, определяемые пользователем строковые литералы , которая использует суффиксы в конце строкового литерала "foo"_bar для преобразования строки "foo" в какой-либо другой тип. Как следствие, "foo"__FILE__теперь компилируется как попытка преобразовать foo в тип __FILE__ которого не существует.
Компилятор выдает следующую ошибку:
То есть для ее исправления необходимо в этом файле всего лишь поставить пробел между последней кавычкой и подчеркиванием разделив переменные (пустую строку "" и переменную _C_) приведя запись к виду "" _C_
Таких уже два файла. Во втором встречается два раза. То есть просто задаем поиск по файлу строки "_C_ и меняем ее на " _C_
Пока только такие приключения, остальное по инструкции идет.
Ещё одна ошибка компиляции уже библиотеки StormLib.
Как много изменилось за 2 года.
В файле StormLib/src/libtomcrypt/src/headers/tomcrypt_cfg.h
В строке
Нужно убрать лишний тип без которого и так в целое преобразуется - __cdecl
приведя её к виду
Ну вот всё и заработало под ARM.
Доволен как слон.
В StormLib ошибок ещё было много, на 5ой перестал анализировать код ибо все они с __cdecl.
Просто открывал файл с ошибкой, искал (Ctl+W в nano) __cdecl и сносил его.
Ещё раз спасибо.
В связи с изменением компилятора С вызывающего эти ошибки думаю мои сообщения будут полезны.
Приветствую, Demm45! Спасибо за комментарии по сборке, это полезная информация.
На Debian 10 я пока еще не собирал этот проект, вполне закономерно что многое могло измениться после Debian 9.
Кстати, проекты Stratagus и Wargus уже переехали на GitHub, доступна свежая версия 2.4.3 (Apr 25, 2020). Я полагаю что вы компилировали эту версию из исходных кодов.
Хм... Печаль. По старой памяти делал все по вашей инструкции точно. Я консерватор. Если работает, то незачем лезти. Но переделывать не буду, работает. Только если вопрос с кириллицей там решен.
Спасибо за наводку.
В любом случае, вы одолели все преграды и добились нужного результата! Позже, если будет желание и появятся действительно серьезные улучшения и возможности в игре, можно будет попробовать собрать новую версию. Потом думаю что выйдет версия еще поновее...и т.д. Поэтому здравый консерватизм здесь вполне оправдан!
Интересно было бы увидеть несколько фото того что получилось с малинкой и Варкрафтом.
Еще в коллекцию игр для ретро-консоли на GNU/Linux можно добавить легендарный Wolfenstein 3D от ID Software, в одной из статей про ретро-железо я запускал его на 286-12MHz. Еще в 200х годах собирал эту игру под FreeBSD из портов (с исходных кодов), закинув файлы с ресурсами из оригинальной игры - все отлично работало!
Видео:
https://vk.com/video332105478_456239144
Ну что ж, самая главная новость: решил я проблему русификации под линукс (и знаю в чем под виндовс)
(16КБ).
Я так думаю это специальный квест от программистов. Иначе не пойму.
Вот декодированный файл /scripts/translate/ru_RU.po -
Долго рассказывать что да как, штатных средств конвертации нет. Писал свой скрипт когда разобрался что к чему.
Вот фото менюшек с этим файлом:
Кстати, собирал последние версии стратагуса и варгуса.
Quake III Arena в видео достаточно бодро идет на Raspberry Pi 3.
Открыл присланный файл локализации для Варгуса в кодировке UTF-8, потом в других распространенных кодировках, но символы кириллицы так и не увидел в нормальном виде. Я так понимаю что разработчики, в процессе совершенствования игры и переводе ее на современную кодировку текста, оставили куски кода который некорректно работает с символами кириллицы. Похоже вам пришлось высчитывать какие-то смещения для кодов символов и с учетом этих смещений генерировать новые тексты в файле перевода. Похвально что нашли время и желание решить эту задачу.
Вы не поверите какую кодировку ищет в файле программа..... Болгарская кодировка.
Если бы я лично не имел с ней дело в далеких 88-90 гг то ни за что не догадался бы. Они до буквы "п" совпадает с CP866, а дальше идут серьезные различия. Именно по этому в виндовс не отображаются кириллические символы после этой буквы. Там значит файл в ср866.
Но это еще не всё...!!!!!!!!
Перед каждым кириллическим символом должен стоять маркер 0хС2. Это бред какой то. Это вам не ucs2,там 0х04 перед кириллицей и не utf16. Что то совсем своё.
Вот так.
Вот это поворот...
Повезло что Вы ранее работали с такой кодировкой. Наличие "0хС2" возможно что уходит корнями где-то глубоко в историю развития движка игры.
Была такая группа программистов в начале 90х "СПК из Щербинок" . Смешно звучит название на современный лад. Именно они и занимались официальной русификацией Варкрафта. Может быть это их проделки.
Вот русские звуки персонажей. Выдернул из DOS русифицированного варкрафта.
Просто копируем папку в директорию с программой wargus. На предложение заменить файлы - соглашаемся.
http://club-telegraph.com/wargus/sounds.zip
13.12.2021. Ссылка снова актуальна. Восстановлена!