void ReadIconAndTitle(int iconAndTitleOffset)
{
if (iconAndTitleOffset == 0)
return;
// Read the palette.
Reader.BaseStream.Position = iconAndTitleOffset + 0x220;
Color[] colors = new Color[16];
for (int index = 0; index < 16; index++)
Reader.ReadNDSColor(forceTransparent: index == 0);
PaletteAsset palette = new PaletteAsset(Manager, "Icon palette", colors);
// Read the icon.
Reader.BaseStream.Position = iconAndTitleOffset + 0x20;
Vector2i iconSize = new Vector2i(32, 32);
Vector2i tileSize = iconSize / 8;
int[] indices = new int[iconSize.X * iconSize.Y];
for (Vector2i tile = Vector2i.Zero; tile.Y < tileSize.Y; tile.Y++) {
for (tile.X = 0; tile.X < tileSize.X; tile.X++) {
for (Vector2i pixel = Vector2i.Zero; pixel.Y < 8; pixel.Y++) {
for (pixel.X = 0; pixel.X < 4; pixel.X++) {
int x = pixel.X + tile.X * 4;
int y = pixel.Y + tile.Y * 8;
int offset = x + y * iconSize.X;
byte pair = Reader.ReadByte();
indices[offset + 0] = pair & 0x0F;
indices[offset + 1] = pair >> 4;
}
}
}
}
Icon = new IndexedTextureAsset(Manager, "Icon", palette, iconSize.X, iconSize.Y, indices);
// Read the title.
Name = Reader.ReadStringzAt(iconAndTitleOffset + 0x240, Encoding.Unicode);
TitleEnglish = Reader.ReadStringzAt(iconAndTitleOffset + 0x340, Encoding.Unicode);
TitleFrench = Reader.ReadStringzAt(iconAndTitleOffset + 0x440, Encoding.Unicode);
TitleGerman = Reader.ReadStringzAt(iconAndTitleOffset + 0x540, Encoding.Unicode);
TitleItalian = Reader.ReadStringzAt(iconAndTitleOffset + 0x640, Encoding.Unicode);
TitleSpanish = Reader.ReadStringzAt(iconAndTitleOffset + 0x740, Encoding.Unicode);
}