Сборка UQM 0.7.0 (HD)
Информация по сборке как оригинальной UQM 0.7.0, так и UQM 0.7.0 HD. Обе игры используют одинаковые библиотеки поэтому все пункты кроме п.5 у этих версий совпадают.
Система: Windows XP SP3 / Windows 7 / Windows 10
Компилятор: Visual C++ 2008 Express / Visual C++ 2010 Express
Скачать исходники:
UQM 0.7.0-1: https://sourceforge.net/...
Backup: uqm0.7.0-1.zip (Яндекс.Диск)
или UQM 0.7.0 HD: https://sourceforge.net/...
Распаковать в C:\Build\sc2\
Файл C:\Build\sc2\sc2\INSTALL.msvc содержит информацию об установке. Можно почитать блокнотом каким-нибудь. А ещё можно почитать файл INSTALL рядом.
На самом деле путь C:\Build\sc2\ не обязательно должен быть именно таким, можно изменить его тут и далее на любой другой.
Ниже, опираясь на файл INSTALL.msvc, представлено "переваренное мной" руководство:
1. Установка VisualC++ и SDK
1.1. Качаем и устанавливаем Microsoft Visual C++ 2008 Express Edition.
Microsoft Visual C++ 2010 Express
Можно сразу использовать Microsoft VisualC++ 2010 Express (см. заметку внизу поста)
Ссылка из файла не рабочая.
Побродив по интернетам нашёл вот эту: http://microsoft.com/.../VS2008ExpressWithSP1ENUX1504728.iso
На всякий случай backup'ул: MSVC++ 2008 Express (Яндекс.Диск)
Устанавливаем, со всем соглашаемся, регистрировать не обязательно.
1.2. Качаем и устанавливаем Microsoft Windows Platform SDK.
Ссылка конечно же не работает. Я качал от сюда: https://www.microsoft.com/....
Там предложат три образа. Нужен GRMSDKX_EN_DVD.iso.
Backup: GRMSDKX_EN_DVD.iso (Яндекс.Диск)
При установке можно снять галочки с SQL и Silverlight. Остальное не трогать.
Если ругается на отсутствие .NET 4.0: https://www.microsoft.com/ru-ru/Download/confirmation.aspx?id=17718
2. Зависимости.
UQM использует некоторые внешние библиотеки, их мы и будем ставить. Библиотеки будем по возможности складывать в "C:\Build\".
2.1. Нужен SDL. Это библиотека управляющая звуком, вводом и графикой на низком уровне. Ссылка ведёт на сайт, но версии 1.2.14 там уже нет, зато там МНОГО других ссылок. Прошу заметить что нас интересует что-то с VC на конце.
Я использовал SDL-devel-1.2.15-VC.zip
Backup: SDL-1.2.15.rar (Яндекс.Диск)
2.2 Нужен SDL_image. Библиотека для загрузки изображений для SDL.
Ситуация аналогичная. Я качал SDL_image-devel-1.2.12-VC.zip
Backup: SDL_image-1.2.12.rar (Яндекс.Диск)
2.3. Ogg Vorbis - сжиматель звука с потерями.
Ссылка из файла не рабочая. OggVorbis-win32sdk-1.0.1.zip
Backup: OggVorbis-win32sdk-1.0.1.rar (Яндекс.Диск)
2.4. zlib- архиватор.
Сайт по ссылке придуман инопланетянами. Однако одна полезная ссылка там есть: https://github.com/madler/zlib откуда нужно стащить zip при помощи кнопки "Code -> Download ZIP", но он не содержит dll'ки.
Нам нужны ещё и сами библиотеки: https://github.com/.../zlib-1.2.3.win32 откуда я повытягивал dll и lib.
Всё вместе легко и просто у меня: zlib.rar (Яндекс.Диск)
2.5. OpenAL - библиотека работы со звуком
Ссылка из файла не рабочая.
Скачать тут: http://openal.org/downloads/ Нам нужен тот что с пометкой SDK.
Backup: OpenAL11CoreSDK.zip (Яндекс.Диск)
Там не совсем библиотека, а установщик. Устанавливаем, со всем соглашаемся.
После сделать следующее:
- Создать папку "AL" в "C:\Program Files\OpenAL 1.1 SDK\include"
- Копировать все заголовочные файлы *.h из "C:\Program Files\OpenAL 1.1 SDK\include" в эту папку "AL"
2.1. Нужен SDL. Это библиотека управляющая звуком, вводом и графикой на низком уровне. Ссылка ведёт на сайт, но версии 1.2.14 там уже нет, зато там МНОГО других ссылок. Прошу заметить что нас интересует что-то с VC на конце.
Я использовал SDL-devel-1.2.15-VC.zip
Backup: SDL-1.2.15.rar (Яндекс.Диск)
2.2 Нужен SDL_image. Библиотека для загрузки изображений для SDL.
Ситуация аналогичная. Я качал SDL_image-devel-1.2.12-VC.zip
Backup: SDL_image-1.2.12.rar (Яндекс.Диск)
2.3. Ogg Vorbis - сжиматель звука с потерями.
Ссылка из файла не рабочая. OggVorbis-win32sdk-1.0.1.zip
Backup: OggVorbis-win32sdk-1.0.1.rar (Яндекс.Диск)
2.4. zlib- архиватор.
Сайт по ссылке придуман инопланетянами. Однако одна полезная ссылка там есть: https://github.com/madler/zlib откуда нужно стащить zip при помощи кнопки "Code -> Download ZIP", но он не содержит dll'ки.
Нам нужны ещё и сами библиотеки: https://github.com/.../zlib-1.2.3.win32 откуда я повытягивал dll и lib.
Всё вместе легко и просто у меня: zlib.rar (Яндекс.Диск)
2.5. OpenAL - библиотека работы со звуком
Ссылка из файла не рабочая.
Скачать тут: http://openal.org/downloads/ Нам нужен тот что с пометкой SDK.
Backup: OpenAL11CoreSDK.zip (Яндекс.Диск)
Там не совсем библиотека, а установщик. Устанавливаем, со всем соглашаемся.
После сделать следующее:
- Создать папку "AL" в "C:\Program Files\OpenAL 1.1 SDK\include"
- Копировать все заголовочные файлы *.h из "C:\Program Files\OpenAL 1.1 SDK\include" в эту папку "AL"
3. Исходники UQM и библиотеки
3.1 Исходники мы уже скачали ранее, но на всякий случай выложу всю папку Build как она есть у меня: Build (Яндекс.Диск)
Если будете её качать то все последующие пункты уже выполнены. Однако будьте внимательны, чтобы прописанные мной пути в ниже перечисленных пунктах совпадали с вашими!
3.2 Копируем следующие библиотеки (*.dll - все dll файлы из папки)
- "C:\Build\SDL-1.2.15\lib\x86\SDL.dll"
- "C:\Build\SDL_image-1.2.10\lib\x86\*.dll"
- "C:\Build\oggvorbis-win32sdk-1.0.1\bin\*.dll"
в папку "C:\Build\sc2\sc2\"
4. Настраиваем проект в VisualC++
4.1. Заходим в папку C:\Build\sc2\build\msvc6\ дважды кликаем на "UrQuanMasters.dsp".
Откроется Visual C++ и запросит конвертацию файла VC6.dsp. Соглашаемся.
4.2. Устанавливаем зависимости
- В VisualC++, в панели Solution Explorer ПКМ на проекте 'UrQuanMasters', в контекстном меню выбираем "Properties"
- Откроется окно, в дереве слева выбираем "Configuration Properties -> C/C++ -> General"
- В правой части выбираем "Additional Include Directories" и кликаем на маленькую кнопочку справа "..."
Далее нужно добавить зависимости:
"C:\Build\zlib"
"C:\Build\oggvorbis-win32sdk-1.0.1\include"
"C:\Build\SDL_image-1.2.10\include"
"C:\Build\SDL-1.2.15\include"
"C:\Program Files\OpenAL 1.1 SDK\include"
"C:\Program Files\Microsoft SDKs\Windows\v7.0\Include"
помимо этих у меня уже есть эти две:
..\..\src
..\..\src\regex
4.3. Снова зависимости.
- Там же, слева, в дереве "Configuration Properties -> Linker -> General -> Additional Library Directories -> Кнопка "..."
- Добавить зависимости:
"C:\Build\zlib\lib"
"C:\Build\oggvorbis-win32sdk-1.0.1\lib"
"C:\Build\SDL_image-1.2.10\lib\x86"
"C:\Build\SDL-1.2.14\lib\x86"
"C:\Program Files\OpenAL 1.1 SDK\libs\Win32"
"C:\Program Files\Microsoft SDKs\Windows\v7.0\Lib"
4.4. Удалить ненужные зависимости
- Там же, в "Linker -> Input - > Additional Dependencies"
- Удалить odbc32.lib и odbccp32.lib.
В итоге у меня остались:
SDL.lib
SDLmain.lib
SDL_image.lib
zdll.lib
ws2_32.lib
user32.lib
Если user32.lib нет - добавить насильно.
5. Почти всё. Компилируем проект в VisualC++ (F5) и огребаем ошибок.
UQM 0.7.0-1
У меня их было много, я шаманил как мог, переименовывал папки и бился в истерике. Однако, мне кажется все они будут устранены так как они учтены в пунктах выше, опишу одну важную ошибку:
'vsnprintf' : redefinition; different linkage
Видимо произошёл конфликт новых библиотек и исходников. В итоге я внёс следующие правки в код:
..\src\libs\network\wspiapiwrap.h
Код:
Заменил на:
Код: Выделить всё
# define getaddrinfo WspiapiGetAddrInfo
# define getnameinfo WspiapiGetNameInfo
# define freeaddrinfo WspiapiFreeAddrInfo
void WINAPI WspiapiFreeAddrInfo (struct addrinfo *ai);
int WINAPI WspiapiGetAddrInfo(const char *nodename, const char *servname,
const struct addrinfo *hints, struct addrinfo **res);
int WINAPI WspiapiGetNameInfo (const struct sockaddr *sa, socklen_t salen,
char *host, size_t hostlen, char *serv, size_t servlen, int flags);
Заменил на:
Код: Выделить всё
#include <wspiapi.h>
..\src\libs\uio\utils.c
Удалил функцию:
Код: Выделить всё
static inline int vsnprintf(char *str, size_t size, const char *format, va_list args)
{
int result = _vsnprintf (str, size, format, args);
if (str != NULL && size != 0)
str[size - 1] = '\0';
return result;
}
..\src\port.h
Удалил объявление:
Код: Выделить всё
int vsnprintf(char *str, size_t size, const char *format, va_list args);
Правда это мы скомпилировали отладочную версию, которая вместе с игрой запускает ещё и отладочное окно...
UQM 0.7.0 HD
Чуда не случилось и в этой версии. Сразу вылезла куча ошибок, повидимому связанная с тем что разработчики этой версии перешли на другой компилятор языка Си, от чего появились тысячи каких-то глупых ошибок.
Убрать препроцессорное условие в этом коде:
В итоге должно получиться это если просто закомментировать:
../src/types.h
Убрать препроцессорное условие в этом коде:
Код: Выделить всё
#if !defined(HAVE__BOOL) && !(defined(_MSC_VER) && _MSC_VER >= 1600) // MB: update to work on MSVC 2013 and higher, which already has this defined
typedef unsigned char _Bool;
#endif /* HAVE_BOOL */
В итоге должно получиться это если просто закомментировать:
Код: Выделить всё
//#if !defined(HAVE__BOOL) && !(defined(_MSC_VER) && _MSC_VER >= 1600) // MB: update to work on MSVC 2013 and higher, which already has this defined
typedef unsigned char _Bool;
//#endif /* HAVE_BOOL */
../src/???
Далее могут возникнуть ошибки из-за того что Си не одобряет объявления перемнных не в начале тела блока { }. Таких мест было несколько, да простят меня те кто будут идти по моим стопам за то, что я не приведу их здесь конкретно. Да и если вы идёте по моим стопам то скорее всего знаете что такое объявления перемнных и тело блока. А если не знаете, то как вам удалось добраться до этого этапа???
Пример с ошибкой:
Пример с ошибкой:
Код: Выделить всё
if (someCondition)
{ //начало тела блока
int i; //Объявление переменной
i += 1; //Исполняемый код
SIZE sizeVar; //перенести к int i; перед всем исполняемым кодом
sizeVar += 1; //Исполняемый код
...
} //конец тела блока
../src/uqm/gendef.c
Не знаю почему, но компилятор не нашёл функции генерации для колоний Зок-Фот-Пиков generateZoqFotPikColony0Functions и generateZoqFotPikColony1Functions. Придётся закоментировать их вызов и объявление:
UPD: сам файл genzoqcolony.c есть в папке ..\src\uqm\planets\generate. Надо добавить его через Solution Explorer в эту папку (Add Existing Item)
Код: Выделить всё
//extern GenerateFunctions generateZoqFotPikColony0Functions;
//extern GenerateFunctions generateZoqFotPikColony1Functions;
...
//case ZOQ_COLONY0_DEFINED:
//return &generateZoqFotPikColony0Functions;
//case ZOQ_COLONY1_DEFINED:
//return &generateZoqFotPikColony1Functions;
UPD: сам файл genzoqcolony.c есть в папке ..\src\uqm\planets\generate. Надо добавить его через Solution Explorer в эту папку (Add Existing Item)
6. Компиляция релизной версии
Для того чтобы скомпилировать версию без отладочного окна, нужно следующее.
6.1. Перевести режим сборки с Debug_NoAccel в Release_NoAccel (ищи ниспадающее меню в верхней панели инструментов VisualStudio)
6.2. Повторить пункты 4.2, 4.3, 4.4 для релизной версии (окно свойств проекта в верху имеет также ниспадающее меню выбора режима сборки - выбрать Release_NoAccel)
6.3. В том же окне свойств перейти в Configuration Properties -> Build Events -> Post-Build Event и очистить поля Command Line и Description
6.1. Перевести режим сборки с Debug_NoAccel в Release_NoAccel (ищи ниспадающее меню в верхней панели инструментов VisualStudio)
6.2. Повторить пункты 4.2, 4.3, 4.4 для релизной версии (окно свойств проекта в верху имеет также ниспадающее меню выбора режима сборки - выбрать Release_NoAccel)
6.3. В том же окне свойств перейти в Configuration Properties -> Build Events -> Post-Build Event и очистить поля Command Line и Description
Полезности и пояснения
- Скомпилированный файл uqm.exe находится в папке C:\Build\sc2\sc2\. Его можно переместить в ванильную UQM 0.7.0-1 и будет работать.
- Если нужно отладить сборку с аргументами типа --addon russian, то аргументы можно ввести в Configuration Properties -> Debugging -> Command Arguments
- Точка входа в программу main(..) находится в файле uqm.c
Переход на VisualStudio C++ 2010
1. Копировать папку ..\build\msvc6 рядом дав ей название msvc10 для порядку.
2. Запустить ..\build\msvc10\UrQuanMasters.sln в VSC++2010, подождать пока процесс миграции не завершится.
3. Project -> UqQuanMasters Properties -> Configuration Properties -> Debugging -> Command ввести путь до uqm.exe, например C:\Build\sc2\sc2\uqm.exe
2. Запустить ..\build\msvc10\UrQuanMasters.sln в VSC++2010, подождать пока процесс миграции не завершится.
3. Project -> UqQuanMasters Properties -> Configuration Properties -> Debugging -> Command ввести путь до uqm.exe, например C:\Build\sc2\sc2\uqm.exe