s&box/field-guide
the symptom, in your words

"Owner-simulated networking"

✓ verified on engine 26.07lane: Writing gameplayposted updated
▸ SYMPTOM
  • Proxies simulate input and fight the owner (jitter, double-apply).
  • Host-authoritative meters get written on clients then snapped back every snapshot.
  • You NetworkSpawn a scene-wide clock/singleton and nothing makes sense.
▸ CAUSE

Two different recipes get mixed:

  1. Per-owner objects (player pawns) — owner simulates, [Sync] replicates to proxies.
  2. Shared host truth (day/night, run stats) — every peer builds the same GO locally; host mutates; [Sync(SyncFlags.FromHost)] replicates.

GameObject.NetworkMode defaults to Snapshot, not Never (per Sandbox.Engine.xml). The engine does not stop a non-host from writing a FromHost field locally — the next snapshot steamrolls it — so a manual host guard is still load-bearing.

▸ FIX

Lobby + pawn spawn (host)

snippet
if (!Networking.IsActive)
    Networking.CreateLobby(new LobbyConfig());

// on host, INetworkListener.OnActive(Connection):
var go = prefab.Clone();
go.NetworkSpawn(channel); // owner channel

Owner-simulated pawn

snippet
protected override void OnFixedUpdate()
{
    if (IsProxy) return; // proxies do not simulate

    // read input, integrate, write [Sync] fields
}

[Sync] public Vector3 NetPosition { get; set; }
[Sync(SyncFlags.FromHost)] public bool RoundActive { get; set; } // example host flag

[Rpc.Broadcast] for one-shot events. Host migration and interp come free with the stock path.

Networked props are runtime-only — never rely on them being saved into scene files.

Scene-wide singleton (shared truth)

  • Build identically on every peer from your bootstrap/world generator before any lobby dependency.
  • Tag authoritative fields [Sync(SyncFlags.FromHost)].
  • Gate mutations:
snippet
if (Networking.IsActive && !Networking.IsHost) return;

Do not reach for NetworkSpawn when there is no per-client owner — only one shared host-owned truth.

▸ WHY IT WORKS

IsProxy partitions simulation so only the owning connection integrates. [Sync] streams owner state to everyone else. FromHost is the parallel channel for global state; Snapshot mode already exists on scene objects, so spawning them again as owned network objects fights the default model.

Verified on engine 26.07 — seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?