Gessa Docs
Recipes

Recipe

Multiplayer replication rooms and networked motion

Two or more players share a world. Per-entity replication feel is set with NetworkProfileComponent; the room and matchmaking topology is set once at the game level with the multiplayer blueprint.
engine v1.0.234since component-field-contract ecs.component-field-contract.v1, network.v1, action-catalog.v1.0.232Copy for LLM

Use this for

making a game multiplayer; controlling how entities replicate and interpolate; hiding owner-private entities; setting the room and queue blueprint

Not for

single-player only games; save data (see saves-and-persistence); input prediction tuning (see input-mapping-actions-bindings)

Pairs with: Input mapping actions bindings keyboard mouse gamepad touch, Third-person follow camera and platformer jump movement, Saves persistence player progress and data stores

The recipe

  1. Per-entity replication: attach NetworkProfileComponent { "type":"NetworkProfileComponent", "interpolation":"responsive", "interestRadius": 60, "alwaysRelevant": false }. interpolation is:
    • responsive: hugs the newest server sample, no gap-bridging (projectiles, snappy pickups).
    • smooth: doubles the interpolation buffer for fluid slow movers (platforms, doors).
    • default: the tick-derived baseline.
  2. Visibility controls on the same component: ownerOnly: true withholds the entity from every player except its owner; hidden: true withholds it from everyone; alwaysRelevant: true and interestRadius shape whose snapshot it enters.
  3. Game topology: set the room and queue blueprint with project_set_multiplayer_blueprint (game.multiplayer_blueprint.set, AI name set_game_multiplayer_blueprint). The definition carries roomTemplates (each with key, joinPolicy, maxPlayers) and queues (each with key, mode, minParticipants, maxParticipants, roomTemplateKey).
  4. You do not have to configure anything to be multiplayer: an unconfigured game resolves to a default of one public room (maxPlayers 16) plus one open queue, so the runtime never lacks a blueprint.

Pitfalls

  • NetworkProfileComponent is presentation intent for replicated motion; it does not itself move the entity. It reads into the interpolation buffer (no second mover).
  • Netcode is client-authoritative single-writer over relays; the server does not re-simulate. Use server_authoritative input prediction (see input-mapping-actions-bindings) for verbs that must resist cheating.
  • ownerOnly withholds the WHOLE entity from non-owners, not just a field; a first-person viewmodel is a good ownerOnly candidate.
  • The blueprint mutation carries the full definition (settings-panel edits send the whole object); send a complete roomTemplates+queues shape, not a diff.

Verify

  • engine_get_component_schema on NetworkProfileComponent for the interpolation enum and the visibility flags.
  • project_get_graph_snapshot and the game record to confirm the blueprint set.
  • simulation_run (qa.run.start) for a multi-participant admission check.
Was this helpful?Report an issueContact support

On this page