by

The Origin Of Client-Side Prediction In Games

A while ago I was looking at the client-side prediction page on Wikipedia and noticed that it said Duke Nukem 3D was the first game to do it. I thought that was pretty interesting because every other source I’d seen said QuakeWorld was first around a year later (the original release of Quake didn’t do prediction). John Carmack talked about the implementation in his Aug 16 1996 .plan:

“I am now allowing the client to guess at the results of the users movement until the authoritative response from the server comes through. This is a biiiig architectural change. The client now needs to know about solidity of objects, friction, gravity, etc. I am sad to see the elegent client-as-terminal setup go away, but I am practical above idealistic.


The server is still the final word, so the client is allways repredicting it’s movement based off of the last known good message from the server.”

John Carmack, 1996-08-16

On the contrary there wasn’t any information around proving its use in Duke Nukem 3D, except that the Wikipedia page linked to a recent interview with Ken Silverman – the creator of the Build engine that Duke 3D runs on – in Retro Gamer magazine from 2018. In it he clearly stated that Build engine did it first:

“People may point out that Quake’s networking code was better due to its drop-in networking support, [but] it did not support client side prediction in the beginning,” he explains. “That’s something I had come up with first and implemented in the January 1996 release of Duke 3D shareware.”

Ken Silverman, 2018-06-14

I thought that was pretty interesting and also pretty unfair for Ken that everyone’s got the wrong idea that it’s QuakeWorld. I later commented on it in a related discussion on Hacker News, also mentioning the fact that the source code was released in the early 2000s so it should now be possible to just go and find the prediction code as 100% confirmation.

Sure enough, someone replied that they’d found it, specifically in game.c with the methods domovethings(), fakedomovethings(), and fakedomovethingscorrect().

To be a good citizen I went back over to the Wikipedia page and added a link to the source code to help solidify the claim. But while I was there I went back and read the interview again, and noticed a part I’d skimmed the first time:

“It kind of pisses me off that the Wikipedia page article on ‘client side prediction’ gives credit to Quakeworld due to a lack of credible citations about Duke 3D”

Ken Silverman, 2018-06-14

I wondered if and when it had been changed from saying Duke 3D to QuakeWorld in the past (before eventually being changed back again sometime after the interview), so I went and had a look through the page history. It had been changed a few years ago. And the person who had removed it due to lack of any citations was me.

Sorry Ken.

Write a Comment

Comment