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

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

  • Первое, и самое главное. Наличие хоть капли мозга и более-менее прямых рук.
  • Microsoft Visual Studio 2005 или 2008 или 2010 (НЕ Express Edition)
Lamp.gif ACHTUNG
Данный туториал рассчитан на VS 2010! При сборке на других, указанных выше студиях могут отсутствовать некоторые проблемы, разобранные в данной статье, и могут появиться другие, которые, возможно, не будут рассмотрены в данной статье!


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

Сборка

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

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

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

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

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

Распаковываем содержимое архивов 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

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 и за отсутствие гонений из-за использования исходных кодов движка :-).

Автор

Article is prepared ОМКНМ [3]
Author: KIRAY [4]

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

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