Don't ever say "you can't..."

Just figure out a way how.

That way, by the way, is almost always "start working on the project."

I never thought I could make a game from "scratch" in C++ in just 72 hours... but Ludum Dare proved me wrong. In 2021 I was still a fairly novice C++ developer, having only taken two courses in it, but I decided to give it a go. My game was going to be a simple take on the horizontally scrolling helicopter game with the random tunnel that everybody seemed to have on every graphing calculator ever, but with a twist: gravity! Inertia! The goal is to keep exploring deeper and deeper into the randomly generated cave, using your thrusters to keep away from obstacles while collecting fuel and power-ups.

That game would evolve into a fully-fledged (as of now) beta released game called Splonking! You can find some info of my dev tools, the repo (it's 5000-6000 LOC... small potatoes for some, huge erm, potatoes for me as a one man band) and try the game yourself assuming you have a windows computer.

I've always dabbled in game design, from designing worlds in ZZT in the 90s to making a few text adventures and sim/strategy games in QBasic as a child. I've been close to developing a platform/metroidvania style game about three times now, but never have I caught on past developing a rudimentary engine and a few levels.

But now, I have a mostly complete game. And it's all thanks to my dive into the deep end mentality.

When I started my first goal was simply to have a ship that could move around the screen. I had never used SDL before, but enough reading the docs (read the docs, people!) and some tutorials/googling later and I had that. I added randomly expanding and retreating walls, laser turrets, and boom... I had a game. Not a great one, but for 72 hours, it was solid.

Over the next few years I developed off and on with Splonking, adding 10 original music tracks, a scaled background layer, and tons of new obstacles to avoid. It's heavily inspired by Lunar Lander and Asteroids, but there's no landing or shooting, only your clever flying to evade objects will win the day!

But during the process? Spending time learning and googling the hell out of things was my process. I had to dust off my Trig book (figuratively) and re-learn what an arctangent was and how to use it for a homing missile, I had to go through C++ templating like I was a newbie, and all in all, had to do everything from scratch.

Tools

I used mostly vanilla C++, working with the SDL Libraries (SimpleDirect Media Layer) to handle not only drawing to the screen, but screen resolution, collision detection, and all sorts of stuff. I highly recommend SDL to those that may be making a game or even anything that needs visualization in C++.

The best tool, however, is one that is yet to be written: I designed this game with the idea that stripped down, it could be made into a general purpose 2d gaming engine/framework, and that's still my end goal with the project. I've never created one of those, either, so again I don't know what I'm doing... so it's time to dive in!

In the end, I got through the experience with a finished game (that I'm going to continue to polish and work on in the future) that I find enjoyable, that looks good in a portfolio, and proves to myself that hell. If I can dream it, I can do it.

What I'm NOT saying is...

don't necessarily just dive in and start banging away with code. Start slow: design the objects you might need. The problems that need to be solved. Read the docs (I say that a lot) If you run into a problem that needs to be solved but you can't immediately figure out how, put some thought into it: some pseudocode, maybe, or some google or chatgpt, and you'll figure it out. Look for tools to do things for you: if I hadn't stumbled onto SDL, I never would've been able to complete this game, for instance, as it abstracts away much of the graphics, sound, and input handling to a much more friendly model.

Note that I'm also not saying just dive into a huge project headfirst with no preparation: if you're a budding game designer, say, don't expect to make the next Dark Souls or Final Fantasy if you've never even worked on pong before: you've got to keep your goals manageable. However, don't be scared.

I also wrote a compiler, and assembler language, for a simple computer architecture used in education called MARIE here and I had no idea how to write a compiler. Literally none. I knew assembly though. So what did I do? "Hmm, maybe I'll google 'how the compiler works' and read through that. Ok, what next? Two-Passes? EZPZ. Let's get this rollin'!

Goals should always be reachable, but you'd be surprised as a coder just how much you can get done through a combination of prior knowledge, problem solving, doc-reading, and just plain ol' elbow grease. Don't be afraid to start a project that seems out of your league: break it into smaller pieces, and attack.