On this page

Overwatch Gameplay Architecture and Netcode

What the talk says

What the kit took

All in examples/csharp/src/Example.Core/Net/Netcode.cs, tested in NetcodeTests.cs; every option is off by default, so earlier behaviour and tests are unchanged.

Measured

Seeded, no wall clock. 250 ± 25 ms, 2% loss, 4 players holding keys for a third of a second; for 10 s, 4 packets in a row lost every half second, then calm. "Storm" is its last 5 s; "calm" is 8 s from 5 s after it.

Server and client Repeated (in the calm) Corrections Inputs queued: storm / calm Players frozen
Waits, fixed rate (before) 0 0 0.6 / 0.4 930 ticks
Repeats, fixed rate 3,441 (887) 291 0.1 / 0.2 0
Repeats, dilation 1% 345 (3) 37 3.1 / 1.1 0
Repeats, dilation 2% 246 (16) 34 3.0 / 1.1 0
Repeats, dilation 5% 211 (43) 33 3.2 / 2.1 0
Repeats, dilation 10% 250 (50) 35 3.3 / 2.8 0
Repeats, dilation 20% 395 (125) 56 4.5 / 4.0 0

At 5%, a slower decay (1 input a second) gave 159 repeats and 18 corrections but 2.8 inputs queued in the calm; a faster one (4) gave 268, 48 and 1.5: fewer mispredictions cost input delay. Each queued input is 16.7 ms.

Window: 10 packets in a row lost 4 times at 250 ms. Three copies lost 64 inputs; the capped window (32) lost none, carrying 18.5 inputs a packet on average and 30 at most. Rewind cap of 250 ms: a 500 ms client's shots were judged 553 to 643 ms back without it (all hits) and at 250 ms with it (0 of 16 hit); a 50 ms client (150 ms) is unaffected.

Not taken