Programming a first person shooter from scratch like it's 1995

1,473,393
0
Published 2023-03-05
3D like you've never seen it before!

PATREON: www.patreon.com/jdah
TWITTER: twitter.com/jdah__

CODE: github.com/jdah/doomenstein-3d

GITHUB: github.com/jdah
EDITOR: NeoVim
CONFIGS: github.com/jdah/dotfiles
THEME: gruvbox

RESOURCES:
* DOOM Game Engine Black Book: fabiensanglard.net/gebbdoom/
* ‪@Bisqwit‬ 's video:    • Creating a Doom-style 3D engine in C  
* Fabien Sanglard's "Build Engine Internals": fabiensanglard.net/duke3d/build_engine_internals.p…
* DOOM source code: github.com/id-Software/DOOM
* The DOOM wiki: doomwiki.org/

0:00 Intro
0:47 Why?
1:21 Wolfenstein 3D-style
2:55 DOOM-style
9:50 Level Editor
14:35 Proof of Concept
15:53 Outro & Thanks

All Comments (21)
  • @btarg1
    I find it very interesting when developers challenge themselves by not using existing engines, frameworks etc, this looks super difficult so props to you!
  • @loleq2137
    What a mind-boggling project. This man is a powerful programmer. I aspire to someday come close to his level of speaking with computers.
  • @Rabbit-o-witz
    I started to learn programming 3 months ago. I cannot imagine myself writing a single line of whatever black magic fuckery you did in this video. Seriously, to me, people that can come up with stuff like these are geniuses
  • @Bisqwit
    Thanks for the mention (in the video description!) Some of this looks quite familiar. Especially the part from 7:28 to 8:06.
  • @darkriff777
    The biggest jaw dropper in 1990's programming is the use of mathematical tables in memory and other tricks to cheat calculate results rather than relying on C or C++ math libs to do calculations in order to optimize for speed. Also, they were limited to using very little memory. Lastly, the display functions were mostly written in assembly to also optimize for speed, and that was a bitch to do. People like Ken Silverman and John Carmack were absolute beasts with their respective engines.
  • @BLAZE_GLITCH
    It's really quite interesting to see you come up with all these fun challenges Especially when nowadays literally every game dev chooses to use a game engine, making a game from scratch is a topic that no one really talks about
  • @btarg1
    A huge flex would be making this able to build for 486 platforms like the original DOOM, so you could play on period-accurate hardware!
  • @Lim95
    babe wake up new jdh upload
  • @lordplebius483
    Whats crazy is that the coding shots aren't even sped up.
  • @TriVoxel
    I actually think the ray traced lighting gave your engine a really unique look! What an awesome project!
  • @jamesonahill
    As soon as you got the lighting and pallettization in I instantly grew jealous that I will likely never make something that nails this aesthetic so well in my lifetime
  • @Edward135i
    "Programming a first person shooter from scratch like it's 1995" in 1995 Rare was creating Goldeneye for the N64 on SGI workstations, not a kind of 3d doom clone, that is insane to think about how quickly computer technology was moving at the time.
  • Incredible work. Here’s a tip you didn’t ask for. To get that smooth stepping texture mapping look, you’ll have to subtexel correct each vertical scanline. Just passing this along because it took me a while to get right
  • @jeremym5331
    this is absolutely mind blowing i hope to be half the dev you are one day man
  • 1:47 I never gave much thought to software rendering, but that caught me off-guard! A buffer of pixels is all it boils down to. Incredible!
  • @Grimm-hb7ek
    The length of this video was criminally short I need more jdh😂🧟‍♂️
  • @Stingpie
    What a coincidence! Just a couple weeks ago, I started on my own doom-style engine using Bisqwit as a reference. For my engine though, I went entirely with vector based graphics. I also, in accordance to 90's standards, only used Borland graphics interface. I definitely have not made as much progress as you, but I think we're trying to reach different goals. Regardless, great job!
  • @moretti740
    That's awesome. I'm doing something similar in Rust for a web browser. I also had the same issue with fixed point math and switched back to native fp. Best decision ever. Rust basically walks me through the bugs to fix them before even running it. I should make a video. my render objective is to show how you can make an entire render using trigonometry knowledge from school. I'm using Permadi's raycasting tutorial and the Wolfenstein engine Black Book as a base. I run it on WASM in the browser. Keep it up!