PDA

Ver la versión completa : Programar un editor de niveles propio?



lemure_siz
10/04/2006, 23:08
Estoy haciendo progresos con fenix,y ya tengo una especie de esqueleto de shootemup,pero a la hora de situar los diferentes enemigos en pantalla,lo que quiero es que salgan coreografiados.El caso es que hacerlo a pelo seria poco menos que eterno,a base de saber en que coordenada debe salir cada enemigo en cada fase...asi que supongo que lo mas practico seria un editor de posiciones,y que este editor guardara en una tabla la posicion.Dado mi bajo nivel de programacion,se me antoja dificilisimo hacer algo asi...la pregunta es¿alguien ha hecho algo similar,o existe alguna tool que haga esto? thx!

Malenko
10/04/2006, 23:56
Es muy complicado encontrar eso que tu pides. Piensa que cada juego es un mundo totalmente diferente al resto, así que el contenido del juego (items, enemigos, eventos, etc.) son diferentes también y es dificil que haya un editor "genérico". He estado mirando con google y no he encontrado nada, así que me temo que te lo vas a tener que currar tu. No creo que sea muy complicado, pero no es algo trivial. Primero tienes que hacer el "dibujo" del terreno (yo haría bloques que puedes ir colocando en un plano) y luego añadir los bichos. Estoy muy por encima, piensa que al mapa le tienes que asignar texturas, por eso te decía definir "bloques" rectangulares con diferentes texturas. Eso también lo podrías definir en el mismo editor de niveles...

Eso sí, yo Fenix no domino, pero no se si será sencillo hacerlo con ese lenguaje. Yo miraría de usar un lenguaje sencillito y gráfico (windows) tipo Visual Basic, más que nada para no morirte programando.

lemure_siz
11/04/2006, 00:07
Pues nada,sera cuestion de hacerlo artesanalmente,e ir definiendo la posicion de cada bicho en el mapa.Pensaba en hacer un sistema por el cual,el scroll avanzase y que los enemigos se crearan conforme al scroll.Pero creo que es mejor hacer el scroll independiente y crear un proceso que cree los enemigos conforme a una linea de tiempo,o algo asi.No se,ire probando, gracias...

y por cierto,un leguaje de programacion mas sencillo que fenix...por ahora ya me peleo bastante con este, como para liarme con sdl.Mi intencion es sacar algo para Gp32,y quien sabe si para Dreamcast

BUHOnero
11/04/2006, 00:21
Yo me curre un editor de niveles para un juego que está a medio hacer de carrerras, aunque era sin scroll, y ahora con mi proyecto de LABENTURA PIRATA estoy trabajando en otro sistema de creación de escenarios, todo en Fenix, te recomiendo que te mires a fondo el uso de tablas, y el sistema básico para crear mapas tileados.

Para los bichos, normalmente se mira en que posición esta el personaje principal para hacer aparecer los bichos, y puedes guardar en una tabla sus posiciones iniciales, no es tan dicifil, son solo saber en que x se encuentra tendrias suficiente, porque la posicion del personaje principal te indicaría cuando crear el enemigo, no se si me he explicado bien, si tienes dudas te lo explico más a fondo.

Saludos

lemure_siz
11/04/2006, 00:44
Yo me curre un editor de niveles para un juego que está a medio hacer de carrerras, aunque era sin scroll, y ahora con mi proyecto de LABENTURA PIRATA estoy trabajando en otro sistema de creación de escenarios, todo en Fenix, te recomiendo que te mires a fondo el uso de tablas, y el sistema básico para crear mapas tileados.

Para los bichos, normalmente se mira en que posición esta el personaje principal para hacer aparecer los bichos, y puedes guardar en una tabla sus posiciones iniciales, no es tan dicifil, son solo saber en que x se encuentra tendrias suficiente, porque la posicion del personaje principal te indicaría cuando crear el enemigo, no se si me he explicado bien, si tienes dudas te lo explico más a fondo.

Saludos
Te refieres a crear los enemigos segun avanza el scroll,verdad?¿y que te parece lo que he pensado de crear los enemigos segun un temporizador?Es decir,crear un enemigo tras otro con un espacio de tiempo...joer,lo escribo y me doy cuenta que no me gusta este sistema.ains,que me da a mi que un shooter es demasiado ambicioso para acabarlo...

BUHOnero
11/04/2006, 04:17
A eso me refería, a medida que avanzas por el escenario controlar la posición del personaje y ir apareciendo los enemigos.

En un matamarcianos puedes crear grupos de enemigos, y que aparezcan a medida que se maten o desaparezcan todos los del grupo anterior, si es un shootemup lo mejor es hacer como en double dragon por ejemplo, o sea, avanzas X, se para el scroll y sacas a un batallon, cuando todos estan muertos puedes hacer aparecer un flecha indicando que el jugador puede seguir hacia adelante, este sería el sistema más fácil... o como mínimo el que intentaría implementar yo

Drumpi
11/04/2006, 06:41
Si estas empezando con Fenix y tu nivel de pericia es escaso, mejor que te dejes de rollos de editores y lo hagas "a ojo".
Crear un editor supone en principio crearte una interfaz que, no solo cargue el escenario, sino que ademas puedas manejarlo de forma sencilla. Luego tienes que usar ficheros ¿sabes manejarlos? es sencillo de aprender, pero requiere de algunas pruebas previas...
Resumiendo, para ir empezando, y mientras no domines el manejo, ponlo a ojo, tardas mas pero es mas sencillo, creeme.

lemure_siz
11/04/2006, 13:50
Bueno gracias chicos...pero dado que un shooter con scroll tipo gradius me da a mi que se me queda grande,pues tirare por la via mas sencilla e intentare sacar un Space Invaders,que parece que no pero tiene muucha miga tambien.En cuanto tenga algo "mostrable",lo colgare enseguida:D

BUHOnero
11/04/2006, 14:51
Si estas empezando con Fenix y tu nivel de pericia es escaso, mejor que te dejes de rollos de editores y lo hagas "a ojo".
Crear un editor supone en principio crearte una interfaz que, no solo cargue el escenario, sino que ademas puedas manejarlo de forma sencilla. Luego tienes que usar ficheros ¿sabes manejarlos? es sencillo de aprender, pero requiere de algunas pruebas previas...
Resumiendo, para ir empezando, y mientras no domines el manejo, ponlo a ojo, tardas mas pero es mas sencillo, creeme.
Pues yo no uso muchos ficheros, solo un fpg donde guardo los tiles, y voy pintando según una matriz predefinida, mi editor es relativo, ya que no hago un niterfaz, sino una función que me pinte el escenario... entonces no se si se puede llamar editor :D

chipan
11/04/2006, 16:10
Lo que dice lemure_siz es bastante facil y perfectamente viable; la clave está en definir una estructura de datos de fenix con los parametros suficiente (struct); así a botepronto los datos me los invento, pero bueno, es para que te hagas una idea. Pongamos que los enemigos por lo general tienen 4 o 5 parametros cada uno (x,y,vida,comportamiento,tamaño); entonces la estrctura tendría que tener dos parámetros más que el enemigo que mas parámetros tenga; ¿por que? por lo siguiente.
La idea es que el juego lea un archivo con todos los enemigos de la fase y que en ese archivo vayan registros con los campos siguientes: Tipo de enemigo, momento de apareición y los parametros del enemigo.
Luego tendríamos un proceso que sería el encargado de leer la tabla de enemigos y llamarlos (sería un puntazo que ésta estuviese ordenada por orden de aparición para evitar lecturas inneceserais).



process generador(string archivo_fase);
private
int contador_tiempo;
int contador_enemigo;
begin
loop
contador_tiempo+=1;
while(enemigos[contador_enemigo].tiempo==contador_tiempo)
if(enemigos[contador_enemigo].tipo==1) nave1(enemigos[contador_enemigo].param1,enemigos[contador_enemigo].param2,enemigos[contador_enemigo].param3); end
if(enemigos[contador_enemigo].tipo==2) nave2(enemigos[contador_enemigo].param1,enemigos[contador_enemigo].param2,enemigos[contador_enemigo].param3); end
contador_enemigo+=1;
end
frame;
end
end


También se podría hacer con un switch case en lugar de ifs.

Luego, para el editor yo usaría el propio fenix pero de manera que no me costase mucho hacerlo; por ejemplo, al final de la estructura puedes igualarla a los valores que quieras, ordenadamente


struct feos[50]
int param1;
int param2;
int param3;
int param4;
end=1,2,3,4,2,3,1,1,7,6,9,3;

esto haría que el primer campo del registro 0 (el primero) de la estructura feos tomase valor 1, el 2º 2, el 3º 3, el 4º 4, el primero del segundo registro 2, el 2º del 2º 3, el 3º del 2º, 1... etc
Luego con hacer un save te quedaría el archivo guardado y lo podrías usar para cargarlo en tu juego.
Parece lioso pero en cuanto lo pillas es facil.

TRaFuGa
11/04/2006, 17:07
Me interesa mucho este tema pues que yo tengo en mente hacer un beatemup (en principios un plataformas porke resultaria mas facil, y despues si puedo pasarlo a beatemup mejor ;)) y el sistema de enemigos es algo esencial en ese tipo de juegos, mi pregunta era si no se podia hacer una mezcla de los dos tipos que se dicen: que estén en una posicion inicial del mapa, pero ke se vayan cargando a medida que avanza el scroll... por ejemplo, tienes un mapa de 1280 pixeles de largo, yu tienes un enemigos con x=800, pues cuando tu estes en x=600 o x=700 pues se cargue el enemigo en esa posicion (para no tener todos los enemigos cargados desde el principio ya que la memoria de la gp32 es cortita...), bueno, la idea es esa más o menos jejeje

BUHOnero
11/04/2006, 21:02
Me interesa mucho este tema pues que yo tengo en mente hacer un beatemup (en principios un plataformas porke resultaria mas facil, y despues si puedo pasarlo a beatemup mejor ;)) y el sistema de enemigos es algo esencial en ese tipo de juegos, mi pregunta era si no se podia hacer una mezcla de los dos tipos que se dicen: que estén en una posicion inicial del mapa, pero ke se vayan cargando a medida que avanza el scroll... por ejemplo, tienes un mapa de 1280 pixeles de largo, yu tienes un enemigos con x=800, pues cuando tu estes en x=600 o x=700 pues se cargue el enemigo en esa posicion (para no tener todos los enemigos cargados desde el principio ya que la memoria de la gp32 es cortita...), bueno, la idea es esa más o menos jejeje
Pues claro que puedes, en verdad puedes ingeniártelas para hacerlo como quieras, no hay límite, yo mismo genero ahora mismo un escenario aleatorio de más de 700 tiles en pantalla, y tengo mis propias rutinas (aunque no son rutinas, sino mi propio sistema de creación de escenarios), uso hatsa un mapa de durezas, así puedo configurar la generación de escenarios para hacerlo medio aleatorio medio impuesto por mi. Puedo concretar zonas donde no se creará escenario, así puedo colocar cosas fijas como podrían ser casas, y el resto me lo genero a boleo en cada partida.

< - >

Lo que dice lemure_siz es bastante facil y perfectamente viable; la clave está en definir una estructura de datos de fenix con los parametros suficiente (struct); así a botepronto los datos me los invento, pero bueno, es para que te hagas una idea. Pongamos que los enemigos por lo general tienen 4 o 5 parametros cada uno (x,y,vida,comportamiento,tamaño); entonces la estrctura tendría que tener dos parámetros más que el enemigo que mas parámetros tenga; ¿por que? por lo siguiente.
La idea es que el juego lea un archivo con todos los enemigos de la fase y que en ese archivo vayan registros con los campos siguientes: Tipo de enemigo, momento de apareición y los parametros del enemigo.
Luego tendríamos un proceso que sería el encargado de leer la tabla de enemigos y llamarlos (sería un puntazo que ésta estuviese ordenada por orden de aparición para evitar lecturas inneceserais).



process generador(string archivo_fase);
private
int contador_tiempo;
int contador_enemigo;
begin
loop
contador_tiempo+=1;
while(enemigos[contador_enemigo].tiempo==contador_tiempo)
if(enemigos[contador_enemigo].tipo==1) nave1(enemigos[contador_enemigo].param1,enemigos[contador_enemigo].param2,enemigos[contador_enemigo].param3); end
if(enemigos[contador_enemigo].tipo==2) nave2(enemigos[contador_enemigo].param1,enemigos[contador_enemigo].param2,enemigos[contador_enemigo].param3); end
contador_enemigo+=1;
end
frame;
end
end


También se podría hacer con un switch case en lugar de ifs.

Luego, para el editor yo usaría el propio fenix pero de manera que no me costase mucho hacerlo; por ejemplo, al final de la estructura puedes igualarla a los valores que quieras, ordenadamente


struct feos[50]
int param1;
int param2;
int param3;
int param4;
end=1,2,3,4,2,3,1,1,7,6,9,3;

esto haría que el primer campo del registro 0 (el primero) de la estructura feos tomase valor 1, el 2º 2, el 3º 3, el 4º 4, el primero del segundo registro 2, el 2º del 2º 3, el 3º del 2º, 1... etc
Luego con hacer un save te quedaría el archivo guardado y lo podrías usar para cargarlo en tu juego.
Parece lioso pero en cuanto lo pillas es facil.
Pues este sistema me irá bien, yo lo estoy integrando con mi juego, así podré controlar más claramente cada nivel, muchas gracias :)

chipan
11/04/2006, 21:16
De nada! otra cosa no, pero de fenix puedo decir que tengo muchos años de experiencia; mas años de los que tiene el fenix.

BUHOnero
11/04/2006, 21:39
De nada! otra cosa no, pero de fenix puedo decir que tengo muchos años de experiencia; mas años de los que tiene el fenix.
Pues na, que yo tambien tengo mas años de Fenix de lo que aparento, aunque en serio casi nunca me he puesto, siempre se aprenden cosas nuevas, tengo el Div1, el Div2 y hasta el libro de programación avanzada en Div, así que yo tambien lo conozco desde antes de decirse Fenix, a menos que tengas algo que ver directamente con esos proyectos... que no lo sé, hasta guardo todas las DivMANIA que salieron :D

lemure_siz
12/04/2006, 00:06
...genial,chicos...y yo aqui peleandome todavia con la sintaxis de fenix/div...

TRaFuGa
12/04/2006, 00:17
lemure_siz, si yo de tiles y esas cosas ando muy perdido, tengo que ponerme algun dia a probar a ver que consigo hacer... xD
lo ke pasa ke no se por donde empezar :P
Drumpi tenia un editor de tiles, y los guarda en formato MAP, si te vale con eso, lo unico que tienes que hacer es usar esos mapas... :P

lemure_siz
12/04/2006, 00:39
gracias trafuga...lo que pasa es que veo el nivel que hay por aqui y me desmoralizo un poco al ver lo muucho que me queda para hacer algo decente.Por ahora,dejo el tema de scrolls y mapeado de tiles y mirare de que me salga algo aunque sea un space invadres o un pong

TRaFuGa
12/04/2006, 00:44
No te creas que yo controlo, no se ni de scroll ni de mapeado de tiles tampoco, pero todo es cuestion de ponerse jejeje

lemure_siz
12/04/2006, 00:55
la verdad es que si,hay que dedicarle tiempo...y a la hora de programar,a las primeras de cambio me pierdo un poco y lo dejo.Sera por eso que no avanzo.

TRaFuGa
12/04/2006, 00:59
no debes de echarte atrás ;) si necesitas ayuda con los tiles, mira el ejemplo de durezas de Oscar BraindeaD (en el post de mi Devkit Fenix para windows y gp32), ahí las durezas las hace con tiles y en vez de dibujar grafciso los pinta, pero puede ser un buen comienzo apra ponerse a dibujar los tiles, no? jejeje
EDITO: y en www.tutorialgames.net hay muchos ejemplos de fenix, entre ellos algunos de tiles jejeje

Drumpi
13/04/2006, 03:14
Hola, me han pitado los oidos cuando han hablado de mi modesto editor :D
Pues de momento, no guarda el scroll en map, sino en un formato propio (que aun no se ha aprovechado del todo) que esta bien documentado con el propio editor.
De todas formas, podeis usar este sencillo scroll made-in-fenix que he hecho yo con este formato. Os lo carga en un array dinamico (se accede como un array unidimensional cualquiera) y os lo muestra en pantalla. Lo teneis con el siguiente ejemplo:
Boulder alpha (http://fenixworld.se32.com/e107_plugins//depot/files/fw75.boulder.zip)