Handmade Hero's new lessons about old-school game programming
gamasutra.com
gamasutra.com
I also wrote a Linux platform layer for it for fun [1] and for those who were skeptical about Casey's approach to portability (and there are a few people who pitch up who are/were aggressive about his choice of starting platform and/or his approach).
As you say, the documentation is barely to entirely non-existent.
Some of the architecture patterns are actually quite relevant for web development, especially the earlier lessons on decoupling the game layer from the platform layer.
The python-gdb macros are fantastic for debugging those painful managed-native problems one occasionally encounters. https://wiki.python.org/moin/DebuggingWithGdb I've used it to debug some really gnarly issues over the years. They're not perfect, but they're good enough to solve all of the problems I've encountered and used them with.
The idea is to write in real time every single line of code, and if he had tried to set up multiple platforms from the start he would have spent months in mostly boring and repetitive tasks, while he wanted to get to game programming as soon as possible, and get back to support more platforms later.
After the first few weeks setting up the windows code, the focus has been on the game layer mostly.
He is using mostly straight C (stating several times that he loathes C++) using a small subset of C++ features (function and operator overloading).
He started out with a widows platform layer, which implements generic services (input, sound, rendering, memory allocation) to get the system boot strapped. Since then he's mostly been writing generic game code (player movement, world rendering, time management, etc) which consumes the abstracted services and is cleanly separated from his windows platform layer. He architected it in such a way that it can be easily ported to other platforms once they have a game (he's brought up the raspberry pie a bunch a possible target platform).
The other people doing the ports have ported the "lessons" to other platforms so that people who don't run windows can (mostly) follow along, they are just viewers of the stream.
As for language choice, it is mostly C, the only C++ feature he uses (and why he compiles with a C++ compiler) is function overloading.
Aside from the game development angle, the host has his own strong opinions on programming in general that are quite unconventional, I do not agree with some but they are interesting nonetheless.
And in general, it's fascinating seeing programmer with 20 years of experience and which obviously loves his work teaching his craft.
Implementing low-level systems yourself is a valuable exercise for games as much as for any other software. You gain new appreciation for the things you took for granted, and pre-made abstractions become even more intuitive because you feel more in control of what's (probably) going on under the hood. One of my pet projects is implementing graphics primitives in software - you'd be surprised at the amount of tuning and iterations needed to make them fast, clear, and correct.
While there are layers of abstraction over all of this that I enjoy, I debate really how important it is for me as a game developer to worry about them.
In the old-school days the role of engine developer and game developer were the same.
Now I see there are two disciplines. Those that enjoy making video games and those that enjoy making video game engines.
And most importantly, if you want to deliver a complete game as single developer/designer, doing it from scratch is probably the wrong path to take. You would have to wear so many other hats besides just game programming.
But if you want to build renderers and learn the craft of rendering stuff in low level. Or you are doing as a hobby without intention to deliver a complete game with rich content, then this tutorial is good for ya!
On a side note, it's also pretty cool just watching him work in emacs. I just started learning emacs myself and he's wicked fast!