Game Name: Ascent
Platform: Gameboy Advance
Programming Language: C
Engine: None
Genre: Rougelike
Team Size: 1
Make your way through all 5 floors of the dungeon. Destroy all enemies in the room to open the doors leading to connecting rooms.
D-Pad: Move L: Lock movement R: Strafe A: Fire bullet
Ascent was the first homebrew game that I worked on and also the first game that I coded entirely in C. During my senior year of college I had been reading the TONC tutorial on Gameboy Advance development on and off whenever I had time. It took a while to understand the concepts and to fully grok the memory map of the Gameboy Advance, but once I had free time I decided to recreate the Binding of Isaac experience on GBA. I thought a Binding of Isaac-inspired game would be a reasonable starting point, as the complexity is simple to start with and can be expanded infinitely whenever I would want to add features to the game.
One of the biggest problems I encountered while programming this game is that debugging is difficult. Print statements were the only method I really had of debugging code, and before I had printing working, I didn’t have anything at all. Other problems I encountered were implementing polymorphic behavior within C. When I have a room full of enemies, I would like to use polymorphism when updating enemies, but this feature is lacking in C. I ended up using one “Enemy” struct that shared common attrbiutes among all enemies, but with an “update()” function pointer that would be assigned based on enemy type. It really makes me appreciate the object oriented design of C++.
I didn’t get as far as I would have liked, but I still plan on revisiting this game and adding features like new enemies, activatable items, and bosses.