Since I announced the Homebrew Journey series, I have been asked numerous times what I mean when I say “from scratch”. Some take this to mean simply that I don’t use libraries while others take it to mean implementing everything down to my own sqrt function.

If we want to be pedantic, we could argue that “from scratch” means bare-metal programming in assembly, or even lower than that if we consider operating system, etc. Technically, any of these definitions could be correct.

So, in a brief effort to clarify my position, “from scratch” in this case means that we will be using a very limited amount of the standard C libraries at first (with many, but not all functions eventually being replaced with our own), The Vulkan SDK and the Win32 libraries as we have to use them for windowing, etc. That’s it.

Otherwise, everything else will be written on-screen. So to cover a few points (but not all), our renderer (with exception of calls to Vulkan), the math library (vector and matrix math), input handling (with the exception of retrieving events from the OS) and asset handling are just a few of the many things to be created from the ground up. We aren’t making our own programming language and compiler. If you want to follow that, Jonathan Blow’s Jai language creation streams are a great resource. We won’t likely be dealing with our own string library either, at least not at first. This may change once we arrive at localization, however.

With all that being said, there may be sidebar discussions held outside the series on creating things like our own low-level implementations of sqrt, sin, cos, tan, etc., but I feel there is not a lot of value added to the main series by doing it there. If we do add those things to the game code, I will be sure to reference the videos as they are pulled in.

So, there you have it – my definition of “from scratch”.