Muchas Dudas en un juego estilo Terraria

Buenas, sigo con mi juego y un enfrentó muchas dudas, por ello si alguien tiene idea de como realizarlo o sabe más del tema, por favor escriba aquí (Vi un Post antiguo de un francés donde explicaba un poco que un mundo abierto requiere de varios algoritmos para su generación.
Pero aquí es donde viene el problema y el motivo del Post.

Un mundo procedural donde cada bloque singular puede tener diferentes “formas” para enlazar correctamente a los bloques de su entorno y simultáneamente es destructible y si se recoloca NO debe porqe mostrar exactamente la misma animación (A PRIMERA VISTA pensamos a lo mejor es usar Sprites y que cada animación corresponda a un “enlace” diferente, luego con eventos ponemos a que debe o NO estar unido para que se coloque una u otra animación)

Quiero aclarar algo, un mundo que SI o Si contiene un terreno que NO es destructible bajo ninguna circunstancia, es mosaicos(Se usa un canal alfa en Blanco y Negro si tu mundo contiene algunas partes destructibles y quieres que otras NO) en cambio si deseas realizar un juego que sea un mundo destructible se recomienda el uso de Sprites.

No explicare toda la teoría de trasfondo, pero si puedo recalcar que si quieres que un juego de mundo abierto destructible no tenga “Grandes” dificultades sobre el rendimiento uses: Eliminar Sprites según X distancia, Células de bloques. Un algoritmo es superponer 2 Células de bloques (Perlin Noise), imaginate un bloque de 4x4 bloques, es decir 16 bloques que forman uno de mayor tamaño, si se altera uno de esos 16 bloques modifica la estructura de la célula de mayor tamaño, pero NO altera otras cosas más allá de dicha célula de gran tamaño.

Ahora si la duda: Cual de los 2 métodos usa mayor costo en rendimiento y CPU (Permíteme explicar)

Vi en varios videos de generación procedural y otros donde usan la extensión “maze generator” y otros que utilizan varios “modelos” de una zona y que van cambiando o colocando en otros lugares (Este sistema lo utilizaba antiguamente minecraft), pero claro, si creas cada bioma y debes prefabricar 40 plantillas diferentes esto es un trabajo brutal (Para mi… Ahí otro metodo o algo que me olvide? No soy experto pero espero estar explicando bien, complementad mi información si falta algo). No queda claro el uso de Mosaicos y Sprites (Un mundo Superplano de Minecraft cada bloque singular es un Sprite, pero la “línea” es un mosaico que va de cielo a Bedrock es (Césped, Tierra, tierra, piedra, Bedrock).
Cada Sprite tiene un costo de rendimiento en existencia, volviendo a las células de 16, si cada 1 de los 16 son Sprites independientes, tienen mayor peso, que 16 Mosaicos?

[No soy un experto, por ello puede contener algún error esta información, quiero que alguien me ayude o complemente esta información para asegurar que es correcto, en Gdevelop ahi muchos artículos sobre mundos procedurales y mundos aleatorios (No son lo mismo aunque lo parecen), no dejan claro que tipo de objetos usan (Sprites o Mosaicos? según la finalidad si quieres que se destruya o no, pero aquí hablo sobre rendimiento). No encontre ningun articulo que sea muy “profundo” en los mundos procedurales o aleatorios. por ello este Post para saber que extensiones o recursos son los más recomendados o los imprescindibles si quieres fabricar un juego de este estilo]
Actualmente utilizo Sprites (1 bloque de Césped) que contienen alrededor de 500 Animaciones, me preocupa el rendimiento de tener 10.000 de estos bloques por ejemplo. Al mismo tiempo quiero que todo el mundo se vea diferente y sea destructible. Hable de plantillas prefabricadas (pero no se como “hacerlas” en Gdevelop, si alguien puede poner algo relacionado le agradeceria mucho).

Sobre eso de los bloques de cesped: si el cesped esta fuera de camara, la animacion de este se pausa, para el rendimiento, asi que no te preocupes de ello.

Te recomiendo una extension: se llama “Snap to grid”
No se si te sirva realmente

Entendido, Gracias por tu respuesta, lo mirare y estudiare.

1 Like

Nunca he hecho un juego de ese tipo, lo que si puedo decir es que no debes de eliminar los bloques, sino ocultarlos, debido a que si haces, esto, cuando vulevas al mismo sitio se generará otro terreno.

Por otra parte, entre usar plantillas y ruido de perlin, lo haría en función de la posición, si tiene una vista completamente desde arriba, lo haria con ruido de perlin, si es desde el lado, no.

Se usarían en todo caso speites individuales, como bloques (los mismos sprites repetidos)

En el caso de la generación del terrenos desde el lado, se puede hacer obteniendo un número aleatorio y poniendo un bloque en funcion del número que se obtenga, pero para que tenga una forma tipo montaña, tendrás que crear un algoritmo con una variable, para que sólo se genere una desviación de 2 bloques como maximo, es decir, que no hay un gran salto (y no aparezcan montañas de bloques como si fueran un palo) en el terreno. No solo eso, también tendrás que hacer un algoritmo aleatorio de generación con los árboles y demás. Una buena idea es utilizando plantillas que cambien ciertas cosas de forma aleatoria. Creo que facilitaría el proceso. En el caso de los arboles te ves obligado a copiarlos y pegarlos entero donde corresponda.

En un servidor de discord, no sé si en el canal español de gdevelop o en el otro servidor que tengo, alguien hizo minecraft visto de lado en 2d con generación de terreno, y le quedó bastante bien. Si deseas puedo buscarlo y preguntar más información

Esa es una muy buena idea, deberia ser considerada.

Seria increible si pudieras realizar eso (hablar con esta persona en Discord puede ser de mucha ayuda), creo que sería una información muy valiosa y colocarla en este post ayudara a Gente del futuro. Por otra parte quiero explicar algo más de mi juego y me des tu opinión.

Mi juego es lateral (como Terraria basicament) dijiste que utilizar el ruido de perlin no es muy buena idea, quiero profundizar más aquí!

Si los bloques individuales (1 bloque de Césped contiene 496 Animaciones) se colocan con un algoritmo y NO se eliminan, más bien ocultan, si la persona coloca el bloque en la misma posición el bloque “aparece” pero mantiene la misma animación que cuando desapareció, correcto? Pero si esta persona altera los bloques cercanos, al volver “aparecer” aún se mantendrá en la misma Animación?

Mi antigua idea: Yo pensaba utilizar el ruido perlin con un método similar a este:

Donde Si ocultó o eliminar un Sprite de bloque, este Se vuelve “negro” en el ruido perlin, pero “blanco” si lo coloco otra vez. (El principal problema que le veo es que requiere un mosaico y no una plantilla, lo cual limita mucho la generación aleatoria si lo pienso bien)

Supongo que me falta aún mucha información, por ejemplo no se como crear plantillas, o modelos de terreno.
No se como establecer algoritmos (Aún me falta mucho por aprender, ni siquiera se usar variables aún)
Si quiero que la generación NO solo tenga en cuenta la altura, si no la temperatura , bioma y otras alteraciones debería establecer algoritmos para cada una, pero aquí la duda es…
Como digo en Gdevelop, este bloque tiene esta Temperatura, altura, es de este bioma, etc…
(Crear un sistema de temperatura o el algoritmo de altura, puedo buscar información, pero al igual que en los mundos procedurales destructibles no sabia si se usan mosaicos o Sprites, tampoco no ahí lugar que te diga “a este bloque le puedes poner esto”, deduzco que con eventos, pero para cada animación lo encuentro abismal. Por ello creo que ahí un método mejor que desconozco.

Creo que no es posible (o al menos sencillo) hacerlo en GDevelop, segun entiendo lo de Guinxu es un “modelo 3D”

Creo que sí, a no ser que la alteres o cambies la animación de todas las instancias

Correcto, ya que estás ocultando, por tanto en realidad, el bloque sigue ahí, pero oculto o invisible

Creo que para hacer eso sería mediante diferentes bloques. Si es un bioma diferente, generas dichos bloques. Tendría que hacer que se generen cada X bloques, ese tipo de bioma.

Hola, entiendo que estás buscando información sobre cómo crear un mundo abierto procedimental con bloques destructibles y diferentes formas de enlazarlos. Por lo que he entendido, has visto un post https://trilerosdelagua.com/cоdigo-promocional/codigo-promocional-ya-juego/ antiguo de un francés que explica un poco sobre la generación de mundos abiertos y algoritmos necesarios.

Si entendí bien, tu problema radica en cómo hacer que cada bloque tenga diferentes formas de enlazarse con su entorno y que, al ser destructibles y recolocados, no muestren exactamente la misma animación. A primera vista, piensas en usar sprites y que cada animación corresponda a un enlace diferente. Luego, mediante eventos, decidir si un bloque debe o no estar unido para que se muestre una u otra animación.