Начните вводить запрос. Enter открывает первый результат.

    О проекте

    Supreme Commander: Forged Alliance вышла в 2007 году, и её движок Moho с тех пор так и остался застывшим бинарником. Сообщество Forged Alliance Forever годами поддерживало игру, латая этот бинарник на месте. FAF-RE — тот же движок, заново записанный в виде читаемого C++20: он собирается, запускается и играет настоящие партии точно так же, как оригинальный ForgedAlliance.exe. Значит, его можно сопровождать как обычный код.

    Восстановление закончено: каждая функция движка, которую использует игра, теперь в исходниках. Дальше — сделать его лучше оригинала.

    функций движка в исходниках, недостающих нет
    40 617
    реплеев совпадают с оригиналом по всем контрольным суммамтекущий тестовый набор из хранилища FAF
    75 / 75
    меньше времени, чем у оригинала, на реплей в x64пять реплеев, 8 потоков симуляции, от 4 до 33 %
    19 %
    оригинал, сборки x86 и x64 в одной партии без рассинхронизациибои ИИ, живая сетевая игра
    21 мин

    Что работает

    ЧтоСостояние
    Сборкаx86 (main.exe) и x64 (main_x64.exe), CMake и clang-cl
    Графикаглавное меню, ролики, игровой мир; Direct3D 9 и 10, как в оригинале, плюс добавленные Direct3D 11, Direct3D 12 и Vulkan
    Играсобственные сохранения и загрузка на обеих архитектурах
    Реплеивсе 75 реплеев текущего тестового набора совпадают с оригиналом в каждой записанной контрольной сумме
    Сетевая играоригинал, пересобранный x86 и пересобранный x64 в одной партии: 21 минута боёв ИИ без рассинхронизации; оригинал и x64 вдвоём продержались 30 минут, с потоками симуляции и без них
    Ролики.sfd через FFmpeg, без библиотеки Sofdec из оригинала

    Откуда я знаю, что всё совпадает

    RTS с сетевой моделью lockstep — строгий судья. Каждый игрок считает одну и ту же симуляцию и сверяет контрольные суммы, так что одно неверное число с плавающей точкой в одном тике сразу даёт рассинхронизацию. Поэтому тестовый набор — это хранилище реплеев FAF: настоящие партии на стандартных и пользовательских картах, от 1 до 12 живых игроков, против встроенного ИИ и M28AI. Каждая проигрывается на пересобранном движке и сверяется с оригиналом сумма за суммой.

    Ускоренная сборка x64 живёт по тому же правилу. Работа симуляции уходит в рабочие потоки только там, где результат доказуемо тот же, что и при последовательном счёте, и у каждой такой правки есть переключатель, который возвращает исходный код.

    Как собрать

    Нужна своя копия игры: в репозитории нет ни бинарников, ни ресурсов, ни карт, ни скриптов игры, ни чего-либо, полученного из них. Дальше так:

    1. Поставьте Visual Studio 2022 с нагрузкой C++, LLVM (clang-cl и lld-link) и Git.

    2. Клонируйте репозиторий вместе с подмодулями:

      Terminal window
      git clone --recursive https://github.com/Draiget/faf-re.git
    3. Соберите и скопируйте исполняемый файл в папку запуска FAF:

      Terminal window
      .\build.ps1 # x64 Release
      .\build.ps1 -Arch both # x64 и x86

    При конфигурации все зависимости скачиваются и собираются из исходников строго заданных версий: Wild Magic 3.8, wxWidgets 2.4.2, Boost 1.34.1, zlib 1.2.3, FFmpeg 7.1.3 и остальные. Полный список и параметры — в README.

    Ссылки

    faf-re на GitHubИсходники, скрипты сборки, заметки про совпадение с оригиналом и производительность.github.com SC:FA Moho engine sourcesТема с анонсом на форуме FAF.forum.faforever.com

    Спасибо

    FAF-RE опирается на годы изучения движка сообществом Forged Alliance Forever. Отдельное спасибо Hdt80bro и 4z0t.

    Это независимый проект по сохранению игры и совместимости с ней. Он никак не связан с издателем или разработчиком игры и не одобрен ими.

    Дорожная карта

    Готово 22 из 34обновлено

    Готово22

    1. СетьУстойчивость к битым сетевым данным

      Испорченное сообщение от одного игрока больше не роняет лобби и не завершает игру. Повреждённые реплеи и сохранения отклоняются с объяснением причины.

    2. Сборка и инструментыCMake и clang-cl

      Вместо проекта Visual Studio теперь одна сборка на CMake и clang-cl для x86 и x64. Все библиотеки, включая FFmpeg, скачиваются в зафиксированных версиях и собираются из исходников.

    3. ВосстановлениеВосстановление завершено

      Все функции движка, которые использует игра, написаны в исходниках: 40 617 функций, не осталось ни одной.

    4. СимуляцияПатчи FAF в исходниках

      Исправления движка, которые FAF выпускает патчами к исходному exe, перенесены в код и включаются по версии игры, вплоть до 3840.

    5. ПроизводительностьСборщик мусора Lua в рабочих потоках

      Пометка и очистка идут в рабочих потоках симуляции с тем же результатом, что и у последовательного сборщика. Время сборки мусора за игру сократилось с 35,9 до 9,3 с.

    6. ПроизводительностьБыстрее оригинала

      На пяти реплеях из хранилища с восемью потоками симуляции сборка x64 тратит в среднем на 19 % меньше времени, чем оригинал (от 4 до 33 %), и все контрольные суммы совпадают.

    Показать ещё 16
    1. ГрафикаЗначки и туман войны на GPU

      Стратегические значки, туман войны, рамки выделения и значки снарядов рисует GPU на Direct3D 11, 12 и Vulkan. Каждый такой путь включается, только когда прошёл сверку с исходной отрисовкой.

    2. Платформыx64 без ограничения в 2 ГБ

      Сборка x64 по умолчанию работает с полным 64-битным адресным пространством. x86 упирается в него примерно на 60 000 юнитов, x64 продолжала работать и на 90 000.

    3. ПроизводительностьРазгрузка основного потока

      Реплеи считают до 10 тактов впереди экрана, а значки, отсечение по видимости, туман войны и обновление юнитов выполняются в рабочих потоках. Одно только опережение сократило 41-минутный реплей на 12 игроков с 37:33 до 20:46.

    4. ГрафикаDirect3D 11, 12 и Vulkan

      К исходным Direct3D 9 и 10 добавились Direct3D 11, 12 и Vulkan, игра сама выбирает самый новый из тех, что запустились. Эффекты игры переводятся при загрузке, и DXC компилирует все 339 точек входа 11 эффектов для Direct3D 12 и Vulkan.

    5. Симуляция76 из 76 реплеев

      Совпадают все игры тестового набора: от 1 до 12 игроков, стандартные и пользовательские карты, игры против встроенного ИИ и M28AI, от 9 до 83 минут.

    6. СетьОригинал, x86 и x64 в одной игре

      Три клиента, оригинальная игра и обе новые сборки, провели в одной живой игре 21 минуту боёв под управлением ИИ без рассинхронизации.

    7. ПроизводительностьСимуляция в рабочих потоках

      Первым в рабочие потоки ушло обновление отметок разведки по армиям. С 0 и с 8 потоками реплей на 12 игроков дал побайтно одинаковый результат на всех 6814 проверенных тактах.

    8. СимуляцияПервые реплеи совпали с оригиналом

      Девять настоящих игр из хранилища реплеев FAF (8–12 игроков, 30–46 минут) дают ту же контрольную сумму, что и оригинал, на каждом игровом такте.

    9. Сборка и инструментыОтчёты о сбоях

      При сбое пишется один текстовый отчёт: стеки всех потоков, стеки Lua со строками исходников, состояние игры и хвост лога, плюс минидамп. Раньше сбой просто вешал игру, а лог обрывался.

    10. СимуляцияСохранение и загрузка

      Сохранения записываются и загружаются в обеих сборках, x86 и x64.

    11. ГрафикаСвой видеоплеер

      Ролики .sfd играют через собственный плеер на FFmpeg, видеобиблиотека из оригинала не используется.

    12. ПлатформыСборка x64

      main_x64.exe собирается из тех же исходников. Стенд для локального мультиплеера свёл её в одной игре со сборкой x86: 1250 тактов в lockstep без рассинхронизации.

    13. ГрафикаВ игре

      Командир появляется и отрисовывается на местности, работают выделение юнитов и игровой интерфейс.

    14. СимуляцияЗагружается карта для схватки

      Карта загружается, симуляция создаётся, блупринты читаются, армии появляются.

    15. ГрафикаГлавное меню

      Текстуры меню загружаются, кнопки отвечают на нажатия.

    16. Сборка и инструментыПервая сборка, которая линкуется и запускается

      Восстановленные исходники собираются в один исполняемый файл, и он без сбоев доходит до создания графического устройства.

    В работе3

    1. СетьВыделенный сервер

      Необязательный режим для турниров: единственная симуляция работает на Linux-сервере без графики, и игроки подключаются к нему, а не друг к другу. Обычные игры остаются P2P и не меняются.

    2. ПлатформыСимуляция на Linux

      Симуляция собирается на Linux с clang и проигрывает тестовые реплеи до конца с теми же контрольными суммами, что и на Windows. Следующий шаг — весь набор реплеев.

    3. СетьКлиент на данных сервера

      Клиент показывает игру по потоку данных от сервера, а не по своей симуляции.

    В планах6

    1. ПроизводительностьПозы и анимация в рабочих потоках

      Позы и анимация занимают около 14 % времени симуляции. Следующим шагом они переедут в рабочие потоки, а результаты будут применяться в исходном порядке.

    2. ПроизводительностьРабочие потоки симуляции по умолчанию

      Сейчас рабочие потоки симуляции выключены, если не задан /simworkers. По умолчанию они включатся после проверок с другим числом потоков и с перемешанным порядком выполнения.

    3. ГрафикаDirect3D 12 в быстрых реплеях

      На реплее на полной скорости Direct3D 12 пока медленнее Direct3D 9: 1032 с против 924 с на одной и той же игре.

    4. СетьLinux-сервер и клиенты на Windows

      Сервер на Linux и клиенты на Windows: сначала в локальной сети, потом через ретранслятор. Реплей, который пишет сервер, должен проигрываться на Windows с теми же контрольными суммами.

    5. СетьТурнирные функции

      Лобби на сервере, переподключение, трансляция с задержкой для комментаторов, пауза и принудительный старт от администратора, результаты отправляет сервер.

    6. ВосстановлениеТипизированные параметры-указатели

      962 функции принимают нетипизированный параметр void*, и у 70 из них можно указать настоящий тип. Остальные — обратные вызовы, намеренно стёртые типы или мёртвый код.

    Потом3

    1. ПлатформыВся игра на Linux

      Работа над сервером переносит на Linux только симуляцию. Vulkan уже есть, но окну, вводу и звуку нужна своя реализация под Linux.

    2. ПлатформыmacOS и arm64

      Сборки clang под macOS на x86_64 и arm64 есть в долгосрочном плане, но собирать и проверять их пока не на чем.

    3. ГрафикаРолики с альфа-каналом и субтитры

      Ролики с альфа-каналом и субтитры пока не поддерживаются: такие ролики отклоняются при открытии с записью в лог.

    Серия

    Постов про этот проект пока нет.