View on GitHub

FOnline Engine

Flexible cross-platform isometric game engine

Embedding FOnline in a Game Project

FOnline is designed to be embedded as a source submodule. The engine repository supplies reusable technology; the game repository supplies the concrete product.

Expected repository shape

A typical game repository looks like this:

GameProject/
├── Engine/                 # git submodule pointing to this repository
├── 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 modules
├── SourceExt/              # optional project-native C++ extensions
├── Critters/ Items/ Maps/  # game content and prototypes
├── Dialogs/ Texts/         # dialogs and localization
└── Docs/                   # game-specific documentation

Folder names vary by project, but the ownership rule should stay stable: reusable engine machinery lives under Engine/, while concrete game content and project policy live in the parent repository.

What belongs in the engine

Keep these in the engine repository:

What belongs in the game project

Keep these in the embedding project:

Build composition

The game repository should drive the build. In practice this means:

  1. Configure from the game repository root, not from inside Engine/, unless a specific engine-only workflow says otherwise.
  2. Use the game repository’s CMakePresets.json and tasks so generated paths, target names, and package metadata match the product.
  3. Let engine BuildTools provide reusable stages and helper functions.
  4. Keep generated files out of hand-authored docs unless the generation process is part of the topic.

Documentation composition

Use this routing:

Validation principle

Validate engine changes through a real embedding project whenever possible. A reusable engine change may compile in isolation but still break generated APIs, project packaging, scripts, or content baking. Choose the narrowest project target that exercises the changed layer.