Что это
MH-X-Ray — форк xrModder/X-Ray: исходного кода X-Ray 1.0007rc1, на котором вышла «Тень Чернобыля». Это только движок. Чтобы играть, нужна установленная копия S.T.A.L.K.E.R.: Тень Чернобыля.
Игровые данные, форматы уровней и сохранений не менялись. Сейвы открываются и в 64-битной, и в 32-битной сборке, обе собираются из одного кода. Проект для одиночной игры: мультиплеер из движка удалён.
Что изменилось
- 64-битная сборка
- Движок собирается для x64 и для Win32. В коде не осталось ассемблерных вставок и API, которые есть только на x86.
- Скрипты на LuaJIT 2.1
- LuaJIT 1.0.3 с корутинами Coco работал только на x86. Новая версия понимает скрипты GSC вместе с их комментариями в стиле C. Ошибки Lua теперь попадают в лог и в Release-сборке.
- Звук на OpenAL Soft
- Вместо роутера Creative, DirectSound и EAX.dll. EAX эмулируется, поэтому реверберация окружения слышна на любой звуковой карте.
- 4K и два монитора
- При масштабировании Windows картинка больше не размывается, а курсор доходит до края экрана. Шрифты растут вместе с разрешением. В окне без рамки курсор не уходит на второй монитор.
- Исправленные ошибки
- Редкое падение R2 при загрузке уровня. Пропадание геометрии на больших уровнях — о нём ниже.
- Удалено
- Мультиплеер, GameSpy, DirectPlay, BattlEye, выделенный сервер, патчер, проверка CD-ключа и маркеры SecuROM. Около 65 тысяч строк, которые одиночной игре не нужны.
Мир больше не исчезает
В оригинальной игре на больших уровнях иногда пропадали целые куски мира и возвращались, только если развернуться. Виновата система, которая отсекает геометрию за стенами и холмами. Если в кадре не было ни одного такого препятствия, она проверяла видимость по положению камеры из прошлого кадра. MH-X-Ray обновляет камеру каждый кадр.
На 20 % больше кадров
x64-сборка быстрее Win32 на каждом из 18 уровней. Ниже — точный замер на одном и том же сохранении: Release, 1280×720, по 30 секунд, сборки чередовались, медиана трёх прогонов.
- Win32
- x64
R1 статическое освещение
x64 быстрее на 19,5 %
R2 динамическое освещение
x64 быстрее на 23 %
Все прогоны таблицей
| Рендер | Сборка | Прогоны | Медиана |
|---|---|---|---|
| R1 | Win32 | 740,6; 751,5; 758,6 | 751,5 |
| x64 | 893,7; 898,3; 917,7 | 898,3 | |
| R2 | Win32 | 396,9; 400,9; 401,5 | 400,9 |
| x64 | 491,5; 493,2; 506,5 | 493,2 |
Проверено на всех уровнях
Каждую сборку проверяет автоматический тест. Игра загружает сохранение, рисует уровень, считает кадры и выходит, а скрипт сравнивает предупреждения в логе с эталоном. Перед выпуском x64-1.0 так прошли все уровни сюжета: Win32 и x64, рендеры R1 и R2, 72 прогона без ошибок. Предупреждения у двух сборок совпали на каждом уровне.
- Кордон
- Свалка
- Агропром
- Подземелья Агропрома
- Тёмная долина
- Лаборатория X18
- Бар
- Дикая территория
- Армейские склады
- Янтарь
- Лаборатория X16
- Радар
- Лаборатория X10
- Припять
- ЧАЭС
- Саркофаг
- Монолит
- ЧАЭС-2
Вручную на x64 в 4K пройдены Кордон, диалоги, торговля, задания, ПДА, сохранение и загрузка, переходы между уровнями. Полное прохождение сюжета с концовками ещё впереди.
Как запустить
Готовых сборок пока нет, движок собирается из исходников.
-
Установите инструменты
Visual Studio 2022 или новее с набором C++ v143 и Git.
-
Соберите движок
В Developer Command Prompt для Visual Studio:
git clone https://github.com/midnightheartsgames/MH-X-Ray.git cd MH-X-Ray msbuild X-Ray.sln -p:Configuration=Release -p:Platform=x64 -mГотовые файлы появятся в
Output\Binaries_x64. -
Скопируйте файлы в папку игры
Папку
Output\Binaries_x64— под именемbinaries_x64, содержимое папкиGame— в корень папки игры. Архивы игры не меняются. Файлы вgamedataтолько убирают из меню сетевую игру и проверку обновлений. -
Запустите игру
Файлом
Launch_x64.cmd. Нужны Microsoft Visual C++ 2015–2022 Redistributable (x64) и DirectX End-User Runtime.
32-битная сборка собирается так же с -p:Platform=Win32, кладётся в binaries и запускается через Launch.cmd.
Как шёл перенос
Сначала всё лишнее удалялось, а x86-код переписывался на рабочей 32-битной сборке. Так каждое изменение проверялось на игре, которая уже запускается, и переход на x64 касался только настоящих 64-битных проблем.
- Базовая линия Точка отката и автоматический тест загрузки уровня.
- Удаление мультиплеера GameSpy, DirectPlay, выделенный сервер; исходники переведены в UTF-8.
- Переносимый код Ассемблер и x86-only API заменены на C++ и интринсики.
- Зависимости LuaJIT 2.1, OpenAL Soft, библиотеки DirectX для обеих платформ.
- Сборка x64 Платформа x64 в решении и сторонних библиотеках.
- Движок под x64 Решение собирается, усечение указателей — ошибка компиляции.
- Первый запуск Исправления x64, 4K и двух мониторов.
- Выпуск Обход всех уровней, замеры FPS, версия x64-1.0.
Причины каждого решения и найденные ошибки — в плане переноса.