I took a closer look at the Tamagotchi protocol to try to figure out the block that controls the Tamagotchi’s appearance. I started by looking at this block for different ‘species’ of Tamagotchi, and then altering it and seeing what happened.
I noticed that byte 14 in the request/response tended to be larger for older Tomagatchis. Altering it and replaying the transaction made the position of the character on the screen change: starting low on the right of the screen at 0×10, moving higher on the screen as it reached 0×50, and then moving to the high left of the screen at 0×60, and then moving progressivly lower as the value gets higher. Older Tamagatchis are usually taller and larger, so they need a higher position value to be drawn properly on the screen.
Observing byte 15 and 16, these appear to change with the species of Tamagatchi. Looking at a few different transactions, only the top two bits of byte 15 and the bottom four bits of byte 16 appear to be used (I confirmed this by replaying transactions with the middle bits altered, and they didn’t seem to have an effect).
Going through all the possibilities, I got the following chart:
These are all of the Tomagatchi v4 characters.
Out of curiosity, I tried with a v4.5. I thought that it might make use of the middle bits, but instead it used bytes 20 and 21 for the character, setting bytes 15 and 16 to 40 0e. If bytes 20 and 21 were set to 1 ff, it would go into v4 mode, and use the character codes above.
Below are the v4.5 codes. A few are missing because they didn’t follow the logical pattern and I didn’t want to go through all ff ff possibilities.
What’s cool about this, is that with v4 I could speculate that some of the extra bytes were ‘room for expansion’, but with v4.5, you can see that they were actually used.
The revised request protocol is as follows: