They missed the 3rd(!) bug in those few lines of code? The normalization was done before zeroing out the Z component, so the resulting vector isn’t actually normalized.
Good chance it was John Carmack, probably one the top 10 programmers of all time. He basically built the Quake engine himself. There is a pretty decent analysis of it here:
Ranking programmers is as dumb as ranking musicians.
Carmack is great but you can't really say he's better than say some guy you've never heard of who wrote a bunch of absolutely brilliant algorithms inside a missile defense system and it's all super secret. Or someone who did amazing work on a compiler Carmack used or brilliant work in an OS kernel that you're never going to know about, or some AI code, or something deep within a stock exchange's platform.
Carmack's perceived greatness is elevated because almost 100% of what he has worked on is directly visible to the average consumer.
Carmack's main superpowers seem to be tons of hard work, not raw intelligence
1) Perseverance and focus: He kept rewriting the quake renderer, pushing it faster and better, where other people had long ago settled for a lesser variant or given up.
2) Try everything, even the stupid ideas. When he wrote quake, the wisdom was that the FPU was way to slow for a game. He managed to do z-divisions for blocks of 16 pixels on it, while the integer code spit out the pixels.
3) Attention to detail. The doom span renderer was sub pixel precise, which was pretty unique for its time. It looked better in a hard to define way.
4) Code quality. Doom and quake are very readable, very portable and heavily documented. The average 1-person codebase tends to be messy and undocumented, as nobody else ever takes a look. On the other hand, plenty of fixmes in there. It was unabashedly special cased where he could get away with it.
5) He consumed whatever idea he could get. BSPs were an obscure research trick before he took them and ran with it.
He had huge holes in his 3D knowledge when writing doom, as he admits himself. He didn't care until quake forced him to level up. But he could look in the mirror, say he needed to do better, and learn the extra things when he had to.
I don't know if Carmack is that much smarter than the average HNer, but he surely works a lot harder. And that's an even better compliment, in my book
Not sure where I read it, but someone writing about the history of DOOM basically said John was a machine and the machine ran on Diet Coke and pizza. As long as he had both, he could remain in the zone indefinitely, which is pretty crazy when think about all the things he accomplished that you listed.
> Not sure where I read it, but someone writing about the history of DOOM basically said John was a machine and the machine ran on Diet Coke and pizza.
I'm pretty sure I've read it in "Masters of Doom".
> Ranking programmers is as dumb as ranking musicians.
If a musician had a noticeable impact on culture and was prolific, I don't see why we can't put them in a bracket of [in top #]. The ranking is really just to illustrate my respect for his work, accomplishments, insightful communications, and continued relevance as well as impact on my life and those around me. You can call that 'dumb' if you like, but I am human just like you and am not above placing some people's accomplishments above those of others.
To me, Carmack equates more to an engineer who designed wild equipment used by sound engineers and musicians. Aside from Torvalds or Wozniak, I think most programmers are unsung, regardless of how much their products impact the world.
Most programmers are quickly forgotten if they were ever known in the first place. In terms of cultural impact, think of the programmers behind our PC or mobile operating systems, major consumer app categories like spreadsheets, word processors, photo or video editing, etc. Of course some nerds of computing history can cite folks behind all these, but it is niche trivia to most of the population.
It also seems like an era coming to a close where a solo programmer can deliver an impactful product. Who gets the credit instead? Usually an executive or entrepreneur gets the credit. Sometimes this person programmed early on, but often they either transitioned to management or started there and other programmers were responsible for delivering the product we eventually know.
> It also seems like an era coming to a close where a solo programmer can deliver an impactful product.
This is true but you have to look at it differently. There are generally two ways of looking at history: the 'great man'[0] theory, or the 'of the times' theory.
If you look at it one way Woz and Carmack and Torvalds and the others were instrumental in shaping their surroundings and without those specific people we would have lost out on basically the entire technological world as we know it.
If you look at it another way, they were inevitable -- the times were such that it was bound to happen (or at least extremely likely) because of a great confluence of events that could never be arranged or predicted, and if Woz had electrocuted himself making the Apple I power supply module then someone else would have done something similar around the same time and we end up at the same
spot (but Steve Jobs becomes a moderately successful Bay Area Benz dealer and we all use Blackberry phones with physical keyboards in 2023).
The era of an individual engineer or programmer making a paradigm shifting breakthrough in his or her basement may be over, but that just means the times have shifted into another dynamic. What that is can not be predicted, but if we do survive the oncoming crises upon us and somehow also never end up turning the planet into smoldering radioactive ash over a shipping lane dispute or something, there will be a time when such a person can be expected to emerge and do it again.
[0] excuse the masculine nature of this terminology, but unfortunately that is what it is called, though I haven't formally studied history in a while and it could have changed
I'm not sure if it would've been John Carmack in this particular case. He was more concerned with the engine and rendering side of things, less with the gameplay logic stuff. More likely it would've been either John Romero or John Cash who wrote this code, but it's hard to say for sure. Best thing we can hope for is that John Romero pitches in with his impeccable memory :D
It's a _fascinating_ snapshot into Quake's development.
I have no idea if his .plan is a record of what he, specifically, was doing, or if he was just capturing what the programming team was doing, but at the very least, it makes clear that he was aware of huge amounts of very highly specific game code issues as they were being worked on and was almost certainly deeply involved.
Hello fellow I-was-once-11-and-fascinated-by-.plan! I wasn't sure if I was the only one. St Louis in 2000 made it seem like there were only a handful of people interested in programming at all.
Hmm... 11 would put me at 19999, so I must've been more like 12 or 13. I remember that's when I started taking gamedev seriously.
I loved the video, I love this type of analysis of bugs and glitches. This comment, however, just makes me nervous. It's like my innermost worry.
I spend so much time trying to do a good job which I can be proud of and yet I always know there are bugs and I just hope not too many players notice and get annoyed by them.
And here we are, pointing out poorly written code in practically ancient software and attributing it to one particular programmer. Of course, Carmack has more than shown his worth throughout his career. But I dread the thought of a forum post pointing out mistakes I've made at work like this.
It's part of why it took me so long to dare publish articles about fun stuff I've done at work.
Honestly why care? Everyone writes bugs -- the thing is that Quake works fine -- if some quick runners want to exploit a bug 32 years later to impress each other with runs, after having dissected the code to bits to find glitches, is that really a bad mark on anyone? I don't remember anyone complaining about lightning gun glitches when Quake was being played.
I agree. Code that works well is a good thing even if not perfect and super optimized.
I’m not an elegant coder. My code isn’t perfect. It does run however and is pretty efficient mostly bug free. It does it’s useful thing and I can be proud of that.
Having gone through enough code reviews to know there is a huge amount of polish one can give code. It’s a trade off between perfect and Good enough.
I’m hopeful new languages and patterns leveraging libraries help make our code better or at least let us write more if it.
People speed run this game. Understanding every line of it is a part of the process and the reason people care who wrote what line is because it has a lot of culture and history associated with it. If you work on stuff that will make this kind of impact that makes people care like this you will feel proud having your bugs picked apart, not ashamed for having put them there in the first place. And if you don't rest easy knowing any bug you ever make probably won't see a thousandth of the effort being put into understanding and attributing it.
I think it is a good mindset to have. We must all assume that software is an imperfect thing done by imperfect beings. Even celebrate it.
On this particular case, I recommend concentrating not on the fact that there was a bug, but on the fact that the code written so many years ago is still relevant for someone today. Focus on that. Try to make something that someone will find a bug in 30 years from now.
I found this looking through Carmack's .plan files. Perhaps you will appreciate it.
Snippet:
I want bug free software. I also want software that runs at infinite speed, takes no bandwidth, is flexible enough to do anything, and was finished yesterday.
Every day I make decisions to let something stand and move on, rather than continuing until it is "perfect". Often, I really WANT to keep working on it, but other things have risen to the top of the priority que, and demand my attention.
I feel the same way, all the time. The more time I spend improving and tweaking a solution, the longer the list of remaining improvements I wish I could do.
That's why pieces I publish about my work usually contain a fairly long section about potential further improvements.
If anybody cares enough to pick over your code 30 years later, that probably means you were very successful at what you did; at the very least you had a hand in creating something people care about, which is more than most programmers can say.
His record speaks for itself. I know it is tough to imagine what it was like programming 3D engines meant to run on graphics non-accelerated PCs running DOS, without the internet knowledge or collaboration available to us now, but the stuff he was doing was absolutely revolutionary. He basically created PC gaming as we know it today by creating a market for 3D accelerators and before that by doing it in software very well. He also did this stuff in an record amount of time. From Wolfenstein 3D (1992) to Quake (1995) he made three separate engines which each revolutionized the industry one after the other.
EDIT: The metric I am using is 'impact' in an industry and in society in general -- the impact of Doom and Quake on culture and the adoption of computers and PC gaming and many other things can not be overstated. You can draw a direct line from Doom to Quake to nVidia to CUDA and machine learning if you want.
An interesting read into some of the insights that Carmack had which lead to the revolution that was Quake can be found in the "Ramblings in Realtime" articles[1] by Michael Abrash[2], who helped John develop Quake's 3D engine. Abrash wrote the rather famous "Graphics Programming Black Book", now available for free[3].
I remember he dropped Doom 3 on us with fully dynamic lighting and shadows in like fucking 2004 or something. I remember getting my hands on the engine leak (in 2003?) and absolutely getting my mind blown to see shadows dancing on the wall (at like 8 FPS on my athlonXP geforce4 rig) at something resembling real-time, in the same map that was used at the Apple developer demo where Steve Jobs announced mac support.
All of Carmack's engines were YEARS ahead of their time. Everyone was doing baked lighting and employing various gimmicks for dynamic-looking shadows, and this dude (and his team) comes in and destroys everyone with this fully-, actually-dynamic lighting system. I don't think anyone else even came close until Crysis in 2007.
If that isn't a top 10 programmer performance than I don't know what is.
> If that isn't a top 10 programmer performance than I don't know what is.
Nobody's saying he isn't brilliant. But it's not possible to declare him as a "top 10" programmer without actually taking into account all the other programmers.
I think there are at least 10 other programmers that you've never heard of, but that have had as much or more impact on society in general as Carmack did.
Isn't it enough to just say he's brilliant? Ranking programmers is a fool's errand and serves no purpose other than to devalue other brilliant programmers.
(Also, I think measuring how brilliant someone is by how much impact they've had on society doesn't make much sense. Those are two entirely different things.)
I don't think anyone here means top 10 in a strict ranking sense of the phrase. But I think Carmack very easily has a place amongst the pantheon of programming gods, whether you measure by 'brilliance' (whatever that means) or impact. He has done a ridiculous amount of innovation over the years, and set the pace for game engine and real-time rendering development for something like 20 years.
> I think Carmack very easily has a place amongst the pantheon of programming gods, whether you measure by 'brilliance' (whatever that means) or impact.
I guess? I don't know. There are so many programmers that have had a much greater overall impact and such than Carmack has (which in no way takes away from Carmack's accomplishments!) that I find it hard to say either way.
That's part of why I think trying to rank people is a bit strange. I doubt that there is even much consensus on what it takes to be a "programming god" in the first place.
Like who? I can think of Brian Kernighan, Dennis Ritchie, Linux Torvalds, Steve Wozniak, Ada Lovelace, Grace Hopper, Richard Stallman, Edsger Dijkstra, Bill Gates, John Carmack. Maybe Alan Turing. With the exception of the real OG's I think Carmack fits in that list quite nicely.
..and hundreds or thousands of others, that signed some NDA, worked on e.g. mission-critical systems (where bugs as the ones discussed here would cost you your job) and who never got to show their work, which is OP's point.
The closest guy to Carmack today seems to be Brian Caris, who developed virtualized geometry[1], a rasterization based rendering technique where the geometric detail of static objects is adjusted to the screen resolution in real time. There is another talk (can't find it right now) where he mentions Carmack as an inspiration. I wonder what Carmack would be working on today if he was still in the game engine business.
I think DLSS doesn't do denoising. DLSS uses an ML algorithm to upscale frames using additional information like z buffer and motion vectors. Denoising is used to drastically reduce the number of required rays for ray tracing. I would guess denoising is done first, using a non-ML algorithm, and DLSS is done afterwards.
DLSS does the denoising since DLSS 1.0 see the DLSS announcement https://www.youtube.com/live/4_g_Y0W1Xn8?feature=share (pardon the crappy gaming channel, it looks like Nvidia weren’t running their own YouTube the time)
There may be some confusion between upscaling and denoising. You might notice I keep editing my comment because it’s really really hard to find old Nvidia release announcements.
Update: https://youtu.be/6O2B9BZiZjQ looks good around 3:54 Nvidia refer to “deep learning for image denoising” which to me seems like DLSS.
Ray tracing without DLSS might be a different denoising technique. Is it really slow when you turn it on ?
There's some really big innovations happening in e.g. rendering like that; I wouldn't be surprised if the complexity and work involved in just Nanite is 10x that of the whole Quake engine.
Similarly there's the work nvidia is doing, using AI technology to upscale graphics instead of rendering things at 4K.
The idea is that, the derivative came after the virtuoso. Of course what came after is more complex costs more takes more is more impressive blah blah. Dismissing those that thought the thought or solved for a problem before it was, is such a dumb thing people do.
Hell no. As skilled as Carmack is as a coder, he falls well below the pioneers for early operating systems and programming language compilers and development in terms of industry and societal impact. Even Bricklin's VisiCalc and its descendants resulting in boring old modern spreadsheet software has a better claim to lasting societal impact than Carmack's 3D engines.
> The metric I am using is 'impact' in an industry and in society in general
If you correlate against lines of code written over a lifetime then John Brunner and Vernor Vinge bubble to the top. They're my go-to examples for people who think that literature reviews "don't matter".
Kind of a fun exercise since we get to see all the different values out there in the world.
I don't think a deep analysis is required here. It is quite obvious that he'll not be the top-10 programmer on every single metric that one can imagine.
He's very good. Enough people agree. I recommend letting it at that.
Impact. He pretty much invented the FPS genre by reading a paper about Z buffers from some guy in the Navy, IIRC. All the Call Duty kiddies owe him a debt. Who knows how long it would have taken for that whole genre to get going without him?
Was Doom's geometry more complex? No room over room, no slopes, vertical axis was awkward. Feels like apples and oranges, even before considering the gameplay was also very distinct between them.
Since I’m actually a top 5 programmer of all time (self decided) I can say with confidence that Carmack is actually a top 50 programmer but no where near the top 10. He didn’t use ternaries nearly enough.
In the top 10 as well. In fact not too long ago I was asking someone to rate some piece of code and used 'from Linus / Carmack to (something shitty I don't remember)' as the metric.
I honestly have no idea how good Linus is as a programmer; he's proven his worth as a project manager, he seems to know a thing or two (to make an understatement) about operating systems, but I don't know if he's a good programmer.
I've been working with the leaked wipEout source code for a while[1] and I can assure the quality of the Quake source is absolutely stellar in comparison. While Quake's source may not be up to modern best practices, the overall architecture certainly has a lot of structure and thought put into it.
Modifying Quake to run on the Occulus Rift was a breeze[2], compared to the mountains of garbage I have to wade through with wipEout.
Sure, but there's a big difference between leaked code vs. code cleaned up and officially released over 3 years after launch. Who knows what the Quake source looked like on the date they initially shipped. Quake also remained in development for quite a while, with the latest patch released ~March 1997 (original release June 96), and QuakeWorld last released end of 1998.
That's really cool, will you share your efforts anywhere? Love a bit of anti-gravity racing myself. I recommend you listen to the OST whilst coding it for maximum immersion.
The unlicensed source makes this difficult. My current plan is to trim the game to a demo with one race track, compile it to WASM, put it on my website and get Sony's attention (maybe through Nightdive Studios?) for a proper re-release.
In the likely event that this fails, I'll just YOLO it and put it on Github. After all, Sony didn't care that I published[1] all of wipEout's assets seven years ago.
That's class! Would you object if I typed up a quick review and listed it on my Well Made Web gallery? I'd slot it in under Artistic https://wmw.thran.uk/artistic/index.html
>whoever coded that really was deep into the tail end of a caffeine, coding and sleep deprivation binge ;)
That's most indie game devs of the period, but more so at id Software which splintered the team during Quake's development due to internal squabbles, causing John Romero and others to leave id.
You can even tell that from the quality of Quake's levels which start with beautifully crafted and intricate levels, and as you approach the end, progress into "whatever, let's just ship it, this is gonna sell" kind of levels that were mostly just boring repetitive filler to pad the play time.
"You can even tell that from the quality of Quake's levels which start with beautifully crafted and intricate levels, and as you approach the end, progress into "whatever, let's just ship it, this is gonna sell" kind of levels that were mostly just boring repetitive filler to pad the play time."
IIRC (this is well-documented if you want to double check), Tim Willits made most of the Episode 1 maps, John Romero made most of the episode 2 maps, American McGee made most of the Episode 3 maps, Sandy Peterson made most of the episode 4 maps, and John Romero made most of the level 1, military base themed maps in each episode.
The episode 4 maps are often barren, lacking in details, and missing much of the beautiful interconnections of earlier maps... but this is also true of Peterson's maps from Doom (he did a lot of episode 3 in the original Doom, IIRC). So I think it's more of "this guy might be a strong game designer in a lot of other contexts, but the specific needs of making cutting edge Doom/Quake style maps isn't a great fit for him".
I was at Raven Software at the transition from the Doom engine and other 2.5D engines to Quake (and then Quake 2, and then Quake 3, and then Doom 3), and there were a number of existing designers who were fine game designers in earlier, 2d contexts who found their skills severely out of sync with the changing demands of 3d map making, and most of them eventually had to transition to other roles or leave the industry.
FWIW while i also found Petersen's maps on the weird side geometrically, at the same time i think they were among the most interesting to play (both in Doom and Quake) as he often tried to come up with various gameplay tricks and traps to break the "mold".
His Quake maps especially give me the impression that he was more into trying to come up with ideas on what is possible for the player to do in the freedom allowed in 3D space than how to make a good looking environment (especially in Quake's theme that didn't really have to conform to any realistic constrains and could have shapes floating in space, physically impossible architectures or whatever).
I think there's a couple of orthogonal issues here.
One of them is the nature of interactivity in the levels themselves. There's a spectrum between having a game grammar made of distinct discrete interactive reusable objects and then building unique situations by assembling them in interesting ways, versus having (essentially) unique scripted traps or interactive things or set pieces that only show up in one place. Older action games that inspired Doom tend to draw from that former tradition; a lot of FPS games that came after Quake tended to go more down that second road. Quake's trigger system specifically opened up the door to a rudimentary kind of visual scripting that made the latter style of design more possible in a way that wasn't possible in Doom (although it was possible in Hexen via HexenC(?)). I think you could say that that style of design really came more into its own with Half-Life, which foregrounded unique interactivity grounded in very specific, themed levels much more clearly. Doom at its best seems like it's much more in the design space of, say, Robotron and old Mario games. Fewer unique set pieces, much more focus on discrete interactive toys to be recombined... and given id's background with Commander Keen and their earlier recreation of the first level of Mario 3, this design influence shouldn't be a surprise. Anyway, Quake feels like it is at the intersection of these two styles of design.
I think it is true that Peterson did try to go more down that second road of design in the episode 4 maps in a way that there was less of in other maps, and that it interesting.
But the other thing that sticks out to me more so, in terms of level design, is about the way the space is shaped. A lot of the very best Doom and Quake levels have a tendency of having different parts of levels intersect and interact in interesting, playful ways. The order that you see areas is different from the order that you hear areas is different from the order that you can attack into or interact with areas is different from the order you can move through areas is different from the order that different kinds of enemies can move through areas or attack areas. And that changes as you progress through a level, get keys, and activate switches. There's a tendency for levels to start somewhat linear and movement constrained but give information about later areas in a somewhat more non-linear, tantalizing way, and then as a player progresses, for the player's movement in a level to become more like a multiply connected graph as switches, keys, and activated lifts make a lot of one-way paths become two-way. And that style of design plays to the strengths of Doom and Quake using BSPs for levels as their fundamental data structure - BSPs specifically make these kinds of weird and surprising visual and physical intersections between areas manageable in terms of computational performance on 90's era hardware.
Whether or not someone considers the design approaches I just outlined appealing is fundamentally an aesthetic issue, obviously - there's no one right way to enjoy a game. But my general sense is that the Sandy Peterson maps in Doom and Quake tend to explore these approaches to play much less than the maps made by other designers.
You assume that the quake maps were built sequentially, but that's not the case. Since this was all new technology, the "best" maps were conceived at the end of development, after the team was familiar with the tech. You want those maps to be at the start of the game, as it's the first thing the player sees.
Also, the distinct style of the last episode is easily explained by the fact that all of its maps were built by Sandy Petersen. E3 was mostly American McGee, while John Romero and Tim Willits worked on E1 and E2.
I'm not a fan of Petersen's maps either, but they are regarded (and liked) as quite unique, compared to the rest of the game.
Yeah, I didn't like Petersen's levels much at the time, but looking back on them later as a designer (I worked on a couple doomed Unreal projects) I can see he was trying to be as creative as possible within the limits of the engine, as far as getting away from "find the yellow key" style design that frankly, everyone was already bored of.
I had a pirate pre-release copy of Quake that I'd wished I'd saved. But in any case I do remember there were changes to the maps all over the game, so the levels were definitely not done in order. The biggest difference I remember is the ending in the final game is totally different. The pre-release had a more Doom style waves of monsters fight on a sort of giant terrace. I didn't particularly like that doom style ending, but also felt the release game's ending was kind of an anti climactic gimmick.
Yeah, the boss at the end of episode 1 (e1m7, House of Chthon) was way more interesting than end.bsp, and I remember really blew me away as a kid. Makes sense based on what others were saying about having the best levels up front.
I disagree that the later levels are filler. Episode 4 is my favorite, because it's the episode that best shows off Quake's excellent movement. It's less cramped than the others, and has better "flow", letting you bunny hop all over the maps with minimal waiting. I agree with the common consensus that it's the ugliest of the episodes, but I think this suits the weird otherworldly theme that Sandy Petersen was going for (influenced by the works of H. P. Lovecraft).
The only real complaint I have is the use of the Spawn enemy, which is generally considered the worst designed enemy in the game. But the enemy placement in episode 4 has the advantage that it makes relatively little use of the Ogre, which I consider the second worst enemy, because it has too much HP for something so common, and is too predictable on Nightmare difficulty (to the point that some people say Hard difficulty is actually more difficult than Nightmare).
Yep I’m in this code base a lot, and there’s a lot of this. Some of it by John’s own hand. But you know, if it works, it works. I’ve added plenty of my own bugs in the same spirit.
afaik Romero was fired for not working. Cubicle walls came down because Romero was playing Doom on the clock instead of making the game(his form of protest for not making an RPG or something). If you look at Quake code most broken/lazy stuff was done by him. Example https://www.youtube.com/watch?v=DEkjDkr0Qmc
AFAIK, Romero was a bit full of himself at that point in time seeing himself as a godly game designer. He then went on to start his own company and build the RPG he wanted, Daikatana, which was late, over budget, and flopped big time.
> You can even tell that from the quality of Quake's levels which start with beautifully crafted and intricate levels, and as you approach the end, progress into "whatever, let's just ship it, this is gonna sell" kind of levels that were mostly just filler to pad the play time.
This rings really true to me. I only had played the shareware version of quake and only recently played the full game, and the second half really felt like padding.
Some gimmicks in particular were really overused later on (I specifically recall that at a certain point I could just tell "There's going to be an ogre hidden in this corner").
I'm not sure if there was also some other reasons - maybe they decided to use some of the best designs for the shareware, maybe ran out of space for more enemies or maybe there's just way more nostalgia for the first levels - but I'm happy to see that some people share a similar opinion.
I was looking at my Steam library and wishlist last night, in anticipation of the upcoming summer sale season (other storefronts have already begun their summer sales), and I was somewhat disappointed in myself. Even though I try to only buy games on sale, I think I'd likely save money overall by only buying (and finishing, if I'm enjoying them) games at full price when I'm ready to play them vs. speculatively buying games on sale.
Doom, Doom 2, Quake, Quake 2, Descent, Descent 2 and Duke Nukem 3D are pretty much the only games I've ever completed because Steam didn't exist and that was basically all there was to play at the time. Now it's easy to get stuck or bored and move on to something else.
Quake is/was a multiplayer game with a single player mode attached for initial training.
Or, from a mod creators perspective, a 3D engine with a demo mode for what was possible. Qtest1, the “demo” that came out a few weeks before release, was multiplayer only.
That's sort of how things ended up, but I don't think it was the intention. Doom and Doom2 were (and are) magnificent single player and co-op games, if you like that sort of thing, which I do (Doom was my lode star when I was working as a gameplay programmer / designer on Soldier of Fortune).
The better single player levels in Quake are actually really intricate and well-designed single player levels too, in exactly the way that Doom levels were great.
Some of the enemy design in Quake is actually pretty good, too, with sharply distinguished silhouettes between enemies, and good discrete gameplay property differentiation between them - well, at least for the zombies, the fiends, and the shamblers. Some of the others are fine, too (scraggs, grunts).
I think the bigger issue is they bit off way more than they could chew.
Specifically, Doom's single player mechanics thrive on having hordes of enemies interacting with highly interconnected levels in interesting ways, making space management a big part of the single player game play. Trying to figure out where you're safe to pick a fight, or how to steer the hordes around to create a space where it's safe to fight, is a big part of the draw. But, because rendering 3d monsters was so expensive compared to 2d sprites, Quake couldn't do hordes when it shipped, and fighting just a few enemies at a time (with their health highly jacked up) was a totally different experience. It could have been made to work, but they would have had to stray a lot further from the Doom gameplay recipe than they did.
And they also would have needed, I think, a lot more monster variety. A single player game with 30 different enemy types that were interesting and differentiated would have been much stronger.
Yeah that's the first thing that drew my attention, if you normalise and then remove a component... now you know for sure length whatever you are doing is dependent on the direction of the input vector.
I still find vector programming hard though, so if I was writing anything like this I'd always visualise it as part of my testing. i.e temporarily render out the other beams and possibly the intermediate vector as necessary (pretty much what they did in this video). That makes testing easier to verify and debugging way more intuitive.
To be fair, bug #1 was that the normalization call had no effect, so the fact that it’s also being done in the wrong sequence doesn’t actually have a further effect on gameplay.
It turns out you can do a lot of work with non-normalized normal vectors as long as you don't trip over the math that actually cares whether they're normalized.
I would love an explanation of Tribes' skiing bug presented in the style of this video. There have been so many differing explanations of it in blog posts over the years which haven't completely sat right with me.
Duke Nukem 3D was built on the 'build' engine, which was built by a super cool 18yo called Ken Silverman http://advsys.net/ken/ .
Back in the 90s John Carmack was asked "If you could just hire anybody from the 3D world, who would you hire?", and he named Ken http://advsys.net/ken/carmken.htm
Thanks for the link! This really took me back to the games I grew up on that influenced me (haven't heard the names ROTT or Redneck Rampage since the 90's)
At the time, going from quake to glquake felt like a huge leap in technology. How could graphics even get any better? I guess every generation goes through something like that.
It's not, but the DarkPlaces engine [0] reimplements many, if not all, of the realtime shadow features and has an X64 Mac build (but no ARM build, as far as I'm aware), and is still getting active contributions on its Github repo[1].
I'm quite curious to see what Quake would look like given a similar treatment as the new Doom games got. That is, distilled down to a pure essence of what the original was trying to achieve.
The community pretty much brought it to a new height. The custom engine looks cool and the new map packs/mods reflect the height of Quake level design.
worse even, it killed off many vibrant quake 3 communities that had been going from 1999 to 2008 because half the people started playing quake live and the other half stopped playing alltogether
The community was on life support, and the attempt (Quake Live) wasn't enough to bring people back to good eSports, as the market had moved on from pure skill based games.
It was extremely difficult to play for newcomers. You almost didn't even get a chance to frag old school players once because of the skill discrepancy. I could hang with most of the higher tier guys, but there were some that just seemed nearly invincible. They should have had more resources for developing skills. After I stopped playing, I discovered that some were playing Q3 at ramped up physics speeds in single player. When going back to playing at regular speed, it feels like you're playing in slow motion.
>> It was extremely difficult to play for newcomers. You almost didn't even get a chance to frag old school players once because of the skill discrepancy.
I think games say a lot about generations.
In the old days you had to persist a lot and be a bit of a "hacker" to play Quake, or at least have basic computer skills. I remember how difficult it was to configure Qizmo for Quake World.
Nowadays everything is ready for you to play and even if you are a beginner you can play with the most experienced. In Quake you can spend 1 year playing and not win a single match.
>>Nowadays everything is ready for you to play and even if you are a beginner you can play with the most experienced. In Quake you can spend 1 year playing and not win a single match.
I mean......saying this as a game developer - this is a good thing. You want people to come in and enjoy the game, and not be frustrated by it. Obviously there should still be a mode somewhere where you can truly test your skills and where the top players hang out(in multiplayer shooters that's usually what the ranked mode is for), but new players should be able to just jump in and have a good time. I believe this is a huge part of why games like Fortnite are so successful - because no matter what is your skill level, you will always have a good time, but it also offers an incredibly high skill level ceiling for people who really want to put in the hours.
>>I think games say a lot about generations.
I'm not sure if that is about generations, more about the market - when Q3 came out the only other major game in that space was Unreal Tournament. Nowadays you have so much choice that if a game frustrates you you can always pick a different one. And the market has been completely "ruined" by gamepass and endless promotions, so people don't have attachment to games like they used to. Sure some of them do if they spent £50 on a game, but for an increasing number of games and people, that just isn't true anymore. There is no cost associated with trying a game on Gamepass for 20 minutes and abandoning it.
> I discovered that some were playing Q3 at ramped up physics speeds in single player. When going back to playing at regular speed, it feels like you're playing in slow motion.
That's amazing, like training at altitude but for e-sports.
it's not actually that helpful because a lot of the skill comes from muscle memory
and that's not just for aiming but mousemovement also has a significant influence on movement
for example there's something called a circle jump where you use precise mouse movement to get the most efficient angles so that your movement speed is maximized from your first jump
The new Doom games have little to do with the original Doom gameplay, perhaps because it wasn't that good in retrospect. For Quake there would be more potential for something like a remake.
Strongly disagree that the new Doom games have better gameplay than the old ones. Every fight is a giant monster trap. IMO it showcases the worst aspect of the original doom games.
> unless you're saying that the best part of the original Doom games were the labyrinthine level design
Not the best part, but certainly one of the best parts. Doom and Doom 2 did labyrinths really well, much better than wolf3d (wolf's labyrinths were too samey and dull due to engine constraints) and I think better than nearly any game since. Games started foregoing labyrinths around when Half Life 1 came out (see also: Daggerfall vs Morrowind), I think because labyrinths filter plebs. But if you stick with Doom it'll teach you to have better spatial awareness that trivializes level learning in most other games. The new doom games particularly have linear level design very reminiscent of Half Life with some arena sections interspersed; they don't feel like Doom levels at all (except in very superficial ways, like "mars/hell themed".)
Such modern games lend themselves to navigating levels without maintaining a working knowledge of where you've been; at each instant your navigation choices may be informed by what you see on the screen right then without regard for what you've seen before. You can play Doom that way too, you'll get to the end eventually through brute force, but Doom does an excellent job of encouraging you to do better and develop your skill. If you remember where you are in relation to where you've already been, you can anticipate when a path is looping around to where you've already been before you actually round that corner. Maintaining orientation in this way, especially in a labyrinth, is a skill Doom excels at teaching. When you get good at it, such awareness of the level instills a sense of presence that just can't be conveyed any other way. Most modern games don't try to teach it; they expect that novice players won't be good at navigation and so, in the name of accessibility and mainstream appeal, refrain from challenging those players.
Many early first-person games (pre Wolfenstein 3D) were dungeon crawlers, not shooters, so the labyrinth design of early Id games reflects that heritage. Modern single player shooters have now very much abandoned this approach in favor of linear level design (Half-Life / Call if Duty approach), or they went straight into the "open world" direction (Farcry approach), which also doesn't feature dungeon/labyrinth levels. Closer in terms of non-linear level design is perhaps Metroid Prime (which recently got a remake), but it focuses more on environmental puzzles than on shooting.
There are probably indie games which are close to the original Doom formula. They often feature genres that have been neglected by big studios.
Gunplay and movement is not the essence of doom, you can't even jump or aim vertically. For me Doom is a monster blast fest on easy difficulty but becomes a strategy game on the hardest ones. A game that seems hard at first but when you find and develop the best approaches it becomes easy.
I would say that Doom (1993) is one of the few games of that era still kind of holds up today, the gameplay hasn't aged poorly. Can't say the same about Wolf 3D.
Doom 2016 however made the right move. It wasn't out to replicate the old games but take the essence of it and re-imagine it in newer faster terms. It is not a sequel but something that stands next to the original. The focus is almost entirely on the fights but they are stacked that you actually have to plan your attack (figure out which enemy tier is most problematic) while in the middle of near absolute chaos. I get why people didn't like it but I thought it was such a brilliant homage to the original. The sequel, I wasn't too keen on.
Quake 1 was the first stereoscopic game I ever played. Back in the late 90's, some local computer store had a 3D rig with glasses that had LCDs in the lenses that would turn the whole lens opaque. On the CRT, the left eye view would render on one refresh while the right lens was blacked out, and then it would alternate. It was such an amazing effect to see on a 120hz screen.
My GeForce 1 could do that out of the box, in 2000. It came with the shutter glasses and could do 3d on a 120hz monitor. It seemed really cool on paper but I only used the gimmick a couple of times. Biggest problem was that the cross hair was right in front of you but baddies weren’t, so you couldn’t focus on both, so then there was not cross hair. For somebody who played mostly with the sniper in UT, that wasn’t fun. Also, the rig hurt the eyes.
The movement? It was just dull but they fixed it with QuakeWorld.
Bunny hopping is fun until you encounter stairs. They fixed that mechanic in Quake 2 but then everything else about this game is crap. Q3 was OMG, simply amazing
Movement wise, CPM/CQ3 or QuakeLive is where things became fun again
Modern QuakeWorld has the option of enabling ‘air step’ which allows surfing up stairs. I don’t think the deathmatch purists use it, but it’s become standard in FortressOne (modern QWTF fork).
The amazing thing about QuakeLive is that it initially ran in a browser window. I'm not sure how it was implemented, but it was amazing and it supported Mac and Linux as well. I wonder why they then decided to make it into a Windows only desktop app.. :-(
> The amazing thing about QuakeLive is that it initially ran in a browser window.
The performance was complete dogshit. Just simply awful. I had modern hardware at the time which ran both the original Q3A and ioquake3 at hundreds of fps if uncapped but QuakeLive in browser burned my computer up for sub-60 fps even with the graphics turned down. Unplayable. Not to mention they dropped Linux support. QuakeLive made me quit playing Quake. If I sound bitter about it now, you should have heard me then.
Q2 being so slowed down compared to QuakeWorld makes a lot of sense when you read that John Carmack _hated_ the bunnyhopping bug in QW, and wanted everyone to be slow moving Terminators walking down hallways.
I'm with you though, I hated it, and my friends and I quickly went back to QW (+ QWTF) after trying Q2 briefly. I did have a soft spot for Rocket Arena 2 in Q2 though, that was fun.
Did anyone had a situation after entering the portal that it didn't teleport you, but you were in some different space with purple color and you had to move forward to be teleported? I had this once on the DM2 map. I tried to repeat this, but I never succeeded.
That should be a known bug on a specific teleport that exists on the DM2 map. Not sure if it's also present on "regular" Quake but it's been on QuakeWorld for as long as I can remember.
On the backroom (where there is Red Armor and Mega Health) there is a teleport that goes to the main (BIG) room of the map.
If you jump just before the teleport and "aim" your jump so you go in the top left corner of the teleport, you'll get stuck inside the teleport but not go through until you move a bit.
Also, staying stuck for too long on that teleport during a game, will drown your player, which should definitely confuse your opponent as there is no water deep enough to drown players on DM2.
Yeah it's probably qw only. It's pretty easy to get it running these days with the recent clients. You can just download a qw client (ezquake recommended [0]) and extract the executable to your quake folder.
Alternatively you can download nQuake [1], a full pack with most things included except for the non-shareware maps. You can then just place the pak1.pak file inside the id1 folder and make it complete.
It could have been solved by limiting the two side vectors lengths to less distance (maybe even tuned by speed) and fixed it enough if the reason was for side damage. If it was to fix some other issue like maybe floats losing precision far out that would not be a good idea.
So, it seems that the intent of the code is to add two parallel, invisible kill beams to augment the main beam. The nature of the bugs are such that the added beams are positioned in roughly the right place, for a certain axis-aligned view.
I’d guess that the feature was tested manually in such a view, and seemed to work OK. And that the feature was subtle enough of a behavior tweak that no one noticed that it didn’t work correctly in most other situations, since the main, visible beam worked correctly, and no one could see it killing enemies behind walls.
The enemies within the player's field of view but to the side of the single beam are physically blocking the player model from moving. This is a jarring gameplay experience.
This code is not C or C++, so it's not actually from Quake. So what's with "this is how this was coded" and "here are the bugs, but it's only my guess"? The code is avaialble, why guess at all?
Hello, video creator here. This is indeed the actual code, and it is written in QuakeC, a language created specifically for the game logic in Quake. The part I'm not sure about is why the creators wanted to add in extra side beams at all.
I think your guess seems plausible, although maybe it was simply an effort to widen the beam to better match the graphics? The lightning effect is rather wide and it may have been surprising for the player if the hitbox ended up too narrow.
I haven't played Quake in the better part of 20 years so I can't comment from first hand experience, but judging by your top-down view at around 41 seconds, the single beam visually seems to intersect with a bunch of enemies while not dealing any damage (probably as a combination of narrow hitboxes on both the beam and the enemies).
QuakeC looks like C on the surface but is a much, much simpler language. Modern dialects are quite a bit more advanced (while still targeting the same vm).
Almost all of Q1 gameplay is in quakec, which is a a simple c-like language targeting a little VM. Eventually they've opersourced all of the code making the community possible.
I recently started playing Q1 again and it's amazing: the community still supports a number of derivative engines, as well as numerous amazing mods and maps. Arcane Dimensions are insane!