After the earlier delivery investigation, I looked at work that was happening before a packet could leave. An idle network worker was waking repeatedly. Ordinary matches were copying storage sized for many more possible identities. A retry could also create another unsent attempt while the earlier one was still waiting.
These problems needed changes to storage and scheduling as well as to the rules for retrying messages.
Changing the default transport
New game, Practice and dedicated-server launches now use PicoQUIC with CUBIC. PicoQUIC is the network transport implementation; CUBIC adjusts its sending behavior in response to congestion. Quiche with CUBIC remains available as an alternative.
The choice follows the retained Highlands comparisons, both direct and with artificial network impairment, and the star-heavy comparisons. It does not establish that one QUIC library is faster on every machine or connection. Both still carry SHADOWFRAG's own movement records, shot references, delivery receipts and projectile events.
The shared message format is wire protocol 37, so client and server builds must be compatible. Changing the default did not increase the player limit or loosen combat timing.
Growing storage without moving live references
Player and projectile storage now grows in stable pages of memory. Ordinary work can follow the state the match actually uses instead of traversing the full range of possible identities. Adding pages preserves existing numeric slots and references. Cleared storage is reset before reuse, and filling a vacant slot does not change the identities of projectiles still alive elsewhere.
Simulation, history, presentation and other readers all depend on that behavior. An early vector, or growable-array, candidate invalidated a reference another part of the code was still using. A deque, a different container arrangement, made a heavy projectile case slower. The retained design addresses those failures and has explicit checks for growth, clearing, copying and high-numbered slots.
Waiting until there is useful work
The network worker now waits for a socket to become ready, outgoing work to arrive or the next relevant deadline. Linux and Windows use their native waiting mechanisms. An idle worker no longer wakes unconditionally every 100 microseconds.
When work is available, fresh scene fragments, urgent input and results, durable state and cosmetic events get bounded turns. The scheduling has to let the parts of a scene finish arriving while still giving urgent work a turn. Making queues larger would not, by itself, solve that problem.
Giving each retry one owner
For a reliable record awaiting a delivery receipt, the application and native transport adapter can hold at most one unsent plaintext attempt: one unencrypted copy waiting to be passed to QUIC. A valid acknowledgement cancels that queued attempt. Once a packet has been handed to QUIC, it cannot be recalled, so this rule does not promise that only one copy ever appears on the network.
Projectile-event retries use validated timing replies to estimate when to try again, within fixed bounds. Action and hit-result recovery retains its shorter interval. Movement deadlines, limits on historical hit checks and damage validation remain enforced.
The latest capacity work also repaired a stale input-epoch grant: permission tied to an older generation of input could arrive after newer authoritative state. It could then disconnect a client that had otherwise recovered. Correcting that ordering problem did not require relaxing the server's combat checks.
Reading the comparison with its limits
In the retained 64-client foundation comparisons, the program generating synthetic clients used roughly 58–63% less processor time. The workload with packet loss retried about 88% fewer reliable application records. Its total server send rate changed from about 7.02 to 6.58 MB/s. The retry count and the total bytes measure different things; an 88% reduction in one did not produce an 88% reduction in the other.
The lossy comparison used an earlier completed baseline with the same plan because a newer baseline failed. That failure remains in the report. Contention inside the client generator also contributed to the timing changes, so the result is not a forecast for 64 independent players' computers.
Subsequent testing adds more evidence about dense fights, Highlands and impaired connections. Read the current capacity results and use the netcode page to distinguish this implementation from the earlier byte-level studies.

