Smarter Procedural Roguelike Dungeon

1

Tagged

Attached Files

The following files have been attached to this tutorial:

.capx

dungeon-base.capx

Download now 175.46 KB

Stats

2,179 visits, 2,520 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 19 Aug, 2014. Last updated 25 Feb, 2019

Hola! esta es mi primera traducción de un tutorial!

Estoy trabajando en un juego de muerte progresiva y luego de revisar varios tutoriales se me ocurrió una forma interesante de combinar unas técnicas de programación.

Hoy quiero escribir sobre combinar calabozos progresivos y el método bit a bit para colocar tiles.

Calabozo Progresivo

El generador de calabozos básico que realicé esta basado en esta publicación (en ingles) pero con un poco de búsqueda conseguí que stemkoski la había portado a construc2 y realizo un tutorial (en ingles) sobre el.

El tradujo el trabajo de forma muy similar a la mía, solo con unas pequeñas diferencias. Lean su publicación y les mencionare cuales son estas diferencias...

Ya regresaron? genial. Aquí están mis pasos.

PASO 1. Define una matriz y luego crea 2 arreglos de tres dimensiones.

Arreglos:

DungeonMap (ancho de la matriz, alto de la matriz, 2)

DungeonRoom (2,2,Numero de cuartos)

*Pro tip: Puedes colocar el ancho y alto del arreglo DungeonMap para que sea escalable, esto se logra al dividir el alto y el ancho del layout por el tamaño de tus tiles redondeando para abajo. De esta forma cuando definas el tamaño del layout, tu calabozo automáticamente llenara el espacio libre.

La ecuación seria: floor ( layoutWidth / Gridsize )*

El arreglo DungeonMap sera llenado de ceros al iniciar. El primer plano sera llenado con números para cada celda, indicando al juego que colocar ahí. 1 para pisos, 2 para paredes, etc...

El segundo plano sera llenado con identificadores de celdas usando el método bit a bit. (Este tiene su propia sección abajo.)

PASO 2. Define los cuartos.

Para este caso, el arreglo DungeonRooms tiene planos que consisten en cuatro celdas; dos columnas y dos filas. Hay un plano por cada cuarto que queramos hacer.

La primera fila tiene la posición x y la posición y en cada celda. La segunda fila contiene el ancho y alto del cuarto.

Coloquen el ancho y alto PRIMERO y luego lo ubican al azar. De esta forma podrán sustraer el ancho y alto de las posiciones máximas en x y en y para que sus cuartos no se salgan del layout.

Coloquen los valores correspondientes de las celdas en DungeonMap a 1.

Aquí pueden ver mi hoja de eventos:

PoAr significa poblar arreglo.

RX, RY, RH, RW = cuatro x, cuatro y, alto del cuarto, ancho del cuarto.

El resultado se ve así:

PASO 3. Definan los corredores.

Uso un punto aleatorio dentro del primer cuarto en él arreglo DungeonRoom y luego un punto aleatorio en el siguiente cuarto del arreglo y trazo una linea horizontal y vertical con unos (1) a los puntos de los cuartos.

Lo hago en un ciclo que se detiene en uno menos que la cantidad de cuartos. Tres cuartos solo requieren de un corredor.

La hoja de eventos.

Por favor ignoren el StartX y StartY, eso eran variables que pensé que necesitaría y olvide quitarlas.

El resultado se ve así:

PASO 4. Definir las paredes.

En cualquier momento que un 1 esté junto a un 0, coloque un 2 en su lugar.

Esto es simplemente recorrer por cada celda en el plano del tope del arreglo DungeonMap, revisando si tiene un 1 en una celda, revisando si cualquier celda adyacente a ella tiene un 0 y cambiarlo por un 2.

Aquí esta mi hoja de eventos:

El resultado se ve así:

El Método Bit a Bit

El método bit a bit para tiles es... pues zatyka ya realizo un tutorial sobre el (en ingles). Pero en resumen, es asignar a una celda un numero basado en lo que esta a su alrededor. En este caso, las celdas del piso tendrán un numero diferente dependiendo de cuantas paredes están a su alrededor y donde están colocadas.

Aquí esta la mejor explicación que conseguí.

PASO 5. Asignar valores a las celdas del segundo plano del arreglo DungeonMap.

Esta es la forma que yo asigne los valores:

Y aquí esta mi hoja de eventos:

Una vez que todos los valores sean asignados, pueden ver el valor de cualquier coordenada en el primer plano al leer el valor su celda pareja en el segundo plano.

Así que si una celda tiene una pared a su derecha superior, el valor es 1.

Si la celda esta en un pasillo horizontal, el valor es 221

Como pueden ver esto es MUY útil cuando quieran colocar cosas en su mapa. Lo use para hacer que trampas aparezcan de forma aleatoria pero solo en ciertos lugares. Coloque ciertos tipos de tiles cerca de paredes y otros tipos en los espacios abiertos. Puede hacer que los power ups solo aparezcan en los pasillos.

PASO 6. Dibujar el mapa.

Ahora todo lo que hay que hacer es tomar la información del DungeonMap y usarla para dibujar tiles en pantalla.

Aquí esta la porción de la hoja de eventos que dibuja el mapa basado en el contenido de DungeonMap.

Conclusión

Otras formas de mejorar:

Coloqué las coordenadas de mi cuarto inicial dentro del arreglo DungeonRoom para que siempre este donde yo quiera. Lo usare para otros tipos de cuartos también. De esa forma los cuartos aleatorios pueden coexistir con los planificados y el motor de juego llena los espacios en blanco.

Sigo explorando y encontrando formas interesantes de poblar el calabozo.

Estoy añadiendo el .capx para el motor del calabozo.

Aquí hay un prototipo de un juego en progreso. Maze of Cthulu

Usen la barra espaciadora para disparar y las flechas para desplazarse.

Este es el final del tutorial, pero por favor, comenten cualquier duda. También, quiero agradecer a Scirra por realizar esta gran herramienta.

.CAPX

dungeon-base.capx

Download now 175.46 KB
  • 0 Comments

Want to leave a comment? Login or Register an account!