Kirby's Return

Game Design and Development

GameBoy Advance Application with Original Gameplay and Screen Designs


Last Fall, 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 a given machine. For our final project, we were asked to devise ideas for own GameBoy games and select one to carry out to fruition. Students were essentially flexible in implementing any gameplay of his or her own choice and how the designs of his or her game would look like.



The basic requirements of the game were the following:

  • 2 animated sprites
  • Use of 2 simultaneous tiled backgrounds
  • A clear way to win and lose
  • Splash screen with menu and instructions
  • Ability to pause the game
  • At least 2 sounds that can play at the same time, with one sound looping
  • Cheat to make the game easier (not just to skip to the win state)



I ultimately decided to base my game off of a favorite childhood character - Kirby. The goal of my game is to "help Kirby return home" by collecting orbs which have been stolen from him. In addition to collecting 10 orbs in order to win the game, the player must dodge the enemy attacks (falling rockets triggered by the ghost Boo) by either attacking or moving away. Also, the player must be aware of his current position as the cloud platforms steadily descend. The player has three lives and a life is taken every time Kirby is hit by a rocket or if Kirby falls to the bottom edge of the screen.

  • Left Arrow: Move Kirby left
  • Right Arrow: Move Kirby right
  • Up Arrow: Make Kirby jump
  • A Button: Make Kirby attack
  • Start Button: Advance to next screen
  • Select Button: Activate cheat



The use of state machines was imperative when creating a solid foundation to the logic of my game. This made it easy to logically transition from the home screen to then navigate and show 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 would allow 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 to add in typography to mimic the feel of a genuine GameBoy as close as possible.




To see all the code for this project, I have it open-sourced on Github here.