English translate:
TODO
Русский перевод:
О проекте:
Раньше я занимался проектом Lost World Origin, потом немного работал над Lost World Quantum (далее LWQ). Занимался я картостроением, отвечал за полную Припять и т.д. И для LWQ хотелось чего - то большего, а именно - полной Зоны. Попробовали, не получилось, инструменты не соответствовали. И захотелось собрать оригинальный SDK, именно в том виде, каком он существовал у всех, с небольшимим изменениями: фикс известных багов и устранение проблемы создания больших карт. После непродолжительной борьбы с Borland C++ Builder 6.0 получилось собрать LevelEditor. Однако, все оказалось гораздо банальнее: после устранения проблем с размерами, координатами и прочим, SDK стал вылетать по памяти, так как был 32 битным. Попытка дать ему длинные адреса не увенчалась успехом, ему все также не хватало (на тот момент у меня была соединённая карта Теней Чернобыля, то есть полная Зона). Именно после этого я и решился на порт SDK по 64 битную архитектуру, соответственно с переездом на более совеременные IDE (Borland C++ Builder 6.0 не поддерживает архитектуру 64 бит). Кратко говоря...путь был весьма не прост, один баг меня поставил в тупик дня на четыре. Однако, в целом все получилось успешно. Конечно, есть еще куда стремиться и развиваться - но у же другим, тем, кому это будет интересно :) Я свою цель и мечту реализовал по полной, поэтому и выкладывюю полный и настроенный код. Успехов всем желающим!
Инструменты:
- Visual Studio 2022;
- Embarcadero RAD Studio 11.2.
Сборка:
*** Перед сборкой (сделать это один раз):
- Открыть в rad studio проект components (code\SDK\components\components.groupproj);
- Собрать проекты elpackB6, elpkdbB6, elpproB6, editorB(главный проект, собирает все) собрать в x86 Release;
- Собрать проекты dceldbB6, dcelppB6, dclelpB6, editor(главный проект, собирает все) собрать в x86 Release. Установить каждый компонент;
*** Алгоритм сборки:
- Открыть движок (code\engine.vc2008\engine.sln) в Visual Studio, выбираем нужный конфиг и собираем xrEntry(главный проект, собирает все);
- Открыть в Rad studio проект components;
- Собрать проекты elpackB6, elpkdbB6, elpproB6, editorB(главный проект, собирает все) в нужной конфигурации и в нужной архитектуре;
- Запустить батник для выполнения корректировки хейдеров для компонентов Delphi; fix_headers_for_rad_studio.cmd
- В корне с кодом запустить батник для нужной конфигурации (скопирует необходимые dll и статические либы по путям); (отредактировать путь к среде в батнике, если отличается) copy_lib_архитектура_конфигурация.cmd
- Открыть проект в rad studio all_editors (code\engine.vc2008\all_editors.groupproj), выбрать проект ActorEditor или LevelEditor, и собрать в нужной конфигурации и архитектуре (достаточно собрать эти проекты, все остальное соберется автоматически);
- Выходные файлы будут в папке bin/архитектура/конфигурация;
- Запуск стандартный, папка start, выбрать нужный батник (подредактируйте пути внутри батников к своим игровым ресурсам) (Для AI - сети: по - умолчанию в батниках включена черновая компиляция AI - сети).
Старт из IDE:
- Движок: выбрать запускаемым проектом xrEntry, выставить у него рабочим каталогом папку до игровых ресурсов (до местоположения игровых архивов и/или gamedata), запустить;
- SDK: выбрать запускаемым проектом ActorEditor/LevelEditor, выставить у них рабочим каталогом папку до SDK - ресурсов (до местоположения папки gamedata/rawdata), запустить.
О возможных ошибках:
- При [bcc* Error] *.cpp(1): ICE: Internal compiler error: 0 @ 00000000 просто перезапускаем сборку. Из вариантов: есть множественные включения headers, следует устранить;
- Если при сборке RAD Studio зависает, убиваем процесс и перезапускаем сборку;
- Если при запуске ошибки связанные с openal, установить из папки : tools/redistributable_package - oalinst;
- Если при запуске ошибки с ucrtbase(-d), установить из папки : tools/redistributable_package - winsdksetup.
Рекомендации:
- Перед запуском AE или LE выставите exe права администратора!
Благодарности проектам:
- Open Xray (https://github.com/OpenXRay/xray-16);
- xray_re-tools (https://bitbucket.org/stalker/xray_re-tools/);
- OGSR (https://github.com/OGSR/OGSR-Engine).
Что собирается:
- Engine x64/x86 Debug/Release;
- Maya Plugins 2022 x64 Debug/Release;
- Xray SDK Level Editor/Actor Editor x64/x86 Debug/Release.
Технические изменения:
- движок пересобран под стандартами C++ 17/14;
- удалены BugTrup;
- Обновлены nvtt, luabind, LuaJIT, minilua, Buildvm на самые свежие версии;
- Для плагинов maya используется ядро xray_re;
- Сделана общая точка запуска xrEntry;
- Добавлены все необходимые для запуска dll;
- Приложены все инструменты для запуска собранных бинарников (SDK Win, dx sdk, open al);
- Добавлены батники под все конфигурации для быстрого старта собранного программного продукта;
- Сам SDK переведён под clang компилятор и стандарты C++ 17/14.
Изменения:
- Всё: добавлена всевозможная трассировка стека. Движок отлавливает практически все падения и трассирует их в стек;
- SDK: исправлен вылет nodefault reached на win 8/10;
- SDK: удален rt_object_props.ltx;
- SDK: исправлен limit 32 items for multiply add objects (256 items);
- SDK: размер lod - текстуры - 8192 х 8192;
- SDK: вывод координат до 100000, и до сотых - при редактировании позиции объекта в LE;
- SDK: исправлен баг, когда трава отказывалась отрисовываться;
- Всё: x64;
- SDK: диалоговые окна конечно;
- SDK: корректное сохранение и загрузка dti (индексы + модели травы, файл);
- SDK: вывод списка thm с указанием проблемной при вылете (Pos<=Size) && (Pos>=0);
- SDK: переименование материалов в AE и LE;
- SDK: вывод настроек камеры в быстрые настройки le(по клавише enter);
- SDK: select texture(ae) - исправлена ошибка при выборе текстуры;
- SDK: check new textures (ae, le) - создание новых thm, исправлена ошибка по stack overflow;
- SDK: ai maps (le) - исправлены фризы при использовании инструмента;
- xrLC: исправлен вылет при очень больших полигонах (переполнение);
- xrLC: добавлена возможность постановки компиляции на паузу.
Известные ошибки:
- mixed конфигурация - не настроена;
- при выходе из движка Debug под отладкой Visual Studio x86/x64 падение;
- при сборке уровней разными SDK (x86 и x64) у некоторых файлов получается разный размер, из -за разных размеров типов данных под конкретную архитектуру. Нужно привести к единому типу данных и размеру;
- Уровень, сделанный в SDK x86, и который пытается компилироваться в xrLC x64 - будет ошибка, времени отладить не хватило; (возможно, это следствие предыдущего пункта);
- в SDK иногда наблюдаются проблемы с АИ - сетью (видел редко). Ее координаты и позиция портится. Скорее всего, также, связано с типами данных.
Проверено на:
- Windows 10
TODO:
- добавить в xrLC выгрузку из ОЗУ при постановке на паузу.
Вклад:
- проект открыт для изменений и модификаций.
Всё использование только не в коммерческих целях.
Если взяли в использование, пожалуйста, укажите первоисточник.
Буду только рад соразработчикам (collaborators)!