Re-Entombed
Descripción
Re-Entombed es una implementación rápida en Godot del juego original de Atari 2600 - Entombed. Un sencillo juego tipo infinite runner+topdown por el cual deberemos adentrarnos en el interior de un laberinto, recolectar monedas y evitar morir a mano de los esqueletos o del propio laberinto.
La curiosidad de este juego reside en su algoritmo de generación del laberinto. Dicho algoritmo utiliza una tabla de 32 bits para generar las paredes. Dicha tabla no parece tener ninguna lógica, ni patrón. La leyenda cuenta que dicha tabla la generó el programador estando borracho, de forma aleatoria.
Jugabilidad
Los controles son sencillos:
- Desplazamiento: Flechas teclado / d-pad gamepad
- Romper muro: Espacio / Botón A
El audio en chrome quizás no funciona a no ser que hagas un click en la pantalla antes de empezar el juego.
Hay algún que otro bug con los esqueletos, pero da un poco igual.
Una vez te mueres no hay reset, tienes que recargar el juego con F5.
Cada 10 monedas aumenta la velocidad del laberinto.
Cada pico otorga 3 usos
Mi record está en 116 monedas
Algoritmo Laberinto
Para calcular cuando hay que dibujar una pared o dejar el huevo vacío, el algoritmo comprueba 5 celdas adyacentes de la siguiente forma:
La X representa la celda que queremos calcular. Las celdas a, b, c, d y e son las celdas que se comprueban. La celda "a" corresponde a la celda situada 2 casillas a la izquierda, la celda "d" corresponde a la celda situada justo encima de la que queremos calcular, etc...
Dependiendo de si hay un muro en las celdas a, b, c, d y e, se salculará el valor de la celda x. Para ello se utiliza la siguiente tabla de 32 bits:
Pongamos un ejemplo:
- a = 1
- b = 0
- c = 0
- d = 1
- e = 0
Según la tabla, el valor de X será 1, es decir, pintaremos un muro. Podemos observar que hay ciertos patrones que devuelven "random", eso significa que el juego decidirá de forma random si pintar un muro o no, así cada partida es diferente a la anterior.
Excepciones
Hay que tener en cuenta 2 excepciones en este algoritmo. Primero de todo, las 2 primeras casillas siempre serán un muro (para delimitar el área de juego). Para evitar que los primeros cálculos siempre sean iguales, cuando vayamos a calcular la tercera casilla, el valor de "a" siempre será 1, "b" siempre será 0 y "c" será random. En el momento de calcular la casilla 4, el valor de "a" siempre será 0
Al calcular la casilla 10, el valor de "e" será random.
Finalmente solo se calculan 10 casillas por fila, y se repite el resultado en el lado opuesto, dentro de una cuadrícula de 20, en modo espejo. Formando un laberinto simétrico.
Dejo un ejemplo práctico:
Referencias
- Algoritmo Laberinto: Entombed
- Assets gráficos: https://kenney.nl/assets/bit-pack
- Sonidos SFX: https://www.bfxr.net/
- Música: https://www.fesliyanstudios.com/royalty-free-music/downloads-c/8-bit-music/6
- Motor: Godot Engine https://godotengine.org/