No description
  • C# 74.4%
  • C 20.9%
  • PowerShell 2.8%
  • C++ 1.5%
  • CMake 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-07-14 19:20:15 +01:00
.voidbot Move Ymir simulation to SoA CultCache state 2026-06-17 03:52:13 +01:00
docs Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
extern Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
native/Ymir.Box3D Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
src Use canonical Eve surface publication 2026-07-13 19:27:11 +01:00
tests Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
tools Add Aetheria Ymir cutover verifier 2026-07-06 22:13:10 +01:00
.gitignore Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
.gitmodules Add pinned Box3D parity oracle 2026-07-14 19:20:15 +01:00
AGENTS.md Initial Ymir physics substrate 2026-06-17 02:27:59 +01:00
README.md Move Ymir simulation to SoA CultCache state 2026-06-17 03:52:13 +01:00
Ymir.slnx Initial Ymir physics substrate 2026-06-17 02:27:59 +01:00

Ymir

Ymir is the GameCult physics/world substrate engine for Aetheria and future world-bearing projects.

Unity made the first playable body move. It does not get to keep physics truth. Ymir owns simulation state: bodies, fields, projectiles, collision, contact events, integration, and deterministic queries. Renderers and engines lower Ymir state into visible worlds; they do not become the world.

Authority

  • Ymir owns physics simulation truth, step semantics, contact generation, collision queries, and physics debug/operator state.
  • CultMath owns the numeric substrate Ymir uses for vector math and shared shader-shaped primitives.
  • Aetheria owns gameplay policy: damage, faction meaning, weapon selection, ship fitting, and player-visible consequence.
  • Unity owns rendering, authoring affordances, GameObject presentation, VFX, audio, and temporary adapter code during cutover.
  • Brokkr may expose Unity editor state to the Verse, but it does not own Ymir simulation truth.
  • Odin discovers Ymir as a Verse provider; Odin does not own Ymir state.
  • CultCache is the target durable state substrate. Current JSON surfaces are compatibility witnesses for Aetheria cutover and HTTP inspection.

First Body

Ymir.Core targets net8.0 to stay compatible with CultMath and likely Aetheria integration paths. The daemon and tests target net10.0 because this machine currently has the .NET 10 runtime installed.

The MVP is deliberately small:

  • circle bodies in a 2D physics plane
  • radial fields for Aetheria-style gravity wells
  • semi-implicit Euler integration
  • circle collision detection and simple impulse response
  • SoA world buffers as the simulation authority
  • CultCache MessagePack persistence for gamecult.ymir.world_state.v0, using the directory store to avoid rewriting cold records
  • CultMath BatchMath SIMD kernels for radial field acceleration and semi-implicit Euler integration
  • deterministic contact events
  • CLI smoke commands
  • local HTTP daemon with /simulate/step

This is not pretending to be a finished physics engine. It is the first clean owner, and therefore already better than collider callbacks wearing a crown.

Smoke

dotnet test
dotnet run --project src\ymir-daemon -- step-sample
dotnet run --project src\ymir-daemon -- provider
dotnet run --project src\ymir-daemon -- serve --port 8877

HTTP endpoints:

  • GET /health
  • GET /provider-advertisement
  • GET /operator-state
  • GET /eve/operator
  • POST /simulate/step

POST /simulate/step accepts the same shape emitted by step-sample.

Cutover Rule

Aetheria should first route projectile travel and hit discovery through Ymir while keeping Unity as renderer/presenter. The old Unity collider path becomes a visual witness and adapter path only. If manual collision callbacks can still decide gameplay damage after the cutover, the cutover is not done.