Diseño de niveles
·En las últimas semanas hemos estado ocupados en atacar tres frentes concretos, son estos:
La IA de los enemigos, el diseño gráfico de los asteroides y sobre todo el diseño procedural de los niveles.
En post vamos a centrarnos en el diseño procedural.
Los mapas de Rocksteroids, estan diseñados en dos capas.
La primera capa es meramete decorativa. El sistema se encarga de esparcir, por aqui y por alla, unos asteroides de color mas oscuro que añaden un extra de profundidad a los mapas.
No se puede interactuar con ellos y no detectan colisiones.
La segunda capa es más compleja, ya que aquí se desarrolla todo la carga de diseño.
En primer lugar, el mapa está dividido por una enorme rejilla de casillas de 20 x 20 pixeles. (Ver imagen que encabeza el post)
Atención, no es un tilemap. La estructura de los tilemaps nos hacia imposible un diseño libre de los campos de asteroides.
El tamaño actual del mapa, (puede crecer en el futuro) es de 1800 pixeles de ancho por 1200 pixeles de alto. Lo que nos da un tamaño de grid de 90 x 60.
Primero poblamos aleatoriamente el mapa con los asteroides mas grandes, de unos 100 x 100 pixeles, ocupando 5 x 5 espacios en el GRID. Estos sirven para bloquear caminos y disparos.
Almacenamos en un ARRAY las posiciones ocupadas (Casillas en rojo en la captura de pantalla) e iteramos las veces que necesitemos. Si el asteroide nuevo que se crea, coincide con una zona ocupada, el sistema busca una posición vacía.
Luego llegan los Asteroides principales, son los que contendran mineral y a son los que debe destruir el jugador. Los creamos con el mismo sistema anterior. Solo que estos ocupan un area menor en el grid.
Y finalmente poblamos el mapa con enemigos (cañones, minas, drones y otras naves) en las posiciones vacías restantes.
Con ello creamos un mapa simple, pero efectivo y que cada vez es totalmente diferente.
No obstante, el sistema tiene un pequeño fallo, y es que al ser totalmente aleatorio, las posiciones de ciertos elementos del juego, como pueden ser, los cañones, a veces no parecen estar en posiciones lógicas desde una perspectiva defensiva.
Para solucionar este pequeño inconveniente, estamos implementando un sistema de zonas prefabricadas que se integran fluidamente en el diseño aleatorio. Estas zonas están prediseñadas y pensadas para añadir desafíos al jugador.
De momento esto es todo. Gracias por vuestra atención.
traslated:
In recent weeks we have been busy attacking three specific fronts, these are:
The AI of the enemies, the graphic design of the asteroids and above all, the procedural design of the levels.
In this post we are going to focus on procedural design.
Rocksteroids maps are designed in two layers.
The first layer is merely decorative. The system is responsible for scattering, here and there, darker colored asteroids that add extra depth to the maps.
They cannot be interacted with and do not detect collisions.
The second layer is more complex, since all the design load is developed here.
First of all, the map is divided by a huge 20 x 20 pixel grid of tiles. (In the image that heads the post, you can see the grid)
Attention, it is not a tilemap. The structure of the tilemaps made a free design of the asteroid fields impossible for us.
The current size of the map, (it may grow in the future) is 1800 pixels wide by 1200 pixels high. Which gives us a grid size of 90 x 60.
First we randomly populate the map with the largest asteroids, about 100 x 100 pixels, occupying 5 x 5 spaces on the GRID. These serve to block paths and shots.
We store the occupied positions in an ARRAY (Red boxes on the screenshot) and we iterate as many times as we need. If the new asteroid that is created coincides with an occupied area, the system searches for an empty position.
Then the main Asteroids arrive, they are the ones that will contain ore and they are the ones that the player must destroy. We create them with the same previous system. Only that they occupy a smaller area in the grid.
And finally we populate the map with enemies (cannons, mines, drones and other ships) in the remaining empty positions.
With this we create a simple, but effective map that is totally different every time.
However, the system has a small flaw, and that is that being completely random, the positions of certain elements of the game, such as cannons, sometimes do not seem to be in logical positions from a defensive perspective.
To address this minor issue, we are implementing a system of pre-made zones that seamlessly integrate into the random layout. These zones are predesigned and designed to add challenges to the player.
For now this is all. Thank you for your attention.
Guest
UserGuest
User