If this helps anything at all... here is how the Game Boy and Game Boy Color (but not Game Boy Advance, since it can hold more colors to a tile) stores tiles. Uncompressed tiles use two bytes for each horizontal line. And there are two bits to each pixel. What a Game Boy (Color) game does is read one bit from the first byte and then the corresponding bit for the second byte. For example, for the first pixel on a given line, the game would read the first bit in the first byte and then the first bit in the second byte. Then it would read the bits after that to determine the pixels in the rest of the line.
Then, the format is like this:
If the bit for the first byte is 0 and the bit for the second byte is 0, then the pixel uses color #1.
If the bit for the first byte is 1 and the bit for the second byte is 0, then the pixel uses color #2.
If the bit for the first byte is 0 and the bit for the second byte is 1, then the pixel uses color #3.
If the bit for the first byte is 1 and the bit for the second byte is 1, then the pixel uses color #4.
The brightness of the colors tend to vary from game to game. In Telefang, color #1 is generally the brightest color, color #2 is the second brightest, color #3 is the second darkest, and color #4 is the darkest. I think some other games are like this too.
This gets confusing, so here's one example. For this whole example, we'll assume that color #1 is the brightest, and color #4 is the darkest, like Telefang.
Let's say the bytes are like this:
01010101
00110011
Now, to determine the first pixel, you would look at the first bit in the first byte (in this case, it's a 0), then look at the first bit in the second byte (also a 0). Since both of these are 0, then the first pixel in this row is color #1. If it's like Telefang, then it would be the brightest color.
For the
second pixel, you would look at the
second bit in the first byte (this time, it's a 1), then the
second bit in the second byte (a 0). Since it's 1, then 0, then the pixel is color #2 (for simplicity's sake, the second brightest color).
Now for the third pixel. Look at the third bits in the first and second bytes. This is a 0, then a 1. This will make this pixel color #3, the second darkest color.
And the fourth pixel. Do the same thing, with the fourth bits in each one. It's a 1, then a 1. This pixel is -- you guessed it -- color #4, the darkest one.
I think you get the point by now. When the game tries to read these bytes as a row of a tile, it will will show up something like this in the game (I enlarged the pixels so that you can see them more easily):
