Problemas al hacer save_fpg

Started by Yawin, November 16, 2016, 08:57:48 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

¡Hola a todos!

Llevo unos días intentando hacer funcionar un código. La idea es simple: le paso una profundidad de color, una ruta y un nombre y el programa genera un fpg con el nombre y la profundidad de color indicados cuyo contenido son las imágenes contenidas en la ruta indicada.

Como base uso un programa que proporcionaba Pixel en su pixplantilla. Pero, por alguna razón, me suelta error cuando intenta hacer el save_fpg y siempre me da error.

¿Se os ocurre qué puedo estar haciendo mal?

El código es el siguiente: http://miguelalbors.noip.me/codigos/index.php?c=pxlfpg.prg
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

panreyes

Holas Yawin :)

Bricopregunta: ¿Estás haciéndolo con BennuGD o con PixTudio?
Yo para funciones de manipulación de FPGs utilizo BennuGD

SplinterGU

el load_png no siempre convierte los mapas a la profundidad del video, sin dudas tenes mapas de diferente profundidad de color... yo te diria que metas debug ahi para ver si alguno tiene una profundidad diferente...

en ese caso, vas a tener que convertirlos manualmente...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

cambia

temp = load_png(nombre);


por:

temp1 = load_png(nombre);
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
map_block_copy  (0, temp , 0 , 0, temp1,width*(i-1),0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),0);
unload_map(0,temp1);

Monstruos Diabólicos

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

SplinterGU

Quote from: DCelso on November 16, 2016, 09:55:49 PM
cambia

temp = load_png(nombre);


por:

temp1 = load_png(nombre);
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
map_block_copy  (0, temp , 0 , 0, temp1,width*(i-1),0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),0);
unload_map(0,temp1);



exacto! aunque hay que tener cuidado ya que no se puede hacer conversiones de mapas desde una profundidad mayor a una menor... a menos que se haga manualmente manipulando pixel a pixel...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Vale, a ver, por partes.

Pixel: No, no uso pixtudio. Lo sigo con interés, pero me mantengo fiel a la palabra de Splinter, al menos por el momento, prefiero mantenerme dentro de lo que conozco.

Splinter, Dcelso: Ahora mismo pruebo lo que me decís; pero me gustaría poder entender qué hace ese código xD
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

ese codigo lo que hace es crear un grafico igual al que cargaste, pero con la profundidad de colores de la pantalla, y luego de eso, pone/dibuja el grafico cargado sobre este nuevo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

panreyes

Quote from: Yawin on November 16, 2016, 10:34:09 PM
Pixel: No, no uso pixtudio. Lo sigo con interés, pero me mantengo fiel a la palabra de Splinter, al menos por el momento, prefiero mantenerme dentro de lo que conozco.
Ok... Aunque, como ya dije, yo uso BennuGD para manipulaciones de FPGs xD

Yawin

Pues me sigue sin ir. No sé qué puede pasar. Añadiendo vuestra propuesta de cambio me ha quedado así: http://miguelalbors.noip.me/codigos/?c=pxlfpg.prg
Ejecutando: bgdi pxlfpg.dcb 16 /ruta/ prueba.fpg
Me genera esto: http://miguelalbors.noip.me/prueba.fpg

Y tengo comprobado que las imágenes están correctamente.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

panreyes

Sube también las imágenes para comprobarlo.

Yawin

Adjunto lo dejo. Pero ya aseguro que están correctamente.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

DCelso

width*(i-1) está mal, debe ser 0, en vez de poner esa formula, la casualidad es que da 0 esa formula porque ni width ni i las inicializas :D.


Monstruos Diabólicos

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

DCelso

no se, lo veo todo bien.
solo se me ocurre que cambies
temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);

por

temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),atoi(argv[1]));

a ver si va

Monstruos Diabólicos

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

SplinterGU


import "mod_dir";
import "mod_draw";
import "mod_file";
import "mod_grproc";
import "mod_joy";
import "mod_key";
import "mod_map";
import "mod_math";
import "mod_mouse";
import "mod_proc";
import "mod_rand";
import "mod_regex";
import "mod_say";
import "mod_screen";
import "mod_sound";
import "mod_string";
import "mod_sys";
import "mod_text";
import "mod_time";
import "mod_timers";
import "mod_video";
import "mod_wm";

private
    string nombre;
    folder;
begin
    set_mode(100,100,argv[1]);
    frame;

    say("Procesando " + argv[3]);
    procesa(argv[3], argv[2]);
end

function procesa(string fpgname, string path);
private
    i;
    j;
    temp, temp1;
    width;
    string nombre, oldPath;
begin
    if(fpgname=="") return; end
    oldPath = cd();
    chdir(path);
    file=fpg_new();
    from x=0 to 999;
        nombre="";
        if(file_exists(itoa(x)+".png"))
            nombre=itoa(x)+".png";
        elseif(file_exists("0"+itoa(x)+".png"))
            nombre="0"+itoa(x)+".png";
        elseif(file_exists("00"+itoa(x)+".png"))
            nombre="00"+itoa(x)+".png";
        end

        if(nombre!="")
            temp1 = load_png(nombre);
            temp = map_new(graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),argv[1]);
            map_block_copy(0,temp,0,0,temp1,0,0,graphic_info(0,temp1,G_WIDTH),graphic_info(0,temp1,G_HEIGHT),b_nocolorkey);
            unload_map(0,temp1);
            if(temp>0)
                say("Cargamos la imagen " + x);
                fpg_add(file,x,0,temp);
                unload_map(0,temp);
            else
                say("Error cargando "+fpgname+":"+nombre);
            end
        end
    end

    chdir(oldPath);

    if(!save_fpg(file,cd()+"/"+fpgname+".fpg"))
        say("Error guardando "+cd()+"/"+fpgname+".fpg");
    end
    unload_fpg(file);
    chdir("..");
end
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Con el código que has puesto, Splinter, si me hace algo. Pero no bien. No sé, ya miraré qué puedo estar haciendo mal.

(A la izquierda, el resultado. A la derecha, el original).
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end