Введение
Попытка сохранить исходный код недоступного на github проекта
В этом репозитории можно найти весь обратный исходный код для GTA III (master branch) и GTA VC (miami branch).
Он был протестирован и работает в Windows, Linux, MacOS и FreeBSD на x86, amd64, arm и arm64.
Рендеринг может выполняться либо исходным RenderWare (D3D8), либо его переработанной версией librw (D3D9, OpenGL 2.1 или выше, OpenGL ES 2.0 или выше). Звук воспроизводится с помощью MSS (используются библиотеки dll из исходной GTA) или OpenAL.
Проект был также перенесен на Nintendo Switch, Playstation Vita и Nintendo Wii U.
Мы пока не можем выполнить сборку для PS2 или Xbox. Если вы заинтересованы в этом, свяжитесь с нами.
Установка
- Для работы re3 требуются игровые ассеты для ПК, поэтому вы обязательно должны иметь копию of GTA III.
- Соберите re3 или загрузите сборку:
- Извлеките загруженный архив в директорию GTA 3 и запустите re3. Архив включает в себя исполняемый файл, обновленные и дополнительные игровые файлы, а в случае OpenAL требуемые библиотеки dll.
Скриншоты
Улучшения
Мы внедрили ряд изменений и улучшений в оригинальную игру.
Они могут быть настроены в core/config.h
.
Некоторые из них можно включать и выключать во время выполнения, а некоторые нет.
- Исправлено множество мелких и крупных ошибок
- Пользовательские файлы (сохранения и настройки) хранятся в корневой директории GTA
- Настройки хранятся в файле re3.ini вместо gta3.set
- Меню отладки для выполнения и изменения различных вещей (для открытия нажмите Ctrl-M)
- Отладочная камера (для переключения нажмите Ctrl-B)
- Поворачивающаяся камера
- Поддержка контроллера XInput (Windows)
- Отсутствие загрузочных экранов между островами («использование памяти карты» в меню)
- Поддержка скинированных педов (модели с Xbox или Mobile)
- Рендеринг
- Поддержка широкоформатных экранов (правильно масштабированные HUD, меню и FOV)
- PS2 MatFX (отражения на автомобилях)
- Альфа-тест PS2 (лучший рендеринг прозрачных текстур)
- Частицы PS2
- Рендеринг автомобилей Xbox
- Рендеринг карты мира Xbox (требуется карта Xbox)
- Световая подсветка Xbox
- Капли дождя на экране Xbox
- Более настраиваемый цветовой фильтр
- Меню
- Карта
- Больше опций
- Меню конфигурации контроллера
- ...
- Можно загружать DFF-файлы и TXD-файлы с других платформ, что может повлиять на производительность
- ...
Предстоящие задачи
Было бы неплохо иметь или сделать следующее:
- Исправить физику для высоких значений FPS
- Повысить производительность на устройствах с низкими характеристиками, особенно в OpenGL на Raspberry Pi (если у вас есть соответствующий опыт, свяжитесь с нами)
- Сравнить код с кодом PS2 (трудно, хорошего декомпилятора нет)
- Порт для PS2
- Порт для Xbox (менее важно)
- Выявить неиспользуемые или отладочные функции
- Сравнить сборку CodeWarrior с исходным двоичным файлом для более точного кода (очень трудоемко)
Моддинг
Как правило, модификации ассетов (модели, текстуры, обработка, скрипты и т. д.) должны работать так же, как и в оригинальной GTA.
Скрипты CLEO работают с CLEO Redux.
Моды, которые изменяют код (dll/asi, limit adjusters) не будут работать..
Некоторые вещи, которые делают эти моды, уже внедрены в re3 (большая часть SkyGFX, GInput, SilentPatch, Widescreen fix),
другие можно легко реализовать (увеличение лимитов, см. config.h
),
а другие придется переписывать и интегрировать непосредственно в код.
Извините за неудобства.
Сборка из исходного кода
При использовании premake вы можете указать переменную среды GTA_III_RE_DIR в корневую папку GTA3 , чтобы исполняемый файл перемещался туда с помощью сценария после сборки.
Чтобы клонировать репозиторий, используйте команду git clone --recursive https://hub.mos.ru/msapik/re3.git
. Затем в клонированном репозиторий перейдите в директорию cd re3
.
Linux Premake
Чтобы использовать Linux Premake, сделайте следующее: Building on Linux
Linux Premake(МОС 12, ROSA Linux)
Чтобы использовать Linux Premake, сделайте следующее: Building on Linux
Подробнее на русском языке про сборку в Linux
sudo dnf in git lib64glew-devel lib64glfw-devel lib64openal-devel lib64mpg123-devel lib64sndfile-devel
git clone --recursive https://hub.mos.ru/msapik/re3
cd re3
./premake5Linux --with-librw gmake2
cd build
Для сборки доступны следующие конфигурации:
- debug_linux-x86-librw_gl3_glfw-oal
- debug_linux-amd64-librw_gl3_glfw-oal
- debug_linux-arm-librw_gl3_glfw-oal
- debug_linux-arm64-librw_gl3_glfw-oal
- release_linux-x86-librw_gl3_glfw-oal
- release_linux-amd64-librw_gl3_glfw-oal
- release_linux-arm-librw_gl3_glfw-oal
- release_linux-arm64-librw_gl3_glfw-oal
make config=debug_linux-amd64-librw_gl3_glfw-oal
Если компиляция прошла без ошибок, то в папке re3/bin/ваша_конфигурация/Debug_или_Release/ будет бинарник re3. Копируем бинарник в папку оригинальной GTA3 и запускаем.
Linux Conan
Установите python и conan, а затем запустите сборку.
conan export vendor/librw librw/master@
mkdir build
cd build
conan install .. re3/master@ -if build -o re3:audio=openal -o librw:platform=gl3 -o librw:gl3_gfxlib=glfw --build missing -s re3:build_type=RelWithDebInfo -s librw:build_type=RelWithDebInfo
conan build .. -if build -bf build -pf package
MacOS Premake
Чтобы использовать MacOS Premake, сделайте следующее: Building on MacOS
FreeBSD
Чтобы использовать FreeBSD Premake, сделайте следующее: Building on FreeBSD
Windows
Если у вас есть Visual Studio 2015/2017/2019:
- Запустите один из вариантов
premake-vsXXXX.cmd
в корневой папке. - Откройте build/re3.sln с помощью Visual Studio и скомпилируйте решение.
Microsoft недавно прекратила распространение DX9 SDK. Вы можете загрузить архивную версию здесь: https://archive.org/details/dxsdk_jun10
Если вы выбрали OpenAL в Windows Вам необходимо ознакомиться с разделом Running OpenAL build on Windows.
ℹ В premake есть опция--with-lto
, если вы хотите, чтобы проект был скомпилирован с параметром Link Time Optimization.
ℹ В config.h есть различные настройки, которые могут быть вам полезны.
ℹ re3 использует полностью самописный движок рендеринга вместо RenderWare; librw. librw предоставляется как подмодуль re3, но вы также можете использоваnь переменную окружения LIBRW для указания пути к своему собственному librw.
Если вам это необходимо, вы также можете использовать CodeWarrior 7 для компиляции re3 с помощью прилагаемого проекта codewarrior/re3.mcp — для этого требуются оригинальные библиотеки RW33 и пакет SDK DX8. Однако сборка является нестабильной по сравнению со сборками MSVC и предназначена в основном в качестве справочного материала.
Вклад
Весь код в репозитории, который не указан в препроцессоре (например, FIX_BUGS), является полностью обратным кодом из оригинальных двоичных файлов.
Мы не принимаем пользовательский код, если он не завернут в препроцессор, или если это не подсистема Linux/кроссплатформенная подсистема или уровень совместимости.
Мы принимаем только такие запросы на перенос:
- Новое улучшение, которое существует как минимум в одной из GTA (если оно отсутствовало в III/VC, то оно не должно быть декомпиляцией)
- Исправления ошибок в игре, интерфейсе пользователя или пользовательском опыте (если это исправление оригинального кода, оно должно быть указано в FIX_BUGS)
- Платформозависимый и/или неиспользуемый код, который еще не был обращен
- Увеличение понятности или точности обратного кода, например, «какой код создал бы эту сборку».
- Новые кроссплатформенные подсистемы/уровни совместимости или их улучшения
- Исправления перевода для языков, которые поддерживались в оригинальной игре
- Код, повышающий удобство поддержки
У нас есть документ Coding Style , который на самом деле не соблюдается и не поддерживается должным образом.
Не используйте возможности C++11 или более поздних версий.
История
Работа над re3 началась где-то весной 2018 года, изначально в качестве способа протестировать обратный код столкновений и физики внутри игры. Это было сделано путем замены отдельных функций игры их обратными аналогами с помощью библиотеки dll.
После некоторой работы проект бездействовал около года, а в мае 2019 года его возобновили и выложили на github. В то время я (aap) обратил около 10 тыс. строк кода и предположил, что в финальной версии игры будет около 200-250 тыс. строк. Вскоре к проекту присоединились другие (Fire_Head, shfil, erorcun и Nick007J в хронологическом порядке, а немного позже — Serge) и мы добились очень быстрого прогресса в течение лета 2019 года, после чего темп немного снизился.
Из-за того, что в начале пандемии коронавируса все оставались дома, у всех появилось много времени, чтобы снова поработать над re3, и в апреле 2020 года мы, наконец, получили отдельный исполняемый файл (тогда в нем было около 180 тыс. строк кода).
После первоначального ажиотажа, а также исправления и дальнейшей полировки кода в начале мая 2020 года началась работа над reVC — не с нуля, а на основе кода re3, а не путем замены функций с помощью библиотеки dll. После нескольких месяцев в основном стабильного прогресса мы посчитали, что reVC закончен в декабре.
После этого мы начали работать над reLCS, который в данный момент находится в разработке.
Лицензия
Мы не считаем, что можем дать этому коду лицензию. Код должен использоваться только в образовательных целях, для документирования и моддинга. Мы не поощряем пиратство или коммерческое использование. Пожалуйста, поддерживаете производные работы открытыми и приписывайте соавторам их труд.