The Game Boy Color was the first console I purchased with my own money. Most people who grew up with it like myself will inherently know how it handles representing color for different games. But to newer developers or those who didn’t get a manual with theirs, there may be some aspects of how it functions that aren’t clearly evident. Knowing these differences will help you as both a GB Studio user and player of games on the Game Boy Color. So let’s dive into the different features of the Game Boy Color, and how it can affect decisions as a Game Boy developer.
When the Game Boy first launched, every game was a grey cart. These games were designed for the original DMG and did not contain any color data. Some games came along that had unique colored shells like Donkey Kong Land and the Pokémon games, but they were still designed with 4 shades of green in mind. After the launch of the Super Game Boy, some games came with SGB support that would render specific tiles on screen with unique palettes. We wrote a whole article on that topic if you want to find out how it works with GB Studio in mind, but the Super Game Boy still worked by colorizing sections of the screen, kind of like overlaying a sheet of plastic on your tv (similar to how the Maganvox Odyssey worked).
When the Game Boy Color was announced, new carts were introduced. Games that were released on a black cart were “Dual-Mode” games that played on both a Game Boy Color and an original DMG Game Boy. Link’s Awakening DX is an example of a black cart. It can be played on both systems, but if you try to enter the bonus “color dungeon” on a device that doesn’t have color support, the guards will turn you away.
The final type was the clear “Game Boy Color Only” cart. These carts not only used different material, with distinctive see-through plastic to let you see the PCB, but they also had a different shape with a protruding area above the label. The lack of a notch on top also prevented a DMG from turning on when one was inserted. If you modified your DMG or used a Game Boy Pocket or other non-color device, you’d get a “Sorry this game needs a Game Boy Color to be played”. In truth, there was no hardware lockout that prevented the game from being run, but rather a check that the developer added when the game was booted to see if the device supported color. Sometimes this was due to the nature of the game, and not having color would just make the game a poor experience, but the Game Boy Color also added some extra hardware features, most notably double the CPU Speed and double the VRAM allowing for more complex code and graphics. If you managed to bypass the check, then the game would not run as intended.
When using a Dual Mode or Game Boy Color-only game on a GBC, then you only had one option – the game played in full color mode with the colors chosen by the developer. If you inserted a non-GBC game, one of two things would happen depending on the game.
Booting non-GBC Games
The vast majority of non-GBC games will boot with a distinctive set of colors. The background tiles will be shades of blue and green, and the sprites will show up in a bright pinkish color. This is the default color set, but it’s not the only one available. By pressing one or more buttons while the words “Game Boy” are on screen when you turn on the console, you can change the palette being chosen. The following chart shows all the available palettes and their corresponding button combinations. Keep in mind that non-GBC games actually have 2 sprite palettes, OBJ0 and OBJ1, which a developer could use to certain effect, like how Metroid 2 shows damage being taken by cycling the sprite palettes.
Some of these color choices might seem outright garish, but keep in mind that the Game Boy Color came with a reflective screen (no backlight) that significantly washed out colors. Even the inverted look of Right + B could be jarring, but when applied to certain SHMUP games could look great.
There is one other “secret” to how a GBC chooses colors for a game. When the Game Boy Color first launched, there was almost a decade’s worth of games already released, so Nintendo put in a clever method during the boot process to check if a certain game was loaded. A Game Boy ROM contains important data in the header area which includes the Nintendo logo (designed to deter non-licensed games) and the game’s title. You can actually see this on any game made with GB Studio. If you open an exported .gb ROM in a Hex editor and go to address 0x0134, you’ll see the Project Name in ASCII.
The Game Boy Color will use a checksum on header’s title address and see if result matches one of 45 unique palettes designed to work with specific games. This is why when you play Pokémon Red or Pokémon Blue on the Game Boy Color, you’ll get a different default palette. This is also why some unique palettes appear on different seemingly unrelated games, like A Boy and his Blob has the same palette as Star Wars.
The entire list of every unique palette and all their checksums is available here: https://tcrf.net/Notes:Game_Boy_Color_Bootstrap_ROM
Even with a unique default palette detected and loaded, a player can still override it with one of the button combinations at the boot screen to change it to their liking.
It is possible to manipulate the title of a game to match one of these checksums so that it will make the GBC default to one of those unique palettes. It would be impractical to try and figure this out manually though, and editing the header directly can lead to a corrupt ROM. This is where a tool like https://github.com/basxto/titchack comes in handy. You will need to have python installed on your computer in order to use it and some command line knowledge. It will take the ROM and adjust the title header to “hack” its checksum and match the one you feed it. For instance, if you run it and tell it to use the checksum value ‘0x58’, then loading that game on a GBC will make the default palette greyscale similar to the Left + B boot combination. This was the checksum used for the game X/Lunar Chase.
You’ll have to follow the instructions when using the Title Checksum Hack tool, as modifying the title checksum will also affect the header checksum, something that is checked when a game is loaded by the Game Boy to make sure there are no issues. While I can’t confirm that they used the specific tool, Sam Mallard by snorpung is a great example of this in action. The game was coded in ASM and compiled with RGBDS, so no GB Studio work is on display. It functions as a non-color Game Boy game and will default to the grayscale palette thanks to its title’s checksum.
While we’ve shown how the Game Boy Color will handle different games, we haven’t gone into how to take advantage of some of those features in GB Studio. With this foundation in place, we’ll be able to go further into what color choices you have with GB Studio in a future article.
Audio Engineer, Mac Technologist and Video Game Developer. Managing Editor of GBStudio Central. (he/him)