Hacker News new | past | comments | ask | show | jobs | submit login
QuakeWorld by John Carmack (1996) (fabiensanglard.net)
154 points by qwertyuiop924 on June 19, 2016 | hide | past | web | favorite | 68 comments

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

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.

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.

It's even more embarassing that Xonotic, which runs off of DP7, a sort of mash-up of NetQuake and QuakeWorld can stomp a lot of newer games on 100+ pings.

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

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.

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...

I think two games came close to offering the speed & fluidity that QW offers.

One is CPMA (http://playmorepromode.org/) which is basically Q3 with QW physics. It's based on Quake 3, which I was never a fan of, and really fast & fun!

The other one is Warsow (https://www.warsow.gg/). I enjoyed playing this game a lot, but I think a lot of us got bored at version 0.4 or 0.5 when it seemed to become more "beginner friendly" and less... fast. (If there's any Warsow players in here you might remember eml from bolted.nu :)

I still watch QW games occasionally, especially duels. The longevity of the game is insane. Seems to me that the FPS duel genre is dying off though. (Not that I follow anything closely anymore.)

Hey, what about reflex? It's built as a continuation of CPMA.

Oh you're right! I forgot about Reflex. Do you play?

Don't have the cash to buy it.

Thanks for sharing that link... I'm excited to LAN this very soon!

What is the standard QW setup these days? What client port are they running?

Ahh how much I'd love to play QW on LAN again! Hope you have a blast.

The easiest method would be to install nQuake: http://www.nquake.com. You'll need to find pak1.pak from a full Quake install to have all the original maps — I believe it's available on Steam, otherwise Google... ;)

ezQuake is the most popular client — the most recent release is available at https://github.com/ezQuake/ezquake-source/releases/tag/v3.0

For info on setting up modern dedicated servers (with KTX for example, which provides 1on1, team deathmatch, readying up, automatic demo recording etc.), this is helpful: http://wiki.quakeworld.nu/How_to_server

Nquake is a pretty great client package, but binding switch weapon doesn't work, you have to bind each weapon to a separate key, which is a better config anyway. Also, you have to press the "reload settings" button EVERY SINGLE TIME you start nquake to get your custom settings working.

... However, they don't document a lot of server stuff, and the nquake server package is only okay for internet servers. If you're running a lan server, you're gonna need to install the mvdsv server. Find it at https://github.com/deurk/mvdsv. you may want ktx, as mentioned above, which is at https://github.com/deurk/ktx. Both must be compiled as 32-bit, or they refuse to run. Fortunately, the Makefiles document how to force 32-bit, and it's fairly simple. After that, put the compiled ktx folder in the same folder as your id1 folder (but not inside it!), and do the same for the mvdsv binary. You can then launch mvdsv with the -game ktx argument, and any other args you want. And it won't work. You still need the original qwprogs from id in order to run the thing. Luckily, I tracked them down so you don't have to. You can get them at https://www.bluesnews.com/archives/aug98-4.html. Download the server zip, put the qw folder into the same directory as the rest of this junk, and now your server will FINALLY work.

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.

The book Masters of Doom is a good read if you're interested in the backstory here.

This was very cool to read after having read this book, but never actually read the .plan files before. Kind of an "aha" moment.

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'

That's correct. One could think of it as a blog post.

I remember typing "finger johnc@idsoftware.com" every couple of days.

I actually tried this. It doesn't work. id still seem to be running fingerd though...

See if it'll return anything if you ask for all online users? https://tools.ietf.org/html/rfc1288#section-2.5.1

or just reading his .plan on shugashack.

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

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

It takes a special state of mind to run around telling stories about being hired by US military while 8 years old to hack on nuclear launch computers (script to War Games), which is what Brenda Romero repeats in interviews about her husband.

And what's telling is that Carmack follows it up with a long, grandiose statement about his future project; making him appear somewhat dishonest.

He specifically makes no promises. QuakeWorld was released, more or less as described just five months later in December 1996.

Well, the master server idea kinda died (partly for technical reasons, i.e. authentication was hard, and the server kept dropping because of unreliable networks, and partly because people stopped wanting to play, afraid every game would drop their score) , so it wound up just being a better Quake network client. But that was still pretty revolutionary.

The master (meta) server sort of happened, it was just GameSpy. Global scoring and stat keeping didn't but then there was NetGames USA a bit later although it always seemed a bit pointless to me for FPS games.

Yep, I was a GameSpy beta tester. There was a partnership of sorts that ended up forming sometime in 1996. We ended up taking part in a couple of QuakeWorld beta tests later that year. I remember how the networking code was remarkably better, even on a dialup connection with 200-300ms pings.

Eh. I think it's more interesting that this predicted and explained an intent to implement pretty much everything that modern gaming services like Steam provide. Save voice chat and achievements, obviously.

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.

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

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.

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.

Also, some people enjoy challenges, not easy wins. I was an average Quake player but enjoyed playing high ranking players so I could learn, even though the final score was something like 20:1. Off-topic, but the main reason I gave up on computer games is that most mainstream titles today are easy to the level of stupidity and for this reason get boring in few hours max.

Hey, have you tried Xonotic? It's built on a heavily modified quake 1 engine, and plays like a cross between quake and ut. And the crylink is the coolest weapon ever. And yes, this IS that fork of Nexuiz, but it's changed so as to be unrecognizable. http://www.xonotic.org, and read the newbie intro. It helps.

No, I don't play FPS anymore. The only game I turn on from time to time is Heroes of Might and Magic III.

Ah, well. How is Might and Magic, by the way? I haven't tried it.

Wow, talk about a throwback. I remember when the blog post when the Nexuiz project was shutting down.

Hopefully this interest means we may be seeing a new Sauerbraten fork at some point

You'll barely recognize the game. A lot's changed.

Many reasons (basically what the above comments state), but at a high level, people were just not prepared/expecting that, and the (nearby) player poll wasn't that big to allow that.

The world wasn't ready.

I personally think it was the right decision. I enjoyed going to the same server over and over again through a period of years and usually seeing the same people. I learned to recognize them. Some would steamroll over me, some I could dominate, some were a nice challenge. I could pick my battles.

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.

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.

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.

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!


What if you are already in youtube 3000 and you are just replaying your life right now?

Solipsism here we go.

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.

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...

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.

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.

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.

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.

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.

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.

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

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?

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

Yeah. That was quite popular with Descent players. Funnily enough, Descent actually did simulate rockets clientside. But it wasn't twitch.

Thinking about it, Descent seems like a very underappreciated game in general.

It seems to have done much of what the quake engine did, a couple of years before Quake was released.

It's a pretty freaking cool game. Of course, it took a magical computer from space to run at the time. But thanks to the power of source code releases, you can download d1x-rebirth and the shareware version, and experience it for yourself.

By the way, my reccomended controls are: wasd for forward, backward, left, and right, q and e for roll, and mouse for pitch and yaw, with pitch invert on, to invert the default inversion.

"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.

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.

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

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

I wish he still wrote these.

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

Registration is open for Startup School 2019. Classes start July 22nd.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact