Об этом проекте
FOnline — это лицензированный под MIT движок на C++20 для создания многопользовательских онлайн-RPG в классическом изометрическом стиле Fallout 1/2/Tactics и Arcanum. Он непрерывно развивается с 2006 года и обеспечивает работу многопользовательских RPG сообщества; в качестве текущего примера упоминается Last Frontier.
Дизайн ориентирован в первую очередь на многопользовательскую игру: авторитетный сервер, реплицируемое состояние сущностей и разделение клиента и сервера являются основой модели сущностей, а не добавлены поверх неё. Одна кодовая база создаёт сервер, клиент, редактор карт, конвейер контента и упаковку для десктопа, мобильных устройств и браузера.
Функциональные области, описанные в README:
- Ядро многопользовательской игры: среда выполнения авторитетного сервера с менеджерами сущностей, проверкой клиента и усиленным разбором недоверенного ввода; общая модель сущностей/свойств/прототипов со сгенерированными типобезопасными обёртками свойств и автоматической репликацией; подключаемые транспорты, включая TCP-сокеты, сервер на базе Asio, WebSockets для игры в браузере, упорядоченный UDP и внутрипроцессный транспорт для тестов; подключаемое хранилище через JSON-файлы, SQLite, MongoDB или в памяти за единым фасадом базы данных с асинхронной очередью фиксации и журналами восстановления; встроенный автообновлятор клиента с возобновляемой передачей файлов и серверный бэкенд обновлений.
- Скриптинг: игровой скриптинг на AngelScript поверх независимой от бэкенда системы скриптов; нативный API экспортируется в скрипты посредством генерации кода из аннотаций ///@, что поддерживает синхронизацию методов, свойств, событий, удалённых вызовов и перечислений; на границе скриптов и нативного кода обеспечивается контроль допустимости null; поддерживается отладка скриптов наряду с нативной отладкой.
- Рендеринг: бэкенды OpenGL, Direct3D, Vulkan и SDL_GPU, а также headless/null-режимы для серверов и CI; эффекты пишутся один раз на GLSL, компилируются через glslang в SPIR-V и транслируются для каждого бэкенда через SPIRV-Cross; спрайтовые изометрические миры с 3D-моделями персонажей (FBX), частицами, воспроизведением видео и аудио в современных (Ogg/Vorbis) и классических форматах Fallout; оконный режим, безрамочный полноэкранный режим и режимы виртуальных окон для нескольких клиентов с оверлеем разработчика на ImGui.
- Мир и карты: режимы геометрии с шестиугольной и квадратной сеткой с общими помощниками для расстояния, направления и окрестностей; поиск пути, трассировка линий, контексты движения и модель блокировки, рассчитанная на серверную авторитетность.
- Конвейер контента и инструменты: конвейер запекания превращает прототипы, карты, диалоги, локализованные тексты, эффекты, изображения, модели и скрипты в версионированные пакеты ресурсов времени выполнения; импортирует классические форматы 2D-ресурсов (Fallout FRM, Arcanum ART и другие устаревшие форматы) наряду с PNG/TGA; интерактивные инструменты, построенные на самом движке, включают редактор карт с headless-автоматизацией, редактор контента, обозреватель ресурсов и редактор частиц.
- Качество инженерии: модульные тесты Catch2 со сгенерированными целями для каждого набора, запуски с санитайзерами и покрытием; Clang Thread Safety Analysis, применяемый как -Werror во всех инструментальных цепочках Clang; строгие правила использования умных указателей и допустимости null; всегда включённые трассировки стека, детерминированные правила безопасности исключений и модель выделения памяти с завершением при нехватке памяти; интеграция профилировщика Tracy.
Архитектура: движок является переиспользуемым подмодулем; репозиторий игры добавляет его как Engine/, направляет поэтапный конвейер CMake на собственную конфигурацию и получает цели сборки с именем проекта. Игра владеет контентом, скриптами, конфигурацией, брендингом и политикой выпуска. Такой контент, как прототипы, карты, диалоги, локализация и GUI, создаётся как обычные текстовые ресурсы и запекается в пакеты времени выполнения. Поддерживаемые целевые платформы — Windows, Linux, macOS, Android, iOS и Web (WebAssembly); в README отмечается, что не все функции одинаково зрелы на каждой платформе.
Структура репозитория: Source/ (Applications, Client, Server, Common, Frontend, Scripting, Tools, Essentials, Tests), BuildTools/ (поэтапный конвейер CMake, генерация кода, инструментальные цепочки, упаковка), Resources/, ThirdParty/ (встроенные SDL, AngelScript, Asio, ImGui, glslang, SPIRV-Cross, Tracy и другие) и Docs/. Поддерживаемая документация охватывает архитектуру, модель сущностей, карты и движение, сеть, хранение, среды выполнения клиента и сервера, рендеринг, скриптинг, допустимость null, конвейеры сборки и запекания, инструменты, тестирование, безопасность исключений, умные указатели, анализ потокобезопасности и отладку на платформах.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.