JARVIGManual

Game framework

ADR: ADR-0048, ADR-0049, and ADR-0050 are accepted. Membership covers the components the world already has, including Camera. Many and unknown plugin components are specified and not built. GameApplication retains a level document and instantiates a RuntimeWorld. It does not play, and it does not own input, script, physics, audio, or networking.

The renderer draws a snapshot. A game is everything that decides what goes into the next world, and what survives when the level changes.

Engine
    Game application          persistent for the running game
        World                 one simulation
            Level             one authored document
                Actors        entities with a component stack
                    Components
        Systems               read components, write their own records
            extract
        RenderSceneSnapshot
            Renderer

The arrow stops at the snapshot. The renderer does not call back into the registry.

What already exists

PieceWhere it lives nowThis milestone
EntityUuid, EntityHandle, parentEntityRegistryUnchanged
TransformFrameGraphStack role Transform
Mesh rendererWorldObject (ObjectId, MeshId)Stack role, same ids
Directional, point, spot lightsWorldLight (LightId)Stack role, same id
Reflection probeWorldProbe (ProbeId)Stack role, same id
World Settingsenvironment recordStack role, no transform
Editor camerasSceneWorld front and side camerasNot actors. Not the runtime camera
CameraWorldCamera (CameraId) on the actor TransformVersion 2 only when a level contains one
Project and level filesjarvig.project, jarvig.levelVersion 1 stays version 1. A Player Start writes version 5. A parametric block writes version 6
Character assetjarvig.character version 1Rigid parts on SpatialFrame and Joint. ADR-0055, ADR-0059
Player definitionjarvig.player version 1Names one character asset. No controller, input, camera, or movement
Player StartComponent on an ordinary entitySpawn pose. The body is not this component. ADR-0059
Game applicationGameApplicationSurvives level replacement
Runtime worldInstantiated SceneWorldDiscarded on stop
ExtractionRenderSceneSnapshotStill the only renderer input

SceneWorld::component_stack is the membership query. entity_ownership remains the single-payload view duplicate and delete already use. The stack does not replace those records.

What is only named

These words are reserved so later work does not invent a second set. A character asset and a player definition now exist. ADR-0059. Movement, a controller, input, and a camera on that player do not. Camera actors and the runtime world are no longer in this list.

NameLifetimeNot
Game modeRules for one worldA renderer feature
Game stateShared match dataThe editor selection
Player controllerInput and network commands into the worldThe Win32 message pump
PawnA controllable actorA subclass of mesh
Camera controllerChooses the active game viewRenderView itself
HUDPlayer-facing UIThe editor dock
Save gameRuntime progressThe authored level
Actor assetA template plus overridesA level entity

A level is one document: Forest.jarviglevel, MainMenu.jarviglevel. The game application is what opens the next one.

Component order

The stack lists only what the entity owns, in this order:

  1. Transform
  2. Mesh Renderer
  3. Joint
  4. Directional Light
  5. Point Light
  6. Spot Light
  7. Reflection Probe
  8. Camera
  9. World Settings

Terrain and Player Start are further roles on that same stack. ADR-0058 and ADR-0059. Membership order is the order the entity owns.

Camera is a real component. It is multiplicity One, requires Transform, and stores no second pose. The inspector prints the owned names in stack order. A level names its runtime camera with world_settings.startup_camera or it has none. The key is omitted when absent. Nothing selects the first Camera found.

Boundaries that stay closed

  • Do not put EntityHandle, LightId, ProbeId, MeshId, ObjectId, JointId, FrameId, or a GPU handle in .jarviglevel.
  • Do not let the renderer iterate actors.
  • Do not save the game into the level, or the level into a save game.
  • Do not treat Saved/ as content, or a future Intermediate/ as content.
  • Do not add scheme: jarvig.asset until the asset database exists.
  • Sublevels and world partition are a later streaming boundary. One file is one level until then.
  • A dedicated server loads the same level and does not extract.

Editor

The outliner rows stay actors. The row suffix stays the authoring class from the one payload. The inspector adds a read-only Components section so the stack is visible without a second form.

Play, Simulate, and Stop are not in the shell yet. The execution copy already exists behind GameApplication. When the shell grows a Play command, it must load the authored document into that application and stop by dropping the runtime world. It must not toggle play on the editor world.