For my "Media Devices and Computer Architecture" university class, I designed a custom GBA game from scratch.
At Georgia Tech, I was enrolled in a class titled "Media Device Architecture," which taught me low-level programming in C and allowed me to comprehend how hardware and software architecture are intertwined on machines. For our final project, we were asked to devise our own GameBoy application from start to finish: gameplay, screen design, sprites, etc.
The basic requirements of the game were the following: • Presence of at least 2 animated sprites • Usage of 2 simultaneous tiled backgrounds • Clear way of allowing the user to win or lose • Showcase of splash screens with menu and instructions • Ability to pause the game • Usage of sound effects and a background soundtrack • Hidden cheat to make the game easier (not just to skip to win state)
To see all the code for this project, I have it open-sourced on Github here.
I ultimately decided to base my game off of a favorite childhood character - Kirby. The goal of my game was to "help Kirby return home" by collecting orbs that've been stolen. In addition to collecting 10 orbs in order to win the game, the player must dodge the enemy's attacks (falling rockets triggered by the ghost Boo) or attack the enemy itself with arrows. Also, the player must be aware of its current position as the cloud platforms slowly descend. The player has three lives; each are taken away if Kirby falls to the bottom edge of the screen or hit by a rocket.
Implementing Organized, Structured Code
The use of state machines was imperative when creating a solid foundation for the logic behind my game. This made it easy to transition from the home screen to then navigate to the instructions, allow the user to choose a character, pause the game, etc. Additionally, to simulate enemies with random movement, direction, and attacks, I made use of seeds which allowed me to create "unpredicted intelligence."
To render real objects in a GameBoy simulator, I used the program Usenti to translate my assorted sprites into bitmaps, which would be transferred by indexing pixels with a screen offset. I also used Adobe Photoshop to design my screens, sprites, and add typography to mimic the feel of a genuine GameBoy application as close as possible.