
QuakeWorld by John Carmack (1996) - qwertyuiop924
http://fabiensanglard.net/quakeSource/johnc-log.aug.htm
======
sjm
QuakeWorld revolutionised online FPS. I believe — and yes I'm biased — that it
still has the best netcode of any online FPS game. My fondest memories in
front of a computer are of playing QW on a dialup modem, then eventually on
LAN, where in Perth we had a pretty big community. New games come and went,
but QW stuck around and for us die-hards no FPS has ever lived up to the
speed, mechanics and "flow" you can experience in QW. Many things may have
been a fluke, and Carmack even posted his dislike for the "bunnyhopping" bug
found in QW, which ended up improving the game 100x fold:

"Strafe jumping is an exploitable bug. Just because people have practiced hard
to allow themselves to take advantage of it does not justify it's existance.
When I tried fixing the code so that it just didn't work, I thought it changed
the normal running movement in an unfortunate way." \- Carmack

If you're curious to see some gameplay from 2016, there was an "all-star" 4on4
competition recently, on YouTube with commentary here:
[https://www.youtube.com/watch?v=oN6s1nh6nV0](https://www.youtube.com/watch?v=oN6s1nh6nV0)

It might look different to the Quake you remember — after id open-sourced it,
some really great community projects sprouted up improving both the clients
and servers, but the gameplay stays exactly the same.

~~~
obbybreeden
It's embarrassing that QuakeWorld on a 166 MHZ Pentium with a 200ms ping is
more playable than some modern FPS games on multi GHZ, multi-core, broadband
equipped machines.

I can't fathom the amount of suboptimal bullshit going on in today's netcode
to achieve that.

~~~
rangibaby
CS:GO is way better at higher pings (possible to play "competitive" at 100+
ping) than old CS (based on QW engine) was. 300ping was acceptable when I had
dialup, but only because I didn't know any better lol

~~~
sjm
CS was based on the QW engine, but had a lot of netcode changes attempting to
make it better for _very_ high pings, but came with some frustrating adverse
effects. These changes were the source of a lot of "registration" issues with
hitbox locations between server/clients.

~~~
rangibaby
AFAIK/remember complex hitboxes were a new feature in HL too. It would be cool
if Valve open-sourced HL so we could have a look. One can wish...

------
AdmiralAsshat
_aug 8:

Romero is now gone from id.

There will be no more grandiose statements about our future projects.

I can tell you what I am thinking, and what I am trying to acomplish, but all
I promise is my best effort.

John Carmack_

I think this brief, internal message to staff following Romero's departure is
more interesting than the rest of this sheet.

~~~
pvg
It's from his public .plan file, I think, not an internal message to staff but
the public announcement. Carmack just didn't do 'our incredible journey'

~~~
Bromskloss
Could people outside their internal computer system read his .plan file?

~~~
sveiss
Yes, they ran a public finger server (which was then scraped and put on the
web by third-parties).

------
whatever_dude
One interesting aspect is that they wanted servers to be ranked, and users to
be logged. That way you'd only be playing multiplayer matches against people
of your own skill level...

Once QW was out and this was tried in practice, it was promptly abandoned. It
just didn't work well for many reasons.

And yet, that kind of feature is pretty much mandatory in mainstream FPSs
today. A game like Overwatch doesn't even have a real server browser (yet),
it's only auto matching.

Another instance where John Carmack was ahead of his time.

~~~
83457
Do you know why it was abandoned? Just player density being too low for it to
be useful?

~~~
Multiplayer
Players were very upset that everything they did was ranked and they couldn't
just play for fun without it being rated. It was a jarring change at the time.
There was at least 1 unofficial effort as well that met with a similar fate.

~~~
DiabloD3
As someone that played Quakeworld significantly for 8 years (a lot of people,
me included, ignored Quake3 until popular mods like CPMA fixed it), I couldn't
have imagined doing it with ranked matches, especially with how bad games like
TF2 seems to have implemented that years later.

------
tgb
An interesting convergence in history during that year. Blizzard's Battle.net
was released that year in Diablo, GameSpy was formed, and QuakeWorld started.
All are forms of "master server gives list of running game servers", which is
pretty central to making it easy to play games on random strangers' servers.

Edit: Never mind, apparently that aspect of QuakeWorld was a bundled version
of QuakeSpy which evolved into GameSpy.

------
mentos
Imagine in the year 3000 youtube is an experience simulator where you can plug
in and relive moments from other peoples lives. First love, a kiss in the rain
and being the grandfather of the first person shooter haha.

If I could I would choose to come back as John in my next life. What a great
mind on such an exciting adventure.

~~~
qwertyuiop924
John Carmack is actually a wizard. Like, really. It may sound like I am being
an annoying fanboy, because I am, but my opinion of him is entirely
justifiable given what he's done. His code is pretty clear, apparently, as
well.

~~~
CuriouslyC
John is a great example of what is possible if you work incredibly hard
applying yourself with passion and purpose. Let him be motivation to live
better!

~~~
qwertyuiop924
Yeah.

------
powercf
I played Quake at the time on dial-up with an approx 250ms - 350ms ping. I
believe the majority of players preferred quakeworld, but I always felt it was
a regression on vanilla Quake net play. Vanilla quake was slow, but the world
felt "real". Your position, enemies, rockets, doors etc. were where they were,
and you could react based on that. Quakeworld added prediction, and more
client side processing. As a result, you could no longer depend on things
being where they were - the enemy you just saw run around that corner did not
run around that corner, and instead fired a rocket in your face. You are dead
but your client hasn't got that packet yet.

~~~
qwertyuiop924
Eh. I wasn't around, so I wouldn't know. Although nowadays, you can still kind
of see this problem, as your character abruptly turns to where you were
looking a second ago.

Also, AFAIK, QW doesn't simulate enemies or rockets clientside, so not seeing
an enemy fire a rocket and having it kill you would happen the same way in
NetQuake (quake's original network protocol). Of course, I haven't seen the
code...

~~~
powercf
From the .plan it appears that the qw client didn't predict entities aside
from the player. I don't understand the fundamental difference between
netquake and quakeworld so I can't explain why, but quakeworld always felt
somewhat "unreal" when playing with a high ping, whereas netquake didn't (it
just felt slow).

I would imagine this isn't very relevant these days, as nobody plays with a
300ms ping (+ packet loss) any more.

~~~
whatever_dude
NetQuake had no prediction, you'd only see what your client got from the
server. It felt weird, but it was 100% correct, even if a bit delayed.

QuakeWorld had prediction, so it'd render everything to the best of its
abilities, and then correct as needed. You didn't just get the position of a
rocket, for example; you got its velocity vector too. And everything was UDP
based, so missed packets could easily be ignored and the clients would fill in
the blanks. For all its weirdness, it was a beautiful thing back then.

I haven't taken a deep look into modern game protocols, but I believe games
today go a bit further. They don't just get position and velocity vector from
the client, they _spawn and control read-only entities on the client side_.
The client runs a full simulation. The result is that you get a seemingly much
smoother experience, with no interruptions or corrections. But the downside is
that you might be seeing things that are completely incorrect. You'll see
yourself killing someone and their model playing a death animation, but then
one second later you're dead once the client gets the truth from the server.

Personally, I prefer the way QuakeWorld did things. It at least allowed you to
compensate for the lag - leading rockets, etc. Playing QuakeWorld with a
~200ms lag was mostly fine for me. But if I play a game with 50ms lag, I'll be
getting my shots all wrong and not even realizing it.

------
tekni5
Something about reading about doom or quake development, that gives off so
much nostalgia.

I hop back on QuakeWorld servers every few years, but the gameplay is just too
crazy from what I remember, the people left playing it are simply too good.

~~~
qwertyuiop924
Yeah, you probably left before the art of the bhop became commonplace. Even if
you didn't, you'll probably get schooled in 1on1. FFA is a bit more relaxed,
if you want to have a bit of fun. Oh, and get nquake. It helps a lot.

------
dom96
What a nice coincidence. I was briefly researching client-side prediction
today and QuakeWorld was mentioned. I didn't get a chance to look into it more
and here I am now 4 hours later on HN reading about it.

~~~
qwertyuiop924
Yeah. QuakeWorld was one of the first games, at least the first popular one,
to do client side prediction (which you can call "optimistic updating" if you
want to up your buzzword score). The thing is, as Carmack mentions, it's a
rather inelegant thing, which is probably why more games didn't implement it
earlier. Well, that and the lack of common internet access.

~~~
digi_owl
Yeah i think it was a bit of a chicken and egg thing.

TCP/IP for LAN use was fairly new at the time, iirc. Most games with a network
multiplayer component only supported IPX/SPX. I seem to recall that there was
even a matchmaking service that tunneled IPX over TCP (and thus the net) that
did quite well.

Ah, fund it:
[https://en.wikipedia.org/wiki/Kali_%28software%29](https://en.wikipedia.org/wiki/Kali_%28software%29)

~~~
xchaotic
Can anyone point me to why they chose TCP over UDP. I mean if a packet is
resent several seconds later, it's of no use so why waste bandwidth on TCP
overhead and unnecessary ACKs?

~~~
digi_owl
Heh, that was just being a bit fast. I dunno if Kali used TCP or UDP for the
tunneling.

------
ss248
"There are a few other things that can be done to shave a bit more off, like
short circuiting some late braeking information (like view angles) directly
into the refresh stage, bypassing the simulation stage."

Fun to see that he used this idea 18 years later at Oculus. It's called
Asynchronous Timewarp now.

------
croon
This is eery.

I haven't played a QW game in maybe 10 or even 15 years, and haven't really
encountered a reference to it recently either (that I remember), but I
actually had a dream last night about QW. Things changed was that every player
model was replaced with what I can only describe as a starcraft siege tank,
but the physics/rockets/gameplay was still pure QW (including jumping). The
map was DM6.

Back on topic: Fascinating read. This must have been back in -96 I assume?
Remarkable foresight and predictions, even if it reads that he's unsure of
some of them.

~~~
qwertyuiop924
Yeah, it's 96. And you know that QW is STILL GOING? Quakecon's got a QW
tournament this year, and the game is still being played all over the world.
Jump in. [http://www.nquake.com](http://www.nquake.com)

------
georgkw86
Brilliant programmer like Steve Wozniak who severed ties with his Steve Jobs
ie Romero

------
shrewduser
I wish he still wrote these.

~~~
9erdelta
Not quite the same, but following him on Twitter (if you aren't already) is
pretty cool.

