Discussion about software development for the old-school Gameboys, ranging from the "Gray brick" to Gameboy Color
(Launched in 2008)
You are not logged in.
Hi everyone!
I just finished my second Game Boy game!
Webpage | ROM Direct Download | Source
For this game, I decided to use C instead of Z80 Assembly. But I didn't want to use GBDK, because I tried GBDK when I first started programming Game Boy, and found a few too many situations where it compiled to code that was semantically different from what I entered for me to have confidence in it. I considered using GBDK-N, but instead decided to just program directly to modern SDCC. I didn't have a strong justification not to use GBDK-N, just that I wanted to roll everything myself.
Speaking of rolling everything myself, I didn't use SDCC's makebin utility at the final stage of the compile pipeline. Instead, I wrote a script called ihx2gb, which is bundled in the repo. I was partially motivated to do so because I wanted a bit more command-line control of the ROM's header fields than makebin offers, and, more importantly, because I think I can add support for banking on modern SDCC in that script. This game doesn't use banking (it's less than 32KB), and ihx2gb doesn't support banking yet, but I think I can add it. If I can, I think that could be very helpful for people on GBDK-N.
Offline
Wow, this game is polished. I love the Game & Watch style, great work! I get the feeling that pressing the A button isn't needed to pop the bubbles tough, is that the case?
I've played some with gbdk-n but I will take a look at your "vanilla sdcc" approach. Thanks a bunch for keeping the source open! Are you planning to release it under a free license as well?
Offline
Thanks! Game & Watch was a very direct inspiration for the game. One-screen, high score gameplay, gets tougher as you go, 3 misses and you're out, opportunity to erase misses at 200, 500, and 900 points, etc.
You're right that the A button isn't necessary, you can also push the d-pad in the direction of a bubble to pop. There's lots of little details in things to try to make it "feel" good, including buffered input (if you press up and then right while you're still moving up, the game will remember you pushed right and send you to the right once you finish moving up), if you try to pop a bubble and there's two bubbles in popping range it'll pop the one that's closer to the end of the path, and the collision boxes on the guards are pretty small so you never feel like you were caught by a guard but shouldn't have been.
I hadn't thought about attaching a license to the code, but I really probably should. I have no problem with people harvesting anything from my code that they find useful, so if I attach a license it'll be on the very permissive end of free licenses (can be used free or commercially (I mean, this is the Game Boy we're talking about, but still, one can dream), no need to open source derived code, no need to attribute credit).
Offline
Nice game. The graphics look really good and it's easy to understand and to control. Music would improve the overall impression.
I wonder why you use C if you're able to use assembly. I started with C and am currently teaching myself assembly, and the more I learn the less reasons I see to return to C.
Offline
While there is a very real CPU speed and compiled code size advantage to Assembly, I found myself to be far more productive in C, because I wasn't needing to juggle registers or write many basic low-level routines (like, for starters, 8-bit multiply or divide). Instead, I was able to focus more on just writing the game itself, and it really surprised me how quickly it went. I started this project only about a month and a half ago, and only spent a few hours per week on it. I can't imagine I spent more than 40 hours total. There were only a few spots where the performance became problematic enough for me to write a routine in ASM (in particular: updating the tiles for the machines and belts during vblank). But for everything else, the performance and compiled size was reasonable enough that I consider the productivity gains I enjoyed to make the use of C a win.
It's not that I couldn't have done the game in Assembly, it's just that I was having more fun and moving faster developing it in C.
Offline