Conversor de FNT

Started by Drumpi, February 24, 2009, 11:23:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Sep, ya me conoces, me gusta crearme mis propias funciones, ya que así tengo control total sobre lo que hago. Por ejemplo, save_fnt sólo guarda en formato "fnx" de 16 bits con compresión (al menos, en Fenix), que no son compatibles con el viejo FNTEdit, gracias a esto, voy a poder guardar fuentes en formatos "fnt" y "fnx", de cualquier profundidad de color (independientemente del modo gráfico), con/sin compresión, etc...
Faltaría poco para poder crear un módulo en C, pero aun hay algunas funciones y variables internas de Fenix que no conozco, amen de unas cuantas operaciones tipo C que no entiendo, que usais para mejorar el rendimiento. En cuanto sepa, te hago esta funcion y monto un start_tscroll "copiando" código del scroll normal :D

Por cierto, soy electrónico: para mí es menos ambiguo hablar del bit más o menos significativo, porque el "bit 7" depende del orden en que se lea, pero el menos significativo es el que "menos valor representa". Siempre es bueno saber otras formas de decirlo.

Nuevo avance: funciones de carga y salvado terminadas, pero están sin probar. Estoy con las funciones de conversion de mapas (que no hay ninguna). Va a ser un poco más complejo de lo que pensé al principio, porque get_rgb creo que es dependiente del modo gráfico, y no es lo mismo un 70 de un map_get_pixel de 8, 16 o 32 bits.
Después me pasaré a la exportación en FPG, para comprobar si los resultados son satisfactorios.
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

pero eso es ridiculo, es no confiar en el lenguaje, es lo mismo que yo use C y me ponga a crear las librerias de C porque no confio en C... no tiene sentido...

para que queres guardar fonts para el fntedit? "save_fnt solo guarda...", pero yo podria decir que "fntedit solo soporta...".

el bit mas significativo, independientemente de donde se encuentre fisicamente, es el bit 7...

repito, no veo mucho sentido en perder el tiempo reinventando la rueda... deberiamos mirar hacia el futuro, no hacia atras... pero bueno...

por otro lado, en que porcentaje ya va el proyecto? hay algo para testear?
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Hombre, no te lo tomes a mal, tengo mis razones para hacerlo así:
1- No dependo del modo gráfico, para empezar. No me parece apropiado tener que hacer un set_mode cada vez que quiera convertir una fuente a una profundidad de color... por no hablar de las incompatibilidades de tener en memoria maps de 16 bits y tener que cambiar a 8 para guardar una fuente para usar en DIV.
2- Las funciones de salvado de fuentes, salvo que se hayan retocado mucho (que me parece a mi que no), son muy limitadas. Sí, fntedit solo soporta fuentes DIV-like (lo he comprobado), y es por eso por lo que me he lanzado a hacer esta utilidad, porque necesitaba una fuente que no cambiase de color con la paleta. Y por una razon similar no puedo usar las funciones nativas de Bennu: un editor de algo tiene que ser tan versatil como se pueda. Es como coger el editor de video del XP: puede admitir 30000 formatos de entrada, añadir 70000 efectos y todo eso, pero si despues sólo puedo sacarlo en wmv con su correspondiente pérdida de calidad, tamaño y compatibilidad, pues es mejor usar otro ¿no?
3- Estoy intentando aprender programación en general. Aunque uso Fenix/Bennu, tambien quiero migrar a C por cuestiones profesionales (en un futuro). Obviamente, en C se usan librerías para simplificar la vida, pero siempre es mejor saber hacerte tus librerías y usar otras, que saber manejar unas librerías y luego depender sólo de ti ¿no? :D

No se, es mi manera de verlo. Este sólo es otro pasito hacia mi destino de "maestro de los ficheros" de nivel 78 :D

Bueno, yendo al grano, os traigo una versión que acabé justo ayer justo antes de cenar. No está probado, salvo que he conseguido crear fuentes de 16 bits, con y sin compresión, a partir de una fuente de FNTEdit, luego volver a convertirla en una fuente estilo DIV que cargó FNTEdit (pero no se  si funcionó). Las fuentes de 1bit no funcionan bien: las admiraciones y los puntos salen bien, pero las letras se convierten en lineas verticales discontinuas, tengo que investigarlo.
De momento, está hecho con una wip11 para windows que tenía por ahi (acabo de coger la última versión hace un momento) y solo funciona por la linea de comandos, con un parámetro como mínimo: para leer la ayuda, usad el parámetro "-h" en minúsculas (fntconv -h).
Subo tambien las fuentes, porque hay algunas funciones que a lo mejor interesan a la gente, por ejemplo, conversiones de color entre mapas, o funciones para guardar FPGs y MAP que hice para Fenix, a las que tengo que añadir los cambios para Bennu (tengo especificaciones para "fpg" (8bits) y "f16" (pero solo 16, no parece que este formato aceptase 1 bit previamente, y no se cómo es el de 32, probablemente aquí si que use las funciones de Bennu, pero voy a ocupar el doble de memoria creando un fpg))

Cualquier sugerencia, crítica o jamón será bien recibida.

FNTConv (ejecutable)
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

en bennu no hace falta cambiar de modo de video para crear o usar un mapa de otra profundidad...

no coincido, pensar en ponerme a hacer las libs basicas de C por decir que no tengo el control, entonces seria mejor que me ponga a trabajar en asm... a mi me parece ridiculo...

dependerias solo de mi si esto fuera un proyecto cerrado, pero es un proyecto abierto opensource...

pero bueno, no todo el mundo tiene la misma forma de ver las cosas...

gracias, vamos a probarlo...

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

Drumpi

Mapas no, fpgs y fuentes si.
Y no es cuestion de control, sino de limitación en este caso. Pero bueno, ese no es el tema ;)
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

fpg tampoco, la profundidad final es la profundidad del primer mapa encontrado dentro de la lib en memoria, y logicamente, todos los mapas tiene que tener la misma profundidad...
lo mismo para los fonts...

se pueden trabajar perfectamente, no dependen del set_mode, salvo las operaciones de RGB dependientes de la paleta del sistema, pero no las RGB que no lo son, de todas formas las RGB se pueden evitar...

pero si estas trabajando con la wip11, puede que algunas cosas no te funcionen como deberian...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

O sea: yo creo un fpg nuevo en memoria, y al asignarle un gráfico, este define los bpp del fpg. Y lo mismo con las fuentes. Pues eso es lo que yo no sabia :(
Pero si que estoy teniendo problemas, sobre todo con set_colors y get_colors, que me salta error en ejecución (ventanita alarmista con windos queriendo llamar a casa).

Pero bueno, eso ya da casi igual, pues las funciones de carga y salvado, tanto de FNT como de FPG están casi terminadas, tengo que probar la carga de fpgs porque al crear una fuente a partir de estos no se ve nada (aunque claro, no era un fpg de fuentes :D).

Por cierto, he corregido algunos fallos respecto al guardado de fuentes, pues si el último caracter está vacío, se da un mensaje de error (aun asi, la fuente se genera). Y algun otro que no recuerdo. Pero como hoy me toca volver a casa, no he podido guardar los cambios en la SD, así que subiré los fuentes en otra ocasion ^^U

Superado el escollo de los FPG, podría decirse que llevo un 50% del programa hecho. El otro 50% es el entorno interactivo, y con eso voy a tardar muchiiiiiisimo tiempo (gráficos, siempre son gráficos).
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

los set y get colors, proba con la r28... creo que habia un bug en determinadas circunstancias
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Bueno, un fin de semana de locos que se termina. No he podido hacer casi nada, pero lo prometido es deuda, así que antes de salir de vaje a tierras de estudio, os subo los nuevos fuentes.
No tengo lista de cambios, pero está arreglado el problema que daba con los fuentes sin el último caracter, y teóricamente funciona la importación de FPGs, pero lo he probado poco y no me ha funcionado con un FPG normal (es decir, de otro proyecto que tenia por ahi). Sois libres de usar partes de código si los necesitais, buscar fallos y dar sugerencias, pues en cuanto funcione la importación y exportación de FPGs, empezará el baile de gráficos (diseño del ide).
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

blostec

Un proyecto muy interesante, bajando la ultima versión. karma up para ti!

Drumpi

Hola a todos:

Bueno, como he dicho en varios hilos, he estado mirando por encima este programa, aprovechando que se ha puesto de moda el tratar con fuentes de 1 bit :D

He conseguido que funcione la conversión de FNT DIV-style a 1 bit, y creo que va bien a 16 bits. No he hecho pruebas exaustivas, así que, aunque suene mal, no garantizo un correcto funcionamiento (salvo lo dicho: 8->1 bits).
Podeis mirar el código si quereis, aunque os adelanto que hay muchísimas funciones a bajo nivel, tanto que no le afectan posibles bugs o cambios del intérprete (los ficheros se generan dato a dato, y la información se guarda en memoria como gráficos independientes, y se analizan pixel a pixel). De haber usado funciones de Bennu, lo mismo el código ocuparía la mitad :D :D :D
Otra cosa, este es de mis primeros códigos en Bennu, por lo que puede que esté un poco desorganizado.

Funciona mediante comandos, no hay interfaz gráfica, así que para hacer la conversión de 8 a 1 bit, un ejemplo sería:

bgdi fntconv -nc -1 fuente.fnt fuente_1bit.fnt

Para obtener ayuda, usar -h como único parámetro.
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)

DCelso

Quote from: Drumpi on December 15, 2010, 08:32:49 PM
Hola a todos:

Bueno, como he dicho en varios hilos, he estado mirando por encima este programa, aprovechando que se ha puesto de moda el tratar con fuentes de 1 bit :D

He conseguido que funcione la conversión de FNT DIV-style a 1 bit, y creo que va bien a 16 bits. No he hecho pruebas exaustivas, así que, aunque suene mal, no garantizo un correcto funcionamiento (salvo lo dicho: 8->1 bits).
Podeis mirar el código si quereis, aunque os adelanto que hay muchísimas funciones a bajo nivel, tanto que no le afectan posibles bugs o cambios del intérprete (los ficheros se generan dato a dato, y la información se guarda en memoria como gráficos independientes, y se analizan pixel a pixel). De haber usado funciones de Bennu, lo mismo el código ocuparía la mitad :D :D :D
Otra cosa, este es de mis primeros códigos en Bennu, por lo que puede que esté un poco desorganizado.

Funciona mediante comandos, no hay interfaz gráfica, así que para hacer la conversión de 8 a 1 bit, un ejemplo sería:

bgdi fntconv -nc -1 fuente.fnt fuente_1bit.fnt

Para obtener ayuda, usar -h como único parámetro.
¿bgdi -h? :D
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Drumpi

Quote from: DCelso on December 15, 2010, 08:38:38 PM
¿bgdi -h? :D

¬¬U
bgdi fntconv.dcb -h
O bien:
fntconv -h
Si tienes las librerías en la misma carpeta y renombras el BGDI.exe, que es como lo tenía yo
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

Quote from: DCelso on December 15, 2010, 08:38:38 PM
Quote from: Drumpi on December 15, 2010, 08:32:49 PM
Hola a todos:

Bueno, como he dicho en varios hilos, he estado mirando por encima este programa, aprovechando que se ha puesto de moda el tratar con fuentes de 1 bit :D

He conseguido que funcione la conversión de FNT DIV-style a 1 bit, y creo que va bien a 16 bits. No he hecho pruebas exaustivas, así que, aunque suene mal, no garantizo un correcto funcionamiento (salvo lo dicho: 8->1 bits).
Podeis mirar el código si quereis, aunque os adelanto que hay muchísimas funciones a bajo nivel, tanto que no le afectan posibles bugs o cambios del intérprete (los ficheros se generan dato a dato, y la información se guarda en memoria como gráficos independientes, y se analizan pixel a pixel). De haber usado funciones de Bennu, lo mismo el código ocuparía la mitad :D :D :D
Otra cosa, este es de mis primeros códigos en Bennu, por lo que puede que esté un poco desorganizado.

Funciona mediante comandos, no hay interfaz gráfica, así que para hacer la conversión de 8 a 1 bit, un ejemplo sería:

bgdi fntconv -nc -1 fuente.fnt fuente_1bit.fnt

Para obtener ayuda, usar -h como único parámetro.
¿bgdi -h? :D

imagino que lo preguntas en broma, pero sin embargo es una buena pregunta para los novatos...

lo que dice drumpi es...

bgdi fntconv -h
Download Lastest BennuGD Release: http://www.bennugd.org/node/2