Metroid Prime 3: Corruption/FONT

Материал из ConsolWiki
Перейти к: навигация, поиск

FONT содержит данные шрифта.

Структура файла

Размер Данные
34 байта Заголовок
До нуль-терминатора (включительно) Имя шрифта (семейства?)
8 байтов Хеш имени текстуры с текстурным атласом глифов
4 байта Количество цветов в текстуре (определяет количество слоёв)
4 байта Количество символов
Количество символов × размер записи Записи символов
4 байта Количество записей кернинга
Количество записей кернинга × размер записи Записи кернинга

Заголовок

Смещение Размер Описание
0x00 4 байта Сигнатура "FONT"
0x04 4 байта Неизвестно (всегда 5)
0x08 4 байта Максимальная ширина символа
0x0C 4 байта Неизвестно
0x10 4 байта Высота шрифта
0x14 4 байта Неизвестно (всегда 0)
0x18 4 байта Неизвестно (всегда 0)
0x1C 2 байта Неизвестно
0x1E 4 байта Неизвестно

Запись символа

Смещение Размер Описание
0x00 2 байта Код символа в юникоде
0x02 4 байта X1 (Left, число с плавающей запятой) [1]
0x06 4 байта Y1 (Top, число с плавающей запятой)
0x0A 4 байта X2 (Right, число с плавающей запятой)
0x0E 4 байта Y2 (Bottom, число с плавающей запятой)
0x12 1 байт Номер слоя
0x13 1 байт Отступ слева (перед символом)[2]
0x14 1 байт Ширина символа [3]
0x15 1 байт Отступ справа (после символа)
0x16 1 байт Ширина глифа [3]
0x17 1 байт Высота глифа
0x18 1 байт Отступ снизу (от высоты шрифта) до позиции прорисовки глифа
0x19 2 байта Индекс первой записи кернинга (если равен количеству записей кернинга - то символ без кернинга) [4]
  1. X1, Y1, X2, Y2 - координаты прямоугольника глифа на полотне текстурного атласа шрифта.
  2. Отступы могут принимать отрицательные значения, т.е. являются знаковыми типами.
  3. 3,0 3,1 Чтобы символы корректно отображались при горизонтальном выравнивании по центру, чётность ширины символа должна быть равна чётности ширины глифа.
  4. Индекс первой записи кернинга служит для ускорения поиска необходимой записи. Он должен указывать на первую запись для данного символа, или быть равным количеству записей, если кернинг для данного символа отсутствует.

Запись кернинга

Смещение Размер Описание
0x00 2 байта Код первого символа в юникоде
0x02 2 байта Код второго символа в юникоде
0x04 4 байта Отступ между символами (значение кернинга)
Пример слоя текстурного атласа

Текстурный атлас

Текстурный атлас содержится в текстуре с указанным хешем имени. Изображение не загружается как есть, а разбивается на слои. В зависимости от количества цветов будет разное количество слоёв: для одного или двух цветов слоёв будет 4, для трёх или четырёх - 2. Другие варианты не встречались. Разбиение на слои происходит распределением каждых четырёх битов. При двух слоях каждые четыре бита разбиваются на две части по два - одна для первого слоя, вторая - для второго. При четырёх слоях каждый бит соответствует отдельному слою. Т.е. для последовательности из четырёх битов индексы слоёв, к которым принадлежат эти биты, будут 0011 для двух слоёв, и 0123 для четырёх.