You can watch this post in video form if you prefer here.
To improve my game development skills and general game development knowledge, I am attempting to make a set of small games over the next year. Making small games has been a popular topic for a while and I can understand why. It allows you to focus on testing out ideas and systems, work through every aspect of game development, and fully complete a game.
Scope
Game development is very much so a hobby for me so I need to keep the scope of each game small to complete it in a timely manner. I’m going to try to time box each game to around a month, but still allow myself some flexibility if I’m really enjoying a particular project. I also want each game to feel somewhat polished and complete, like a vertical slice of game play, so keeping the scope small will help achieve this.
Asteroid Attack
The first project I’ve worked on is a simple asteroids clone with a few tweaks that I’ve named Asteroid Attack. In Asteroid Attack you play as a spaceship pilot tasked with destroying as many incoming asteroids as possible. My goal with this game was to get back into game development with something straightforward after an extended break from working with Godot.
I started by creating some simple pixel art using Aseprite. First a player ship with a thruster animation and death animation, an asteroid that admittedly looks much like a chocolate chip cookie with a rotation and death animation, and some bullets for the player to fire.
Using Godot I added movement controls for the player along with the thruster animation for moving left, right, up, and down and then firing the blaster.
Asteroids spawn in randomly from each side and the player’s objective is to blast them to drive up the score.
This takes care of the main game loop but I didn’t want to stop there.
When an asteroid is destroyed one to five pips will spawn and fly outwards from where the asteroid was destroyed. These pips can be picked up for additional points and will gravitate towards the player when in close enough range. This is to incentivize the player to not sit in one place but instead to move around collecting the extra points which adds risk since the player is more likely to get hit by an asteroid.
I also added a limit on rapid firing to incentivize the player to take more calculated shots instead of firing continuously. The bar in the top left shows overheat levels and when the player overheats the blaster, then they are only able to fire at a reduced rate.
Lastly I wanted add couch co-op play, or local 2 player support. I’ve always enjoyed playing video games with others in person more than online so I wanted to incorporate that idea here. This turned out to be fairly easy with the Godot scene system and input map. It was as simple as creating a second instance of my player scene with a different color texture and then having that scene respond to a different set of input actions. I defined both player one and player two input actions in the project settings input map and then assigned each player instance an id corresponding to those input actions. When the player scene looks for its input action, it appends its id to the common action name which gives the input action for that player instance.
It was really nice to see how straightforward it was to implement couch co-op support so I plan to include this in future projects as well.
To make the game feel more alive I wanted to add background music and sound effects. This is an area that I probably know the least about so for this game I opted for some assets that I discovered on itch.io. Shout out to Abstraction for the background music, Shapeforms for the game sound effects, and Bleeoop for the UI sound effects.
I especially enjoy working with UI components so I probably spent too much time working on UI than on game play in this case. I do think it added a nice level of polish though, even for this simple game, to be able to adjust sound settings and have UI audio feedback.
You can try out Asteroid Attack here.