Live data from Hacker News

How Quake.exe got its TCP/IP stack

fabiensanglard.net

141–150 of 158 posts

Re: How Quake.exe got its TCP/IP stack

#141
post #84

Earlier quoted context omitted.

And then you had Romero saying that Quake wasn't ambitious enough ...

That's the difference between an engine and game developer.

It's the difference between someone working in a world of engineering tradeoffs and a fantasist imagining their next übergame with everything awesome in it.

I looked into the development cycle behind Daikatana, partly because it had its 25th anniversary this year and so for some reason, YouTube was recommending me Daikatana content. And... there's a reason why Romero's first dev team all quit. Daikatana started life as a 400-page document full of everything Romero found awesome at the time. There were going to be time travel mechanics and a roleplaying party system like Chrono Trigger. It was going to have like a hundred awesome weapons that totally reinvented how to make things go boom. It was going to have the sweetest graphics imaginable. Etc. It was like something Imari Stevenson would have written as a teenager, which is somewhat surprising since Romero could now call himself a seasoned industry professional.

What's worse, "Design is Law" basically meant "what I say goes". It was his job to have the ideas, and it was his team's job to implement them. Romero wanted to be the "idea guy", and Daikatana was an "idea guy" game. I doubt he had the maturity at the time to understand what design is, in terms of solving a problem with the tools and constraints you have. He wanted Daikatana, and Quake before that, to have everything, and didn't know how to pare it down to the essentials, make compromises, and most importantly, listen to his team. Maybe there's an alternate-universe Quake or Daikatana somewhere that's just a bit more ambitious than the Quake we got, incorporating more roleplaying elements into a focused experience. But in our timeline, Romero didn't want to make that game.

Of course, after taking the L on Daikatana's eventual release, Romero wised up and started delivering much more focused and polished experiences, learning to work within constraints and going a long way toward rehabilitating his reputation. But that's not where he was when he criticized Quake for not pushing the envelope enough.

Re: How Quake.exe got its TCP/IP stack

#142

It's amusing to me that in the 90s you could easily play Quake or Doom with your friends by calling their phone number over the modem whereas now setting up any sort of multiplayer essentially requires a server unless you use some very user-unfriendly NAT busting.

I played a lot of Brood War with my friends like this.

Re: How Quake.exe got its TCP/IP stack

#143
post #69

Earlier quoted context omitted.

Same. I only have experience from M.U.G.E.N fighting engine with respect to DJGPP.

I remember back in the day using DJGPP (DJ Delorie) with the Allegro library (Shawn Hargreaves), building little games that compiled and ran on Windows and other OSes, and being part of the community. You can still play the little game I made in under 10K for the Allegro SizeHack competition in 2000: https://web.archive.org/web/20250118231553/https://www.oocit... Back then I was also writing a bunch of articles on ga…

I was on BlitzCoder.

Re: How Quake.exe got its TCP/IP stack

#144
post #68

Earlier quoted context omitted.

What was even more amazing is you could daisy chain serial ports on computers to get multiplayer Doom running. One or more of those links could even be a phone modem. Downside is that your framerate was capped to the person with the slowest computer, and there was always that guy with the 486sx25 who got invited to play.

Or slave two copies to yours and get "side view" which was only supported for a few releases IIRC - https://doomwiki.org/wiki/Three_screen_mode

Someone tried running that in one of the campus computer labs when I was a student, and the (probably misconfigured) IPX routers amplified it into... a campus-wide outage. Seems weird to me, but that's what the big sign on the door said the next day.

The perpetrator was never caught.

Re: How Quake.exe got its TCP/IP stack

#145

Earlier quoted context omitted.

That's the difference between an engine and game developer.

It's the difference between someone working in a world of engineering tradeoffs and a fantasist imagining their next übergame with everything awesome in it. I looked into the development cycle behind Daikatana , partly because it had its 25th anniversary this year and so for some reason, YouTube was recommending me Daikatana content. And... there's a reason why Romero's first dev team all quit. Daikatana started life…

Yeah, Romero seemed too ambitious. I didn't play the original Daikatana, but the Game Boy Color port was surprisingly good. The basic 2D graphics of the system helped enforce technical simplicity. So an undisciplined game designer could actually go nuts (within the technical limitations of a tile-based 8-bit machine) without much risk of overwhelming programmers or artists.

However, the GBC game wasn't actually developed by Romero's team, but outsourced to the Japanese studio Kemco. Romero was involved, though I'm not sure how much.

Anyway, what made the GBC game unique is that it played like a linear story-driven first-person game, similar to Half-Life, just not in first-person.

The presentation was top-down, like Zelda Link's Awakening, but the world wasn't split into an overworld and dungeons, nor was it split into "levels". Instead you would just walk from location to location, where side paths would be blocked off, similar to Half-Life. On the way you were solving environmental (story related) puzzles, killing enemies, meeting allies, all while advancing the elaborate plot through occasional dialog scenes. It felt pretty modern, like playing an action thriller.

For some reason I never saw another 2D game which played like that. I assume one reason is that this type of story-driven action game was only invented with Half-Life (1998), at which point 2D games were already out of fashion on PC and home consoles. Though this doesn't explain why it didn't catch on for mobile consoles.

So in conclusion, I think Romero (his own studio) might have been better off developing ambitious 2D action adventures for constrained mobile consoles rather than trying the same on more challenging 3D hardware. It would have been a nice niche that no other team occupied at the time, to my knowledge.

Re: How Quake.exe got its TCP/IP stack

#146

Earlier quoted context omitted.

It's the difference between someone working in a world of engineering tradeoffs and a fantasist imagining their next übergame with everything awesome in it. I looked into the development cycle behind Daikatana , partly because it had its 25th anniversary this year and so for some reason, YouTube was recommending me Daikatana content. And... there's a reason why Romero's first dev team all quit. Daikatana started life…

Yeah, Romero seemed too ambitious. I didn't play the original Daikatana, but the Game Boy Color port was surprisingly good. The basic 2D graphics of the system helped enforce technical simplicity. So an undisciplined game designer could actually go nuts (within the technical limitations of a tile-based 8-bit machine) without much risk of overwhelming programmers or artists. However, the GBC game wasn't actually devel…

Well, that's kinda what he did. He formed a new studio, Monkeystone Games, and released the 2D top-down adventure, Hyperspace Delivery Boy, on Windows CE devices, which was pretty well received at the time. Like I said, he took the L pretty well and learned its lessons.

I've played Daikatana GBC. It's pretty good. Years back, Romero released the ROM on his web site as a free download. I suspect ION was pretty involved, at least from a standpoint of making sure the story unfolded more or less as it did in the main game.

Re: How Quake.exe got its TCP/IP stack

#147
post #59

Earlier quoted context omitted.

DPMI clients don’t run in a VM, though. They’re just a normal task like any other task / process in Windows.

So... Win32 runs in virtual mode. In 2025, we don't think of that as a Virtual Machine, but it totally is. Hardware access is trapped by the CPU and processed by the OS/DPMI server.

It's not a virtual machine. There is no hardware machine that presents itself to function like a protected-mode ring 3 task on an 80286 or an 80386 functions. And the 286 and 386 both lacked a "virtual 286" and "virtual 386" mode (although it would have been almost-trivial for them to support it; Intel just decided not to, probably figuring it wasn't important).

Virtual 8086 mode, on the other hand, does behave exactly like a real 8086, which otherwise would have been very slow to implement on a real 386, and was either very slow on a 286 or impossible due to the 286 having some errata that prevented normal virtualisation techniques (the 286 had some non-restartable exceptions).

Re: How Quake.exe got its TCP/IP stack

#148
post #133

Earlier quoted context omitted.

DPMI clients don’t run in a VM, though. They’re just a normal task like any other task / process in Windows.

Only if they never call DOS or the BIOS or execute a Real Mode Software Interrupt. When they do, they ask the DPMI server (which could be an OS like Windows 9x or CWSDPIM) to make the call on their behalf. In doing so, the DPMI server will temporarily enter into a VM86 Virtual Machine to do execute the Real Mode code being requested. http://www.delorie.com/djgpp//doc/libc-2.02/libc_220.html

But that's not the DPMI client running in a VM. That's the host ending up running in a VM.

Note that in a machine with EMM386, the machine is normally running DOS inside an 8086 VM... and the only reason it would switch out of that VM is when you fire up a DPMI client.

Re: How Quake.exe got its TCP/IP stack

#149
post #132

Earlier quoted context omitted.

VM does not mean Virtual Memory in this context. VM does mean Virtual Machine. When an OS/DPMI Server/Supervisor/Monitor provides an OS or program a virtual interface to HW interrupts, IO ports, SW interrupts, we say that OS or program is being executed in a Virtual Machine. For things like Windows 3.x, 9x, OS/2, CWSDPMI, DOS/4G (DPMI & VCPI), Paging & Virtual Memory was an optional feature. In fact, CWSDPMI/djgpp pr…

I agree that my comment about VM was imprecise and inaccurate. I do dispute your assertion that virtual memory was "disabled". It isn't possible to use V86 mode (what the Intel Docs called it) without having a TSS, GDT, LDT and IDT set up. Being in protected mode is required. Mappings of virtual to real memory have to be present. Switching in and out of V86 mode happens from protected mode. Something has to manage th…

Slight nitpick: you could run fire up V86 mode without any LDT entries.

It's also possible to run Virtual 8086 mode without paging enabled, and when in Virtual 8086 mode, the 386 doesn't care about what's in the LDT/GDT (unless an interrupt happens). In practice this is never done because the Virtual 8086 task would only be able to use the bottom 1MB of physical memory.

Re: How Quake.exe got its TCP/IP stack

#150
post #132

Earlier quoted context omitted.

VM in this usage means Virtual Memory - i.e. with page tables enabled. Two "processes" can use the same memory addresses and they will point to different physical memory. In Real Address mode every program has to use different memory addresses. The VM86 mode lets you to have several Real Mode programs running, but using Virtual Memory.

VM does not mean Virtual Memory in this context. VM does mean Virtual Machine. When an OS/DPMI Server/Supervisor/Monitor provides an OS or program a virtual interface to HW interrupts, IO ports, SW interrupts, we say that OS or program is being executed in a Virtual Machine. For things like Windows 3.x, 9x, OS/2, CWSDPMI, DOS/4G (DPMI & VCPI), Paging & Virtual Memory was an optional feature. In fact, CWSDPMI/djgpp pr…

Slight nitpick: OS/2 2.x+ did not have a way to disable paging, although you could disable virtual memory in any version of OS/2 by simply setting MEMMAN=NOSWAP.

On Windows 3.x, paging and swapping was optional - if you started it in 286 ("standard") mode. On Windows 95, paging is not optional, and it's not optional in Windows 3.11 for Workgroups either.

Post reply on HN