Andre LaMothe's prior book, Tricks of the Game Programming Gurus, was literally life changing for me.
I was in my late junior or early senior year of high school when it came out. My stepfather had a 386/20 and then later a 486/33, a Borland C compiler, and a generic 700 page "Learn C" book at home, and I had worked all the way through the book. But I couldn't for the life of me figure how in the world to bridge the gap between the extremely slow, "high res" 16 color graphics libraries that came with the compiler, on the one hand, and what Wolfenstein and Doom were doing, on the other, both of which I was utterly entranced by.
And then I saw LaMothe's book on a random shopping trip to... Software Etc, I think? I'd never seen anything like it. And I knew I had to have it, immediately.
After getting that book, I was diving headlong into relatively fast VGA C programming in mode 13h (320x200x256 color). I spent the afternoons of my senior year of high school writing relatively fast texture mapping routines and trying to get full screen 30+ fps interactive scenes and levels running, which I think I mostly did. I had to write my own paint program, too, for 256 color palettized textures. It was thrilling.
Thanks largely to my time with that book, later when I was introduced to the internet the first week I started a Computer Science program at college, I was primed to dive into all the awesome C open source game libraries and tools (like Allegro and DJGPP) that I found online, and I was making commercial games and working in the guts of the Quake and Quake 2 code bases two short years later. (The book and then the internet were not, however, great for my college career)
I know there are corny parts of the book, and maybe things that weren't as cutting edge as they claimed to be. It doesn't teach you how to actually write actual Doom, of course.
But prior to the widespread roll out of the internet, it's hard to get across just how inaccessible most of the knowledge in the book was, at least for a high school kid like me. It really was like turning on a light switch when I got it. Sometimes something is just at the right place at the right time for someone, and that's what that book was for me.
Very similar story here. I was in middle school when the follow-up Tricks of the Windows Game Programming Gurus came out [0]. I read it cover to cover and proceeded to buy as many Premier Press books I could get using money I'd save from doing chores around the house. This wasn't pre-Internet but the best material was by far still in books. My dad would pay $5 per hour so if I worked hard I could buy another book after a weekend of yardwork. Those middle and early high school years were incredible. You could still understand the cutting-edge and a single person could still make something big like RollerCoaster Tycoon or Doom. I made a bunch of games, isometric ones, worlds in D3D and OpenGL, physics sims, learned CS algorithms, made pixel art and 3d models in 3ds max, and even made my way to a game developer's conference as an awkward teenager. The only downside to all this is it pulled me away from schooling. I probably could have gone to a better university and had an easier time the first few years of career had I put just a little more effort into classes, but that's life. No regrets.
I have such nostalgia for that particular moment in time, and for me it was the Renderman Companion and Advanced Animation and Rendering Techniques. The web was still small, and the information density contained in Borders Books or Barnes & Nobel was just completely immersive. Lots of snowy Saturday trips to the mall with my parents and negotiating the purchase of another hefty computer book.
As someone who grew up in similar circumstances in the 90s but in South Africa (no home internet, no books, no friends no help at all) and then finally found Denthor of Asphyxia's tutorials (as well as PCGPE and eventually Huge), I was super gutted to find there wasn't really a South African graphics coding scene, it was basically just him :/
Mode 13h changed my life and set me on the course to being a graphics coder today (along with an email from John Carmack!), it's been such an amazing ride with hardware getting exponentially faster every year (RIP to that). I ought to get mov ax, 13h; int 10h tattooed along with 0xa0000, 0x3c8, 0x3c9 or something :)
Andre LaMothe, my counterpart writer for Waite Group Press. I wrote “The Black Art of Windows Game Programming” in 1994. Mitch (Waite) loved those “Black Art” titles.
Edits for spelling and year, which I’m still not sure about.
Man I LOVED the Black Art of Windows Game Programming! I was in high school when that book came out and I grabbed it as I was curious about game development and development in general. Although it was over my head at the time, 25+ years later into my development career and I credit this book in having had a huge impact on that as it really furthered my interest in programming. Thank you!
Not to speak ill in any way of your guys’ works, I really enjoy these books for their nostalgic qualities - both LaMothe, yours, as well as a few other ones like the RTS Game Programming (1997?) from one of the AoE developers. I have a physical collection of majority of the “greatest hits” from 90s and early/mid 2000s - mostly Engine/Graphics type stuff. It’s nice to read and see how people solved issues having fewer abstractions and layers than we do now, potentially solving things “on the fly” as it were, not really knowing the One True Way but making things work one step at a time all the same. In hindsight, these books were written at a time where hardware acceleration was taking off, so it adds to the nostalgia somewhat.
The most recent holy grail of a book for me has been Luna’s D3D11 tome. I haven’t kept up since.
It would be interesting to see the list of those books.
Some would enjoy nostalgia and some perhaps would actually learn something from them. May be you can recommend a few titles that would be relevant for today or simply fascinating, regardless of their relevance."
Thanks for giving me (and others) such a great/fun resource! I recall at least in LaMothe's at the end there was a contest to make the best mod/improvement off of the book's engine. Do you know if those actually happened and if the winners are accessible anywhere?
I’m so humbled by your comment, and the one below.
I really knew nothing about “game programming” when I wrote the book, but I did know a few things about graphics programming, and in particular a thing called “WinG” that was a very short-lived extension to Windows that I had used a lot in a product I helped develop.
But most importantly for me, I wanted to write something that inspired a young person of the right inclination to become as fascinated by programming as I was.
I still have this on my shelf and worked through it cover to cover more than once in middle and high school in the 90's. LaMothe was a massive inspiration and, while I'm not totally convinced that these types of project-based instructional books are as relevant in the 2023 world of Github / blogs / etc, I really miss being walked through a complex piece of software from beginning to end with commentary and supporting code in a giant book that you can touch and feel and flip through the pages of.
Also very much worth shouting out Mark DeLoura's 'Game Programming Gems' series -- I'm not sure how it even happened, but I got a chapter published in the first volume while being a 17 year old kid who had zero professional experience in any industry of any kind lol (I just replied to a call for submissions on Gamasutra, was told 'ok code it up and write a paper' and I did. And they printed it!)
> I'm not totally convinced that these types of project-based instructional books are as relevant in the 2023 world
I got a lot out of Crafting Interpreters, typing in the bytecode VM by hand and working slowly through the book. Stitched a lot of things together in my mind which previously had only been half-understood research papers.
In hindsight, I really had no idea what I was talking about (especially regarding performance with large amounts of polygons) but the math did end up seeming to be good; I actually went back a couple years ago and took parts of it for some other 3D projection / line-plane intersection thing I made and it still worked. Super cool experience either way being given an opportunity so young and seeing it come to life!
I had another idea for a Gems 2 article that never made it in time (using grayscale UV texture maps on a 3D model to distribute a fixed amount of weight across model vertices for use in a physics simulation -- ex. a hammer weighs X but the metal part is much heavier than the wooden handle) but again was literally just making things up out of thin air to have something to contribute LOL
This brings back some fond memories. I still have a copy of the book "Tips and
Tricks of the Game Programming Gurus", though it's not in very decent
condition. It has this ray traced image on the front cover (with a crazy
monster) that is very characteristic of the early 90s. Though, I could never
help but notice what appeared to be an error on the staircase banister where
it looked like the normals were facing the wrong way. So it looked hollow. Or
maybe the (object's) matrix was wrong. Anyway. The book really had me hyped up
to create some virtual worlds. Like DOOM.
I learned a lot from the book but some of the topics where a little too
advanced for me at the time, as I was still learning C and grappling with x86
assembly language.
However, I rediscovered the book several years ago and implemented something
similar to the ray caster (which had really impressed me at the time) in
DOSBox. I tried to optimize the algorithm and add a few enhancements. It was
lots of fun! A genuine (early 90s) retro experience! I think I even had to fire
up Turbo Debugger to solve a few problems.
Game Programming Gurus was a good book, but I had some gripes about it after later learning 3D graphics. The book prominently touted teaching you how to made a Doom-like clone, but instead taught you how to make a Wolfenstein 3D type ray casting engine on a regular grid. Its ray casting engine was also flawed in casting rays with at equally spaced angle steps rather than distance on the projection plane. It was good enough visually with spherical distortion / fisheye correction, but it's not the same as a proper projection.
Tricks of the 2D and 3D Game Programming Gurus (two of André's books) got me thinking for the first time about working as a game dev, launched me into my career and two decades later I've got that to thank him for.
Tangential, but love and remember the inside cover quote about integrity being a lonely path to follow. Thought about that one time to time over the years.
Pretty sure you're thinking of Abrash's Graphics Programming Black Book (understandable). Abrash was a developer on Quake and the GPBB has a couple of chapters on it at the end IIRC.
Whereas: this book was written by André LaMothe, who did not work on Quake. It predates Quake and AFAIK doesn't mention it.
Also worth noting is Abrash's Black Book is pretty specialized for the x86 PCs of the 90s. It's not really all that applicable to game programming today, unless you're deliberately doing retro development for 486/pentium class machines w/VGA.
It's kind of mind boggling how things have changed from doing your own bit blitting to having Unreal Engine doing all the hard work and you just coding up the game logic.
Oh no you are right! My mistake - my first “real” programming job was at a game studio in 1997, and I devoured both of these books (well, and more, including Expert C Programming by Peter van der Linden). Great books.
I owned a copy of this book. I tried a few lines of code but at that point in time it was too difficult for me to fully grasp it. I was still programming in basic at the time and the leap to a different language was too big. I do regret throwing it away...
This was a very good book. Together with the code on the cob series by Chris Hargrove of 3DRealms, it gave a great insight into 3d engine programming, account, memory management etc
Oh, man, the nostalgia. I remember borrowing this. It taught me the basics, mode 13h, direct memory access (0xA0000000 anyone?), palette swaps, the works. I remember getting a wave file extract from Duke Nukem 3D playing in my primitive cyclic buffer.
I never went in to game dev, but I did learn a lot from the experience.
I just want to point out how good of a dude Andre Lamothe is. I got "Tricks of the Game Programming Gurus" in 1994. We couldn't afford a computer though so I'd just read through it over and over through the summer of 94. I didn't understand C at all, so I just kinda reasoned my way through it.
Not great to learn that way. I finally got a computer in 1996 and had trouble getting the code examples setup... So I called Andre at this home! I was 15 at the time.
Back then, people generally had their number in the phone book so I somehow found the number for "Information" in San Francisco (Information was Google before google, for phone numbers basically. It had all the White Page information).
Anyway, I call up, and his girlfriend answered the phone. She seemed a little disgruntled (maybe just woke up) but I asked her if I could talk to Andre. He got on the phone and actually explained to me that I needed to link the libraries needed in the C++ GUI (I vaguely recall that the CD maybe came with one?)
After that he talked to me about a bunch of stuff about work ethic and programming philosphy. He had a super duper insane work ethic, writing all those 900 page books plus all the code and example games for that. And he was grinding them out pretty often, plus contributing a lot to other books, plus doing his own startup. 100 hours a week for years, and he's pretty smart so he works quick.
Anyway. I really took his advice to heart and when I got into the working world I took jobs very seriously and worked like a madman. In about 6 years I went from broke to basically having enough money to retire. And I really owe it all to him and that conversation we had that day. The lesson I took away from it wasn't to kill yourself working but that it's better to sacrifice some time upfront than have constant money issues. As a kid from a poor family this was huge in helping me get out of poverty. I never got a degree but really just his advice about hard work made it possible.
I got a chance to reconnect with him on Linkedin a couple years ago and share my story and he was really thrilled with how it went and took a lot of interest. He's continued on with all sorts of game programming startups and we kinda talked about it.
He could have easily done web development and made a killing doing his own startups but he was just so passionate about video games (keep in mind he was an adviser to Carmack). He led an army of people who went off to be game developers, though he said most pivoted to other things.
Andre was quite literally one of the most influential people in my life and I owe him a lot, and to this day I can't believe he'd take time out of his insanely busy schedule to help some kid all the way across the country, for no real gain to himself.
There seem to be a ton of "build games in python" and stuff like that these days. I haven't read them in detail but I would send my kids in that direction.
It might not be the super low level stuff like the 90's books but you're making a more complicated and complete game using a higher level language and all the libraries etc that really didn't exist back then (at least like they do now)
Can you recommend libraries that would be really fast on something like Raspberry pi zero machine? Perhaps you can recommend some low-level books from those 90s?
I grew up with this book in elementary school. I remember learning how complicated 3d graphics were at the time and eventually helped me with graphics in university.
I had this kicking around my home office for about 10 years. Never finished it. Started about 436235439 projects based on it. Thanks for the memories :)
If you want to make a game in 2023 you should just use an off the shelf game engine. If you want to understand how older 3D games were made then this will help. If you are writing a game in DOSBox with an old C compiler then it would be useful. Some of the book will deal with issues that machines of the time had and no longer exist so you probably would need to discount those for modern machines even if you wanted to write a software renderer.
Examples of the stuff that doesn't apply today are
* Graphics using VGA
* fixed point math for speed
* input output routines under DOS (keyboard, joystick, mouse)
* Sound under DOS
* Networking under DOS (null-modem)
* DOS interrupts
* 32bit stuff
* 80387 floating point
The parts of the book that discuss the maths are quite good.
Like others have said, it's more common to use an existing game engine these days, but if you want to do it yourself, the modern version that I think comes closest is Lengyel's Foundation of Game Engine Development series [0]. To me this series looks to be a rewrite and extension of his earlier book "Mathematics for 3D Game Programming and Computer Graphics".
The first book covers the mathematics needed, the second is on Rendering and is when it starts to get into real graphics applications. Third and Fourth are slated to be Models/Materials and Physics respectively, but neither have been released yet.
I was in my late junior or early senior year of high school when it came out. My stepfather had a 386/20 and then later a 486/33, a Borland C compiler, and a generic 700 page "Learn C" book at home, and I had worked all the way through the book. But I couldn't for the life of me figure how in the world to bridge the gap between the extremely slow, "high res" 16 color graphics libraries that came with the compiler, on the one hand, and what Wolfenstein and Doom were doing, on the other, both of which I was utterly entranced by.
And then I saw LaMothe's book on a random shopping trip to... Software Etc, I think? I'd never seen anything like it. And I knew I had to have it, immediately.
After getting that book, I was diving headlong into relatively fast VGA C programming in mode 13h (320x200x256 color). I spent the afternoons of my senior year of high school writing relatively fast texture mapping routines and trying to get full screen 30+ fps interactive scenes and levels running, which I think I mostly did. I had to write my own paint program, too, for 256 color palettized textures. It was thrilling.
Thanks largely to my time with that book, later when I was introduced to the internet the first week I started a Computer Science program at college, I was primed to dive into all the awesome C open source game libraries and tools (like Allegro and DJGPP) that I found online, and I was making commercial games and working in the guts of the Quake and Quake 2 code bases two short years later. (The book and then the internet were not, however, great for my college career)
I know there are corny parts of the book, and maybe things that weren't as cutting edge as they claimed to be. It doesn't teach you how to actually write actual Doom, of course.
But prior to the widespread roll out of the internet, it's hard to get across just how inaccessible most of the knowledge in the book was, at least for a high school kid like me. It really was like turning on a light switch when I got it. Sometimes something is just at the right place at the right time for someone, and that's what that book was for me.