Gameboy / GBC development tools

If you follow me on Twitter, you might have seen this 1 year ago:

Followed by:

Although I think I never ever posted anything after that, I was definitely working on such a tool, focusing particularly on Gameboy Color development (and as you can see I got it working).

But sadly the project was thrown into “the freezer” (where all frozen projects go), mainly because I was making this tool for LD30, and we ended up ditching the idea of making a GB game early, to do something less restrictive instead.

I recently heard of this year’s GBJam, so despite not being able to participate (a lot of stuff going on right now) I thought that perhaps I could dust off my graphics converter (that was 90% finished) and put it online for other people to use.

I know that not many GBJammers are making actual GB games, let alone GBC (Color) games, but hey! at least I had a made-up reason for finishing this tool so I can use it in a future (hopefully sooner than a year from now, which seems to be the trend).

Part of the initial motivation to do this tool comes from the “research” I made one year ago, when we decided to explore the idea of making a GB/GBC game for the Jam: As I started gathering tools and info I realized that most of the resources were either nowhere to be found (resting in Geocities Heaven) or didn’t really age well (i.e: were designed to run on Windows 95 and a 640×480 monitor).

GBDK (a simple yet incredibly powerful and popular C compiler) was a nice find that allowed me to “relax” with the coding part, but I didn’t really find something for the graphics. There are (or were, back in the day) tons of graphics editors and tools that were able to take an image and convert it to GB data, but none of them were exactly “GBC-ready”.

For starters, most of them would either not work with color images, or would convert them to grayscale first. And I kinda get why; working with GBC is a bit of a struggle; you get a limited number of 15-bit 4-color palettes per “layer” (background, window, sprites) and you can easily break the compatibility of your game with the original GB with a poorly designed palette. So most of the GBC-aware tools (or at least the couple I found) were GUI-based, and allowed you to import your picture in grayscale, and then re-colorize it in the program (if you so desired), which I found kinda pointless. Perhaps I missed something incredibly obvious and/or well-known back in the day, but I didn’t really found a way of converting a color picture with its original palette straight to GB/GBC data.

So I built a tool that would do exactly that, giving you options to make your games “GB-compliant”, with a couple of cool features like performing tile optimization and whatnot:

The output of my program running on an emulator, showing a properly sorted palette, with a decently optimized tileset.

The output of my program running on an emulator, showing a properly sorted palette, with a decently optimized tileset.

I finished this tool a couple of days ago, and uploaded it to GitHub. It currently compiles fine in Windows with MinGW, and on Mac OS X compiles with a couple of warnings with GCC (something  I want to fix eventually. I don’t like warnings, even when the code compiles and works).

You can also find more information and details about it on my website, and I hope I can add more features to this program in a near future, particularly the ability to extract multiple palettes from a single image. A friend also suggested the ability to read multiple files, and that’s something that will be really powerful if done right, so I’m really excited about trying that too.

In the meantime I’m quite happy with having published this program, not only because it’s now available for the whole world to use, but also because it’s been a long while since my last Open Source project, and this is the first one I ever upload to a public repository like GitHub.

Share on Share on FacebookTweet about this on TwitterShare on Google+Share on TumblrShare on LinkedIn

Leave a Reply

Your email address will not be published. Required fields are marked *