Сборка движка X-Ray — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Автор) |
KIRAY (обсуждение | вклад) |
||
Строка 160: | Строка 160: | ||
<br/> | <br/> | ||
Если Вами в статье была найдена какая-то ошибка или неточность, прошу сообщить мне. | Если Вами в статье была найдена какая-то ошибка или неточность, прошу сообщить мне. | ||
− | |||
− | |||
<br/><br/> | <br/><br/> | ||
'''Просьба при внесении правок оставлять свою подпись.''' | '''Просьба при внесении правок оставлять свою подпись.''' |
Версия 04:06, 10 апреля 2015
Содержание
Предисловие
Сразу хочется сказать то, что я не программист (обучающийся СОУ) и до программиста мне еще очень-очень далеко, всё что будет изложено ниже не является правильным решением проблемы сборки движка X-Ray и некоторые решения могут быть идиотскими, использование которых не рекомендуется. И я бы попросил любителей критики сильно не пинать, это моя первая статья и опыта написания таковых у меня нет. Ну что ж, хватит лирики, приступим-с...
На кого рассчитана данная статья?
Прежде всего она рассчитана на нубов, подобных мне, которые не могут собрать движок, но хотят вносить в него какие-то правки, ну или хотя бы хотят пытаться вносить правки. Ну это вовсе не означает что Вы являетесь "полным нулём", предполагается что читатель хотя бы минимальски знаком с ЯП C++ и имеет хоть какой-то опыт работы в Visual Studio. Программистам с опытом этот туториал покажется очень смешным и глупым, и я бы советовал им пройти мимо, дабы они здесь ничего нового не найдут.
Что необходимо для сборки?
- Первое, и самое главное. Наличие хоть капли мозга и более-менее прямых рук.
- Microsoft Visual Studio 2005 или 2008 или 2010 (НЕ Express Edition)
- 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.
Появится окно мастера преобразования Visual Studio, жмём кнопку 'Готово' и ждём пока все проекты конвертируются в формат VS10 и пройдёт синтаксический анализ проектов.
После того как всё сконвертировалось, первым делом открываем Диспетчер конфигураций (ПКМ по решению -> Свойства -> Свойства конфигурации) и выставляем решению активную конфигурацию Mixed (на чистом Debug ужасно падает производительность), а для сторонних библиотек (BugTrap, OpenAL, minizip, zlib) ставим Release.
Ну а теперь самое муторное, это настройка собственно проектов. Каждый проект придется настраивать отдельно, собирать так же советую отдельно (ПКМ по проекту -> Только проект -> Построить только [имя проекта]). Порядок построения можно узнать так: ПКМ по любому проекту -> Зависимости проектов... -> Порядок построения. Настраиваем выходные каталоги, промежуточные каталоги и выходные каталог для библиотек импорта по своему вкусу, у меня так (на примере BugTrap, используется структура каталогов, упомянутая в начале статьи):
Далее необходимо настроить пути к заголовочным файлам и библиотекам импорта внешних библиотек. Ниже пойдёт таблица проектов (в порядке построения) с необходимыми для них библиотеками из директории xr_src\SDK, пути настраиваются здесь:
Проект | Необходимые библиотеки |
---|---|
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 |
![]() |
На заметку 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.
![]() |
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. Заменить этот кусок кода:
На этот:
И где-нибудь вне класса объявите структуру 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:
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:
Congratulations!
Ну вот и всё, осталось только скопировать, если его там нет, fsgame.ltx в директорию с вашими бинам и создать (*.cmd) файл для запуска, ну или для продвинутых написать свой лаунчер (например написать свою xrLauncher.dll). Приятных экспериментов!
Послесловие
В скором времени появятся другие статьи по движку ST или по программированию, так или иначе связанным с ST, возможно появится статья по сборке X-Ray SDK, если Вам конечна понравилась эта статья.
Если Вами в статье была найдена какая-то ошибка или неточность, прошу сообщить мне.
Просьба при внесении правок оставлять свою подпись.
Благодарности
Я выражаю искрении благодарности следующим людям: K.D., HikeR, Tron и всем остальным кто помогал в сборке движка.
Ну и огромное спасибо GSC Game World за замечательный проект ST и за отсутствие гонений из-за использования исходных кодов движка :-).
Автор
Author: KIRAY [3]
Дата публикации: 11.07.2014.
KIRAY (обсуждение) 11:07, 11 июля 2014 (MSK)