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

Сборка и запуск Wargus (Stratagus) на Linux снуля (WarCraft 2)

Показан процесс компиляции и настройки веселой игры Wargus (Stratagus) - клона WarCraft 2 под GNU Linux.
Статья написана с расчетом на начинающего пользователя Линукс, все описано достаточно подробно и с пояснениями чтобы смог разобраться каждый. Материал получился достаточно большой, сопровождается множеством картинок.

Язык интерфейса игры в данном случае  - английский. На данный момент, программа версии "2.3" под GNU/Linux имеет проблемы с отображением кириллических шрифтов.

  1. В качестве предисловия
  2. Подготовка
  3. Компиляция Stratagus;
  4. Компиляция Wargus;
  5. Конвертация и подготовка ресурсов из игры WarCraft II;
  6. Настройка и подготовка музыки.
  7. Результат
  8. Заключение

В качестве предисловия

Что это за игра и как ее собрать в ОС Windows вы можете прочитать в публикации: Wargus - старая добрая игра WarCraft II в новом лице.

Чтобы получить готовую игру на Linux нам нужно будет скомпилировать из исходных кодов Stratagus + Wargus. Это увлекательный квест (приключение), который не только подарит вам интересную и обновленную старую игру-клон WarCraft II, но и научит некоторым базовым операциям в Linux, поможет сориентироваться что и где искать, даст толчек к использованию смекалки в подобных Линукс-делах и многое другое.

WarCraft 2, Wargus, Stratagus и 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:

MC and Krusader on linux

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

mkdir /tmp/game
cd /tmp/game

Компиляция Stratagus

Запускаем браузер и идем на сайт launchpad.net где размещается исходный код и файлы проекта Stratagus: https://launchpad.net/stratagus
Видим что на сайте проект Stratagus сейчас доступен в версии 2.3 - будем использовать самую свежую на данный момент версию.
Здесь нам нужен исходный код, качаем архив с исходниками, клацнув зеленую кнопочку скачивания исходников справа, как на рисунке:

Качаем исходный код Stratagus

Сохраняем скачанный файл в директорию /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

Вот как выглядит мой терминал после этой операции:

Stratagus скачивание и распаковка исходных кодов

Хорошо, теперь будем разбираться как нам собрать Стратагус из исходных кодов. Если посмотреть структуру каталогов в распакованных исходниках то можно заметить директорию "doc" - в ней можем найти что-то полезное, давайте взглянем что там:

cd doc
ls -la

Stratagus содержимое директории doc

Как видим там есть разная документация, а наиболее нам интересен документ install.html, посмотреть его мы можем открыв в любом веб-браузере который у вас установлен или же в консоли (вначале мы установили консольный браузер Lynx):

lynx install.html

Сразу бросается в глаза список Software Requirements - это список тех библиотек и зависимостей, которые должны быть установлены в системе для корректной компиляции Stratagus:

Stratagus список требуемых библиотек и зависимостей
     
Пролистав немного ниже мы увидим инструкции по инсталляции:

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 минут, слева в процентах мы можем наблюдать прогресс.

Stratagus успешная компиляция

На этом пока что все, стратагус готов, об этом свидетельствуют бинарные файлы что появились в директории "build". Оставляем терминал открытым, можно окно на время свернуть чтобы не мешало.

Компиляция Wargus

Ну вот, Стратагус у нас скомпилирован, теперь займемся Wargus'ом.
Открываем браузер и заружаем сайт где размещается содержимое проекта Wargus: https://launchpad.net/wargus

Версия Варгуса должна точно совпадать с версией Стратагуса, как мы помним Стратагус у нас версии 2.3.0 и на страничке с Варгусом версия такая же - значит все хорошо.

Здесь нам также необходим исходный код, поэтому качаем архив с исходниками, клацнув справа зеленую кнопочку скачивания исходников, как на рисунке:
Wargus скачивание исходных кодов программы для компиляции под Linux
Сохраняем файл в директорию /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" и на первой же позиции странице результатом видим:


Linux Stormlib SERP


Переходим по ссылке из результатов поиска: https://github.com/ladislav-zezula/StormLib
Открываем еще один отдельный терминал и переходим в нашу рабочую директорию:

cd /tmp/game/

Качаем в эту папку архив с сайта:
Stormlib скачивание исходных кодов

 

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

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

Компиляция StormLib

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

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/), мы увидим вот что:


Wargus подготовка к компиляции успешна!

Все Ок и все на месте, запускаем компиляцию Варгуса:

make

И что вы думаете...вот что у вас должно получиться:
Wargus compilation error stratagus-game-launcher.h

Да, опять ошибка и чего-то не хватает, а именно: сборщик 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 правим файл wargus.cpp
 
Теперь возвращаемся в директорию где мы собираем Wargus и пробуем запустить компиляцию:

cd /tmp/game/wargus_2.3.0.orig/build
make

Теперь все должно собраться:

Wargus удачно скомпилирован на Линукс

Отлично, 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

Вот так выглядит результат данных команд:

Wargus создаем папку для распаковки ресурсов WarCraft 2

Также создадим папку где у нас будут готовые извлеченные ресурсы:

mkdir data

Копируем в папку /tmp/game/wargus_2.3.0.orig/build/war2data все файлы из папки "DATA" установленной оригинальной игры WarCraft II, вот к примеру как виглядит содержимое этой папки у меня:


Папка с подготовленными файлами от 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
Распакованные ресурсы после работы команды wartool

Все отлично, теперь все ресурсы и файлы можно собирать в кучу.

Создаем папку где у нас будет готовая игра:

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:


Wargus все ресурсы и бинарные файлы игры в сборе

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

du -h --max-depth=1 /tmp/game/Wargus

Вывод команды виглядит примерно вот так:

Размер папки с готовой игрой Wargus под Linux

Не очень то и много - примерно 102 МегаБайта.

Пробуем запускать игру, запуск нужно осуществлять именно при помощи файла "stratagus":

/tmp/game/Wargus/stratagus

Окно приветствия при старте Wargus:
Wargus на Linux запущен и работает!

Вы справились, поздравляю Вас!

Настройка и подготовка музыки

Все хорошо, но почему-то не играет на старте бодрая музыка в стиле ВарКрафт, да и при игре ее может не оказаться - давайте это исправим! Музыки может не быть потому что нет установленного ПО для программного 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 или любой другой мультимедиа-плеер. Вот что у меня получилось:

Wargus converting music mid to wav

Перекодируем WAV в OGG:

for f in *.wav; do oggenc "$f"; done

В папке должны появиться музыкальные файлы в формате *.ogg. Мы также можем прослушать их при помощи плеера VLC.
Теперь удалим ненужные нам MIDI и WAV файлы:

rm ./*.mid && rm ./*.wav

В папке останутся только файлы, сумарный размер - примерно 24 МБ.

Wargus конвертация музыки в формат OGG готово!

Поскольку Wargus поддерживает сжатые ресурсы - карты, звуки, музыку, то почему бы не попробовать сжать звуковые файлы. Помните при подготовке Stratagus мы устанавливали библиотеку "libbzip2 (optional)" - так вот она нам и пригодится для поддержки сжатых ресурсов.

Сожмем все звуковые файлы *.ogg GZIP'ом:

for f in *.ogg; do gzip "$f"; done

Вот что получится после сжатия:

Музыкальные файлы OGG сжатые при помощи GZIP

В итоге сэкономили примерно 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

Жмем ентер и редактор переместит нас к найденному фрагменту.

Wargus - исправление стартовой музыки в меню

Заменяем строчку

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:


wargus меню с настройками разрешения экрана


Wargus настройки режима игры Modern Skirmish

Настройки игрового процесса в Wargus

Заключение

Подготовленную таким образом игру можно переносить на 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 потом можно будет выбрать нужную вам карту из нужной папки.

Если статья оказалась полезной - помочь проекту можно тут: 👍 ПОМОЩЬ, 🎁 DONATE
2 5526 Linux
Комментарии к публикации (29):
darkness #1darkness
27 Октябрь 2015 21:45

Доброго времени суток, очень детально все написано, но у меня возникла другая проблема, почему-то манипуляции с 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.

0
ph0en1x #2ph0en1x
28 Октябрь 2015 00:11

Доброго времени суток! В приведенном вами логе 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 - все собралось.

Обновил статью!

0
darkness #3darkness
28 Октябрь 2015 14:32

ph0en1x спасибо за помощь, все собралось и отлично работает. Остался лишь один вопрос, зачем был нужен диск Beyond_the_Dark_Portal, ведь с него мы не брали никаких ресурсов, или я что-то упустил?

+1
ph0en1x #4ph0en1x
28 Октябрь 2015 17:07

Приведу сравнение WarCraft II Tides of Darkness и Beyond The Dark Portal Expansion Set:

WarCraft II Tides of Darkness

WarCraft II Tides of Darkness

Дата выхода: декабрь 1995 года.

Разработчик: Blizzard Entertainment.

Системные требования: Pentium 166, 32 Мб, Direct3D 5.

Кампании: 2 кампании по 14 миссий.

Игра по сети: модем, нуль-модем, LAN(IPX).

Стратегия реального времени (RTS), добыча ресурсов (золото, лес, нефть), строительство, развитие и сражения. В игре присутствуют две рассы - Люди(Альянс) и Орки(Орда).

WarCraft II Beyond The Dark Portal

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:

Wargus Campaign Game menu

+1
darkness #5darkness
28 Октябрь 2015 19:27

Благодарю за разъяснения, а то я играл лишь Warcraft 2 BNE. Значит мне нужно еще и ресурсы с WarCraft II Beyond The Dark Portal Expansion Set ставить.

+1
daramoner #6daramoner
11 Ноябрь 2016 18:49

вобщем почитал но конешно проше просто скачать виндос эмулятор а на него уже и через торрент вот2 3 1 а так спасибо

0
ph0en1x #7ph0en1x
12 Ноябрь 2016 01:06

Если не хочется возиться с компиляцией под Линукс то можно поступить так: качаем скомпилированные установочные файлы для Windows, выполняем установку и распаковку ресурсов, добиваемся работоспособности игры под Windows. Потом запускаем игру под операционной системой Linux используя Wine или PlayonLinux.

0
sign #8sign
18 Май 2017 17:45

Здравствуйте! Делал, все согласно статье.
Компиляция 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

Что делать?

0
ph0en1x #9ph0en1x
19 Май 2017 16:03

Похоже что это какая-то проблема с линковкой библиотек. Все манипуляции в статье успешно проводились несколько раз под 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, а там уже выполнять все нужные манипуляции по сборке игры - очень удобно для разных экспериментов и не замусоривает основную систему.

0
demm45 #10demm45
24 Февраль 2018 19:03

при переключении на русский язык текст вообще не отображается нигде.
Есть варианты мыслей по поводу устранения?
Заранее благодарен!!
С Уважением, Дмитрий.

0
ph0en1x #11ph0en1x
25 Февраль 2018 22:25

Здравствуйте, demm45.

Попробовал выполнить некоторые манипуляции для получения нормально отображающихся символов кириллицы:

  • Изменение языка графической оболочки KDE на русский;
  • Установка дополнительных кириллических шрифтов;
  • Изменение переменных локализации "LANG", "LC_ALL" перед запуском "./stratagus" из консоли;
  • Эксперименты с перекодировкой файлов перевода "ru_RU.po" и "stratagus-ru.po" в директории "scripts/translate/" ;
  • Попытка изменить перевод на кириллический прямо в LUA-файлах.

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

Проведя анализ LUA-скриптов с настройками, стало понятно что в программе используются собственные рисованные шрифты из папки "graphics/ui/fonts/". Покопавшись в некоторых файлах с исходным кодом, которые отвечают за перевод и шрифты, пришел к выводу что
обработка текстов с кириллическими символами перевода выполняется в кодировке IBM 866 (CP866), в этой же кодировке сохранены файлы "ru_RU.po" и "stratagus-ru.po".

К сожалению, заставить игру отображать кириллицу под Linux так и не удалось.

Сборка Wargus под Windows имеет те же проблемы не полного перевода: в меню выбора миссий отсутствуют названия миссий, в шрифтах не хватает части символов для отображения и т.п.

Wargus 2.3 под Windows, проблемы с русской локализацией

А вот с английской локализацией все отлично как под GNU/Linux, так и под MS Windows.

0
Demm45 #12Demm45
27 Февраль 2018 04:51

спасибо за то, что уделили время. Но у меня вообще, даже коряво ничего не рисует. И я нашел почему.
В исходниках в файле 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

После конвертации звучать стало приятно, инструменты теперь все и звучат естественней.
С Уважением, Дмитрий.

0
Demm45 #13Demm45
27 Февраль 2018 05:31

и ещё нашел в font.cpp функцию
unsigned int CFont:DrawChar(CGraphic &g, int utf8, int x, int y, const CFontColor &fc) const

0
ph0en1x #14ph0en1x
27 Февраль 2018 15:13

В моем случае кириллические символы под GNU/Linux также вообще не отображаются. Что интересно, если в файле перевода "ru_RU.po" в одну из строк с русским переводом добавить какие-то английские буквы, то они также не будут отображены.

msgstr "Пересмотреть игру"
msgstr "Пересмотреть TEST игру"

Если же теперь файл ru_RU.po" пересохранить в кодировке CP1252, то увидим уже следующую ситуацию:

wargus эксперимент с кодировкой файла русского перевода

Похоже, что-то работает не так как нужно при обработке символов в кодировке IBM 866. Что до функций, обрабатывающих вывод символов используя графические шрифты, то здесь вполне может быть что какие-то функции не правильно себя ведут или же вообще не используются.

Насчет использования набора инструментов fluid-soundfont для timidity - хорошее замечание. Добавил эту информацию в обе статьи.

Спасибо!

0
Demm45 #15Demm45
16 Апрель 2018 05:32

так и не победил. Поставил DosBox и оригинальную игру

0
Demm45 #16Demm45
23 Май 2020 11:31

Приветствую уважаемый.
Через 2 года вернулся к вашей статье. Делаю игровую панель с 10" сенсорным экраном от промконтроллера на Raspberry Pi3 для старых игр (Quake, Doom, Duke Nukem) И само собой варкрафт.
Намучился с разными эмуляторами QEMU, DOSBOX и т п. Малина их не тащит. И Виндовс НТ и 98 и ХР ставил. Дикие тормоза.
Под Досбоксом тоже тормозят.
Однако обнаружил, что на линукс это всё уже портировали.
Уже стоит и работает Quake, Doom, Duke Nukem и сейчас как раз компилируется статагус под ARM.
Думаю в этот раз русский шрифт добью Smile
Ещё раз спасибо за статью.

0
Demm45 #17Demm45
23 Май 2020 11:39

Забыл добавить, в новых компиляторах этот код (стратагус) выдает ошибку.

До C ++ 11 синтаксис "foo"__FILE__компилировался бы так "foo""filename.cpp", что приводило к объединенной строке "foofilename.cpp". В C ++ 11 добавлена ​​новая функция, определяемые пользователем строковые литералы , которая использует суффиксы в конце строкового литерала "foo"_bar для преобразования строки "foo" в какой-либо другой тип. Как следствие, "foo"__FILE__теперь компилируется как попытка преобразовать foo в тип __FILE__ которого не существует.

Компилятор выдает следующую ошибку:

./stratagus_2.3.0.orig/src/stratagus/script.cpp:875:16: error: unable to find string literal operator ‘operator""_C_’ with ‘const char [22]’, ‘unsigned int’ arguments

То есть для ее исправления необходимо в этом файле всего лишь поставить пробел между последней кавычкой и подчеркиванием разделив переменные (пустую строку "" и переменную _C_) приведя запись к виду "" _C_

Таких уже два файла. Во втором встречается два раза. То есть просто задаем поиск по файлу строки "_C_ и меняем ее на " _C_
Пока только такие приключения, остальное по инструкции идет.

0
Demm45 #18Demm45
23 Май 2020 12:05

Ещё одна ошибка компиляции уже библиотеки StormLib.
Как много изменилось за 2 года.
В файле StormLib/src/libtomcrypt/src/headers/tomcrypt_cfg.h
В строке

LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int(__cdecl *compar)(const void *, const void *));

Нужно убрать лишний тип без которого и так в целое преобразуется - __cdecl
приведя её к виду

LTC_EXPORT void LTC_CALL XQSORT(void *base, size_t nmemb, size_t size, int(*compar)(const void *, const void *));
0
Demm45 #19Demm45
23 Май 2020 12:38

Ну вот всё и заработало под ARM.
Доволен как слон.
В StormLib ошибок ещё было много, на 5ой перестал анализировать код ибо все они с __cdecl.
Просто открывал файл с ошибкой, искал (Ctl+W в nano) __cdecl и сносил его.
Ещё раз спасибо.
В связи с изменением компилятора С вызывающего эти ошибки думаю мои сообщения будут полезны.

0
ph0en1x #20ph0en1x
23 Май 2020 13:25

Приветствую, Demm45! Спасибо за комментарии по сборке, это полезная информация.

На Debian 10 я пока еще не собирал этот проект, вполне закономерно что многое могло измениться после Debian 9.
Кстати, проекты Stratagus и Wargus уже переехали на GitHub, доступна свежая версия 2.4.3 (Apr 25, 2020). Я полагаю что вы компилировали эту версию из исходных кодов.

0
Demm45 #21Demm45
23 Май 2020 14:17

Хм... Печаль. По старой памяти делал все по вашей инструкции точно. Я консерватор. Если работает, то незачем лезти. Но переделывать не буду, работает. Только если вопрос с кириллицей там решен.
Спасибо за наводку.

0
ph0en1x #22ph0en1x
23 Май 2020 14:29

В любом случае, вы одолели все преграды и добились нужного результата! Позже, если будет желание и появятся действительно серьезные улучшения и возможности в игре, можно будет попробовать собрать новую версию. Потом думаю что выйдет версия еще поновее...и т.д. Поэтому здравый консерватизм здесь вполне оправдан!

Интересно было бы увидеть несколько фото того что получилось с малинкой и Варкрафтом.
Еще в коллекцию игр для ретро-консоли на GNU/Linux можно добавить легендарный Wolfenstein 3D от ID Software, в одной из статей про ретро-железо я запускал его на 286-12MHz. Еще в 200х годах собирал эту игру под FreeBSD из портов (с исходных кодов), закинув файлы с ресурсами из оригинальной игры - все отлично работало!

0
Demm45 #23Demm45
26 Май 2020 13:22

Видео:

https://vk.com/video332105478_456239144

0
Demm45 #24Demm45
27 Май 2020 13:29

Ну что ж, самая главная новость: решил я проблему русификации под линукс (и знаю в чем под виндовс)
Я так думаю это специальный квест от программистов. Иначе не пойму.
Вот декодированный файл /scripts/translate/ru_RU.po - Архив 7-Zip (16КБ).

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

Вот фото менюшек с этим файлом: 

Главное меню wargus с исправленным файлом локализации

Меню настроек wargus с исправленным файлом локализации

Кстати, собирал последние версии стратагуса и варгуса.

0
ph0en1x #25ph0en1x
27 Май 2020 16:36

Quake III Arena в видео достаточно бодро идет на Raspberry Pi 3.

Открыл присланный файл локализации для Варгуса в кодировке UTF-8, потом в других распространенных кодировках, но символы кириллицы так и не увидел в нормальном виде. Я так понимаю что разработчики, в процессе совершенствования игры и переводе ее на современную кодировку текста, оставили куски кода который некорректно работает с символами кириллицы. Похоже вам пришлось высчитывать какие-то смещения для кодов символов и с учетом этих смещений генерировать новые тексты в файле перевода. Похвально что нашли время и желание решить эту задачу.

0
Demm45 #26Demm45
27 Май 2020 16:55

Вы не поверите какую кодировку ищет в файле программа..... Болгарская кодировка.

Если бы я лично не имел с ней дело в далеких 88-90 гг то ни за что не догадался бы. Они до буквы "п" совпадает с CP866, а дальше идут серьезные различия. Именно по этому в виндовс не отображаются кириллические символы после этой буквы. Там значит файл в ср866.

Но это еще не всё...!!!!!!!!
Перед каждым кириллическим символом должен стоять маркер 0хС2. Это бред какой то. Это вам не ucs2,там 0х04 перед кириллицей и не utf16. Что то совсем своё.

Вот так.

0
ph0en1x #27ph0en1x
27 Май 2020 23:42

Вот это поворот...
Повезло что Вы ранее работали с такой кодировкой. Наличие "0хС2" возможно что уходит корнями где-то глубоко в историю развития движка игры.

0
Demm45 #28Demm45
28 Май 2020 03:40

Была такая группа программистов в начале 90х "СПК из Щербинок" . Смешно звучит название на современный лад. Именно они и занимались официальной русификацией Варкрафта. Может быть это их проделки.

+1
Demm45 #29Demm45
28 Май 2020 06:49

Вот русские звуки персонажей. Выдернул из DOS русифицированного варкрафта.
Просто копируем папку в директорию с программой wargus. На предложение заменить файлы - соглашаемся.

http://club-telegraph.com/wargus/sounds.zip

13.12.2021. Ссылка снова актуальна. Восстановлена!

0