[Devlog] - GodoRogue

B

A fav que va, ahora me leo #1

Pues tiene muy buena pinta, pero no es lo que suelo jugar, se la dará algún que otro try eso sí. A sacar bugs y dar quebraderos de cabeza xP.

Para el próximo un bullet hell a lo fury solo con combates y yo ya.

covaga

para cuando vendes acciones de vega?

El_Pesca

Enorabuena! Eres un máquina. Gráficamente pinta bien. El desarrollo de niveles tambien, las mecánicas también estarían definidas. A mi parecer faltaría:

  • Historia.
  • Guión.
  • Música.
    Suerte en tu nuevo proyecto.
2 1 respuesta
AikonCWD

#33 historia ya hay! Me falta la musica. Hoy he estado mirando por bandcamp pero no he visto nada que me guste

RosaNegra

¡Mucho ánimo con tu nuevo proyecto!

Si te hace falta ayuda para algo ya sabes.

1
kassiusk1

#30 Si va a ser como en el Cursed Gem no tienes rival :joy:

1 respuesta
gogogo

ya me he leído el OP y tiene buena pinta. Se nota que hay mucho curro detrás en lo mecánico sobre todo. En general el pixel art mola bastante aunque luego cuando se pone todo en conjunto su estética la veo demasiado retro.

Mientras que consigas que el juego sea entretenido, funcionará; porque variado va a ser seguro xD

#36 jajaja nah eso no ha sido por mi habilidad sino porque he viciao mucho xD

1 1 respuesta
finalform

#37 tampoco seas humilde, tontón 😘

1
everedx

Siempre es bueno ver uno de estos.

Si te digo la verdad, me anime a crear el devlog aqui por tu anterior proyecto :)

Tienes intencion de pasar una minidemo para ver que tal se siente?

1 respuesta
AikonCWD

#39 Muchas gracias!!

En cuanto tenga algo jugable sacaré demo. De momento me estoy peleando con la generación de la mazmorra.

1
thenanox

#1 otro favorito mas bribon

Selbryn

Mucha suerte en la aventura! Me he leido el hilo y me han entrado ganas de hacer algo (gracias!), ya que ando un poco desanimado de hacer proyectos personales ahora. Me lo pongo en favs para seguirlo!! Con ganitas de ver mas cositas :smiley:

1
thenanox

a mi lo que me esta gustando es la sensacion de que todo el juego este pensado/programado para que diseñar sobre el sea comodo

20 días después
AikonCWD

Bueno, he estado terminando de arreglar bugs del Cursed Gem y ahora sí estoy 100% libre y focus con este proyecto.

De momento sigo peleándome con el algoritmo de generación de mazmorras. No me gusta nada lo que tengo y estoy mirando otros ejemplos y layouts a ver que es lo que más me conviene. Hoy he estado jugando con algunos tilesets para ver que tal quedan las paredes.

Todo lo he dejado en random, tengo que balancear los tiles para pintar unos u otros. De momento todo son pruebas.
Tal y como se puede ver, no he arreglado la generación de habitaciones sin conectar. A ver si para el finde lo tengo controlado ya.

6
AikonCWD

Bueno, pues hoy le he metido mucha caña al algoritmo de generación de mazmorras y ya lo tengo terminado! Voy a explicar con detalle el punto en el que estaba atascado y como lo he solucionado.

Generar habitaciones

Asignar un ID a cada espacio abierto

Primero generamos N habitaciones. Cada habitación debe estar dentro del perímetro de la pantalla y ninguna habitación se puede solapar con otra existente. Con estas normas podemos generar lo siguiente:

  • El recuadro de la izquierda es el mapa generado, cada grupo contiguo de agujeros representa una habitación
  • El recuadro de la derecha es el mismo mapa generado, pero esta vez hemos identificado cada grupo con un mismo ID (cada ID se representa con un icono diferente).

Generar los pasillos (laberintos)

Asignar un ID a cada laberinto también

Tenemos la primera habitación identificada internamente con unas velas, la segunda habitación identificada internamente con unos arbustos, etc... Ahora vamos a generar un laberinto en cada espacio que ha quedado sin rellenar. Podemos intuir que se generarán 3 laberintos diferentes, delimitado por las posiciones de las habitaciones existentes:

En esta segunda fase, podemos ver como toda la pantalla está completa y rellena de habitaciones y laberintos. Pero no hay nada interconectado. No podemos viajas de una habitación a otra. En el recuadro de la derecha vemos el mismo mapa. Cada agrupación de huecos (habitaciones o laberintos) tiene su propia ID única y por tanto su dibujito único.

Conectar espacios con diferente ID + Unificar ID

Ahora entramos en la tercera fase, que es lo que he desarrollado hoy. Paso a detallar:

  • Recorremos todo el mapa, buscando las siguientes celdas:
    • Que sea una pared
    • Que a su izquierda y derecha (o arriba y abajo) tenga una obertura de IDs diferentes

Estas celdas son bloques que conectan una habitación con otra habitación o laberinto. Eliminamos dicha celda para conectar la habitación con la otra habitación o laberinto.

Ahora estos 2 espacios unificados son en realidad un nuevo espacio único, así que establecemos su ID (dibujito) para dejarlo unificado también.
Repetimos todo este proceso hasta que solo tengamos un único espacio con una única ID:

En la animación podemos ver todo el proceso paso a paso. A cada click del ratón se muestra como se elimina una de las paredes y se unifica el ID. Así cuando volvemos a pulsar el botón, repetiremos el algoritmo sobre el resto de espacios con IDs diferentes. Al terminar tendremos una mazmorra con cada habitación conectada, asegurando que se puede viajar por toda la mazmorra sin quedar atrapado.

Limpieza de callejones

Queremos una mazmorra menos laberíntica

Por último, toca aplicar un sencillo algoritmo de limpieza para eliminar los callejones sin salida. Esto es opcional, pero deja un aspecto más de mazmorra y menos de laberinto. Ejemplo:

Ya solo falta situar las puertas, monstruos, items y decorar cada tile con una pared/suelo diferente.

11 2 respuestas
Kalgator

#45 generate-maze-connect-"simplificar"

con dos cojones! xD

La verdad es que es interesante!

1 1 respuesta
thenanox

#46 clasico boton de estar hasta la polla

carra

#45 Me molan todos estos métodos para generar mazmorras. Gracias por tomarte el tiempo de poner las explicaciones! :smiley:

1 respuesta
AikonCWD

#48 Hoy me lo he vuelto a leer y no sé si se entiende xd. No se me ocurrió otra forma para representar el ID de cada "espacio abierto".

AikonCWD

Bueno, una vez ya tengo controlado el tema de la dungeon, toca meterse con el core/gameloop del juego:

Por el momento estoy usando un tileset en ascii para no complicarme la vida. Pero no os asustéis que la versión original irá con los tiles gráficos de la primera página. Dejaré como opción la posibilidad de jugar en modo retro/ascii.

Ya tengo los controles básicos funcionando. Ahora voy a sacar la pizza del horno y luego me meto a programar un par de monstruos, que quiero empezar a tocar el algoritmo de path-finding y AI


EDIT: Dejo un link para que podáis testear lo que llevo hecho

https://aikoncwd.ovh/roguelike/

De momento es un "walking simulator". Detecta colisiones, revela habitaciones al entrar y genera infinitos niveles. Mañana me pongo con la IA y el path-finding

4
AikonCWD

Bueno, primer bug que estoy intentando depurar y llevo 1 hora y no lo resuelvo xd:

Estoy peleándome con la visibilidad de los items que hay en las habitaciones. Al abrir una puerta (+) se revela su interior y sus items. Al abandonar la habitación se ocultan los items (la habitación queda revelada). Si nos quedamos en una puerta que separa 2 habitaciones, veremos los items de ambas habitaciones.

El problema lo tengo con la serpiente de abajo. Tras entrar completamente a la habitación superior, la serpiente inferior debería desaparecer. Cuando abandono la habitación inferior por la derecha, sí que desaparece.

Es rarísimo y me estoy volviendo loco

2 respuestas
Leos

#51 Como reseteas la visibilidad de la serpiente?

1 respuesta
thenanox

#51 sin ver codigo es dificil.. puede ser que la parte de abajo de la habitacion, se considere parte de la parte de arriba de esa habitacion (porque de algun modo son la misma habitacion)? y le das prioridad de algun modo a la habitacion completa en vez de subhabitaciones?

toma paja mental

1 respuesta
AikonCWD

#52 Yo creo que lo estoy planteando como el culo... por eso estoy teniendo problemas ahora.

Cada vez que el player se mueve, comprueba el ID del tile al que se va a desplazar. Si voy a la izquierda y el cuadro de mi izquierda es una pared, no me desplazo.
Si el cuadro es una puerta, cojo la siguiente ubicación y recorro mi array de habitaciones.
Compruebo si mi posición está dentro de una habitación, la revelo y pongo visibles cualquier item que haya dentro de su area.

Al salir, hago lo mismo, pero poniendo visible = false.


El sistema funciona, excepto cuando hay 2 habitaciones pegadas, y paso de una a otra.

#53 Cada habitación es única. Aunque se haya generado una al lado de la otra. De hecho, la habitación superior funciona correctamente, al abandonarla se quitan los items. Estoy haciendo algo mal y no lo veo xd

2 respuestas
Leos

#54 Pues sin ver el código es chungo saber que pasa :S Mal planteamiento de cambiar la visibilidad sin tener en cuenta las habitaciones juntas o no se detecta bien que son dos habitaciones diferentes si estan juntas...

1 respuesta
thenanox

#54 era una primera paja que se me ha ocurrido, pero a mi me huele a algo de esa collection de habitaciones y como la recorres. el tema es que si hacias un busco la primera, a lo mejor al encontrarse en la segunda habitacion, el considera que esta aun en la primera para ciertos recorridos, por eso primero pense en que pertenecian a lo mejor a la misma habitacion

1 respuesta
AikonCWD

#55 #56 Estoy metiendo prints() a saco para ver qué pasa y las habitaciones son diferentes.

Voy a re-plantear el tema de la visibilidad, a veces me empepino a hacer una cosa de cierta manera y resulta que el planteamiento de base lo tengo mal.
Dejo el código que he puesto de momento, después de comer le daré una vuelta más o si no borro y lo planteo de otra forma.

1
AikonCWD

Vale, ya me funciona:

Ahora solo me falta que los items de la habitación se sigan mostrando mientras esté encima de la puerta (sin llegar a salir del todo). Pero creo que eso es fácil.

2
AikonCWD

Venga!! otro hito alcanzado: Path-finding funcionando, con movimiento de diagonales. En la animación muestro el movimiento con mouse y su recorrido, pero en el juego final no habrá soporte para el mouse.

Me encanta como el Zombie de abajo supera hábilmente el zigzag de paredes y como la Serpiente del final busca un path alternativo al encontrarse bloqueado por el Centauro.

Mañana me meteré con el sistema de inventario. Nunca he hecho uno y por lo que he leído es bastante jodido xd, a ver si no me atasco demasiado.

11
puntocom

Oye pues a mi me gusta bastante la estética como queda ahora mismo.

1 respuesta