Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Yawin on October 14, 2014, 11:35:33 AM

Title: Necesito ayuda con un motor de tiles isométrico
Post by: Yawin on October 14, 2014, 11:35:33 AM
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#
Title: Re:Necesito ayuda con un motor de tiles isométrico
Post by: KeoH on October 23, 2014, 09:19:08 AM
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/yqosozqBCgY)

http://youtu.be/PNQ-uDh_N-E (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 (https://bitbucket.org/keoh77/4diashd)

A ver si te vale para algo xD
Title: Re:Necesito ayuda con un motor de tiles isométrico
Post by: Yawin on October 23, 2014, 05:48:30 PM
¡Muchas gracias!
En cuanto tenga algo de tiempo lo miro y te lo fusilo.