Ray casting is close to my heart as it's easy to understand and has a very high "effort to reward" ratio, especially to someone who is new to graphics programming. I built a game + engine around ray casting portals [1] (think the game Portal). It was a lot of fun trying to figure out how to bounce rays around a scene and intersect with different objects in the environment and immensely satisfying to have built the whole engine from the ground up. Though I'd probably not do it again. Your top-down ray debug view is very similar to one I came up with!<p>Some of the interesting bits of the engine are open source: <a href="https://github.com/gh123man/Portal-Raycaster" rel="nofollow">https://github.com/gh123man/Portal-Raycaster</a><p>1. <a href="https://blog.sb1.io/gateescape/" rel="nofollow">https://blog.sb1.io/gateescape/</a>
That looks great. I actually wanted to do a port of an id game in Rust for the longest time but never managed to find spare cycles.<p>I would add to the list of feature to tackle next:<p>- Convert from 320x200 aspect ratio to 320x240 aspect ratio. You can do that by converting from 320x200 to 1600x1200. This is easily done with x5/x6 which give you the same aspect ratio as 320x240 and you get no pixel selection artifacts.
I'm wondering if anyone develops a spinoff exactly as back in 1992.<p>You know, it would be interesting to follow the Carmack's route: start from Apple ][ programming for a couple of Ultima and Wizardry spinoffs, port them to PC. Then move to 80286 to make a scrolling engine for a double trilogy, and move up to 80386 to make a Wolfie clone, and continue from there. The point is to use real world machines or emulated env for development. One can probably learn a LOT programming by that way, although much if it is irrelevant in modern gamedev...
Is there a limit when looking at retro games when the retro-ness becomes a burden rather than "old games is simpler"? Obviously if you move too far back in history you end up with basically game specific hardware, long-dead assembler code. In the original wolfenstein it seems there is a bunch of code relating to things that manage weirdness that we no longer care about (paging, legacy graphics handling) which obscure the actual game.<p>Was there a "peak" in simplicity when games were at their simplest for a reader from 2022? That is, they are modern enough to not be obscured by historical weirdness yet still simple enough to be approachable? Perhaps Doom is simpler to understand than Wolfenstein for this reason?
Saw this recently too: <a href="https://mattiasgustavsson.itch.io/dos-like" rel="nofollow">https://mattiasgustavsson.itch.io/dos-like</a><p>"dos-like is a programming library/framework, kind of like a tiny game engine, for writing games and programs with a similar feel to MS-DOS productions from the early 90s."
Adding my own raycasting implementation, in... what else... React/JavaScript -> <a href="https://huth.me/raycast/" rel="nofollow">https://huth.me/raycast/</a>
There was a more recent Kickstarter that got my interest in the DOS style games restarted: <a href="https://www.kickstarter.com/projects/eniko/coding-history-3d-from-mode7-to-doom" rel="nofollow">https://www.kickstarter.com/projects/eniko/coding-history-3d...</a>
"a “Carmack” compression, which is John Carmack’s variant of the LZ (Lempel-Ziv) method. According to the Black Book, without much access to the literature, Carmack would “invent” an algorithm to later find out that someone else had done it before.". Wow, he really is amazing.
I'm guessing the infamous inverse square root algorithm was used originally for ray-casting described in the article?<p>Fast Inverse Square Root: <a href="https://news.ycombinator.com/item?id=24959157" rel="nofollow">https://news.ycombinator.com/item?id=24959157</a><p>Excellent article btw.
A direct link to the source code, for those interested: <a href="https://github.com/AdRoll/rustenstein" rel="nofollow">https://github.com/AdRoll/rustenstein</a>
see also: a series of posts (with accompanying code) on rewriting the doom engine from scratch:<p><a href="https://github.com/amroibrahim/DIYDoom" rel="nofollow">https://github.com/amroibrahim/DIYDoom</a>