Bennu Game Development

Foros en Español => Documentación => Topic started by: izubiaurre on September 22, 2011, 07:16:53 PM

Title: Formato del fnt
Post by: izubiaurre on September 22, 2011, 07:16:53 PM
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
Title: Re: Formato del fnt
Post by: darío on September 22, 2011, 08:22:55 PM
Cambia la cabecera y el cuerpo...

Miraté este post: http://forum.bennugd.org/index.php?topic=464.msg5766#msg5766

Un saludo
Title: Re: Formato del fnt
Post by: 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
Title: Re: Formato del fnt
Post by: 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
Title: Re: Formato del fnt
Post by: Drumpi on October 02, 2011, 07:24:07 PM
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?
Title: Re: Formato del fnt
Post by: izubiaurre on October 02, 2011, 07:34:08 PM
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.
Title: Re: Formato del fnt
Post by: izubiaurre on October 04, 2011, 11:17:44 AM
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
Title: Re: Formato del fnt
Post by: Drumpi on October 07, 2011, 07:37:10 PM
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í).
Title: Re: Formato del fnt
Post by: izubiaurre on October 08, 2011, 12:03:30 PM
Era justo lo que necesitaba.
Title: Re: Formato del fnt
Post by: izubiaurre on October 10, 2011, 03:41:02 PM
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
Title: Re: Formato del fnt
Post by: darío on October 10, 2011, 04:01:31 PM
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 ;)
Title: Re: Formato del fnt
Post by: Drumpi on October 10, 2011, 06:45:01 PM
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.
Title: Re: Formato del fnt
Post by: izubiaurre on October 11, 2011, 12:55:18 PM
¡Gracias chaval!
Title: Re: Formato del fnt
Post by: peterpollito on October 14, 2011, 11:42:56 PM
Una pregunta tonta, ¿que hay de los simbolos asiaticos?¿como se ponen en un juego? No creo que sea una fuente...
Title: Re: Formato del fnt
Post by: josebita on October 15, 2011, 12:08:21 PM
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...
Title: Re: Formato del fnt
Post by: peterpollito on October 15, 2011, 04:50:54 PM
imagenes con los textos es una solución pero desde luego para versiones de consolas pequeñas no porque ocuparía mucho.
una fuente como dices poniendo un simbolo donde cada letra latina es poco, el alfabeto chino o japones es demasiado grande. No se, creo que es importante para ampliar horizontes poder incluir simobolos asiaticos y ¿tu libreria detecta un alfabeto normal, porque no podria detectar los simbolos asiaticos o incluirlos? ¿quizá con un mac?
Title: Re: Formato del fnt
Post by: Drumpi on October 17, 2011, 07:11:11 PM
Bueno, quizás se podría hacer una modificación al formato FNT para que además de ASCII soporte el UNICODE... de hecho, compatible debería serlo. No hay ninguna variable que indique que el número máximo de letras deba ser 255.

La limitación está en la mod_fnt, así que sería modificarla para que admita más caracteres (de hecho, ya se ha hablado más de una vez de los cambios que "necesita" la mod_fnt, cambios que tenemos que hacer alguno de nosotros).

Ojo, peterpollito: un FNT no deja de ser un FPG (o casi). Los datos se guardan en formato de imágenes, es más, puedes cambiar el gráfico de los caracteres 1-31, que son caracteres reservados (retorno de carro, salto de línea, borrar, escape, bip...). A las malas, te creas una función similar a write_in_map, que se le pase una cadena, y escriba los caracteres cargados desde un FPG (o dos, recordemos que los FPGs están limitados a 999 gráficos por fichero).

Lo que me gustaría saber es cómo reconocen los programas una codificación u otra en base a una sucesión de bytes, y cómo se hace para representar los caracteres japoneses (creo que usan dos bytes por caracter ¿no?).
Title: Re: Formato del fnt
Post by: peterpollito on October 17, 2011, 10:22:25 PM
Ocupan 2 bytes.
No entiendo mucho de esto, pero este link muestra los posibles listados de caracteres en unicode de cada idioma
creo que para codificacion de caracteres con uft-16 que es la de longitudes de dos caracteres que se usa en las escrituras CJK (chino,japo y no se cual mas).

La solucion que das Drumpi, es bastante mejor que la de las imagenes, ocuparia mucho menos. Hacer una fuente pero
con esos caracteres ampliados, eso suena bastante bien. Pero si que lo mejor es que acepte Unicode, de Uft 16-bits e
incluir los codigos compatibles con chino o el idioma asiatico que sea.

Aqui el enlace a la web oficial de unicode por si alguien se anima:
Unicode 6.0 Character Code Charts
http://www.unicode.org/charts/ (http://www.unicode.org/charts/)
Title: Re: Formato del fnt
Post by: Drumpi on October 18, 2011, 07:57:54 PM
No, si digo que se use FPG o FNT, el tamaño que va a ocupar el fichero es el mismo, aun usando fuentes de 1, 8, 16 o 32 bits, también se pueden hacer FPGs de 1, 8, 16 y 32 bits.

De todas formas, hacer una fuente unicode, o utf-16, es una misión titánica: bastante complicado es hacer los cerca de 220 gráficos para un FNT completo, ¡¡¡imagina unos 65565!!!! :D :D :D
Pero una selección de ellos, quizás sí, sería cuestión de usar la librería de TTF, generar una fuente y crear una modificación de mod_fnt para que la acepte... aunque a mi no me mires, de momento ^^U
Title: Re: Formato del fnt
Post by: peterpollito on October 18, 2011, 09:06:17 PM
hay una base de datos en esa web pero no lo he mirado mucho, se pueden buscar caracter a caracter y te muestra la imagen y los muchos codigos pero hay un zip con txts que se deben poder cargar de alguna manera. Pero bueno, no se mucho de esto :P

http://www.unicode.org/charts/unihan.html (http://www.unicode.org/charts/unihan.html)