Necesito aclararme las ideas para un editor básico para VSE

Started by Drumpi, March 30, 2010, 02:56:03 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Hola a todos:

Bueno, más que una petición de ayuda, escribo para aclararme las ideas, porque parece que es muy efectivo, pero si quereis participar, adelante.
El caso es que hace (poco) tiempo dije de hacer un jueguecillo para aprovechar el trabajo de DCelso con su port de esta (fabulosa) librería 3D. Es cierto que ya poseemos librerías 3D con todas las facilidades de manejo y eso, pero bueno, quiero explotar esta librería antes de liarme a aprender a manejar cosas nuevas.
Pues bien, me he decantado por hacer un plataformas, más o menos típico, porque además de andar hacia los lados, andar hacia lo profundo será igual de importante, aunque no se tratará de un plataformas 3D puro, sino que irá dirigido más a una jugabilidad casi 2D, algo similar al Sonic Unleashed... o no, no lo se, ni siquiera tengo claro cómo hacer la cámara (manual, automática, semi...).

Iba a decantarme por hacer un jueguecillo de la señorita Croft, para alegrarle la vida a cierto administrador, pero conseguir sprites para el personaje, y manejar toda esa cantidad de gráficos en un juego que, en principio, sólo tendrá un nivel y un desarrollo máximo de media hora cada vez que me acuerde y tenga ganas, pues es un poco una locura. Sólo voy a usar sprites 2D con animaciones sencillas, casi en plan "Paper Mario".

Vale, pues ya tengo hecho el tileset para ir haciendo puts sobre un mapa de alturas, e ir añadiendo distintos llanos a diversas alturas, rampas en cualquier dirección y de dos inclinaciones distintas. Ahora viene el hacer el editor, y aquí es donde no me aclaro.

Un mapa para este juego sería tan sencillo como un simple map de 8 bits tan grande como el escenario, y se acabó. Luego pensé en usar un mapa de tiles, así ahorraría espacio en el disco duro... aunque luego en el juego seguiríamos generando dicho mapa. También podría usar un mapa pequeño y actualizarlo cada pocos frames (a cada cambio de tiles por ejemplo) pero eso resentiría muchísimo el rendimiento (podría buscar la manera de hacer un desplazamiento de los datos del buffer del mapa de alturas, pero eso ya sería meterme en un berenjenal muy gordo del que no se si podría salir bien parado... y de nuevo está el tema del tiempo).
Pero aquí viene lo gordo, y es que gracias al uso de expand podría añadir puentes al mapa, lo que me daría una libertad de diseño enorme y el juego quedaría aun más vistoso, pero el problema es cómo añadírselo al editor:

Como he dicho, los suelos basta con hacer un put en un mapa. Es más, no se necesita ninguna función 3D pra hacer dicho mapa, pero en el momento en que le meto puentes, ya tenemos un factor tridimensional a tener en cuenta en el diseño. Por lo tanto ya tengo que trabajar con mapas de tiles 3D.
La buena noticia es que tanto el motor de tiles como el formato de mapas de tiles están preparados para trabajar en 3 dimensiones, la pega es que el editor no. De todas formas, creo que es importante separar lo que es el suelo de lo que son los trozos de puente, por lo que me toca crear un editor que distinga una cosa de otra.

La mayor duda es cómo tratar los datos. Puedo crear simplemente un mapa de tiles 3D, que indique en cada posición si hay un bloque de suelo o no, pero entonces, a la hora de generar el mapa tendré que ir buscando en cada vertical a qué altura está el suelo y que no se confunda con un puente. También puedo separar por un lado la info del suelo (el mapa) y por otro la de los puentes, pero entonces tendría dos fuentes de datos a la hora de comprobar las durezas.
Y esa es otra, luego tengo que detectar las durezas. Sin puentes la cosa es muy sencilla, pues la altura de cada pixel me dice si se puede avanzar o no, pero estos ya me van a amargar los saltos.

Creo que lo suyo es tener el mapa de alturas para eso, comprobar las alturas y si se puede mover uno, y por otro lado, la info de los puentes, pero ya no se qué sería más adecuado, si tener un mapa de tiles 3D o una lista. Lo bueno del mapa 3D es que los datos se encuentran muy rápidos, e incluso se puede usar para generar los propios mapas de alturas (y ampliar, si en un futuro, me da por poner bloques volando o islas flotantes), pero una lista ahorra muchísimo espacio y tiempo en la generación. Yo lo que temo es que la búsqueda de los puentes en una lista ralentice mucho el sistema, por lo que veo más plausible el tener un mapa 3D, aunque luego para generar el mapa tarde un poco más, y en el editor, pues hacer la distinción de si estamos modificando el terreno o estamos añadiendo otras cosas.


Más que nada, quiero buscar la eficiencia más que el ahorro de memoria, porque quiero ver también hasta que punto se puede trasladar luego a una consola portatil (de ahi lo comentado de usar mapas pequeños y lo de desplazar bloques de memoria). Supongo que hay operaciones que serían más sencillas directamente desde C, como el pintado de un scroll sobre una superficie, por ejemplo, pero quiero trabajar con lo que hay ahora (de nuevo, el tiempo es mi gran enemigo).

En fin, si veis que sacais algo en claro y teneis alguna sugerencia, será bienvenida, aunque lo cierto es que ya tengo un par de cosas a las que les estoy dando vueltas (al final, este método funciona ;D).
Si no sacais nada en claro, no os preocupeis, es el estado natural de mi cabeza :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Bueno, sólo para decir que ya me he puesto con el editor, un ratillo nada más. No he hecho gran cosa, apenas he empezado con el movimiento en horizontal del cursor y algo del movimiento de la cámara (que no veais la cantidad de botones que uso).

Lo que voy a hacer es separar la edición del terreno de "otros añadidos". De momento esos otros añadidos serán los puentes, pero puede que añada soporte para sprites (y añadir árboles y otras cosas que no importen que sean imágenes 2D que siempre miren a cámara) y en un futuro cosillas simples en 3D. Para el terreno guardaré un tmf 2D (los que no lo sepan, un tmf es un TileMap File, un formato que me inventé para mi motor de tiles) y luego un archivo aparte para el resto (que aun no me decido entre un mapa 3D o una lista)

Aunque no descarto el generar un tmf aparte con toda la info junta, es decir un mapa de tiles 3D con info del suelo y puentes. Puedo separar los datos usando miles: valores entre 1 y 999 para los datos del terreno, 1000 y 1999 para puentes, 2000 y 2999 para los sprites 2D de un FPG... Cada casilla valdría una word, de otra forma necesitaría varios mapas:
-Un mapa 2D tamaño byte para suelo.
-Un mapa 3D tamaño byte para puentes.
-Un mapa 3D tamaño byte para sprites.
-Otros.
Sólo con los dos últimos ya ocuparíamos la misma memoria que el mapa único tamaño word, mientras que en el mapa único podría separar hasta 65 "capas de objetos" (16 bits dan para 65655 valores, 65 veces mil).

Por esto creo que la mejor solución sería generar 3 archivos: el mapa 2D para suelos y el 3D para otras cosas (para que sea fácil generar el terreno, y luego añadir los objetos por separado), y aparte el mapa único con todos los datos juntos, por si no te importa complicarte un poco más la vida generando el escenario y quieres salvar espacio.

Bien yendo al editor, el cursor contemplará qué estamos editando en cada momento como un modo distinto de funcionamiento. De momento estoy liado con el modo 0, terrenos. Supuestamente ya se puede mover el cursor por el plano horizintal, y próximamente se situará sobre el tile más alto, a partir de ahí lo podremos rotar, subir, bajar o cambiarlo por otro tipo (suelo, rampa, media rampa baja, suelo a media altura y media rampa alta).

Aparte, la cámara tendrá dos modos de funcionamiento: libre y con target. Con target se supone que seguirá al cursor siempre, y podremos definir la distancia desde la que observaremos, nos moveremos alrededor, subiremos o bajaremos.
Si por mi fuera, se quedaba esta cámara, pero dado que la función de target aun no funciona como debe, le añadiré la cámara libre, que nos da control total (y también permitiría ver toda la escena): moveríamos la cámara en las 6 direcciones, y controlaríamos su ángulo de rotación e inclinación ¿entendéis ahora lo del montón de teclas?

No os emocioneis, que hoy le he dedicado mucho rato porque estaba pasando datos de un PC a otro, mañana tendré que comprobar que todo está correcto y empezaré a compilar mi PFC (a ver si ya tengo suficiente espacio en el disco), por lo que probablemente mañana esté todo el día off.
Y esto es sólo el editor, miedo me da cuando empiece con el juego :S

PD: ¿He dicho ya que gran parte de mi pila de proyectos no han pasado del papel por culpa de no tener la herramienta de edición que necesitaba? :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)