[HN Gopher] Rustenstein 3D: Game programming like it's 1992 ___________________________________________________________________ Rustenstein 3D: Game programming like it's 1992 Author : facundo_olano Score : 158 points Date : 2022-02-02 19:18 UTC (3 hours ago) (HTM) web link (tech.nextroll.com) (TXT) w3m dump (tech.nextroll.com) | gh123man wrote: | 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! | | Some of the interesting bits of the engine are open source: | https://github.com/gh123man/Portal-Raycaster | | 1. https://blog.sb1.io/gateescape/ | dormando wrote: | Looks like the engine is missing the fish-eye correction in the | ray-cast calc. I love writing these engines for fun :) | ahuth wrote: | Adding my own raycasting implementation, in... what else... | React/JavaScript -> https://huth.me/raycast/ | Koshkin wrote: | Need a map editor now :) | markus_zhang wrote: | I'm wondering if anyone develops a spinoff exactly as back in | 1992. | | 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... | jacquesm wrote: | A simple raytracer is also a good step in that list. | pjmlp wrote: | Which in 1992 would mean getting acquainted with either MASM | or TASM. | jacquesm wrote: | I did it in '86 using a DSP32 :) | | Patience... A couple of hours to render a simple scene at | 800x600, and displayed using dithering due to a lack of | colors in the palette. But it worked. | pjmlp wrote: | Uau, that is when I started in computing with a Timex | 2068, naturally ray tracing was not even on my radar at | the time. | | Did it also do the classical line based rendering? | jacquesm wrote: | It was the most stupid and naive implementation possible, | classic reverse raytracing starting from a distance from | the center of the virtual camera plane and branching a | few times to get the basics of reflection and a light | model to work, then adding other features bit by bit. I | don't really remember all the details, but I do remember | that it was agonizingly slow on the CPU, the DSP made all | the difference and allowed me to add a couple of | features. The main loop was on every pixel of the virtual | camera plane. I no longer have that code (or the DSP, for | that matter) but it was a fun exercise and it taught me a | lot of matrix/vector math. | | The dithering code was also interesting, because my | graphics card could not do true color I put 3x64 RGB | shades in the palette and then cranked up the brightness | for tetris like sets of pixels to simulate a true color | display. Worked pretty well. | | This was the DSP board: | | https://www.signalogic.com/images/Ariel_DSP32-PC.jpg | | I managed to gently overclock it to 24 MHz without | problems, it did get a bit warmer but nothing too bad. | aninteger wrote: | Bonus points for using the same tooling and languages from then | too. 6502 assembly, then a bit of 16 bit x86 assembly, and | finally some C with Borland's 1992 tooling. | hnthrowaway0315 wrote: | Yeah definitely! Is there any modern tools that can 1) run on | native platform and 2) significantly improve dev experience? | I guess the guys who developed Nox Archaist used some modern | tools, and on DOS we might have something new because of a | large retro community. | | The more I think about it, the more I believe if someone can | pull this off, although many skills learnt are useless in | modern programming (like 6502 asm or 80286 asm or whatever | tricks to get the games run smoothly on retro platforms), but | the amount of effort definitely would pay off. | | I don't think one needs to walk the full Carmack road. I | think whoever goes from Shadowforge to Quake is impressive | enough. Plus one does not need to implement all these games, | many of them share similar engines. | | (Bad formatting...) | | June 22, 1996 Quake id Software GT Interactive Programming | | May 31, 1996 Final Doom id Software GT Interactive | Programming | | October 30, 1995 Hexen: Beyond Heretic Raven Software id | Software 3D engine | | December 23, 1994 Heretic Raven Software id Software Engine | programmer | | September 30, 1994 Doom II: Hell on Earth id Software GT | Interactive Programming | | December 10, 1993 Doom id Software id Software Programming | | 1993 Shadowcaster Raven Software Origin Systems 3D engine | | September 18, 1992 Spear of Destiny id Software FormGen | Software engineer | | May 5, 1992 Wolfenstein 3D id Software Apogee Software | Programming | | 1991 Catacomb 3-D id Software Softdisk Programming | | 1991 Commander Keen in Aliens Ate My Babysitter! id Software | FormGen Programming | | December 15, 1991 Commander Keen in Goodbye, Galaxy! id | Software Apogee Software Programming | | 1991 Commander Keen in Keen Dreams id Software Softdisk | Programming | | 1991 Shadow Knights id Software Softdisk Design/programming | | 1991 Rescue Rover 2 id Software Softdisk Programmer | | 1991 Rescue Rover id Software Softdisk Programmer | | 1991 Hovertank 3D id Software Softdisk Programming | | 1991 Dangerous Dave in the Haunted Mansion id Software | Softdisk Programming | | 1991 Dark Designs III: Retribution Softdisk Softdisk | Programmer/designer | | December 14, 1990 Commander Keen in Invasion of the Vorticons | id Software Apogee Software Programming | | 1990 Slordax: The Unknown Enemy Softdisk Softdisk Programming | | 1990 Catacomb II Softdisk Softdisk Developer | | 1990 Catacomb Softdisk Softdisk Programmer | | 1990 Dark Designs II: Closing the Gate Softdisk Softdisk | Programmer/designer | | 1990 Dark Designs: Grelminar's Staff John Carmack Softdisk | Developer | | 1990 Tennis John Carmack Softdisk Developer | | 1990 Wraith: The Devil's Demise John Carmack Nite Owl | Productions Developer | | 1989 Shadowforge John Carmack Nite Owl Productions Developer | syngrog66 wrote: | thanks for reminding us: Carmack was a MACHINE in those | years. and churning out one impressive/hit game after | another | hnthrowaway0315 wrote: | Second thought, if one wants to develop DOOM as Carmack did, | he would need a NeXT workstation, might not be easy to come | by TBH, but maybe there is am emulator good enough. | syngrog66 wrote: | and hard-to-press keys. uppercase letters only. and you are | ONLY allowed to backup manually, and to 1.4Mb (or worse) | floppies | | This is The Way | | kids: off my lawn | nyanpasu64 wrote: | I wonder how practical it would be to create a Wolfenstein 2D | with the same level design, but played in top-down view. | syngrog66 wrote: | heresy! | | _cough_ | | Castle Wolfenstein, by Silas Warner for MUSE | | kids: get off my lawn | facundo_olano wrote: | I had the same idea while working in this project. Either play | directly from the map view (the prototype sort of already does | this) or even use a rogue like ascii interface (which, yes, | would probably be similar to the Silas Warner game) | kibwen wrote: | Behold, Wolfenstein 1D! | https://www.youtube.com/watch?v=QSvECzuaYn0 | fabiensanglard wrote: | 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. | | I would add to the list of feature to tackle next: | | - 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. | facundo_olano wrote: | Thanks for the suggestion, and for your book and your blog | posts, by the way, they are the main reason we thought about | tackling this project! | atum47 wrote: | I'm a sucker for wolf 3d technology... Great job!!! | pjmlp wrote: | I guess using Rust kind of fits the boots of Turbo Pascal for | 1992. | 10x-dev wrote: | Turbo Pascal is small, fast and has a clean syntax. Rust fits | in none of those shoes (yet, I suppose). | stjohnswarts wrote: | Rust isn't fast? O_O . The others I can see... | philipkglass wrote: | Turbo Pascal was famous for compiling projects quickly. The | current rustc compiler is not. The output of the rustc | compiler can be better optimized for run time than the | output of Turbo Pascal, though. | pjmlp wrote: | Yes, the compilation speed wasn't something I had on mind | when I made the remark, maybe I should have abstained to | play clever. | | Anyway maybe when Cranelift gets more mature. | pjmlp wrote: | It fits on having a _var : type_ syntax, naturally it isn 't | Turbo Pascal 6.0 with the Turbo Vision IDE, given 1992. | | I still hope that alternative backends like Cranelift will | fix the compilation speed. | filereaper wrote: | I'm guessing the infamous inverse square root algorithm was used | originally for ray-casting described in the article? | | Fast Inverse Square Root: | https://news.ycombinator.com/item?id=24959157 | | Excellent article btw. | adamrezich wrote: | this project is a pseudo-remake of Wolfenstein 3-D; Fast | Inverse Square Root as we know it wasn't in an id game until | much later with Quake III Arena | AnIdiotOnTheNet wrote: | Fast inverse square root was part of the lighting calculations | in Quake III IIRC. Nothing so obtuse is required for the simple | ray-casting demonstrated here. | lkxijlewlf wrote: | Is there anything like this for Voxels (what's used in Roblox, | MineCraft,etc)? | dejv wrote: | There are few articles on 0fps blog: | https://0fps.net/2012/01/14/an-analysis-of-minecraft-like-en... | | Readable implementation (in C) is this: | https://github.com/fogleman/Craft | ziggus wrote: | Isn't Minecraft a plain old polygon renderer? | jacquesm wrote: | Very large textured voxels! ___________________________________________________________________ (page generated 2022-02-02 23:00 UTC)