The Game Boy of Isaac - Team Kirby Devlog

We are "Team Kirby" from Telecom Paris, and for our end-of-year project, we set out to write a game, inspired by The Binding of Isaac, for the original Game Boy.

View on GitHub
2 July 2020

PAF... It's The End!

by yberreby

It’s over. Today marks the last day of our end-of-year project for Télécom Paris… and what a day (and, for part of our team, night) it was!

Time to ship and integrate the final features (preferably non-game-breaking ones :’) ) for a little demo in front of students and teachers. We can definitely be proud of our playable game (albeit somewhat buggy, but pssh… just don’t mind the half-pears!), which came to life in less than two weeks!

We made a (final? time will tell…) release, so you can try it out by downloading our ROM and running it under a Game Boy emulator (we use SameBoy).

Here’s a little demo (with sound!):

Successful last-minute integrations

Failur… uh, I mean, setbacks

The title screen (see above) oozes cuteness and psychopathy, thanks to @Ametheek artistic touch, and was supposed to double as a way to initialize our random number generator by counting the frames before the player presses Start. Unfortunately, that plan turned sour when every single one of our attempts at writing the said title screen corrupted the game’s memory.

The blaster sound was awesome, especially considering the limitations of the Game Boy sound system:

but we could not implement projectiles in time to make use of it :’(

On sound design

Thanks to the sound features of the Game Boy, every sound is implemented as a single C function. These functions contain inline ASM, assembled and inserted as-is in the generated machine code. They modify the sound controller register of the Game Boy (addresses FF10 to FF26) and use the sound input 1 (tone and sweep) and 4 (white noise). Because of the many weird behaviors of the Game Boy, the only way to create these sounds was: testing… and testing… and mind fucking… and testing. So this was pretty horrible but through this, I could create many funny sounds, like the Star Wars blaster sound, which is not used in-game but is still in the code ;P

On AI

The last few hours since my last post were rich in features for Pear Jaw (or Jaw Pear, I’m feeling tolerant today)! This little thing can now move, and it automatically decides to walk towards Piney, and will sort of take into account terrain obstacles while doing so (this just needs further fine-tuning for it to be consistent!).

And in fact, I should be talking about multiple Jaw Pears now. @ChatPion implemented proper internal management for multiple foes, and that includes handling enemy spawning for each room in the map! And while these foes are mostly harmless, you are locked with them in your room until you take them out with your chainsaw. And really, don’t get fooled by how harmless Jaw Pear seems to be for now. There is only so much this soft fruit of destruction can learn about close combat with some practice!

Last words… till we meet again!

This project was not easy. We all had to sacrifice something to make it word, be it commitment to good coding practices, sleep, sanity, or any of the many other things we lost along the way; but we also gained a great deal, and I’m not only talking about our freshly-minted knowledge of the Game Boy hardware architecture. I think I speak for the entire Team Kirby when I say that this project was exhilarating; it pushed us to our limits, and showed us just how much we could achieve, together, with focus and dedication. So to all members of Team Kirby, of Team Rocket (our friends and competitors - check out their game if you like low-level stuff, it should satisfy anyone’s craving for GBZ80 ASM and clever hacks), and to our supervising teacher @Aunsiels… so long, and thank you for all the fish glitches :)

tags: