In August 1996 Carmack was reworking Quake for internet play. v1.01's netcode assumed sub-200 ms links and ran servers on a 20 fps tick loop, while most players were stuck on 300 ms+ modem connections; the old reliable-stream code was, in his words, a big mess - so he took it out and started over.

Redesign netcode around the worst link: serve each packet as it arrives and let each client predict its own movement until the server's authoritative reply.

He made the unreliable packet the basic primitive, switched the server from a game-style tick loop to a fileserver-style loop that moved only the sending player forward and replied in under 4 ms, added bandwidth estimation so clogged modem links drop update rate instead of buffering, and let the client simulate its own movement until the server corrected it. Around the new engine he sketched a master server with persistent accounts and a global frag ranking, funded by a roughly $10 name registration.

Server turnaround fell from over 50 ms to under 4 ms, and on 200 ms+ connections Carmack reported that player movement felt exactly like playing a single-player game. Reposted in 2019, the plan drew 395 points and 162 comments on Hacker News; the predict-locally, correct-from-the-server pattern it describes became the standard anatomy of online action games.

In August 1996 John Carmack copied the Quake codebase and began a project he called QuakeWorld: internet play as its own product, with separate client and server executables that would peacefully coexist with the registered game. His motivation was blunt - v1.01's netcode had been designed for connections under 200 ms, but at the time about 99% of the world reached the internet over slip or ppp modem links that delivered 300 ms or worse, often through overcrowded ISPs.

His first move was architectural: he scrapped the reliable-stream netcode, which he had retrofitted with an unreliable sideband until it became a mess, and rebuilt it with the unreliable datagram as the basic primitive. The server stopped being a 20 fps game loop and became a fileserver-style loop that handled each incoming packet on arrival - moving only that player forward in time and answering in under 4 ms instead of over 50 ms. Bandwidth estimation let a clogged dial-up link simply stop sending rather than let routers buffer latency into multi-second stalls.

The biggest change was client-side movement simulation: the client guessed the outcome of its own movement until the server's authoritative reply arrived, so even over a 200 ms+ link movement felt like a local single-player game. Around it Carmack sketched a master server, persistent accounts, a global frag ranking and a roughly $10 name registration, while noting honest limits: other players and projectiles still lagged, so you had to lead your shots. The predict-locally pattern he described became the template for hiding latency in online shooters.

Client-side prediction hid the round trip from the player's own movement, so 300 ms links felt instant instead of floaty.

A per-packet event loop cut server turnaround from ~50 ms to under 4 ms because it never waited for a whole world tick.

Bandwidth estimation gave modem links a graceful failure mode - fewer updates per second instead of buffer pile-ups and multi-second stalls.

Persistent accounts, a global ranking list and a ~$10 registration fee turned an internet feature into a revenue line and a reason to buy rather than pirate.

When the network is the bottleneck, redesign around the worst case: push simulation to the edge, answer each request as it arrives, and let slow links shed update rate instead of buffering latency.

The .plan said the QuakeWorld work would roll back into the single-player game on the road to Quake 2, while flagging open problems: time no longer advanced uniformly, and projectiles appeared to come from where the player was, not where the player is. Testing was expected to start around the end of August 1996. Archived in the john-carmack-plan-archive, the letter still drew 395 points and 162 comments when Hacker News reposted it in May 2019 - the client-prediction and event-driven-server ideas it spelled out remained the reference model for networked action games decades later.

FOLLOW THE EVIDENCE

The sources

  1. John Carmack .plan, 2 August 1996 (QuakeWorld latency and business model) john-carmack-plan-archive (ESWAT) · raw.githubusercontent.com ·
  2. John Carmack on QuakeWorld latency and business model (1996) - Hacker News discussion Hacker News · news.ycombinator.com ·