Arcane
The in-house C++23 engine behind Aphelyon.
- C++23
- 2D
- Windows-first
2 graphics backends
1 job scheduler, shared
0 steady-state allocations per step
20 curated libraries
Rendering. Batched and tonemapped.
NVRHI over Direct3D 12 and Vulkan, a sprite/quad batcher with HDR tonemap, and HLSL that hot-reloads to DXIL and SPIR-V.
Simulation. Astra underneath.
The engine owns the Astra registry and drives it with fixed-update and render schedulers; physics is first-party; one job system feeds it all.
Rebuild. Keep playing.
A versioned C plugin ABI plus registry snapshot/restore carries live simulation state across a DLL reload.
Audio, input, and the panels to see it all.
A miniaudio device, a JSON action map, and Dear ImGui debug and HUD panels through a first-party NVRHI backend.
Entities and plugins.
Components on an entity, and a game plugin registering its systems with the engine.
Create entities with hierarchical transforms and sprites
Astra::Entity orbiter = reg.CreateEntity();
Arcane::LocalTransform ot; ot.position = glm::vec2(640.0f, 360.0f);
reg.AddComponent<Arcane::LocalTransform>(orbiter, ot);
Arcane::SpriteRenderer os; os.size = glm::vec2(48.0f);
reg.AddComponent<Arcane::SpriteRenderer>(orbiter, os);
reg.SetParent(orbiter, root);A game plugin registers systems into the engine
GAME_API bool GamePlugin_Init(Arcane::EngineContext* ctx) {
Astra::SetTypeContext(ctx->typeContext);
auto& sch = ctx->engine->Schedulers();
sch.fixedUpdate.AddSystem<Arcane::TransformPropagationSystem>();
sch.render.AddSystem<Arcane::RenderSubmissionSystem>();
return true;
}Tech specs.
Part of Starworks.
See how it’s built.
The renderer, the schedulers, the plugin host and the physics: one C++23 codebase on GitHub.
- C++23
- 2D
- Windows-first