[BUG] me manda a CRASH al cargar esta FNT creada por FNT_NEW

Started by alicesimu, October 27, 2016, 11:14:34 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

alicesimu

hola a todos

Me he topado con un bug tecnico de BennuGD(pixtudio tambien la tiene)

Se trata de 2 PRG.

1- escanea una carpeta que tiene PNG numerados, esta las añade a un nuevo FNT y las salva en formato FNT.
Aqui debo poner como comentario // las funciones de descarga de MAP y FNT, de lo contrario me Manda a CRASH cuando procesa un numero determinado (no puede finalizar) de png -> fnt.

2- Cargar la nueva FNT (CRASH me da siempre)

Adjunto los 2 PRG y los png.

La idea es hacer un conversor masivo de caracteres en PNG numerado a FNT 32bits.


import "mod_dir";
import "mod_file";
import "mod_map";
import "mod_string";
import "mod_video";

global
string nombre;
folder;
i,f;
Begin
set_mode(100,100,32);

chdir("FNT");

folder=diropen("*.");

repeat
nombre=dirread(folder);

if(nombre<>".." and nombre<>"." and nombre<>"");
chdir(nombre);
f=fnt_new(CHARSET_ISO8859,32);

from i=0 to 255;
If(file_exists(itoa(i)+".png"));
x=png_load(itoa(i)+".png");
glyph_set(f,i,0,x);
//map_unload(0,x);
end
End

save_fnt(f,"..\"+nombre+"_b.fnt");

//fnt_unload(f);
chdir("..");
end

until(nombre=="");
End


existe alguna solucion? que problema hay?

alicesimu

Al final encontre el fallo que existe.


     from y=32 to 255;
if(y<=126 or y=>160);//bug 160=>255
If(file_exists(itoa(y)+".png"));
x=png_load(itoa(y)+".png");
else
x=map_new(1,1,32);
end
glyph_set(z,y,0,x);
end
End


el fallo/bug se encuentra en glyph_set, a la hora de añadir los caracteres bitmap(png) a paratir del 128...
no coloca bien los bitmaps, en la nueva FNT es, decir el ASCII extendido no se colocan bien.
https://es.wikipedia.org/wiki/ISO/IEC_8859-1


import "mod_dir";
import "mod_file";
import "mod_map";
import "mod_string";
import "mod_video";
import "mod_proc" //exit()
//import "mod_sys"

const
crh=CHARSET_ISO8859;

nombre="TITLE";//Formato: CHARSET_ISO8859-1

global
string ruta,rutac;

Begin
set_mode(100,100,32);

chdir("FNT\"+nombre);

z=fnt_new(crh,32);

from y=32 to 126;//255;
//if(y<=126 or y=>160);//bug 160=>255
If(file_exists(itoa(y)+".png"));
x=png_load(itoa(y)+".png");
else
x=map_new(1,1,32);
end
glyph_set(z,y,0,x);
//end
End

chdir("..");

rutac=cd();
ruta=nombre+"_"+itoa(crh)+".fnt";
fnt_save(z,ruta);
chdir("D:\pixtudioPack\fpg-editor");

rutac+="\"+ruta;
exec(_P_NOWAIT,"fpg-editor.exe",1,&rutac);
exit(rutac);
End

Al final el FNT generado, añade de forma erronea los caracteres a partir del 160-255
Asi que debo borrar esos caracteres mal formados y añadirlos manualmente con FPG Editor V4. (con la opcion Tipografias -> Abrir...)
Añadir los png del 160-255 y guardar la FNT. para solucionarlo.

Por suerte la funcion fnt_new marca(algun bit o punto de control) la FNT del charset que debe ser impresa/manipulada, eso funciona bien.

en el programa lo tengo automatico, que al guardar la FNT inacabada, abrira el FPG Editor V4. con argumento del fichero FNT.
Y lo abre. para añadirlos manualmente.



import "mod_map";//fnt_load
import "mod_text";//write
import "mod_video";
import "mod_wm";
import "mod_key" //scancode()
import "mod_proc" //exit()

const
txt="¡Hola! :) çÇñÑ[]{}!@#~¬\ª!·$%&/()=?¿<>*+;:_,.-`++`¨´^*";

Begin
set_mode(1280,720,32);
move_window(50,50);

write(0,0,20,0,"SYSTEM FNT: CP850");
write(0,0,40,0,txt);

write(0,0,270,0,"PNG Import(fnt_new,glyph_set) + FPG Editor V4: ISO8859-1");
fnt_load("FNT\TITLE_0.fnt");
write(1,0,300,0,txt);

repeat

frame;
until(scan_code==102 or key(_esc))  //android back button

exit("exitt");
End

Y aqui hago la prueba del resultado.
en notepad++ debe estar en codificacion ANSI, para que funcione bien.

En android tambien funciona perfecto. las FNT 32bits sin comprimir!

Pude conseguir mi proposito finalmente, aun que me encontre este bug de la creacion de FNT, uso del glyph_set
y si o si, para hacer el ASCII extendido debo usar el FPG Editor V4, para añadir lo que falta de manera ordenada.

DCelso

No, ni bennu ni pixtudio tienen error.

Es culpa de usar itoa, (o bien itoa solo convierte a ascii normal, no extendido, o bien lo hace al ascii extendido cp850, tendíamos que mirarlo en el código bennu).

En vez de guardar tus .png con el valor ascii, hazlo con el número, así no tendrás problemas.
0.png, 1.png.... 127.png, 128. png.... 255.png..

y luego  cambia todo el contenido de tu bucle for por este

x=png_load(y+".png");
glyph_set(z,y,0,x);

Esta sería la forma correcta de usar pngs para tus fonts.

NOTA: tu misterioso punto de control (o marca) es este x=map_new(1,1,32);
Estás creando un mapa de un pixel cuando no encuentras el fichero con el nobre que le solicitas.
;D
Monstruos Diabólicos

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

alicesimu

Itoa lo uso para convertir una variable entero a valor textual string , no meto ningún ASCII por medio. Solo es un número

Itoa(y)+".PNG"

Pero no conocía que se pudiera usar la variable de forma directa y+".PNG".
Lo probare así como dices, a ver que tal.

Pero vaya los archivos tienen bien el numero del 32-255 sin problemas.

Lo del misterioso map_new  es por si era necesario añadir algún grafico vacío en caso de no existir dicho PNG.
Si la FNT le faltara ese graph... A lo mejor no me lo carga y daría error... Ni idea.

SplinterGU

itoa deberia ser lo mismo que poner el "y" (en el ejemplo), no te entendi DCelso que querias decir...

por otro lado, es posible lo que comenta Alice, yo creo recordar que habia un tema con las tablas de conversion de codificacion + setglyph.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Monstruos Diabólicos

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

alicesimu

yo mas no puedo analizar.

solo que me di cuenta que apartir del 160, no añade de forma ordenada el ASCII extendido ISO 8859 a la nueva FNT
por ende  si se carga la FNT nueva, mada a Crash bug.

SplinterGU

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

SplinterGU

Quote from: alicesimu on November 02, 2016, 06:12:56 AM
yo mas no puedo analizar.

solo que me di cuenta que apartir del 160, no añade de forma ordenada el ASCII extendido ISO 8859 a la nueva FNT
por ende  si se carga la FNT nueva, mada a Crash bug.

porque añade respecto a una tabla de conversion, por ejemplo, por decir cualquier cosa, agregas el 140 y te agrega el 153 (los numeros son cualquiera, pero es para ejemplificar)... y creo que algunos estan mapeados a la misma posicion... por ejemplo, decir que el 140 y el 180, apuntan al 153... (repito que los numeros mencionados no son reales, son para ejemplificar el comportamiento)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2