Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Multiplayer

Yahasi edited this page Jul 6, 2026 · 2 revisions

🌐 English · Русский

← Home · Controls →

Multiplayer

Nova has a client/server networking layer with a shared scene and in-app chat. It runs two transports on the same numeric port: reliable TCP for everything structural, and an unreliable UDP fast-path for the two high-frequency streams (player transforms and physics). Multiple clients can join one server, and each player sees the others as a small moving avatar.

Setup

Choose your session in the setup wizard:

  1. Session modeonline.
  2. Network role → host a Server or join as a Client.
  3. World → the server Creates or Loads a world; a client just joins.
  4. Network → the server's listen port, or the server's IP + port on the client.

A client that joins a server downloads the host's world automatically.

The server is the world authority

  • The server sends the full world to joining clients — large meshes are split into chunks for reliable transfer — then streams live edit deltas, graphics-setting changes, and physics updates.
  • Clients can fly around and inspect, but only the authority mutates the shared world. A connected client can open the editor to select and inspect, but its changes never affect the shared world.

What syncs

  • World & edits (TCP) — the full world on join, then per-edit deltas (spawn / move / delete / property changes) and F2/F3/F4/F6 graphics toggles.
  • Physics (UDP fast-path) — each body the authority moved streams its full state (position, orientation, and velocity) at ~20 Hz; clients dead-reckon and smoothly ease toward it, so objects fall, roll and tumble in sync (not frozen between updates). The player's own gravity runs locally for every peer. See Physics.
  • Textures (TCP) — a textured object's PNG bytes stream to peers so a client without the file still sees it (both on world sync and on a live edit/spawn). See Textures.
  • Players (UDP fast-path) — each peer's position and facing (avatar) streams every frame; chat messages ride TCP.

Transport (reliable TCP + a UDP fast-path)

The networking runs two transports on the same numeric port:

  • Reliable TCP carries everything that must arrive intact and in order: the world sync on join, mesh and texture chunks, chat, world edits, spawns, graphics / world settings, and the join handshake.
  • Unreliable UDP carries the two high-frequency streams where the freshest value matters more than every value: player transforms (every frame) and the ~20 Hz physics-sync batches.

The UDP path is best-effort, with safety nets so nothing critical is ever lost:

  • A per-(sender, packet-type) latest-wins sequence filter (monotonic non-decreasing) drops a reordered older datagram, so an out-of-date frame never overwrites a newer one.
  • The server learns each client's UDP endpoint from its incoming datagrams; until it has (about one frame after join) that peer's UDP sends automatically fall back to TCP, so the join is never dropped. UDP also falls back to TCP entirely if it can't bind.
  • A large physics batch is split into MTU-safe chunks (each datagram < ~1200 B, so IP never fragments it). All chunks of one flush share one sequence number, so they're immune to intra-flush reordering; a lost chunk or whole flush is absorbed by the per-object apply + dead-reckoning — the next batch corrects it.

Chat

Press T to open chat (online only). It's a contained, word-wrapped, scrollable box that never bleeds over the HUD: Enter sends, Esc cancels, PgUp/PgDn or ↑/↓ scroll the history. See Controls.

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.