Untitled Game 1: Four Weeks
It’s now been four weeks since I decided to work on my own projects full-time. My plan was to start by first working on a small and simple game that was very narrow in scope. Something I could fully complete within a month or two that would help me acclimate to a life where I set my own rules and schedule as well as get a better understanding of the work required to take a game from start to finish.
My efforts over the past four weeks have been: engine programming, gameplay programming, art, and music. But the only things that can easily be shown are visuals and audio, so here they are.
There are coins that line the grungy corridors. You must pick all of them up to advance to the next stage, and each increases your score. They emit light, so the hallways get darker as you collect them.
There are four eyeballs placed throughout that act as power-ups, and you can never escape their gaze.
There are skulls that patrol the maze, looking for those that steal their treasure.
But you can fight back by collecting an eyeball, giving you the power to defeat the skulls, which kicks off an energetic song.
Here’s a short video of everything so far:
After working on the same thing for only a month, I already find it hard to keep perspective and resist the urge to throw it all away. Every day is incremental progress and from that close distance it’s easy to lose sight of the total progress that’s been made.
That’s even more true when not using an engine because a lot of my time early on was spent implementing things that an engine would have had ready out of the box.
- Getting a window open
- Reading input
- Adding live code reloading
- Locking the framerate
- Adding a Blender script to export data
- Adding a logger
- Adding a math library
- Adding a basic memory manager
- Adding a basic renderer
- Getting a mesh rendering on screen
All engine-level stuff, and when I type it all out it sounds like a lot, but at the end of the first week it felt like I hadn’t made any progress at all because all I saw on screen was an unlit cube.
But the flip side is days that are spent working on art or audio or planning, and I feel like nothing has been accomplished because I don’t have any git commits for that day, but of course that’s not true.
It helps to show progress to close friends and family to get an external perspective.
Lack of an Engine
Another problem with not using an engine is that experimentation is made more difficult. If I think of a cool feature and want to try it out, I have to write it first rather than being able to use one that’s already been built.
But the benefits have been knowing each system intimately, and everything being small and simple enough to keep in my head. There is also satisfaction in knowing that every line is my own.
I told myself I’d re-evaluate the custom engine decision after one month and I stick by my decision. It makes some things more difficult but I think overall it’s been beneficial. It also helps to keep the project scoped well because adding a new feature requires a lot of work. In this way I think limitations help to breed creativity.
As a programmer there’s always the temptation to make every system a perfect abstraction that’s general in case of future needs, and I’ve had to resist that temptation at every turn.
I don’t have time to waste doing things now that I might need later. Instead I’ve tried to be very diligent about only doing the bare minimum needed to achieve the end-goal, even if it means it’s not perfect and I might need to redo it in the future.
I must accept that some of the code I write will be for this game only, but there will also be a lot of code that I’ll be able to move over to the next project, and I’ll likely be able to improve the architecture with lessons learned.
I must also accept that a lot of the code will be not good, but it gets the job done.
I treat every day like a job because to me it is. I start around 9AM, take a lunch break around 1PM, and finish the day around 6PM. I’ve tried to avoid late nights and weekends because I don’t want to burn out.
Working myself to the bone may lead to short-term productivity gains but I think it would ultimately lead to long-term losses. While I’m treating it like a job, I still want to have fun, and a surefire way to ruin the fun is to overextend myself.
I also have to resist any urges to take overly long breaks just because I’m at home and my own boss. I could at any ignore my responsibilities and do something else, but that would be doing myself a disservice.
Accepting the Unknown
Most days I feel like I have no idea what I’m doing, but I put one metaphorical foot in front of the other and keep going. I have a goal and there are infinite paths to get there, so I just pick one and keep walking. Sometimes I have to backtrack and take a different route but that’s just the way it goes.
The worst thing I can do is freeze and not choose a path at all. That’s what I used to do with personal projects because there was never a good driving force to keep me moving. I never had that problem at work because people were relying on me and I was being paid to do a job, but personal projects had too much freedom.
I find it easier to make decisions now that I have (self-imposed) deadlines.
Developing an Art Style
I have a certain nostalgia for games of mid-90s where models had low poly counts, the textures had big chunky pixels, everything lacked antialiasing, and more was left to the imagination. The developers of that era managed to do a lot with very little.
I read once that if you’re trying to target nostalgia, you should recreate how you remember things looking and not how they actually looked. I think that’s good advice, and so I’ve tried to tap into the nostalgia while also injecting it with some modernity.
- Low-poly models
- Low-res textures
- No anti-aliasing
- Simple lighting
I still need to add more of the AI so that each of the enemies has its own behavior, and make them react differently when the player is powered up (they should run away).
There needs to be a score that increases as you pick up items and consume skulls, and difficulty needs to increase with each stage, so I need to make sure that all feels good and progression makes sense.
Beyond that, most of what is left are the things that are often avoid until the end because they aren’t very fun: UI, start screen, options menu, pause menu, credits.
And of course polish and pizzazz. I’ll need to tweak the lighting a lot to make sure it’s dark enough to get the mood I’m going for, but not so dark players can’t see anything.
All of that is what will hopefully turn it into a real game.
I expect that this stuff will take longer than I think so I’m allocating another month will be to take it over the line. In that time I hope to accomplish all that I listed above, as well as basic marketing, getting it onto Steam, etc.