Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 4
1

Как собрать Doom 3 BFG под VS 2015

25.12.2017, 16:10. Просмотров 617. Ответов 7

Уважаемые знатоки,
я хотел порсмотреть пример какого то сложного, но интересного кода и на нём поучиться.
Пока мой опыт очень скромный, и ограничивается стандартными задачами из книжки и попытками повызывать разные функции.
Я использую VS 2015 (Update 3), я прочитал пару статей про то, как крут Кармак и какой хороший у него исходный код.
Вот ссылки на статьи:
https://habrahabr.ru/post/166113/
и
https://habrahabr.ru/post/333836/

В статьях используются разные источники кода:
https://github.com/id-Software/DOOM-3-BFG.git
и
https://github.com/TTimo/doom3.gpl.git
В обеих статьях встречается фраза что "код находится в превосходном состоянии, и его очень легко собрать, достаточно одного клика мышкой!"

Я провел три интересных дня, премя от времени прерываясь на сон, в попытках собрать код из репозитория https://github.com/id-Software/DOOM-3-BFG.git
Я попробовал это на трех компьютерах (домашнем, рабочем и ноутбуке) и сейчас я могу сказать, что очень завидую тем людям, у которых код собирается по одному клику мышкой.

Думаю, что основная проблема - в многочисленных изменениях в языке, которые не только порождаюбт множество warning'ов (из за того, что те или иные методы стали deprecated), а также в том, что я еще совсем не "на ты" с C++ и средой разработки.

Моя проблема со сборкой сводится вот к чему:
после нескольких мелких исправлений я получаю ошибку
"Error C3861 'LCMapStringEx': identifier not found Doom3BFG C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlwinv erapi.h 710"
в файле altwinverapi.h
Это - ошибка в функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
inline int __cdecl _AtlLCMapStringEx(_In_z_ LPCWSTR lpLocaleName, _In_ DWORD dwMapFlags, _In_reads_(cchSrc) LPCWSTR lpSrcStr, _In_ int cchSrc, _Out_writes_opt_(cchDest) LPWSTR lpDestStr, _In_ int cchDest, _In_opt_ LPNLSVERSIONINFO lpVersionInformation, _In_opt_ LPVOID lpReserved, _In_opt_ LPARAM sortHandle)
{
#if (NTDDI_VERSION >= NTDDI_VISTA) && !defined(_USING_V110_SDK71_) && !defined(_ATL_XP_TARGETING)
    return LCMapStringEx(lpLocaleName, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest, lpVersionInformation, lpReserved, sortHandle);
#else
    // use LCMapStringEx if it is available (only on Vista+)...
    typedef int (__stdcall *PFNLCMAPSTRINGEX)(LPCWSTR, DWORD, LPCWSTR, int, LPWSTR, int, LPNLSVERSIONINFO, LPVOID, LPARAM);
    IFDYNAMICGETCACHEDFUNCTIONTYPEDEF(L"kernel32.dll", PFNLCMAPSTRINGEX, "LCMapStringEx", pfLCMapStringEx)
    {
        return (*pfLCMapStringEx)(lpLocaleName, dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest, lpVersionInformation, lpReserved, sortHandle);
    }
 
    // ...otherwise fall back to using LCMapString.
    return LCMapStringW(_AtlDownlevelLocaleNameToLCID(lpLocaleName), dwMapFlags, lpSrcStr, cchSrc, lpDestStr, cchDest);
#endif
}
Это очень обидная ошибка, функция вызывается, по моему, в двух местах, и судя по описанию - делает какое то перекодирование строки в зависимости от локали.
Короче, я в обмен на сборку проекта готов всё в игре писать строго английскими буквами. Но как исправить - не знаю :-(

Не могли бы Вы дать мне совет, как все таки собрать этот дум так, чтобы я мог запустить его под отладчиком?
Если надо - я могу склонировать репозиторий и выложить туда все исправления, котрые я сдела (в двух местах пробел в макросы вставил)

Спасибо заранее за помощь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.12.2017, 16:10
Ответы с готовыми решениями:

Как собрать простейший дравер? wdk + Visual Studio 2015
Есть небольшой пример: // TestDriver.c #include <ntddk.h> NTSTATUS DriverEntry(IN...

Как собрать проект под 4.0 Framework если изначально был под 4.5
Есть клиент серверное приложение использующее oledb и стандартные компоненты библиотек, изначально...

Как собрать FFMPEG под Android?
Как собрать FFMPEG под Android? В интернете есть информация, но она вся устаревшая. И повсюду...

Как собрать код под Win16
Есть довольно большой код на асме, программа разрабатывалась для Windows 3.11 неизвестно кем, и...

7
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
25.12.2017, 16:59 2
Ну, а без исправлений-то он компилируется? Чистый? Может, стоит с этого начать?
1
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 4
25.12.2017, 17:27  [ТС] 3
Без исправлений - нужно снести красивую студию 2015 и поставить 2010. Примерно как выйти из тёплого автомобиля и пойти жить обратно в пещеры.
Должен признаться, что я этого еще не делал.
Я могу это сделать, но работать я там не смогу - пальцы уже помнят шорткаты тех функций, которых в VS 2010 просто нет.
0
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
25.12.2017, 20:16 4
А для того, чтобы в15-й собирать необходимы исправленя?
0
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 4
25.12.2017, 20:56  [ТС] 5
jahdjkhasjdhjah, спасибо за пинок в нужном направлении!
Я провел еще пару часов в экспериментах.
Оказалось, что если откатиться на Visual Studio 2010, но остаться на 64-битной системе - то всё равно не собирается.
А вот если откатиться на 32 битную систему и в Visual Studio 2010 - тогда собирается без ошибок.
Мне это удалось сделать только что, запустить - пока не удалось (я так понял, надо теперь "химичить" с файлами ресурсов - их же нет в исходниках).
А для того, чтобы запустить в 15-й студии - да, нужны исправления, и нешуточные.
Сначала я бегло просмотрел "Критические изменения в Visual C++ 2015":
https://msdn.microsoft.com/ru-ru/library/bb531344.aspx
потом - прочитал статью
https://habrahabr.ru/post/257509/
Но это не сильно помогло мне - на моём текущем уровне знания с++.

Думаю, что всё же сделаю клон репозитория, и попрошу более опытных товарищей сделать туда коммит - просто чтобы еще кто то мог научиться на этом великом проекте, не откатываясь на 5 лет назад в версии среды разработки.
0
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
26.12.2017, 11:34 6
Ну, можно подсунуть 15-й студии компиль от 10-й. Тогда получите все удобства новой среды и возможность собирать свой проект. Путь к компилятору можно посмотреть в команде на запуск сборки. в настройках. Там все с путями должно быть.
Только перед заменой забекапьте себе куда-нибудь оригинальный exe.
И желательно скопировать команды на запуск из 10-й студии. Предварительно сохранив куда-нибудь себе старый вариант. )

Цитата Сообщение от Rasmuz Посмотреть сообщение
Мне это удалось сделать только что, запустить - пока не удалось (я так понял, надо теперь "химичить" с файлами ресурсов - их же нет в исходниках).
Скачайте игру и подмените оригинальный exe-шник своим полученным. И посмотрите, что из этого выйдет. Взлетит ли игра
1
0 / 0 / 0
Регистрация: 25.12.2017
Сообщений: 4
26.12.2017, 12:40  [ТС] 7
Не первый раз убеждаюсь, что другой человек может подсказать путь решения проблемы, совершенно отличный от того, который виделся мне. надо будет попробовать - подменить компилятор, мне и в голову не пришло.
Спасибо!
0
1161 / 678 / 164
Регистрация: 05.12.2015
Сообщений: 1,946
26.12.2017, 22:21 8
Rasmuz, jahdjkhasjdhjah, , не надо ничего подменять. В настройках проекта можно выбрать "набор инструментов платформы" от 10 студии.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2017, 22:21

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как собрать libssh под Windows 7?
Здравствуйте. Может кто-то собирал libssh под Win7, как это сделать? В гугл не посылать, уже был,...

Как собрать в Netbeans проект под 6 Яву?
Добрый день, уважаемые коллеги :senor: Подскажите, пожалуйста, как в Netbeans собрать проект под...

Как собрать wine под Linux x86-64 ?
Подскажите, пожалуйста... как собрать wine для 64-битного линукса? Я пробую на openSUSE 11.0...

Как собрать 32-х битный пакет под 64-х битным debian?
Как собрать 32-х битный пакет под 64-х битным debian?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.