Necesito ayuda con un motor de tiles isométrico

Started by Yawin, October 14, 2014, 11:35:33 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Yawin

Hola a todos. Estoy comenzando un juego isométrico y he decidido hacer un motor de tiles. Hace años empecé uno, pero aunque fue muy instructivo hacerlo no sirve para hacer nada. Así que ahora, años después y con más experiencia he empezado uno nuevo, ¡y en isométrico!


El código de mi "tiles.prg" que es quién llevará todo el motor es:
/*
   MOTOR DE TILES ISOMÉTRICO v0.1
   Autor: Yawin
*/

function preparar_tiles()
   begin
      log("Preparando tiles");
      fpgs[3]=load_fpg("dll/maps/map"+mapid+".fpg");    log("Gráficos cargados");
      mpf=fopen("dll/maps/map"+mapid+".yawmap",0);   if(mpf) log("Fichero abierto"); else log("ERROR abriendo el fichero"); end
   end


function iniciar_tiles(int id_obj)
   private
      int i,j,k,eq,eq2=0,iy,interr=0;
      string cadf;
   end
   begin
      mapid=id_obj;
      preparar_tiles();
           
      j=0;
      log("Lanzando tiles");
      while(!feof(mpf))
         /* Nos colocamos en la posición de inicio de pintado de la línea */
            if(j%2==0)
               eq2=32;
            else
               eq2=0;
            end
            eq=64;
            iy=16+(j*16);
         
         /* Pintamos la línea */
            interr=0; k=0;
            cadf=fgets(mpf);
            for(i=0;interr==0;i++)
               log("Lanzando tile (i: "+i+" k:"+k+" eq:"+eq+" iy:"+iy+" cadf:"+cadf[i]+")");
               tile(atoi(cadf[i]),eq2+eq*k,iy);
               i++;
               if(cadf[i]=="#") interr=1; end /* Si llegamos al final de la línea marcamos el final */
               k++;
            end
           
         j++;
      end
      log("Finalizando lanzamiento");
   end
   
process tile(int id_obj,int x, int y)
   begin
      file=fpgs[3];
      graph=id_obj;
      z=1000000;
     
      log("Lanzado tile "+id_obj+" en la posición "+x+", "+y);     
      loop
         frame;
      end
   end



Bien, el caso es que ahora mismo lo que hago es lanzar procesos y cada proceso es un tile. Lo que he pensado es que lo que debería de hacer es, en vez de lanzar procesos, calcular las dimensiones del mapa, generar un new_map(); con esas dimensiones y asignarle ese gráfico resultante a un scroll. Pero no se cómo hacerlo. ¿A alguien se le ocurre alguna forma?


P.d.: Por si sirve, un ejemplo de mi fichero ".yawmap" que guarda la info de los tiles es este:
1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1#
1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1#
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1#
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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

KeoH

Hace un par de añitos me monte un motorcito .. lo tengo abandonado .. pero creo q es esto más o menos lo q quieres?

http://youtu.be/yqosozqBCgY

http://youtu.be/PNQ-uDh_N-E

El codigo lo tengo en BitBucket .. por si le quieres echar un vistazo .. el mapeado lo carga leyendo una image .. por ejemplo .. para un escenario de 200x200 tiles necesitas una imagen d 200x200 pixels .. donde el color del pixel defile el tile a usar. Me dió por hacerlo asi xD
Y otras imagenes de igual tamaño definen lo q es dureza y no, y otra donde estan los objetos .. aunque creo q eso no lo tengo implementado .. pero el tileado sip

https://bitbucket.org/keoh77/4diashd

A ver si te vale para algo xD

Yawin

¡Muchas gracias!
En cuanto tenga algo de tiempo lo miro y te lo fusilo.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

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