Duda sobre tileado

Started by Abash, May 08, 2016, 11:08:50 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Abash

 Os seguía hace unos años y hace poco al acordarme de vosotros también me acorde de un proyecto que tenia entre manos.
Mas que un proyecto es una prueba, pero en fin jejeje.
Resulta que siempre me a gustado el juego Terraria, y en su día me pregunte si podría crear algo parecido. Aclaro que no todo, solo la parte de colocar y quitar tiles.
En su día encontré un editor de tiles para algo parecido al Warcraft y me llamo la atención que era capaz de editar no solo el tile en el que hacías click, sino que también unos pocos que tenia al lado.
Al final mirándome mucho código sobre todo de los tileados de Drumpi, logre hacer algo parecido.

Use un editor de tiles ya creado como base que espero que su creador si esta por aquí me perdone por no acordarme de quien es.
Tiene un tamaño de 1750 x 900 tiles.



La colocación de los diferentes materiales no es problema. Selecciono material y voy dibujado como si estuviera dibujando en el Paint. Al ir colocando o quitando tiles, me va cambiando los tiles de al rededor según sea necesario.

El tema es:
Alguien tiene idea de como rellenar un mapa con varios materiales y crearle huecos o cavernas?
Encontré pseudocodigos, pero a la hora de intentar implementarlos reconozco que no soy un fiera de la programación y me pierdo jajaja.
Como mucho e logrado que me cree algo parecido a figuras muy raras pero que se repiten en todo el mapa siguiendo un patrón, y para nada aleatorio. El de la imagen esta creado a mano.

Drumpi

Hola, Abash... y bienvenido al foro, si no te lo he dicho ya :D
Y bienvenido al maravilloso mundo de los tiles donde cada cuadrado es un pixel "mu gordo" :D
Enhorabuena por el editor de mapas de tiles, no es algo tan sencillo de hacer como parece, y el tuyo tiene muy buena pinta. Respecto al rellenado... ahí no te puedo ayudar. Yo mismo estoy teniendo problemas para implementar la herramienta de relleno con un sólo tile en mi editor, pero si lo que intentas hacer es un generador aleatorio de mapas, te digo ya que te estás metiendo en un terreno sólo apto para programadores avanzados.
Dependiendo del tipo de niveles que quieras crear, el algoritmo es muy diferente. El más sencillo es el de creación de laberintos, y ya da quebraderos de cabeza. Puedes intentar que el algoritmo cree cuadrados de tiles rellenos de un único material, de diferentes tamaños, y hacer que se superpongan, y luego empezar a vaciar creando una cueva que vaya cambiando de direción y ancho.
Otra forma sería crear mapas pequeñitos previamente, y hacer que el generador los coloque de forma aleatoria, pero que se puedan conectar entre sí. Y si te da poca variedad, siempre puedes "espejarlos" horizontal o verticalmente, o crear un algoritmo que los rote múltiplos de 90º.
También puedes mirar algoritmos de inteligencia artificial, pero ya requiere conocimientos muy avanzados.

Posibilidades hay varias, pero lo dicho, depende de cómo quieras que queden, hay miles de formas de hacerlo, y ninguna lo suficientemente sencilla. No he jugado a Terraria, pero algo he visto, y creo que en realidad tiene uno o tres mapas gigantescos creados a mano. Si usas un mapa de tiles, la memoria no es un problema, porque puedes meter uno de 900x22 en una consola portátil, con 4GB en un PC tienes para almacenar el GTA San Andreas (en 2D) como unas 40 veces :D

¡¡¡Suerte!!!
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)

Ulthar Kaufman

Buenas. Muy buena pinta ese editor.

Yo he estado trasteando estos días con tiles también y con generación de terreno por procedimiento, pero en mi caso no eran plataformas, sino una superficie natural, lo que simplifica mucho la tarea.

Seguía unas reglas muy simples para crear elevaciones, ríos, lagos y arboledas, pero el resultado era bastante bueno (para mi, claro). Cuando pueda os   pongo unas capturas.

Con respecto a ese vicio más adictivo que el hachís: el terraria, usa terrenos generados por procedimiento. Incluso las zonas fijas como el castillo, los árboles gigantes, la pirámide o la cueva de arena son siempre distintos.

Enviado desde mi KFFOWI mediante Tapatalk


Ulthar Kaufman

Esta es la captura que os comentaba, no es nada del otro mundo, pero da el pego.



Si pretendes crear plataformas artificiales, es otra historia, en ese caso te recomiendo como ha dicho Drumpi, que te definas construcciones fijas y las vayas colocando por el mapa. Si es una superficie natural como la de terraria, no es tan difícil. Recuerda que la función rand() es tu amiga, y que la suma de varias capas de procesos sencillas puede resultar en algo interesante.

SplinterGU

Quote from: Ulthar Kaufman on May 10, 2016, 10:16:13 AM
Esta es la captura que os comentaba, no es nada del otro mundo, pero da el pego.



Si pretendes crear plataformas artificiales, es otra historia, en ese caso te recomiendo como ha dicho Drumpi, que te definas construcciones fijas y las vayas colocando por el mapa. Si es una superficie natural como la de terraria, no es tan difícil. Recuerda que la función rand() es tu amiga, y que la suma de varias capas de procesos sencillas puede resultar en algo interesante.


me encanta esa captura
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Coincido con Splinter.
Lo que tienes que explicar es, en todo caso:
- Qué son "terrenos generados por procedimientos".
- Y cómo has creado ese entorno isométrico, en concreto, cómo has asignado las Z a los elementos. Porque hace tiempo añadí a mi motor de scroll tileado la posibilidad de mapas isométricos, y conseguir que los tiles ordenasen sus Z sin tapar al prota cuando este mide más de un tile de altura fue una pesadilla :S

: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)

SplinterGU

Quote from: Drumpi on May 10, 2016, 07:17:35 PM
Coincido con Splinter.
Lo que tienes que explicar es, en todo caso:
- Qué son "terrenos generados por procedimientos".
- Y cómo has creado ese entorno isométrico, en concreto, cómo has asignado las Z a los elementos. Porque hace tiempo añadí a mi motor de scroll tileado la posibilidad de mapas isométricos, y conseguir que los tiles ordenasen sus Z sin tapar al prota cuando este mide más de un tile de altura fue una pesadilla :S

:D :D :D

hace tiempo estuve pensando un poco como hacerlo, y la verdad siempre quedo en idea en mi cabeza...

por algun lugar tengo los fuentes del motor filmation de la vieja zx, explicado y todo que habia salido en microhobby... que epocas... :)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Ulthar Kaufman

Quote from: Drumpi on May 10, 2016, 07:17:35 PM
Lo que tienes que explicar es, en todo caso:
- Qué son "terrenos generados por procedimientos".

Vaya por delante que la generación de mi mapa es muy simple y tosca, y que generar un plataformas como los vuestros me parece mucho más complicado, más aún si tenemos en cuenta que por los gráficos simples que he usado no he hecho transiciones entre tiles, pero aún así no creo que sea demasiado complejo, sobretodo si os conformais con poco como yo :D

Quote from: Drumpi on May 10, 2016, 07:17:35 PM
- Y cómo has creado ese entorno isométrico, en concreto, cómo has asignado las Z a los elementos. Porque hace tiempo añadí a mi motor de scroll tileado la posibilidad de mapas isométricos, y conseguir que los tiles ordenasen sus Z sin tapar al prota cuando este mide más de un tile de altura fue una pesadilla :S

Precisamente las profundidades no me dieron muchos problemas, solo puse el punto central en la base de los árboles, en vez de en el centro, y la variable Y me determina la Z. Casi mejor abro un post con prototipos y lo comentamos ahí, y así no le fagocitamos este post.

Siguiendo con lo de Abash, mi consejo es que experimentes con reglas sencillas, por ejemplo, hazte una base de piedra para todo el mapa, luego determina varios puntos al azar donde estarán las montañas, determina la altura, anchura, y repite varias veces para hacer picos superpuestos. Luego la tierra puedes determinar una altura media y todo los huecos que haya por debajo los rellenas de tierra. Luego otro proceso que rompa o erosione zonas.

No sé, creo que aunque sean reglas muy sencillas y muy tontas, la suma de todas, incluso la repetición de todo el proceso varias veces puede generar terrenos bastante orgánicos. Evidentemente con conocimientos de matemáticas más profundos que los míos saldrán cosas más elaboradas, pero es lo que hay. :D

El mayor problema que veo (aparte de los fluidos), es analizar al vuelo todos los tiles circundantes y elegir el gráfico adecuado para formar los mosaicos.

Drumpi

Quote from: Ulthar Kaufman on May 12, 2016, 02:36:37 PM
Quote from: Drumpi on May 10, 2016, 07:17:35 PM
- Y cómo has creado ese entorno isométrico, en concreto, cómo has asignado las Z a los elementos. Porque hace tiempo añadí a mi motor de scroll tileado la posibilidad de mapas isométricos, y conseguir que los tiles ordenasen sus Z sin tapar al prota cuando este mide más de un tile de altura fue una pesadilla :S

Precisamente las profundidades no me dieron muchos problemas, solo puse el punto central en la base de los árboles, en vez de en el centro, y la variable Y me determina la Z. Casi mejor abro un post con prototipos y lo comentamos ahí, y así no le fagocitamos este post.

Okis, cuando se abra ese tema lo discutimos, porque eso fue lo que pensé al principio, hasta que le metí alturas a la cosa :P

Desde luego, por consejos no será. Todas las ideas para la creación de terrenos son "sencillas" y potentes. No sé dónde leí un artículo acerca de la generación de mapas aleatorios, y se hablaba de IA, de cálculos de probabilidad, etc...
De hecho, no sé si los conoceis, pero el minijuego "the Legend of Zelda: four swords" de GBA (incluido en el "a Link to the Past") o el "Azure Dreams" de GBC crean mapas aleatorios en cada partida, igual que en "Pokemon mundo misterioso", y no se tienen por juegos realmente complejos de hacer  ???
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)

Abash

 Lo de analizar los tiles circundantes ya lo tengo controlado. En la imagen que puse, simplemente selecciono material y haciendo click izquierdo o mejor dicho manteniendo pulsado voy colocando tiles.
No uno por uno. Arrastro y voy como dije, pintando como en un editor de imágenes.
El mismo me va cambiando los tiles que tengo al rededor. Tengo un proceso pon_tile para colocar, y otro quita_tile para borrar.
Y si Ulthar, me haría falta una especie de reglas.
Por lo que e visto puedo hacer dos cosas. Crear el borde superior, lo que seria el suelo con sus montañas, o sino como bien dices rellenar todo e ir quitando o cambiando los tiles por zonas creando uno tiles al azar y trabajando con ellos.
La primera la intente, pero no me quedaba muy real. Me creaba una especie de ondulaciones parecidas a ondas de radio, pero no aleatoriamente. Me dibujaba un tile si y otro no. Tiles separados no continuos. Como cuando dibujas un contorno uniendo puntos, pues eso, me dejaba los puntos en forma de ola.
Y la otra, la que dices, ya la intentare hacer.

Por otro lado quería preguntar si alguien tiene una demo una prueba o algo parecido sobre tileado isometrico. No hace falta que sea una super proeza técnica jeje. Tenia una muy simple de una de las revistas de divmania, pero hace un mes que me e venido a Argentina y me deje todo el material en España.
Gracias gente  ;)

Drumpi

Bueno, yo sólo puedo aportar los conocimientos adquiridos mediante prueba y error:
- El hilo oficial de mi motor de scroll tileado (incluye isométrico): http://forum.bennugd.org/index.php?topic=819.0
- El hilo donde estaba discutiendo sobre las Z del motor: http://forum.bennugd.org/index.php?topic=817.0
- Hilo con imágenes del motor funcionando: http://forum.bennugd.org/index.php?topic=904.msg13683#msg13683

Pero ya digo, implementado sin haber leido nada sobre el tema, porque me apetecía experimentar ^^U
El día que me documente sobre el tema será la leche Lon Lon.
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)