I watch a lot of youtube, anybody who knows me would probably put that near the top of ways my friends and family would describe me to a stranger. A decent sized portion of the content I consume on youtube is engineering focused. Usually web dev or machine learning topics, typically about things I want to have a deeper understanding of, but, and I’m sorry to say, most of it winds up being background noise. There’s exactly one topic I kept meaning to entertain myself with, but never really found myself pressing fot it: C++.
A bit of background, I’ve used C++ several times in my past. One of my first big projects was a Notepad++ styled text editor I called “DarkCode”. It was an experiment in Windows programming, implementing Scintilla (which never wound up happening) but most importantly: getting to understand this “Hard Mode” of Languages. Listen, as a PHP developer prior (and after) it was a very tough transition.
Years later I’d start developing DOS / CommandPrompt / Console based Text Adventure games, again with C++. This was… okay. I did do a thing, but I had a very different set of goals in mind for what I was trying to accomplish, but most importantly: how. See my issue with all of my endeavours into C++ would typically be because as a Web Developer, I’d try to approach software creation like a web app. It doesn’t quite work out that way. It’s possible, but it’s a lot of pain. I eventually gave up on this too out of frustration.
I did any of this because back when I was in high school I’d read an article about this hot new thing dropping: DirectX 8.0. “Make your own games!” it said, “It’s free to use!” it said. I’d already been interested in game development at a very young age (About 8yo or so I believe), but this article? it got my mind racing of all the possibilities. I’d never been able to capitolize on it, and in fact any adventure into the land of C++ had resulted in frustration, annoyance, confusion, and a lot of nights where I went to bed very angry.
Instead over the years I’d try to use “sane languages” to achieve my goals, and if im being honest with myself, Actionscript was the only one that could get me anywhere close to what I wanted. Everything else since then has been an exercise in futility.
Enter just over 7 days ago.
I’d stumbled across a somewhat popular video that effectively informed me of the math algorithms I’d need to make a very basic barebones raycaster renderer. I’ll never forget this video, and it has effectively changed my life.
I couldn’t wait for work to end so I could close my connection to work, install and open Visual Studio, and get cracking. When I got to the end, and I could see it running, I was immediately enthralled with what I saw. It’d been a very long time since my mind raced again that hard over the possibilities to expand what i’d just written.
So I spent the next couple days refactoring the code, learning how it works, splitting the code into logical classes, using all the knowledge i’ve attained from years of Unity and Unreal engine playing, and taking direct inspiration from Id software games of my youth. I’d managed to take what the 10 minute lesson installed into my mind gave me, and expand upon it into a working set of systems.
And before I’d know it, I was writing C++ without looking up reference material. About 21 git check ins into the project and I’d realized that the language and I were finally “clicking”. And this is what I wound up with: a modified renderer that filled the whole screen, scaled with the window, fixed some bugs, here and there, fixed up the movement code a bit, all kinds of things. I was sligning features and deploying them fast as lightning. And to add the pressure? I was developing it live on twitch and open source to boot. Which I’ll be honest has been incredibly useful. The Twitch Live Programming community has been extremely helpful in spotting flaws, helping me fix bugs, suggestions of improvements, all without judgment.
This was the first capture I made of the engine. It was the place in the code where I felt comfortable finally calling it “mine” and not just a light modification of someone elses code I blatantly copied wholesale. Everything had been re-touched, modified, and majorly refactored. I called it “Alpha 2: The ‘SmoothMoves’ Update” and released it. I was particular proud of the movement code allowing for far smoother movement. This has also dangerously set a precedent for me to create Update names (which was inspired by Minecraft).
You know, that image was captured a few days ago. I barely recognize it from the build that’s available now. Which by the way is also released as of last night, known as Alpha 3: The “I Have No Legs and Must Move Freely” Update. The movement code had received a massive overhaul to be far more independently controlled, and now includes strafing and mouselook. I’ll make another blog post about this separately however, as this one’s getting a bit long in the tooth and out of scope.
A developer his entire adult life, Kyle spends his professional and free time finding new and interesting ways to solve the same boring problems (less he drive himself insane).
When not slinging code, he can be found being the happiest father and husband to the best little family ever!