Back to Devlog
    v0.9.2
    NetcodeFebruary 18, 2026Release notes

    Reliable On One Lane, Unreliable On The Other

    WebTransport split into unidirectional streams and datagrams, snapshot rate decoupled from tick rate, and an NTP-style clock sync with outlier rejection.

    Two Kinds Of Traffic

    text
    Reliable    unidirectional QUIC streams   auth, welcome, game events
    Unreliable  QUIC datagrams                input commands, snapshots

    readIncomingStreams() reassembles chunked messages. The client sends its last 3 commands per packet; the server rejects seq <= lastInputSeq.

    Snapshots Got Their Own Rate

    --snapshotrate and GameServerConfig.snapshotRate decouple snapshots from ticks — 30Hz snapshots against a 125Hz sim. A SnapshotBuffer with auto-adjusting interpolation delay derived from arrival jitter, linear interpolation, and velocity-based extrapolation on packet loss.

    Clock Sync

    An NTP-like offset estimate via Ping/Pong — message types 0x09 and 0x0A with float64 timestamps — burst sampling 5 pings on connect, outlier rejection, and resync every 30 seconds.

    The Detail Worth Keeping

    text
    V2NetworkClient.visualOffset absorbs reconciliation corrections and decays
    them over ~83ms instead of teleporting the camera

    Eighty-three milliseconds is what interpolation delay plus a little slack buys you. It is the difference between a correction the player never notices and a rubber band.

    Also: rotation sync via flag 0x08, server-side grenade bounce/timeout/gravity, the shockwave rendered as a solid disc, a cl_netgraph cvar, and engine.json's title moving to game.json.

    Known Issues: LightGrid dimension mismatch warnings on some FBSP maps.