Formato .FNT de div

Started by darío, February 20, 2016, 12:32:00 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

darío

Hola,

Estoy trabajando en soporte para las fuentes en mi librería BennuLib y me ha surgido una duda:

En el formato de archivo de Fuentes de DIV (ese en el que los tres primeros bytes son FNT), hay una zona de 4 bytes entre la paletta y la sección información de los caracteres.

En los archivos FNT de Bennu (con magic FNX), esos 4 bytes indican la tabla de caracteres (ISO8559-1 o CP850).

Leyendo el código de file_fnt.c (en los sources de PixTudio, supongo igual en Bennu) me da la sensación de que también en DIV se utilizan para lo mismo (creo que en el antiguo manual de DIV1 se explicaba este campo como FontInfo).

Soportaba Div también los dos tipos de tabla de caracteres? O todas las fuentes Div usan CP850?

De file_fnt.c:

    /* Read the character data (detect old format) */

    if (header[2] == 'x') {
        if (!file_readSint32(fp, &types)) {
            pal_destroy(pal);
            return -1;
        }
        // ...
    } else {
        if (!file_readSint32(fp, &types)) {
            pal_destroy(pal);
            return -1;
        }
        // ...
    }



My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

me suena que DIV solo soportaba CP850... (maldicion, me levante de la silla para ir a buscar los manuales de DIV y no los encuentro! si llego a dar con ellos y esta consulta no esta resuelta, te respondo...)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Yo tengo los manuales de DIV pero en España (y me queda un poco lejos). Pero lo que dices confirma lo que recuerdo. Pero no entiendo para que están esos 4 bytes ahí en los FNT de DIV (creo que a lo mejor pensaron "en el futuro").
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Según la vieja wiki de fenixworld sobre el fichero FNT de 8bits:

Un fichero FNT comienza con la siguiente cabecera:
NombreTamañoDescripción
MAGIC3 bytesCadena de caracteres de identificación del fichero. Debe contener exactamente "fnt", en minusculas.
TERMINACION MS-DOS4 bytesA continuación, los cuatro bytes 1Ah, 0Dh, 0Ah y 00h. Esta terminación indica, en un fichero MS-DOS, final de fichero. Gracias a ella un comando TYPE en MS-DOS no mostraría los datos binarios del fichero.
VERSION1 byteCódigo de versión. Debido a que no se han introducido cambios en el formato, este valor es siempre 00h.

[editar]Paleta de colores A continuación aparecen 768 bytes con la paleta de colores. Cada color ocupa tres bytes en orden RGB (rojo, verde y azul) y con un rango para cada componente de color de 0 a 63. Seguido aparecerán 576 bytes con información de las gamas, que podran ser ignorados en Fenix. Para mas información sobre este punto y sobre el formato PAL en general, visita estos otros dos articulos:

[editar]Informacion de la fuente A continuación, inmediatamente después de la paleta, se guardan 4 bytes que incluyen informacion acerca de los caracteres incluidos en la fuente.
NombreTamañoDescripción
GRUPOS DE CARACTERESDWORD

       
  • +1 - Números
  • +2 - Mayúsculas
  • +4 - Minúsculas
  • +8 - Símbolos
  • +16 - Extendidos

[editar]Descriptores de los caracteres Ahora siguen los descriptores de cada carácter (ASCII 256 letras), con informacion util para interpretar los datos. Por lo tanto nos encontraremos un array de estructuras con 256 elementos, cada uno de los cuales se corresponde con el siguiente formato:
NombreTamañoDescripción
ANCHODWORDAncho en píxels del gráfico del carácter.
ALTODWORDAlto en píxels del píxels del gráfico.
DESPLAZAMIENTO VERTICALDWORDEste dato indica cuantos pixeles se desplazará verticalmente el gráfico del caracter sobre la linea base de la cadena de texto.
DESPLAZAMIENTO DE LOS DATOSDWORDEste dato indica la posición de los datos del gráfico del carácter actual en el archivo. De esta forma podremos almacenar los gráficos sin un orden dado, ya que podremos desplazarnos en el archivo al punto exacto donde se encuentra cada uno.

[editar]Datos de los gráficos Por último, aparecen los datos de los gráficos propiamente dichos, de arriba a abajo: Tamaño en bytes de los datos = ancho * alto
El valor 0 (índice 0 de la paleta) está reservado para los píxels transparentes.
El orden de cada caracter en este punto puede variar. Lo usual es guardar los datos en orden ascendente, del caracter 0 al 255, aunque esto es solo una sugerencia. Para saber el punto exacto en el archivo donde se encuentran los datos del gráfico de cada caracter deberemos fijarnos en el dato DESPLAZAMIENTO DE LOS DATOS incluido en el descriptor de cada carácter.





No sé hasta qué punto es correcta la información, pues ya intenté en su día crear un editor de fuentes en Fenix sin resultados (bueno, alguno hubo, pero sólo conseguí un único formato de fuente, pero no recuerdo cual, y no encuentro el código.
Por si acaso, esta es la info de la misma web de los FNT de 16bits (FNX)

Especificación del formato FNX Esta sección describe el contenido de un fichero FNT. No es necesario conocer estos detalles simplemente para programar juegos, pero serán de utilidad a quien quiera realizar utilidades en lenguajes externos que lean o escriban ficheros FNT.
Un fichero FNX puede incluir compresión. Fenix soporta de forma transparente el uso de compresión GZIP en los ficheros, sin necesidad de marcarlos especialmente con extensión .gz. Normalmente un fichero FNT se guarda en disco comprimido de esta manera, pero en el resto del fichero asumiremos que el fichero FNT no está comprimido.


[editar]Cabecera Un fichero FNX comienza con la siguiente cabecera:
NombreTamañoDescripción
MAGIC3 bytesCadena de caracteres de identificación del fichero. Debe contener exactamente "fnx", en minusculas.
TERMINACION MS-DOS4 bytesA continuación, los cuatro bytes 1Ah, 0Dh, 0Ah y 00h. Esta terminación indica, en un fichero MS-DOS, final de fichero. Gracias a ella un comando TYPE en MS-DOS no mostraría los datos binarios del fichero.
BITS POR PIXEL1 byteProfundidad de color de la fuente. Puede tomar los valores 1 (monocromo), 8 (256 colores), 16 (16 bits de color, RGB-565) o 32 (32 bits, ARGB, sólo BennuGD).

[editar]Paleta de colores A continuación, si la profundidad de color es de 8 bits, aparecen 768 bytes con la paleta de colores. Cada color ocupa tres bytes en orden RGB (rojo, verde y azul) y con un rango para cada componente de color de 0 a 63. Seguido aparecerán 576 bytes con información de las gamas, que podran ser ignorados en Fenix. Para mas información sobre este punto y sobre el formato PAL en general, visita estos otros dos articulos:

[editar]Informacion de la fuente A continuación, inmediatamente después de la paleta, se guardan 4 bytes que incluyen informacion acerca de los caracteres incluidos en la fuente.
NombreTamañoDescripción
CHARSETDWORD Conjunto de caracteres usados. Se pueden seguir dos normas distintas.

       
  • 0 = ISO8859
  • 1 = CP850

[editar]Descriptores de los caracteres Ahora siguen los descriptores de cada carácter (ASCII 256 letras), con informacion util para interpretar los datos. Por lo tanto nos encontraremos un array de estructuras con 256 elementos, cada uno de los cuales se corresponde con el siguiente formato:
NombreTamañoDescripción
ANCHODWORDAncho en píxels del gráfico del carácter.
ALTODWORDAlto en píxels del píxels del gráfico.
ANCHO DESPLAZAMIENTODWORDAncho en píxels que se desplazará la siguiente letra. Al leer el formato FNT, se le suele asignar el ancho del gráfico en este campo.
ALTO DESPLAZAMINETODWORDAlto en píxels que se desplazará la siguiente línea. Al leer el formato FNT, se le suele asignar el ancho del gráfico más el desplazamiento vertical en este campo.
DESPLAZAMIENTO HORIZONTALDWORDEste dato indica cuantos pixeles se desplazará horizontalmente el gráfico del caracter.
DESPLAZAMIENTO VERTICALDWORDEste dato indica cuantos pixeles se desplazará verticalmente el gráfico del caracter sobre la linea base de la cadena de texto.
DESPLAZAMIENTO DE LOS DATOSDWORDEste dato indica la posición de los datos del gráfico del carácter actual en el archivo. De esta forma podremos almacenar los gráficos sin un orden dado, ya que podremos desplazarnos en el archivo al punto exacto donde se encuentra cada uno.

[editar]Datos de los gráficos Por último, aparecen los datos de los gráficos propiamente dichos, de derecha a izquierda, y de arriba a abajo: El tamaño depende de la profundidad de color. Tamaño en bytes de los datos = ancho * alto * (bpp/8)
El valor 0 está reservado para los píxels transparentes.
El orden de cada caracter en este punto puede variar. Lo usual es guardar los datos en orden ascendente, del caracter 0 al 255, aunque esto es solo una sugerencia. Para saber el punto exacto en el archivo donde se encuentran los datos del gráfico de cada caracter deberemos fijarnos en el dato DESPLAZAMIENTO DE LOS DATOS incluido en el descriptor de cada carácter.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Gracias Drumpi, la información de "GRUPOS DE CARACTERES" era lo que me faltaba. Lo de los FNX lo tenía controlado porque lo he podido inferir del código de PixTudio.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

De todas formas, si veis alguna inconsistencia, avisadme ;)
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

darío

Drumpi, no tendrás por casualidad información de los 576bytes que vienen después de la paleta, no? Me gustaría, ya que estoy, que los archivos de 8bpp sean compatibles con DIV y no recuerdo que hacían esos bytes...
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

¿Los gamas? Lo cierto es que nunca supe en qué consistían. Creo que ni Fenix ni Bennu hacen uso de eso.
Si no me falla la memoria, las gamas son un conjunto de colores de la paleta que se utilizan para el editor de mapas de DIV y DIV2. Estas son las que se colocaban a la derecha de los colores, y se podían editar, para crear degradados personalizados (en lugar de coger colores con valores contiguos) y usar la herramienta de rellenado con mezcla de colores, o para el generador de explosiones.

Pero ya digo que no tengo detalles de los valores de esos 576 bytes. Siempre los he dejado a cero y nunca he tenido problemas. Quizás MikeDX tenga más detalles, ya que él está trabajando con el código fuente del DIV original (no recuerdo si ha llegado a publicar el SRC de lo que tiene hecho hasta ahora).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

iba a responder lo mismo, son las gamas, creo que son grupos de 16... pero no se usan.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

darío

Sí gracias, eso ya lo sabía, tendré que averiguar por mi cuenta los detalles. Justamente quise usar la beta de Div para probarlo pero la apertura de paletas no funcionaba :/

En cualquier caso no es prioritario, lo dejaré para otro momento.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

A las malas, te puedo hacer una captura de pantalla de DIV2. Lo tengo en una máquina virtual funcionando (aun sigue siendo el mejor programa que conzco para trabajar con gráficos de 256 colores :D :D :D )
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

darío

Nah no te preocupes. Edtoy seguro q con una beta de divdx se aclararan las cosas.
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats