From Game Jam to Prototype
What is the first tip any new game developer gets from their peers? Start by making a small game like Pong or Breakout. When I first started working on my games what was the first thing I did? Program a procedurally-generated RPG with dynamic items and a branching storyline. After being in development off and on for quite some time and feeling I would never get done I decided to take a step back and work on something smaller. It was at this point that Pirate Software hosted a game jam with a simple ruleset: classic arcade game with a twist that makes it our own. I challenged myself to drop my previous projects and spend a week thinking of what could be done. This is the story of that first week of development.
I previously had an idea where I could mix Space Invaders and Firefly but like any game idea I had at the time the scope was too ambitious. With a full-time job, wife and two kids, and a mortgage to pay, the original idea for my game would have to be trimmed down to something achievable. The game jam was an opportunity to do something small. On September 19th I created my new game folder and imported my game development libraries and typed git init .
to begin.
Technologies Used
- C++
- SDL2 (Window Management, Input, etc)
- OpenGL
- stb libraries
- freetype
- raylib (Audio Mixer)
Saturday: September 19th, 2020
The first bits of code were just my personal libraries that I use for prototyping games. I’ll write a post later on this setup. Most of my time went into getting the build process working and ensuring it would compile and then get a space ship rendering to screen.
Sunday: September 20th, 2020
With graphics rendering to screen I wanted to get player input handled. Hooked into my player input library and wrote the statements needed to move the spaceship across the screen. After this was completed I still had a good chunk of time remaining so I added a new Bullet
entity type to my game and wired it into my entity manager. Since today was mostly about getting player input handled the next step would be to fire a bullet when the player hit the appropriate button:
Monday: September 21st, 2020
On the previous day, I enabled the player to fire a bullet. Today I wanted the invaders to fire back. I wired up some rudimentary AI for the invaders and allowed them to bombard the player with a steady stream of happy face bullets.
I left the game running overnight as a way to ensure I had no memory issues in my entity system and went to bed.
Tuesday: September 22nd, 2020
I woke up this morning to a stack trace in my memory allocator with the error:
Memory Allocation Failure: Arena is full.
The debug information showed me that I had a bug somewhere in my entity system where I would allocate 150 bytes of memory over time. I logged the information but I knew I wouldn’t have enough time to dive in and fix it today. Instead, I got my invaders moving through the “enemy space” portion of the gameplay area.
Wednesday: September 23rd, 2020
Spent some time today debugging the memory issue in the entity system. My entity system is similar to an object pool in that it re-uses entities when they are destroyed from the game world. Once an entity is created it will typically need to add things like collision volumes and other data. While most of this data is fine, I recently changed the collision volumes system in my custom framework to be an array allocated from the EntityManager memory pool. Every time an entity is placed into the world they would allocate a new array to store the collision information even if a previous entity had done the same. The fix was simple in that I now re-use the collision array when the entity is re-used.
I also added in basic font rendering for a menu system.
Thursday: September 24th, 2020
Just did some menu functionality. Nothing gameplay related, and honestly if I were only going for game-jam here the work I did today would have been omitted.
Friday: September 25th, 2020
Today was a fun day because I re-integrated my audio mixer into the project and turned on OGG
and WAV
decoding. Also did some cleanup work on the title screen by hooking up the New Game
menu option to starting a new game.
One Week Checkpoint
So what does 1 week of game dev time look like for me with less than one hour of programming per day?
Since this devlog is written in mid-October I’ve only talked about the first week of development. The project is a little further along now with updated gameplay, menu flows, powerups, and more. With the way the entity system is set up, new entities can be plugged in and manipulated quite easily so any further invaders, boss battles, powerups, or other gameplay elements can easily be integrated. Below is a video from the current build:
I hope this post helps inspire and show you that even if you only have 30 minutes a day you can make progress. Consistent progress with short iterations can be a powerful tool. Not only do you have to stay focused but you’re also forced to solve the problems that matter and you’re much less likely to spend significant times on time-wasting activities.
As the development of this project goes forward I may end up releasing some tutorial series or future dev logs. My goal is to continue working on this and get a shippable game out of it. So check back often for new progress reports, devlogs, images, and videos.