8 ms·
Let's compile Quake like it's 1997
- ErroneousBosh 9mo agoFunny, I've just been (re-)playing Quake 2 recently.
- bombcar 9mo agoAction Quake II is still the best I’ve ever been at FPS.
- jasonb05 9mo agoNod. AQ2 was so damn fun!!
- ethin 9mo agoI've only played Quake I (and a modified version of it at that which had accessibility features). I did purchase quake II and III from Steam a few years ago, but it's much harder to play them because they have no accessibility to speak of (and I'm not entirely certain where to begin to try to replicate what was done with my version of Quake I). Quake in general has always been an insanely fun game for me, and I started playing it in like 2010. I still love playing it even now because it's got something to it that most other games I have just lack. Don't ask me to explain what it is because I can't really put it into words but...
- hypercube33 9mo agoqpong, generations mod, catch the chicken, red rover, weapons of mass destruction, 4 way ctf, freeze tag....so many good mods
- ErroneousBosh 9mo agoI'd kind of forgotten about AQ2. I wonder if I can get that going. I bet there are still servers out there, at that.
- gatane 9mo agoLast time I played, the servers were empty. Maybe you could have better luck by finding their discord server... https://q2online.net/action https://q2online.net/action https://store.steampowered.com/app/1978800/AQtion/ https://store.steampowered.com/app/1978800/AQtion/
- jlundberg 9mo agoYes, such a good game! :) Gonna warm that up when the kids get a bit older and we start doing LAN parties. That and Quake World Team Fortress.
- wink 9mo agoSame here. Clan wars on the ESL, visiting people for LAN parties, all around a good time.
- webdevver 9mo agolove software archaeology like this. there was another article where someone bootstrapped the very first version of gcc that had the i386 backend added to it, and it turns out there was a bug in the codegen. I'll try to find it... EDIT: Found in, infact there was a HN discussion about an article referencing the original article: https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html https://news.ycombinator.com/item?id=39901290 https://news.ycombinator.com/item?id=39901290
- yjftsjthsd-h 9mo agoIf you're into that kind of thing, May I strongly suggest https://virtuallyfun.com/ https://virtuallyfun.com/ ? It's an absolute gold mine of amazing stuff along these lines
- clarity_hacker 9mo ago[flagged]
- webdevver 9mo agothere is something to be said about old windows installation CDs being essentially modern-day equivalents of immutable docker layers - i don't think one could say that about modern windows, but then i'm not super clued in into ms stuff.
- dajt 9mo agoWith all the problems that recent Windows updates are causing, and a blog post about how the Windows team are using Native React to deliver changes to the apps such as a part of Settings outside the usual updates I got to thinking how great it was back in the Windows 3.11, 95, and XP days when you got Windows and it mostly worked and it didn't get updated (aka more broken) every day. It was quick enough, it was yours, and it didn't tell you what to do. You'd reinstall every year or two to clean out the disused DLLs etc, but it was mostly fine. Of course it wasn't exposed to quite the same hostile environment it is today.
- kelnos 9mo ago> The detail about needing to reinstall Windows NT just to add a second CPU shows how tightly coupled OS and hardware were — there was no abstraction layer pretending otherwise. In this case there was: the reason you need to reinstall to go from uniprocessor to SMP was because NT shipped with two HALs (Hardware Abstarction Layer): one supporting just a single processor, and one supporting more than one. The SMP one had all the code for things like CPU synchronization and interrupt routing, while the UP one did not. If they'd packed everything into one HAL, single-processor systems would have to take the performance hit of all the synchronization code even though it wasn't necessary. Memory usage would be higher too. I expect that you probably could run the SMP HAL on a UP system (unless Microsoft put extra code in to make it not let you), but you wouldn't really want to do that, as it would be slower and require more RAM. So it wasn't that those abstraction layers didn't exist back then. It was that abstraction layers can be expensive. This is still true today, of course, but we have the cycles and memory to spare, more or less, which was very much not the case then.
- knorker 9mo ago> The first batches of Quake executables, quake.exe and vquake.exe were programmed on HP 712-60 running NeXT and cross-compiled with DJGPP running on a DEC Alpha server 2100A. Is that accurate? I thought DJGPP only ran on and for PC compatible x86. ID had Alpha for things like running qbps and light and vis (these took for--ever to run, so the alpha SMP was really useful), but for building the actual DOS binaries, surely this was DJGPP on x86 PC? Was DJGPP able to run on Alpha for cross compilation? I'm skeptical, but I could be wrong. Edit: Actually it looks like you could. But did they? https://www.delorie.com/djgpp/v2faq/faq22_9.html https://www.delorie.com/djgpp/v2faq/faq22_9.html
- qingcharles 9mo agoI thought the same thing. There wouldn't be a huge advantage to cross-compiling in this instance since the target platform can happily run the compiler?
- frumplestlatz 9mo agoRunning your builds on a much larger, higher performance server — using a real, decent, stable multi-user OS with proper networking — is a huge advantage.
- knorker 9mo agoYes, but the gains may be lost in the logistics of shipping the build binary back to the PC for actual execution. An incremental build of C (not C++) code is pretty fast, and was pretty fast back then too. In q1source.zip this article links to is only 198k lines spread across 384 files. The largest file is 3391 lines. Though the linked q1source.zip is QW and WinQuake, so not exactly the DJGPP build. (quote the README: "The original dos version of Quake should also be buildable from these sources, but we didn't bother trying"). It's just not that big a codebase, even by 1990s standards. It was written by just a small team of amazing coders. I mean correct me if you have actual data to prove me wrong, but my memory at the time is that build times were really not a problem. C is just really fast to build. Even back in, was it 1997, when the source code was found laying around on an ftp server or something: https://www.wired.com/1997/01/hackers-hack-crack-steal-quake/ https://www.wired.com/1997/01/hackers-hack-crack-steal-quake...
- bluedino 9mo agoI'd like to see someone build the Linux source code leak that came out not to far after Quake was released.
- yjftsjthsd-h 9mo agoWhat do you mean, "leak"? Linux would have been developed in the open?
- Maro 9mo agoQuake book incoming from Fabien?
- torh 9mo agoI hope so. The other books have been great fun to read, with the detour of CP-SYSTEM as a nice surprise.
- bombcar 9mo agoAlmost certainly - every other of his books has been telegraphed by articles about the work he’s doing to get the original setup built and running.
- nyarlathotep_ 9mo agoThis was my (hopeful) first thought on seeing this; his recent posts have been Quake-related. I do hope this is a harbinger of another installment. His others have been excellent.
- boznz 9mo agoOn one particular project from 1995 where the hardware was very cost optimised, the C program compiled to 1800 bytes which meant we could save nearly a dollar by buying micro-controllers with 2KB flash rather than 4KB flash. We manufactured 20,000 units with this cheaper chip. 2 years down the line we needed a simple code change to increase the UART baud rate to the host, a change that should have resulted in the same sized binary, but instead increased it to 2300 bytes due to a newer C compiler. We ended up tweaking the assembly file and running an assembler, then praying there would be no more changes! I have always over specified the micro-controllers a little from that point, and kept a copy of the original dev environment, luckily all my projects are now EOL as I am retired.
- travoc 9mo ago"luckily all my projects are now EOL as I am retired." I doubt that everything you ever worked on is end-of-life. Some of it is still out there...
- 7thpower 9mo agoBetter have kept those environments.
- boznz 9mo agoCorrect, I have thousands of tank temperature controllers still out there, still working fine where the End Of Life was 3 years ago. EOL just means support for spares and software updates cannot be guaranteed past that point, and is mainly tied to the EOL of the specific micro-controller used.
- Rygian 9mo agoIt's end-of-life. If it it still running out there, it's runningin zombie state.
- Neywiny 9mo agoCould also just edit the old binary directly in a pinch?
- direwolf20 9mo agoVisual C++ 6 was the first C(++) compiler I used. I'm fairly certain it had auto completion (Intellisense). Casey Muratori would point out the debugger ran faster on hardware from the era than modern versions run on today's hardware, though I don't have a link to the side–by–side video comparison. Edit: Casey Muratori showing off the speed of visual studio 6 on a Pentium something after ranting about it: Jump to 36:08 in https://youtu.be/GC-0tCy4P1U https://youtu.be/GC-0tCy4P1U — earlier section of the video is how it is today (or when the video was made)
- reactordev 9mo agoabsolutely! When launching my editor today, it phones home, it checks location, it does everything that an editor SHOULDN'T DO. Not to mention the extensions... Software today is a horrible bloated mess on top of horrible bloated messes.
- ack_complete 9mo agoThe VS debugger got an order of magnitude slower in the transition from VS6 to Visual Studio .NET. It's been sped up a bit but is still nowhere near as fast as the VS6 debugger at responding to step commands, debug output, or conditional breakpoints. In VS.NET you could be waiting as long as a full second on a contemporary dev machine for the debugger to finish stepping forward one line. Funny thing is that at the time, I was lamenting how much slower VC6 was than VC4. Macro playback, for instance, got much slower in VC6. It's all relative.
- Borg3 9mo agoI think you were using some 3th party software for auto completion. There was project called Visual Assist with was pretty popular and powerfull tool.
- direwolf20 9mo agoNope!
- int_19h 9mo agoVisual Assist provided much better completion especially for (then brand-new) C++98 if you used templates, STL etc heavily, but VC had its own completion out of the box that was actually pretty good for plain C code like Quake. AFAIR the "IntelliSense" branding was also in place already.
- jeffrallen 9mo ago> (Visual Studio 6) I never used it but it must have felt like a dream at the time. I used it in the mid-90's and yes, it was eye opening. On the other hand, I was an Emacs user in uni, and by studying a bit the history of Emacs (especially Lucid Emacs) I came to understand that the concepts in Visual Studio were nothing new. On the third hand, I hated customizing Emacs, which did not have "batteries included" for things like "jump to definition", not to mention a package manager. So the only times in the late-90s I got all the power of modern IDEs was when I was doing something that needed Windows and Visual Studio.
- ethin 9mo agoIt's really ironic that this appeared on the front page when it did, because I've spent the last couple days replacing the ZQuake sound system with FMOD and Atmoky TrueSpatial for HRTF and such. This was my first time ever working on a code base from 1996-2000. And in pure C no less. C feels so foreign to me since I'm so used to writing in C++ and Zig and such. But it was still really fun! And I mean it doesn't seem super impressive, but it's something. Lol
- reactordev 9mo agoyou could have chosen a far worse codebase than Quake from the 90s. Quake was pretty clean in comparison. Sensible use of macros for doing things. A type system that made sense. Descent on the other hand...
- ethin 9mo agoI mean... It's ugly from a modern standpoint. Zero encapsulation to speak of. Global state everywhere. But doing the modifications I did were pretty easy all things considered. So yeah, the code is clean, if "ugly" when viewed from a modern standpoint. It was definitely fun to do either way! Idk what other changes I'll make, we'll see. Especially since I don't know the architecture very well yet
- reactordev 9mo agoOf course! Global state IS game state! It definitely was an amazing codebase for the time. You didn’t need to get hung up on architecture because it is very singular… it’s just a level, you, and the entities that were created when the level loaded. There’s no pre-caching, no virtual textures, no shaders (there are materials for later quake 3), it’s just pure load -> set -> loop. The “client” renders, the “server” has the state.
- ethin 9mo agoHonestly I've been wondering if I could do this with Ezquake or similar (and how hard it would be). Problem is that Ezquake has VoIP too and a bunch of other things (and is for whatever reason stuck on SDL2 (?)), so that might be quite annoying to do. And I don't know if they'd accept my contributions. Worth a try though I suppose?
- ece 9mo agoVC++ 6 was made by the same company that made VS Code.
- dajt 9mo agoBut not the same people or culture.
- pjmlp 9mo agoExactly, VSCode is done by well known people from the GoF book, Visual Age and Eclipse IDEs.
- dajt 9mo ago> Exactly, VSCode is done by well known people from the GoF book, Visual Age and Eclipse IDEs. That doesn't mean it's any good - which I admit is subjective. I'm sure they've put good devs doing a ton of work into making an IDE they believe in but having used it for a couple of years I don't enjoy the experience. Nothing feels obvious or simple, and trying to work in Python or embedded C++ compared to using Jetbrains tools feels like I'm missing so much. I've gone back to pycharm community edition because IMO it's light-years ahead of vscode in usability. I guess people say the same about emacs. I maintain VC++ was a better experience than vscode; whoever is working on it.
- janosch9001 9mo agoI tried to capture that specific VS 6.0 vibe with a text editor color theme I made, Studio 98 (for Visual Studio Code and Vim/Neovim). I actually sampled the hex values from Fabien Sanglard’s Quake/NT 4.0 blog screenshots to update it. Link: https://github.com/jnz/studio98 https://github.com/jnz/studio98 Can't fix the Electron sluggishness compared to VS6, but at least the syntax highlighting feels a bit like home.
- dajt 9mo agoI used Visual C in the early 90s and it was a dream compared to vi and whatever C compiler the various unices I was using had.
- pjmlp 9mo agoThat was already the case when comparing the Borland compilers for MS-DOS, and Windows 3.x. Hence why I eventually found refuge in XEmacs, and DDD, until IDEs like KDevelop and Sun Forte came to be.
- dajt 9mo agoI never used the Turbo stuff, but I know they were very good for the time by reading about people using them in Dr. Dobbs. I started with C on the Amiga and then went to UNIX and only later starting doing Windows coding on Windows 3.1.
- krystalgamer 9mo agoThe part messing up the workspace files (dsw) is very important for anyone that plans to use Visual C++ 6.0 with git! There's also an easy fix: https://github.com/krystalgamer/spidey-decomp/blob/ad49c0f5f66c00593cd6903c96000a145d10641c/.gitattributes#L7-L10 https://github.com/krystalgamer/spidey-decomp/blob/ad49c0f5f...
- stevefan1999 9mo agoI like the font of old school IDEs like this. At one point I used Fixedsys Excelsior and Consolas exclusively, until I needed to run IDEs on Linux. I still love those blocky fonts but the lack of CJK alignment is quite annoying.
- int_19h 9mo agoIt needs to be Visual C++ 5.0, since 6.0 came out in 1998.