Formato del fnt

Started by izubiaurre, September 22, 2011, 07:16:53 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

izubiaurre

No será porque no lo haya buscado, pero no encuentro la definición del formato fnt (el de 8 bits me funciona para fbmx, pero me faltan para los 16, 32 y 1 bits de profundidad). Seguramente serán parecidos pero no sé exactamente en qué se diferencian...


Un saludo

darío

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

Drumpi

Snif, qué recuerdos... aun tengo el proyecto ahí, aparcado en una carpeta del disco duro :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)

KeoH

Quote from: Drumpi on September 24, 2011, 05:13:14 PM
Snif, qué recuerdos... aun tengo el proyecto ahí, aparcado en una carpeta del disco duro :D :D :D

El hombre de los 1001 proyectos xD

Drumpi

Quote from: KeoH on September 24, 2011, 05:31:30 PM
Quote from: Drumpi on September 24, 2011, 05:13:14 PM
Snif, qué recuerdos... aun tengo el proyecto ahí, aparcado en una carpeta del disco duro :D :D :D

El hombre de los 1001 proyectos xD

... y ninguno acabado :D :D -.-U Salvo "Drajon Lol: devolución", "Drajon Lol: devolución, extreme edition" y "Pulsar 2000 Limited Edition".
¿Qué dice de mi tener tantos proyectos empezados, algunos como el Echo, pero que sólo tenga terminados 3 crap-juegos? ;D ;D ;D

Por cierto ¿sirve esa información o se necesitan datos más concretos?
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)

izubiaurre

El hombre de los 1001 proyectos xD
Quote
(...)

Por cierto ¿sirve esa información o se necesitan datos más concretos?


Si se pusiera como es debido, con todos los datos. estaría bien.

izubiaurre

De tanto en tanto avanzo con esto un poco:





Primero vendría la cabecera:


Public Type t_FNT_Magic
    magic As String * 3                                 ' esto es: "fnt"
    version(4) As Byte
End Type



Public Const c_FNT_version_1 = &H1A
Public Const c_FNT_version_2 = &HD
Public Const c_FNT_version_3 = &HA
Public Const c_FNT_version_4 = &H0
Public Const c_FNT_version_5 = &H0


Supongo que para las versiones de DIV y BennuGd esto cambiaría, ¿no? ¿Cómo sería para fuentes de 1 bit, 16 y 32bits?


Luego vendrían la paleta (para 8 bits) y
en DIV por lo menos 579 unusedBytes. En bennuGD, ¿esto desaparece?


Y después vendría por cada char




    struct
    {
        int width;
        int height;
        int xadvance;
        int yadvance;
        int xoffset;
        int yoffset;
        int fileoffset ;
    }
    chardata[256] ;


Y finalmente los datos de cada char:
1 byte para 1 y 8 bits
2 bytes para 16 bits y
4 bytes para 32 bits.

¿Me equivoco?

Un saludo

Drumpi

A ver, según leo en mi código:

Primero vendría el campo MAGIC: "fnt" para DIV, "fnx" para Bennu. 3 CHAR
Cabecera MS-DOS: 26,13,10,0 (formato decimal, se entiende), 3 BYTES

Versión: 0 en DIV. En Bennu vale los bpp (1 para 1 bit de color, 8 para 256 colores, 16 para 16 bits y 32 para 32 bits). 1 BYTE

Paleta (sólo para fuentes de 8 bits de color o formato antiguo): 768 bytes (3 bytes por color, representando R,G y B de cada color) y 576 bytes (representan las gammas, pero no se usan).

Charset: 4 BYTES (1 INT): CHARSET_CP850=1,  CHARSET_ISO8859=0

Estructuras de descriptores: son 256
-Formato viejo:
·1 INT: ancho de la letra
·1 INT: alto de la letra.
·1 INT: desplazamiento en Y (creo recordar que era el hueco que se dejaba respecto a la parte ¿superior? para mantener las letras alineadas aunque tengan un tamaño distinto.
·1 INT: desplazamiento de datos, la posición en el fichero del primer byte que representa la imagen de la fuente (las imágenes pueden no estar guardadas en el mismo orden).
-Formato nuevo:
·1 INT: ancho de la letra (ancho de la imagen)
·1 INT: alto de la letra (alto de la imagen).
·1 INT ancho total de la letra (imagen + separación).
·1 INT alto total de la letra (imagen + separación).
·1 INT: desplazamiento en X (creo recordar que era la posición del centro del gráfico respecto a la que se supone que es la esquina superior izquierda de donde debería ir la letra)
·1 INT: desplazamiento en Y (creo recordar que era la posición del centro del gráfico respecto a la que se supone que es la esquina superior izquierda de donde debería ir la letra)
·1 INT: desplazamiento de datos, la posición en el fichero del primer byte que representa la imagen de la fuente (las imágenes pueden no estar guardadas en el mismo orden).

DATOS:
Ahora se carga el valor de cada pixel que forma la imágen de la letra. La posición del primero se indica en el campo desplazamiento de la estructura de cada letra.
-Si es de 1bit: cada bit representa un pixel, y las lineas se agrupan de 8 en 8 bits (una letra de 10x10 pixels tendrá 2bytes por línea, un total de 20bytes).
-Si es de 8 bits: se usa 1 byte por pixel, representa el color de la paleta.
-Si es de 16 bits: se usan 2 bytes por pixel, representan el RGB en formato 565.
-Si es de 32 bits: se usan 4 bytes por pixel, representan RGBA.

Espero no haberme confundido, hace ya mucho que no lo toco. Hay algunos campos de las estructuras que son un poco confusos, si hay alguna duda, me la preguntais.
Aun así, no fui capaz de generar una fuente a partir de un FPG (me atasqué ahí y no lo seguí).
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)

izubiaurre

Era justo lo que necesitaba.

izubiaurre

Bueno, sigo con mis pruebas y necesito fuentes de 1, 8 y 16 bpp (fuentes de Bennu, no del formato antiguo) y que tengan caracteres visibles (no me valen los creados con




global
int fnt1;


begin


graph_mode = MODE_8BITS;
fnt1 = new_fnt(8);
set_mode(M320X240);
save_fnt(fnt1,"a8.fnt");
unload_fnt(fnt1);
graph_mode = MODE_16BITS;
fnt1 = new_fnt(16);
set_mode(M320X240);
save_fnt(fnt1,"a16.fnt");
end


ya que sólo crean fuentes vacías.


Un saludo

darío

Puedes usar set_glyph (creo que era así) para añadir almenos algún caracter a tu fuente y así cuando haces save_fnt lo tienes ;)
My sites:
Smart Fpg Editor - Painless FPG Edition for Bennu and PixTudio
fenixlib - .NET support for manipulating PixTudio, Bennu and Div graphic formats

Drumpi

#11
Me temo que no dispongo de lo que necesitas: todas las fuentes que tengo son generadas byte a byte, por lo que no sé si son correctas.
Te adjunto las que creo que funcionan, que son unas basadas en comic_sans, convertidas del formato antiguo al nuevo con mi programa, y la fuente del sistema extraida desde mapas internos a datos.

PD: si hace falta, vuelvo a subir el FNTConv, al menos, convertir fuentes del formato antiguo a 16 bits sí me ha funcionado.
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)

izubiaurre


peterpollito

Una pregunta tonta, ¿que hay de los simbolos asiaticos?¿como se ponen en un juego? No creo que sea una fuente...

josebita

En ppio. no está soportado ningún símbolo que no esté en el alfabeto latino.
Creé una librería para soportar todos los alfabetos (mod_pango) y que además funciona muy bien, pero es muy difícil compilarla para windows y creo que los binarios antiguos no funcionan.
Lo que podrías hacer es crearte una fuente con los símbolos asiáticos que vayas a utilizar en las posiciones de los caracteres "normales", aunque luego sea un infierno escribir los textos...