Сборка движка X-Ray — S.T.A.L.K.E.R. Inside Wiki

Сборка движка X-Ray

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Предисловие

Сразу хочется упомянуть о том, что я не программист, мною могут быть допущены какие-то неточности, ошибки. Всё что будет изложено ниже не может считаться верным решением встречающихся при сборке X-Ray проблем. Ну что ж, хватит лирики, приступим-с...

На кого рассчитана данная статья?

Прежде всего она рассчитана на начинающих программистов, подобных мне, которые не могут собрать движок, но хотят вносить в него какие-то правки, ну или хотя бы хотят пытаться вносить правки. Ну это вовсе не означает что Вы являетесь "полным нулём", предполагается что читатель хотя бы минимальски знаком с ЯП C++ и имеет хоть какой-то опыт работы в Visual Studio.

Что необходимо для сборки?

  • Visual Studio 2005 и выше (НЕ Express Edition)
Lamp.gif INFO
Можно попробовать Express Edition, только придётся решить проблему сборки приложений, которые используют MFC (Stalker_net и т.п.). А лучше использовать Community Edition современных версий Visual Studio,

они по функционалу схожи с Professional Edition прошлых версий и абсолютно бесплатны. Правда один минус, могут возникнуть новые проблемы, которые не будут затронуты в этой статье.

Скачать Visual Studio 2015 Community Edition с сайта Microsoft: [1]


Lamp.gif ACHTUNG
Данный туториал рассчитан на VS 2010! При сборке на более современных студиях могут появиться другие проблемы, описания которых не окажется в данной статье!


  • S.T.A.L.K.E.R. Shadow of Cherbobyl 1.0006

Сборка

Заранее хочется оговориться о структуре каталогов

  • XRay -- корневой каталог движка
    • xr_build -- Выходной каталог, здесь находятся распакованные ресурсы игры
    • xr_src -- Каталог с исходными кодами движка
    • dev-scripts -- Различные вспомогательные скрипты

Загрузка исходного кода движка и подготовительные работы

Скачиваем основной архив с исходниками: [2]
Пароль: ljlLHhklknlked

Скачиваем архив с необходимыми для сборки SDKs и компонентами: [3]

Распаковываем содержимое архивов XRay.rar и src_components_for_xray.rar в директорию XRay\xr_src
В папке dev-scripts создаем два (*.cmd) файла - mountDisks.cmd и unmountDisks.cmd такого содержания:
mountDisks.cmd:

@ECHO OFF
@subst X: [Ваш путь до папки XRay]:\XRay\xr_build
@subst S: [Ваш путь до папки XRay]:\XRay\xr_src
exit

unmountDisks.cmd:

@ECHO OFF
@subst X: /D
@subst S: /D
exit

Запускаем mountDisks.cmd, должны появиться два виртуальных диска: X и S. X -выходной каталог, S - каталог исходников.

Виртуальные диски


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

Настройка проектов

Запускаем Visual Studio, на стартовой странице выбираем Открыть проект... или Файл -> Открыть -> Решение или проект... В появившемся окне выбираем S:\xr_3da\xr_3da.sln.

Ss 1.jpg
Появится окно мастера преобразования Visual Studio, жмём кнопку 'Готово' и ждём пока все проекты конвертируются в формат VS10 и пройдёт синтаксический анализ проектов.

Ss 2.jpg
После того как всё сконвертировалось, первым делом открываем Диспетчер конфигураций (ПКМ по решению -> Свойства -> Свойства конфигурации) и выставляем решению активную конфигурацию Mixed (на чистом Debug ужасно падает производительность), а для сторонних библиотек (BugTrap, OpenAL, minizip, zlib) ставим Release.

Ss 3.jpg
Ну а теперь самое муторное, это настройка собственно проектов. Каждый проект придется настраивать отдельно, собирать так же советую отдельно (ПКМ по проекту -> Только проект -> Построить только [имя проекта]). Порядок построения можно узнать так: ПКМ по любому проекту -> Зависимости проектов... -> Порядок построения. Настраиваем выходные каталоги, промежуточные каталоги и выходные каталог для библиотек импорта по своему вкусу, у меня так (на примере BugTrap, используется структура каталогов, упомянутая в начале статьи):

Ss 4.jpg Ss 5.jpg
Далее необходимо настроить пути к заголовочным файлам и библиотекам импорта внешних библиотек. Ниже пойдёт таблица проектов (в порядке построения) с необходимыми для них библиотеками из директории xr_src\SDK, пути настраиваются здесь:

Ss 6.jpg Ss 7.jpg

Проект Необходимые библиотеки
xrCore DX
xrCDB xrCore
xrLua xrCore, LuaBind, Boost
xrSound xrCore, Xiph libs, EAX, DX, OpenAL
xrParticles n/a
xrNetServer xrCore, DX, Boost
xrXMLParser n/a
XR_3DA xrCore, DX, xrLua\src, LuaBind, Boost, Xiph libs, OpenAL (*.lib only)
ODE n/a
xrCPU_Pipe xrCore, DX
xrGameSpy n/a
xrRender_R2 xrCore, DX
xrRender_R1 xrCore, DX
xrGame xrCore, DX, xrLua\src, LuaBind, Boost, Loki


Lamp.gif На заметку
xrGame самая "массивная" библиотека X-Ray, на некоторых машинах её сборка может занять прилично времени.


Сборка

Собираем каждый проект, как я ранее написал, отдельно, по списку порядка построения. Ниже разбираются наиболее встречающиеся проблемы.

xrCore

error C2061: синтаксическая ошибка: идентификатор "__RPC__out_xcount_part

Необходимо удалить файл rpcsal.h из директории S:\SDK\dx9sdk\dx9sdk\include. Возникает на старых версиях DXSDK, используйте версию за июнь 2010: [4]

xrLua

error C2883: std::terminate: объявление функции вступает в конфликт с "terminate", присутствующем в "using"-объявлении

Идём в S:\SDK\luabind\luabind\config.hpp, строка 31 и добавляем в имя функции terminate прочерк ,было terminate, стало _terminate.

Lamp.gif ACHTUNG
Функция _terminate существует в xrDebugNew! Не известно как это себя поведёт, лучше всё же закомментировать конструкцию namespace std { void terminate() }


error C2244: throw_exception: не удается сопоставить определение функции существующему объявлению

В xrCore.h, в строке 14 объявляем макрос BOOST_NO_EXCEPTIONS (#define BOOST_NO_EXCEPTIONS)

error C2668: boost::addressof: неоднозначный вызов перегруженной функции

Лезем в S:\SDK\boost_1_30_0\function\function_template.hpp, в строке 472 перед addressof дописываем boost::

xrGame

error C2770: недопустимые явные аргументы шаблон для "_operator::_edge_value_type CProblemSolver<_operator_condition,_condition_state,_operator,_condition_evaluator,_operator_id_type,_reverse_search,_operator_ptr,_condition_evaluator_ptr>::estimate_edge_weight_impl(const _condition_state &) const"

В S:\xr_3da\xrGame\problem_solver.h, строка 90. Заменить этот кусок кода:

Кусок кода xrGame


На этот:

Кусок кода xrGame


И где-нибудь вне класса объявите структуру Bool2Type:

Структура Bool2Type


error C2275: Pars: недопустимое использование этого типа в качестве выражения

Здесь придётся вносить правки в несколько файлов, для начала лезем в S:\xr_3da\xrGame\PHMovementDynamicActivate.cpp и везде после Pars вместо точки ставим двойное двоеточие ::, также делаем и в xrGame\physics_game.cpp

error C2770: недопустимые явные аргументы шаблон для "luabind::detail::class_rep *luabind::detail::get_class_rep(lua_State *,void (__cdecl *)(T))"

В S:\SDK\luabind\luabind\detail\class_cache.hpp, строка 78, добавляем символ * после буквы T:

Правка LuaBind


error C2780: luabind::class_<T> &luabind::class_<T>::def(luabind::detail::operator_<Derived>): требует аргументов: 1, имеется: 2

В S:\xr_3da\xrGame\game_cl_base_script.cpp, строка 17, дописываем перед SZoneMapEntityData ключевое слово const:

Правка xrGame


Congratulations!

Ну вот и всё, осталось только скопировать, если его там нет, fsgame.ltx в директорию с вашими бинам и создать (*.cmd) файл для запуска, ну или для продвинутых написать свой лаунчер (например написать свою xrLauncher.dll). Приятных экспериментов!

Послесловие

В скором времени появятся другие статьи по движку ST или по программированию, так или иначе связанным с ST, возможно появится статья по сборке X-Ray SDK, если Вам конечна понравилась эта статья.
Если Вами в статье была найдена какая-то ошибка или неточность, прошу сообщить мне.

Благодарности

Я выражаю искрении благодарности следующим людям: K.D., HikeR, Tron и всем остальным кто помогал в сборке движка.

Ну и огромное спасибо GSC Game World за замечательный проект ST и за отсутствие гонений из-за использования исходных кодов движка :-).

Автор

Author: KIRAY [5]

Дата публикации: 11.07.2014.
Последние изменения (автор): 26.08.2015.
KIRAY (обсуждение) 11:07, 11 июля 2014 (MSK)

Другие места
LANGUAGE