Icon.bin: Difference between revisions
No edit summary |
File Structure documented |
||
Line 1: | Line 1: | ||
These are the banners you'll see in various places in the [[System Menu]]. They have the dimension 32x32 pixels. | |||
[[Image:icon_1.gif]] | [[Image:icon_1.gif]] | ||
[[Image:icon_2.gif]] | [[Image:icon_2.gif]] | ||
Line 4: | Line 6: | ||
[[Image:icon_4.gif]] | [[Image:icon_4.gif]] | ||
[[Image:icon_5.gif]] | [[Image:icon_5.gif]] | ||
== Basic File Structure == | |||
{| class="wikitable" | |||
|- style="background-color: #ddd;" | |||
! Start | |||
! Length | |||
! Description | |||
|- | |||
| 0x0000 | |||
| 2 | |||
| File Version/Magic (should be 0x0301) | |||
|- | |||
| 0x0002 | |||
| 2*4 | |||
| 4 CRC checksums | |||
|- | |||
| 0x000A | |||
| 22 | |||
| Padding (00's) | |||
|- | |||
| 0x0020 | |||
| 512 | |||
| Default Bitmap | |||
|- | |||
| 0x0230 | |||
| 32 | |||
| Palette for above | |||
|- | |||
| 0x0250 | |||
| 256*8 | |||
| Application Title (in 8 languages), wide chars | |||
|- | |||
| 0x0A40 | |||
| 2048 | |||
| Padding (00's) | |||
|- | |||
| 0x1240 | |||
| 512*8 | |||
| 8 Bitmaps (for animation) | |||
|- | |||
| 0x2240 | |||
| 32*8 | |||
| 8 Palettes | |||
|- | |||
| 0x2340 | |||
| 80 | |||
| Animation Sequence | |||
|} | |||
Languages (in correct order) are: Japanese, English, French, German, Italian, Spanish, Unknown, Unknown. | |||
== Animation Sequence == | |||
The sequence is represented by 2-byte tokens, in the following format (we're now talking bits, from left to right): | |||
{| class="wikitable" | |||
|- style="background-color: #ddd;" | |||
! Length | |||
! Description | |||
! Mask | |||
|- | |||
| 1 | |||
| Flip Vertically | |||
| 0x8000 | |||
|- | |||
| 1 | |||
| Flip Horizontally | |||
| 0x4000 | |||
|- | |||
| 3 | |||
| Palette Index | |||
| 0x3800 | |||
|- | |||
| 3 | |||
| Bitmap Index | |||
| 0x0700 | |||
|- | |||
| 8 | |||
| Frame Duration (in ms) | |||
| 0x00FF | |||
|} | |||
Both bytes being zero indicates the end of the sequence. If the first token is zero, the non-animated default image is shown. | |||
== Bitmap Format == | |||
The bitmap is tiled 8x8 pixels (Nintendo tends to do this). Each pixel contain 4 bits of data, being the index into the palette specified by the current sequence-token. | |||
== The Palettes == | |||
Each color in the palette is in the standard 2-byte RGB555 format (used since GBA). | |||
The conversion to RGB888 is made like this (C): | |||
u8 r = (color ) & 0x1f; | |||
u8 g = (color >> 5) & 0x1f; | |||
u8 b = (color >> 10) & 0x1f; | |||
r = (r << 3) | (r >> 2); | |||
g = (g << 3) | (g >> 2); | |||
b = (b << 3) | (b >> 2); |
Revision as of 15:15, 23 April 2009
These are the banners you'll see in various places in the System Menu. They have the dimension 32x32 pixels.
Basic File Structure
Start | Length | Description |
---|---|---|
0x0000 | 2 | File Version/Magic (should be 0x0301) |
0x0002 | 2*4 | 4 CRC checksums |
0x000A | 22 | Padding (00's) |
0x0020 | 512 | Default Bitmap |
0x0230 | 32 | Palette for above |
0x0250 | 256*8 | Application Title (in 8 languages), wide chars |
0x0A40 | 2048 | Padding (00's) |
0x1240 | 512*8 | 8 Bitmaps (for animation) |
0x2240 | 32*8 | 8 Palettes |
0x2340 | 80 | Animation Sequence |
Languages (in correct order) are: Japanese, English, French, German, Italian, Spanish, Unknown, Unknown.
Animation Sequence
The sequence is represented by 2-byte tokens, in the following format (we're now talking bits, from left to right):
Length | Description | Mask |
---|---|---|
1 | Flip Vertically | 0x8000 |
1 | Flip Horizontally | 0x4000 |
3 | Palette Index | 0x3800 |
3 | Bitmap Index | 0x0700 |
8 | Frame Duration (in ms) | 0x00FF |
Both bytes being zero indicates the end of the sequence. If the first token is zero, the non-animated default image is shown.
Bitmap Format
The bitmap is tiled 8x8 pixels (Nintendo tends to do this). Each pixel contain 4 bits of data, being the index into the palette specified by the current sequence-token.
The Palettes
Each color in the palette is in the standard 2-byte RGB555 format (used since GBA).
The conversion to RGB888 is made like this (C):
u8 r = (color ) & 0x1f; u8 g = (color >> 5) & 0x1f; u8 b = (color >> 10) & 0x1f; r = (r << 3) | (r >> 2); g = (g << 3) | (g >> 2); b = (b << 3) | (b >> 2);