-
Notifications
You must be signed in to change notification settings - Fork 4
Formato FNT
El formato FNT es el formato de fuente de letra que tiene dos funciones en DIV:
- Se pueden cargar desde los juegos hechos en DIV y usarse para mostrar textos en pantalla.
- Se pueden usar desde el editor gráfico de DIV para incorporar texto en los gráficos.
Se pueden generar con el generador de fuentes incluido en el entorno de DIV, que a su vez se basa en el formato IFS para obtener las siluetas de los caracteres con el tipo de letra y tamaño deseados.
Alternativamente, se pueden crear importando un mapa que contenga los 256 caracteres separados entre sí y de los bordes de la imagen por un margen de 1 pixel, que debe rellenarse con un color distinto al 0 (transparente). Los caracteres que deseen omitirse deben aparecer en el mapa también, pero consistiendo en únicamente un pixel transparente. Esto le indicará al importador que ese carácter no debe incluirse en la fuente.
Al igual que los demás formatos gráficos de DIV, el FNT está limitado a 256 colores, incluye su propia paleta y no utiliza ningún sistema de compresión.
struct fnt_header {
char magic[7]; // "fnt\x1A\x0D\x0A\0"
byte version; // 0
};
La cabecera tan sólo incluye la cadena de identificación del formato y el número de versión, que debe aumentarse si se incluyen cambios que rompan la compatibilidad con versiones anteriores del formato FNT.
Los datos de la paleta de color tienen exactamente la misma estructura que la descrita en los ficheros PAL. Diríjase al artículo del formato PAL para más detalles.
struct pal_rgb {
byte r, g, b; // 0..63
};
enum range_type {
DIRECT = 0, // Directa de paleta
EDIT1 = 1, // Editable cada color
EDIT2 = 2, // Editable cada 2 colores
EDIT4 = 4, // Editable cada 4 colores
EDIT8 = 8 // Editable cada 8 colores
};
struct pal_range {
byte n_colors; // 8, 16 o 32
range_type type;
byte fixed; // 0=editable, 1=fija
byte black; // color negro?? (suele ser 0)
byte colors[32]; // colores de la gama
};
struct fnt_palette {
pal_rgb colors[256]; // Colores de la paleta
pal_range ranges[16]; // Gamas de color
};
enum charset_flags {
NUMBERS = 1, // Números
UPPERCASE = 2, // Letras mayúsculas
LOWERCASE = 4, // Letras minúsculas
SYMBOLS = 8, // Símbolos
EXTENDED = 16 // Caracteres extendidos
};
int charset_flags;
Se asume que la codificación de caracteres en los FNT siempre es CP850. Con charset_flags
podemos indicar si queremos incluir o excluir determinados subconjuntos de caracteres del FNT. Se trata de un campo de bit flags, así que debemos hacer un OR binario con los flags correspondientes a los subconjuntos que queremos incluir.
A continuación se detalla qué rangos de caracteres se incluyen activando cada flag.
Flag | Valor | Descripción | Rango(s) de caracteres |
---|---|---|---|
NUMBERS | 1 | Números | '0'..'9' |
UPPERCASE | 2 | Letras mayúsculas | 'A'..'Z' (no incluye acentos ni Ñ) |
LOWERCASE | 4 | Letras minúsculas | 'a'..'z' (no incluye acentos ni ñ) |
SYMBOLS | 8 | Símbolos y signos de puntuación | Todo el rango ASCII comprendido entre 32 y 127 que no esté ya incluido en los subconjuntos anteriores |
EXTENDED | 16 | Caracteres extendidos | Todo lo no incluido en los subconjuntos anteriores: caracteres de control (0..31) y caracteres extendidos (128..255) |
Debe recordarse que si se genera el FNT a partir de un IFS, no se incluirá ningún carácter que no se encontrara ya en el IFS. Los IFS incluidos en DIV Games Studio no incluyen el espacio (ASCII 32) por lo que éste se trata como un carácter excluido más y se representa como un espacio en blanco cuya anchura se calcula automáticamente, como se describe a continuación.
Los caracteres excluidos se representarán en pantalla como un espacio en blanco cuya anchura será equivalente a la mitad de la anchura promedio de todos los caracteres incluidos.
A continuación se encuentra la tabla que contiene las características de cada carácter. Siempre tiene 256 entradas, independientemente del juego de caracteres seleccionado en charset_flags
. Se asume que los caracteres con anchura 0 están excluidos de la fuente.
struct fnt_char {
int anchura;
int altura;
int inc_y;
int offset;
};
fnt_char fnt_table[256];
anchura
y altura
definen el tamaño del mapa de bits almacenado en el FNT. inc_y
es el número de pixels por el que se desplaza verticalmente el glifo antes de dibujarlo.
El campo offset
indica la posición dentro del fichero donde se encuentra el mapa de bits correspondiente al carácter. De forma que DIV acude directamente a la posición offset
y espera encontrar allí un gráfico de anchura
por altura
pixels (o anchura * altura
bytes).