Fabien Sanglard writes detailed code reviews of classic game engines such as Doom and Quake, and has published books on them.
Commenters rank it among the best technical blogs, praise his game engine books, and like the minimal, distraction-free site design.
You'd be committing the classic fallacy of "i'll just work on these tools, then make the game", which while a fun exercise, almost never results in a game being released.
Think about what your ultimate goal is:
- you want to make games: use an existing engine. don't bother with half of the features, focus on whether the game is fun or not. add polish (like character animation transitions) later. use stock assets to begin with.
- you want knowledge to work in games industry but not actually release a game yourself: learn all the bells and whistles of Unreal Engine
- you want to make things that are unlike regular games: develop your own code
- you don't ever intend to release a game, you just want to see how they're made: just read other people's code. Read the Quake engine source code and https://fabiensanglard.net/ as a companion site.
If you're talking about using raylib, that is also a game engine, just a simpler one. We can look in both directions; if this is an exercise exclusively for personal learning and development, why not also learn about what's done for you by that library and by the GPU, etc? Occlusion, rasterisation, depth buffering, perspective-correct texture mapping...
"the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity" https://prog21.dadgum.com/177.html
this is what game engines do - they abstract the essential complexity present in all games, and keep it from infecting the…
The biggest thing is lower resolution. 640x480 at 256 colors was a high-color, high-resolution mode at the time.
Small bitmaps, with indexed palettes and run-length-encoding to further shrink them.
Caches were tiny, memory was slower, hard disks massively slower, and if you had to hit a CD to load data, forget about it. So packing data was important, and organizing data for cache locality, and writing algorithms to take advantage of instruction pipelining and avoid branches.
Fabian Sanglard has a great blog that goes into the nitty gritty of a lot of these techniques as used in different games.
https://fabiensanglard.net/
I had a Cyrix 6x86 when Quake first came out. My disappointment at how poorly Quake ran on it was significant, especially because pretty much every other game at the time ran well on the Cyrix. The FPU performance in Quake was doubly handicapped on the Cyrix: not only was its FPU slower than the Pentium's to begin with, Quake's code was indeed hand-optimized for the Pentium's FPU pipeline. Fabien Sanglard's writeup of Michael Abrash's optimizations for Quake goes into great detail: https://fabiensanglard.net/quake_asm_optimizations/
This is awesome! Great work! I love playing around with these older game engines that have source available, its really neat to explore how they work, and fiddle around with it.
If you haven’t already, Fabien’s write ups of the various ID engines are a joy to read: https://fabiensanglard.net/quake3/index.php
Shameless plug: I also like to play around with old game engines: https://github.com/bishopdynamics/Continuum
>we do well to remember what actually happened rather than just lionizing one man
This statement alone was worth the price of admission. As a fan of game engine history (highly recommend Fabian's books: https://fabiensanglard.net/), I have to remember that all of these things were built on the shoulders of giants. It wasn't just one person that contributed, even if it may be only their code that lives on.
Rebecca was well known in emulation circles for her high quality work on various games of the era, often pushing the hardware in unusual ways. This article is one of my favorites, detailing the wacky tricks she used to get Another World's 3D rendering system running acceptably on a Super Nintendo
https://fabiensanglard.net/another_world_polygons_SNES/
Rest in piece, you absolute legend.