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#
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
¡Muchas gracias!
En cuanto tenga algo de tiempo lo miro y te lo fusilo.