Engine subsystem map
Subsystem boundaries, object ownership and the path from Entity to server.
Reckfell separates the game hierarchy, subsystem services and platform implementations. These are code boundaries inside the engine process, not network microservices. Start with Entity and Resource for gameplay; use a server directly when you need its lower-level contract and can manage the required handles.
Map of responsibilities
| Area | Responsibility | Current source location |
|---|---|---|
| Core | Object identity, ClassDB registration, Variant, reference counting, resource loading, containers and file access | Source/core/ |
| Game hierarchy | Entity parent/child relationships, EntityTree processing, 2D/3D objects and UI | Source/scene/ |
| Servers | Rendering, audio, physics and navigation interfaces and implementations | Source/servers/ |
| Drivers | Graphics/audio backend code and other low-level integrations | Source/drivers/ |
| Platform | Operating-system integration, entry points and platform-specific implementations | Source/platform/ |
| Startup and frame coordination | Initialization, MainLoop selection, physics steps, frame processing, rendering synchronization and shutdown | Source/main/main.cpp |
| Editor | Authoring tools, inspectors, import UI and editor plugins | Source/editor/ |
| Modules | Features registered at defined initialization levels, including C# support | Source/modules/ |
This is a responsibility map, not a strict one-way dependency graph. Core supports multiple layers; server implementations can also live in modules. Enabled features and backend availability depend on the build.
Entity, Resource and RID
Entity inherits the native Object base exposed to C# as ReckfellObject. It participates in a parent/child hierarchy. EntityTree inherits MainLoop and coordinates the active hierarchy. The tree parent of an Entity is separate from its class inheritance parent. Renaming the hierarchy objects Entity does not make this an ECS storage model.
Resource inherits RefCounted. A texture or material is reusable data with its own lifetime, rather than a required Entity in the tree. Multiple objects can reference the same resource; changing a shared material can affect all its consumers. See objects and lifetime and class inheritance.
RID is a handle used by server APIs. It is not an Entity, a C# object reference or a universal ownership token. Do not call FreeRid on a handle borrowed from a Resource or Entity; the owning wrapper may still use it. A handle created directly through a server needs the cleanup prescribed by that API.
Follow one rendered object
- A VisualInstance3D creates a rendering instance through RenderingServer in its native constructor.
- It forwards visibility and transform changes to that server; entering a World3D associates the instance with a rendering scenario.
- Its destructor releases the rendering instance. This is why manually freeing its borrowed instance RID is unsafe.
- The main frame loop synchronizes rendering and requests a draw when the active output and loop conditions allow it.
The wrapper owns hierarchy integration; the rendering server owns its rendering representation. Using server calls directly does not automatically create a corresponding Entity, inspector entry or game script lifecycle. See rendering internals for the pipeline below that boundary.
Startup and frame order
Main initializes core, servers, game types and applicable modules, then selects a MainLoop; ordinary projects use EntityTree. A frame can contain multiple fixed physics steps and a variable frame update. Main also flushes deferred work at defined points and coordinates physics, navigation, rendering and audio. Do not infer a safe thread or callback order from directory names: follow the relevant notification, server contract and synchronization code.
This overview is checked against the current source. Existing Windows runtime checks confirm native ancestry, the distinction between class/tree parents, deferred calls and queued deletion. They do not validate every backend, platform initialization path, threading mode or C++ module build. Source paths identify local implementation locations, not hosted source downloads.