Сборка UQM 0.7.0 (HD) Windows, VisualC++

Вопросы, мысли, скандалы, интриги, расследования
Аватара пользователя
Malin
Сообщения: 1971
Регистрация: 28 май 2023

Сборка UQM 0.7.0 (HD) Windows, VisualC++

Сообщение Malin »

Сборка 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"
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. Придётся закоментировать их вызов и объявление:

Код: Выделить всё

//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

Полезности и пояснения
    Скомпилированный файл 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
    Аватара пользователя
    Malin
    Сообщения: 1971
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    SLY писал(а):Там именно Интерлейс

    Ох уж эти англицизмы :)

    Кстати, ты проверишь потом тоже exe-шник в предыдущем посте? Вдруг что всплывёт. У Vasakи всётаки линукс.
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3202
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    Ну кажется всё, вроде нашёл нужную версию исходников - 0.7.0-1
    Вась, попробуй вот этот экзешник: uqm.exe
    Проверь его с обычной версией UQM с руссификатором. У меня работает. В настройки заходит, Хейс говорит вменяемые вещи, и остальное вроде в порядке.
    Вроде всё работает. Сейвы только от предыдущей версии не подходят, но это не страшно. Я пока на той полетаю, потестирую.
    Аватара пользователя
    SLY
    Сообщения: 3348
    Регистрация: 23 сен 2013

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение SLY »

    Malin писал(а): 08 июл 2020, 11:26Кстати, ты проверишь потом тоже exe-шник в предыдущем посте? Вдруг что всплывёт. У Vasakи всётаки линукс.

    Проверил. Запустил, настройки-интро посмотрел, с зондом и Хэйсом поговорил, на Луне бульдозеры пострелял, в гиперпространстве сразу прилетели яйца судьбы... - вроде всё как обычно. :)
    Vasaka писал(а): 08 июл 2020, 11:46Вроде всё работает. Сейвы только от предыдущей версии не подходят, но это не страшно. Я пока на той полетаю, потестирую.

    А сейвы от ванильной вроде как подходят, у меня получилось загрузиться со старого сейва.
    Аватара пользователя
    Malin
    Сообщения: 1971
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Обновил шапку, дополнив её информацией о сборке релизной версии и некоторыми дополнительными пояснениями.
    Аватара пользователя
    Malin
    Сообщения: 1971
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Поплевавшись от неудобств VSC++2008, решил попробовать запустить сборку на православном VSC++2010. Получилось, не сразу, но получилось. Как-то дышать легче стало. Привык я к 2010 версии. Дополнил шапку.
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3202
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    2.4. zlib- архиватор.
    Сайт по ссылке придуман инопланетянами. Однако одна полезная ссылка там есть: https://github.com/madler/zlib откуда нужно стащить zip при помощи кнопки "Clone or download"
    Ничего не понял. :zagruz:

    А ещё
    Превышен лимит скачивания, вы можете сохранить файл на Яндекс.Диск и скачать его со своего Диска
    И это после скачивания одного файла.
    Может на гугл драйв закачать? Там я такого не замечал.
    Аватара пользователя
    Malin
    Сообщения: 1971
    Регистрация: 28 май 2023

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Malin »

    Vasaka писал(а):
    Malin писал(а):2.4. zlib- архиватор.
    Сайт по ссылке придуман инопланетянами. Однако одна полезная ссылка там есть: https://github.com/madler/zlib откуда нужно стащить zip при помощи кнопки "Clone or download"

    Ничего не понял.


    На гитхабе как обычно дизайнерский переворот. Вот картинка:
    Картинка
    Изображение

    Vasaka писал(а):
    Превышен лимит скачивания, вы можете сохранить файл на Яндекс.Диск и скачать его со своего Диска

    И это после скачивания одного файла.
    Может на гугл драйв закачать? Там я такого не замечал.

    Да? Никогда проблем не было. Сейчас только что проверил через приватный режим, в "невойдённом в аккаунт яндекса" режиме. Всё скачал, все файлы. Ни слова ни сказал.
    Может ты через прокси качаешь, и яндекс заподозрил тебя в подозрительном трафике? Хотя гугл более подозрителен в этом плане.
    Не знаю с чем это может быть связано. Столько лет пользуюсь Диском, никогда проблем не было.
    Тебе что-то конкретное надо? Залью временно на Гугл.Драйв, если скажешь что.
    Можешь так же попробовать через прокси скачать, если качал без него, чтобы яндекс не понял что это ты.
    Аватара пользователя
    Vasaka
    MOSC Team
    Сообщения: 3202
    Регистрация: 24 янв 2011

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение Vasaka »

    На гитхабе как обычно дизайнерский переворот. Вот картинка:
    Ясно. :D
    Но тут я скачал, а на либах опять затык.

    Скачал с яндекс диска у тебя.
    Проблема с яндекс диском была похоже только с NET 4.0 https://yadi.sk/d/rr_xxyla9IYvCA
    Не могу скачать.
    Аватара пользователя
    SLY
    Сообщения: 3348
    Регистрация: 23 сен 2013

    Сборка UQM 0.7.0 (HD) Windows, VisualC++

    Сообщение SLY »

    Мне не нужно, но подтверждаю, лимит скачивания превышен
    Ответить