FOnline Engine
Current master GitHub
Документация README.ru.md

FOnline Engine

License GitHub Commit

FOnline — открытый движок на C++20 под лицензией MIT для создания сетевых многопользовательских RPG в классическом изометрическом стиле Fallout 1/2/Tactics и Arcanum. Единая кодовая база предоставляет авторитетный сервер, игровой клиент, редактор карт, конвейер контента и упаковку для настольных, мобильных и браузерных платформ. Сама игра остаётся за вами: контент, скрипты и правила находятся в отдельном репозитории, который встраивает движок.

Движок непрерывно развивается с 2006 года и используется многопользовательскими RPG сообщества. Актуальный пример — Last Frontier, постапокалиптическая MMO на его основе.

Почему FOnline?

  • Многопользовательская архитектура прежде всего. Это не одиночный движок с добавленной впоследствии сетью: авторитетный сервер, реплицируемое состояние сущностей и разделение клиента и сервера заложены в основу модели сущностей.
  • Полный вертикальный стек. Сервер, клиент, mapper, редактор, resource baker, компилятор скриптов, runner тестов и автообновление собираются из одних исходников единым конвейером CMake.
  • Чистое разделение движка и игры. Движок остаётся переиспользуемым подмодулем; игра владеет контентом, скриптами, конфигурацией, брендом и политикой выпуска. Обновления движка не переносят в игру его продуктовую политику.
  • Контент на основе данных. Прототипы, карты, диалоги, локализация и GUI создаются как текстовые ресурсы и запекаются в runtime-пакеты, удобные для diff, review и инструментов.
  • Работает там, где находятся игроки. Нативные Windows, Linux и macOS, Android и iOS, а также WebAssembly-клиент, работающий в браузере через WebSocket.

Основные возможности

Многопользовательское ядро

  • Авторитетная серверная среда с менеджерами сущностей, проверкой клиента и защищённым разбором недоверенного клиентского ввода.
  • Общая модель сущностей, свойств и прототипов со сгенерированными типобезопасными wrapper свойств и автоматической репликацией клиентам.
  • Сменные сетевые транспорты: TCP-сокеты, включая сервер на Asio, WebSocket для браузерной игры, упорядоченный UDP-канал и внутрипроцессный транспорт для тестов и встроенных клиентов.
  • Сменные backend постоянного хранения — JSON-файлы, SQLite, MongoDB или память — за единым фасадом базы данных с асинхронной очередью commit и журналами восстановления.
  • Встроенное автообновление клиента: тонкий клиентский host, заменяемая runtime, возобновляемая передача файлов и серверный backend обновления.

Скрипты

  • Игровые скрипты AngelScript и Managed C# поверх независимой от backend скриптовой системы; Native scripting остаётся зарезервированным placeholder.
  • Нативный API экспортируется в скрипты генератором кода из аннотаций ///@: методы, свойства, события, remote call и enum автоматически остаются согласованными с исходниками C++.
  • Nullability контролируется на границе скриптов и нативного кода: скриптовый T? соответствует нативным контрактам ptr<T>/nptr<T>, которые проверяются анализаторами и runtime assert.
  • Отладка скриптов рядом с нативной отладкой.

Отрисовка и представление

  • Backend отрисовки: OpenGL, Direct3D, Vulkan и SDL_GPU, а также headless/null режимы для серверов и CI.
  • Эффекты пишутся один раз на GLSL, компилируются через glslang в SPIR-V и переводятся для каждого backend с помощью SPIRV-Cross.
  • Изометрические миры на основе спрайтов, 3D-модели персонажей FBX, частицы, видео и звук в современных Ogg/Vorbis и классических форматах Fallout.
  • Оконный, безрамочный полноэкранный и виртуальный многооконный режимы клиента с общей моделью разрешения и letterbox; инструменты разработчика на ImGui.

Мир и карты

  • Геометрия с шестиугольной и квадратной сеткой и общими функциями расстояния, направления и окрестности.
  • Поиск пути, трассировка линий, контексты движения и модель блокировки, рассчитанные на авторитетный многопользовательский сервер.

Конвейер контента и инструменты

  • Конвейер запекания превращает авторские прототипы, карты, диалоги, локализованные тексты, эффекты, изображения, модели и скрипты в версионированные пакеты runtime-ресурсов.
  • Импорт классических 2D-форматов Fallout FRM, Arcanum ART и других устаревших форматов рядом с PNG/TGA.
  • Интерактивные инструменты на самом движке: Mapper с окнами карт и контента и редактированием SPARK, а также отдельные viewer анимаций и запечённых частиц.

Инженерное качество

  • Unit-тесты Catch2 со сгенерированными целями отдельных suite, запусками sanitizer и покрытием кода.
  • Clang Thread Safety Analysis применяется как -Werror на каждом Clang toolchain; строгие словари smart pointer и nullability проверяются во всей кодовой базе.
  • Постоянные stack trace, детерминированные правила exception safety и модель terminate-on-OOM вместо частично изменённого состояния.
  • Интеграция Tracy profiler для capture клиента и сервера.

Архитектура в одном взгляде

Your game repository                      FOnline engine (this repo, embedded as Engine/)
────────────────────                      ────────────────────────────────────────────────
content: protos, maps,            ┌──►    Applications — client/server/tool entry points
dialogs, texts, GUI               │       Client & Server runtimes — views vs. authority
AngelScript / C# game logic embeds │      Common model — entities, properties, protos,
.fomain configuration      ───────┤                      maps, networking, config
native extensions                 │       Frontend — windows, input, audio, renderers
CMake presets, CI,                │       Scripting — AngelScript + Managed C# bridges + generated API
release policy                    └──►    Tools & BuildTools — bakers, mapper, editor,
                                                     CMake stages, codegen, packaging

Движок владеет переиспользуемой технологией, а игра — продуктом. Игровой репозиторий добавляет движок как подмодуль Engine/, направляет его стадийный конвейер CMake на собственную конфигурацию и получает именованные проектом цели сборки для каждого приложения. Полная карта слоёв находится в Архитектура движка, а контракт встраивания — в Встраивание FOnline в игровой проект:

GameProject/
├── Engine/                 # this repository as a git submodule
├── CMakeLists.txt          # project entry point that includes engine build logic
├── CMakePresets.json       # project presets and platform variants
├── GameName.fomain         # master project configuration
├── Scripts/                # game AngelScript or Managed C# modules
├── SourceExt/              # optional project-native C++ extensions
├── Critters/ Items/ Maps/  # game content and prototypes
└── Dialogs/ Texts/         # dialogs and localization

Начало работы

FOnline имеет профили сборки для Windows, Linux, macOS, Android, iOS и WebAssembly, но поддержка ограничена доказательствами. Сверяйтесь с матрицей поддержки: cross-build или headless smoke не квалифицирует renderer, устройство, пакет, сервис или маршрут магазина.

Структура репозитория

  • Source/ — исходники движка: точки входа Applications/, runtime клиента и сервера, общая модель Common/, платформенный и render-слой Frontend/, bridge скриптов, baker и редакторы Tools/, низкоуровневое ядро Essentials/, unit-тесты Tests/.
  • BuildTools/ — стадийный конвейер CMake, генерация кода, платформенные toolchain, подготовка workspace и пакетов.
  • Resources/ — принадлежащие движку runtime и build resources.
  • ThirdParty/ — поставляемые зависимости SDL, AngelScript, Asio, ImGui, glslang, SPIRV-Cross, Tracy и другие; процесс сопровождения описан в разделе Сопровождение ThirdParty.
  • Docs/ — сопровождаемая документация движка.

Документация

Сопровождаемый индекс — Docs/ru/index.md. Подробные руководства по темам:

Тема Документы
Архитектура и навигация Архитектура · Дерево исходного кода · Приложения · Essentials
Модель среды выполнения Модель сущностей · Карты и движение · Сеть · Сохранение данных
Клиент и сервер Клиентская среда выполнения · Серверная среда выполнения · Frontend и рендеринг · Client Updater
Скрипты Scripting · Managed C# · LifecycleAndConcurrency · AngelScriptStyle · RemoteCalls · ScriptMethodsMap · Nullability · GeneratedApiAndMetadata · Управление изменениями контрактов
Сборка и конвейер контента BuildWorkflow · ProjectConfiguration · GeneratedContentWorkflow · EngineUpgradeGuide · SupportMatrix · BuildToolsPipeline · BakingPipeline · ConfigurationAndDataSources
Инструменты Tools · Инструменты Mapper · Интерактивное руководство по Mapper · Просмотр анимации и частиц
Качество и соглашения Тестирование · Профилирование · ExceptionSafety · SmartPointers · ThreadSafetyAnalysis
Отладка платформ Debugging · Web · Android

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

Проект и сообщество

Введите запрос.