[Devlog] Dungeons of Ka - El Roguelite donde rompes las reglas

javifugitivo

"Nada es eterno. Eso pensaba yo, hasta que descubrí la mazmorra. Un laberinto creado en las ruinas del antiguo imperio, arrasado en las guerras oscuras hace mil años. Nadie logró desentrañar sus secretos. Tesoros, riquezas, artefactos, todo está allí esperando. Nada es eterno. Es hora de demostrarlo."

Image from Gyazo
Jugabilidad rápida, pero que permita pensar estrategias para superar a tus enemigos sin temer al one-shot.

¿Qué es Dungeons of Ka?

Dungeons of Ka es un roguelite de exploración de mazmorras con combates en tiempo real de acción y toques bullet-hell. Embárcate en una aventura explorando las mazmorras de Ka, generadas aleatoriamente: Mapeado, habitaciones, enemigos, armas, artefactos, tesoros.. ¿Serás capaz de descubrir los secretos del antiguo imperio?

El objetivo es desarrollar un juego donde la mazmorra aprenda de ti y te proponga cada vez retos diferentes enfocados en hacerte mejorar, innovar y no jugar siempre igual. Por eso, tanto el mapeado, enemigos, habilidades, armas y mejoras, serán generados aleatoriamente pero conectados. El proceso de generación se asegurará que tendrás opciones remotas de vencer el juego, dándote armas, artefactos y enemigos diseñados para que la Run sea retante y ponerte a prueba. Si intentas jugar dos Runs exactamente igual, te encontrarás que no lo vas a tener fácil...

Encontrar la diferenciación con otros juegos es complicado, por lo que estoy preparando tres características diferenciadoras claves:

  • Personalización rápida y máxima del tipo de build que vas a jugar en tu próxima Run. No tengas miedo en probar nuevas tácticas.
  • La mazmorra te recuerda (+info: coming soon)
  • Las leyes de la mazmorra (+info: coming soon)

Influencias

Nuclear Throne, Enter the Gungeon, Hades, Slide the Spire, Zelda, Rpgs, etc.

Image from Gyazo
La personalización del personaje es clave. Al usar Spine puedo reutilizar una animación con diferentes combinaciones. Si quieres recrear a tu abuela podrás hacerlo.

Software utilizado

Game Maker 2
Spine
Aseprite - El arte del juego será remodelado más adelante si amplío el equipo con un diseñador pixel art, pero por ahora quiero centrarme en mi visión y trabajar con mis recursos hasta que el juego esté en una fase más cercana a la final en el resto de aspectos.
Para sonido cuento con un músico y usaré bibliotecas compradas de audio, todo correctamente señalado en los créditos.

###Plataformas

Lanzamiento en Steam (Windows) / SteamDeck, con posibilidad de Nintendo Switch y más adelante otras consolas / Smartphones

Argumento

Formas parte de un grupo de exploradores en un campamento a las puertas de la mazmorra de Ka, cuyas puertas habían estado cerradas desde hace siglos. Debido a un accidente, tienes un artefacto incrustado en tu pecho que reacciona a la mazmorra y te permite entrar en ella. Los secretos que esconde el laberinto quizás puedan ayudar al renacer de la civilización tras la gran guerra que devastó todo y luego está el tema de la voz en tu cabeza..

Ambientación (para quien quiera ampliar)

spoiler

Para la creación del arte del juego y los distintos enemigos, artefactos y armas, me estoy inspirando levemente en la mitología egipcia, para darle un toque distinto al siempre tan manido juego medieval. Voy a mezclar arte egipcio, con constructos, alquimia, robótica, ... intentando darle una vuelta más a la ambientación.

Vídeo del primer prototipo

El juego no será tan oscuro, pero puede haber niveles donde la luz pueda ser protagonista junto con la oscuridad, para crear una experiencia distinta.

Dependerá de la optimización final más adelante el tema del uso de las sombras: Es posible que prepare una opción para ordenadores más antiguos con el sistema de iluminación más light (sin que los personajes y proyectiles proyecten sombras/luces) si veo que el rendimiento no cumple con lo que espero.

Image from Gyazo
En niveles con poca luz, por ejemplo podrías usar tus propios proyectiles como sistema de iluminación (o bien buscar una antorcha o combinar tu arma con una linterna, etc..)

###Tiempo de desarrollo

Comencé el desarrollo en Abril, por lo que apenas llevo un mes preparando el primer prototipo. El objetivo es tener un prototipo presentable de aquí a Septiembre (llamémosle Alfa/Demo) con:

  • Mazmorra de 3 pisos + Jefe
  • 5 armas distintas básicas + 5 mejoras intercambiables
  • 5 artefactos + 5 mejoras intercambiables
  • 5 tipos de enemigos
  • 5 tipos de trampas
  • Sistema de leyes
  • Sistema de manipulación de leyes
  • Sistema de recuerdo

Por ahora tengo ya desarrollado:

  • Sistema de generación de mazmorras
  • Movimiento del personaje con teclado+ratón y con gamepad (movimiento 360º ataque a distancia y esquiva)

Es posible que en Agosto ya abra una alfa cerrada para un grupo reducido y según el feedback que reciba veré el siguiente paso. Mientras tanto, pues iré explicando lo mejor que pueda los avances y retos con los que me vaya encontrando. También necesitaré vuestro feedback para algunas características que estoy terminando de perfilar.

Image from Gyazo
El sistema de generación de mazmorras fue un quebradero de cabeza, pero es totalmente personalizable dentro de unos parámetros, pudiendo elegir tamaño máximo-mínimo de las salas y tamaño mínimo-máximo del mapa en general (para tener un rango menor o mayor de salas en un mismo nivel).

Lista de características para primer prototipo:

Características que aún tengo dudosas, por lo que necesitaría feedback para pensar si dedicarles o no tiempo (lista ampliable con los comentarios):

Y esto es todo, iré actualizando este post y el siguiente según vaya progresando. A partir de Junio voy a dedicar a este proyecto unas 8-10 horas al día, así que a darlo todo ¡Gracias por leer!

7
carra

Enhorabuena!
Me lo parece o has acercado la cámara? En los videos me parece ver el personaje más un poco grande que antes, lo veo mejor así.

1 1 respuesta
B

Felicitaciones por el curro. La ambientación me gusta.

Cuánto tiempo llevas de desarrollo?

1 1 respuesta
javifugitivo

#2 Gracias. Sobre la cámara, en principio es la del vídeo de Youtube. En los Gifs es un trozo de la pantalla capturada. Podría acercar más la cámara, pero no verías de donde vienen los proyectiles lo que dificultaría mucho los niveles.

javifugitivo

#3 Llevo desde el 14 de Abril, que tengo aquí la primera build. He recuperado esta imagen, para que os hagáis una idea. Hacía años que no tocaba en serio Game Maker y lo primero que hice fue comprobar el sistema de enemigos con el tema de búsqueda de rutas, colisiones del personaje con paredes, etc.

1
Jastro

Muy chulo @javifugitivo desde que tengas algo jugable, cuenta con mi teclado

1
Geck0

A tope con ese prototipo!

1
Ridote

me iba a ir a dormir y no me da tiempo a leerme mucho pero me alegra ver que abres devlog, le echaré un ojo el domingo o el lunes con más calma, a favs!

1
javifugitivo

Muchas gracias a todos por el apoyo. Yo, como Jastro, he tenido una semana bastante liada, pero quería poneros al día, con lo que he estado haciendo desde que publiqué el Devblog.

En primer lugar estuve dándole vueltas a la UI y he estado trabajando en los colores y la tipografía, ya que he buscado una más legible tanto para pantallas pequeñas como grandes. Todo esto ha venido a raíz que antes de ponerme con el tema de las mazmorras, he decidido dejar cerrado el tema personajes y poner un poco de orden, por lo que estoy preparando ya la pantalla de creación de personaje con varias opciones para elegir (unos 10 sliders).

Al poner orden, he aprovechado y he retocado los gráficos para simplificar un poco el estilo por recomendación de un diseñador, y estoy mejorando las animaciones para que, aunque sean simples, funcionen bien y no exista "cliping" entre elementos.

Parecen sprites muy sencillos, pero están todos hechos por partes en Spine con sistema de huesos. Ahora mismo son 24 partes para un sprite que apenas llega a 32 x 32 pixeles...

Image from Gyazo

El objetivo es conseguir animaciones a 60 fps muy fluidas y compensar la simplicidad de diseño y animaciones con mucha variedad de piezas y opciones de colores, vestuario, peinados, ropa, armas, etc. Todo animado por huesos, ahora mismo tengo montadas 16 animaciones para el personaje.

Image from Gyazo

Voy a dedicar el resto de lo que queda de semana a montar el creador de personajes con distintas piezas básicas y probaré a portarlo a Html5 para una pequeña demo online del editor.

3
carra

Mola la animación!
No pensé que en personajes 2D simples se usaba esqueletos para esto jeje

1 respuesta
javifugitivo

#10 Yo creo que es la primera vez que lo veo tan a saco con tan poca resolución.

Siendo puristas, esto es un pixel art profano. NO se deben girar píxeles y las animaciones deben estar hechas a mano, etc. pero claro, teniéndolo por piezas, cada vez que actualizo algo o cambio una parte todo se actualiza y las animaciones se actualizan solas.

Es una forma de acelerar la parte gráfica que es lo que llevo más cojo. Este tipo de animación ya lo había montado con gráficos HD, pero al final, el problema me venía, no con los personajes, sino con los escenarios, etc. Que era mucho más difícil y más costoso sacar ese aspecto de dibujo animado HD y no te digo para que sea compatible con 4K, debes trabajar a mucha resolución o vectorial para 2D. En cambio, con pixel art puedes ampliar hasta 8K que todo se verá exactamente como quieres...

javifugitivo

Bueno, como lo prometido es deuda, tras una semana de trabajo he terminado una primera versión del editor de personajes.

Image from Gyazo

Paso enlace para quien quiera probarlo y darme feedback: https://www.dungeonsofka.com/charactercreator/
(Solo es el editor, no se puede hacer más que cambiar el nombre y probar combinaciones).

He probado estos días a preparar personajes famosos y la verdad es que pienso que va a ser muy divertido jugarcon un personaje muy personalizado inicialmente. A lo largo del juego irás consiguiendo objetos que cambiarán tu apariencia durante la Run, como yelmos, guantes, capas o armaduras, pero la base la vas a tener, con idea de poder editar tu personaje en el campamento siempre que quieras y que se vea reflejado durante la Run.

Lo bueno es que esto es una primera versión, pero está preparado para actualizarse con cientos de piezas, más colores, etc. Por ejemplo los tatuajes aún se han quedado fuera y otros detalles faciales que pueden implementarse fácilmente.

Algunos ejemplos:

Seguro que se pueden reproducir personajes como Ryu o Ken fácilmente y muchos más..

¿Qué más opciones añadirías o echas en falta?

4
javifugitivo

Ya terminando la semana, actualizo con los avances hechos estos días desde que terminé la primera versión del creador de personaje:

Entre el viernes y el sábado implementé un primer sistema de guardado para que se guardara la configuración del personaje, así como tener distintos perfiles. Además probé a añadir un sistema de eliminación de un perfil, con un pequeño margen de seguridad, ya que ni me gustaba que se eliminara fácilmente solo pulsando, ni tampoco con el típico estás seguro Sí o No que siempre me lleva a dudas (cosas mías).

Esta es la solución que he preparado por ahora:
Image from Gyazo

Hoy Domingo me he dedicado a retocar algunos pequeños fallos que tenía con el sistema de colisiones de los proyectiles, ya que dada la perspectiva elegida, deben comportarse como si tuvieran cierta altura y no pegados al suelo. Esto plantea un problema con las paredes, ya que aunque el personaje se puede pegar a las paredes superiores, no deben atascarse los disparos al generarse muy cerca de una pared. Tras varios retoques he conseguido solucionarlo controlando las colisiones con los muros superiores e inferiores con distintos márgenes de colisión y por otro lado las paredes verticales, columnas, etc.

Digamos que los proyectiles reales "invisibles" van pegados al suelo pero su representación gráfica va unos píxeles por encima de ellos. Gracias a esta solución he podido activar una versión del sistema de rebote de las balas para armas especiales:
Image from Gyazo

He añadido además una comprobación para que si por casualidad, se escapan de las paredes fuera del escenario, se autodestruyan.

Esta semana que viene por fin me pondré con el arte gráfico para las mazmorras y el campamento base, pantalla de inicio, etc.

1 1 respuesta
carra

Mola, se ve que la cosa va avanzando y le sigues dedicando tiempo así que ánimo!

1 1 respuesta
javifugitivo

#14 Gracias por tu apoyo, a partir de junio voy a poder dedicarle unas 10 horas al día o más, ahora que he terminado un par de proyectos que me quitaban mucho tiempo. Así que espero tener grandes avances para finales de junio y que ya vaya cogiendo forma.

En este ratito por ejemplo, he montado un prototipo del minimapa, aunque aún no sé si lo meteré como ui standard o como alguna mejora que recojas.

Image from Gyazo

1 1 respuesta
carra
#15javifugitivo:

a partir de junio voy a poder dedicarle unas 10 horas al día o más

Madre mía, vaya ritmo. Ojalá le pudiera yo dedicar tantas horas a mi consola jaja

Geck0

Va tomando forma, vas a buen ritmo sí.

Lo de mantener pulsado para eliminar en #13 quizás me parece algo raro, me imagino un jugador búlgaro que no sepa inglés y el juego no esté traducido a su idioma que no entienda que hay que mantener pulsado (no es lo "estándar") y se piense que no funciona el botón xD

1 respuesta
javifugitivo

#17 Gracias por el feedback. En otros juegos hay que escribir Delete para que se borre, por ejemplo. ¿Se te ocurre alguna forma más de poder hacerlo?

4 respuestas
Geck0

#18 Solo se me ocurre el mensaje de confirmación de toda la vida xD pero parece que no te gusta :P

Lo de escribri delete/borrar me suena del WoW cuando querías tirar un objeto azul/épico

1
Martita-

#18
Siempre puedes hacer una cuentra atras y que salga un boton de cancelar mientras la hace.

1
carra

#18 A mi no me parece mal como lo tienes, aunque igual es menos intuitivo. También podrías borrar sin más pero luego tener la opción de deshacer (guardar una copia en memoria tal vez)

Jastro

#18 Sin duda lo clasico:

Le das a la X ¿Seguro que quieres borrar? -> Aceptar

Y listo

javifugitivo

Gracias por los consejos, al final tiraré por el pop up de borrar partida, en posición centrada y dejando claro que perfil estás borrando.

Hoy he aprovechado el tiempo y he empezado a montar el campamento de la entrada de la mazmorra. He hecho textura de arena, tiendas, sistema de partículas para el fuego y poco más, mañana continuaré.

4
javifugitivo

Como era de esperar, estos días se me ha liado un poco la cosa, pero he podido avanzar en distintos ámbitos.

He trabajado en solucionar algunos problemas con la iluminación que tenía y he empezado a darle más detalles al campamento de inicio. Hacía tiempo que no trabajaba con partículas y he tenido que volver a estudiar bien como funcionaban y recrearlas en código, ya que el sistema nuevo visual de GMS no me acaba de gustar.

Por otro lado, al ser un desierto donde comienzas, he tenido tiempo de meter un par de detalles, como son pisadas en la arena y que el sonido de pasos sea distinto cuando pisas esa superficie.

Además, he probado a meter el primer npc, que tras fijarme.. me ha quedado clavado a Santiago Segura. Sí que veo que tengo que currarme más el aspecto y detalle de las tiendas de campaña que no me acaban de gustar.

Image from Gyazo

Mañana lo dedicaré a revisar el sistema de borrar perfil, y empezar a plantear el sistema de diálogos y seguir con el diseño gráfico de elementos.

3
javifugitivo

Tras mucho trabajo he conseguido implementar tanto el gamepad para controlar los menús, como el sistema de eliminado de perfiles con los consejos de Jastro y demás.

Con ratón:
Image from Gyazo

Con gamepad:
Image from Gyazo

Ahora a seguir adaptando el resto de menús al gamepad y ver una forma de que los botones se amplíen dependiendo del texto que tienen dentro, ya que recuerdo alguna función de gamemaker que lo hacía.

1
carra

Pues sí, los menús llevan más trabajo de lo que uno se cree.
Pero merece la pena invertir un poco de tiempo en ello.

8 días después
javifugitivo

Hola, he estado muy ocupado esta semana, terminando todo el tema de menús de sonido, imagen y controles. Ahora ya se puede remapear todo el teclado, ratón y gamepad.

Por otro lado, lo bueno es que he conseguido colocar en el juego fuentes (tipografías) más pequeñas, sin que se deformen debido a la resolución tan pequeña de la pantalla (480 x 270). Lo malo, que tengo que rehacer todos los menús. Así que manos a la obra.

Os dejo como quedaría por ahora, la pantalla de título con su menú inicial.

Image from Gyazo

3
19 días después
javifugitivo

¡Hola por aquí! Hace unas semanas que no he actualizado el blog de desarrollo, ya que he estado liado con temas externos al desarrollo. Sin embargo sí que he hecho muchos avances, aunque no sean "super divertidos" era necesario hacerlos y creo que pueden interesantes para algunos de vosotr@s.

En primer lugar, estuve unos 10 días implementando un sistema de cargar y salvar datos a archivos de forma asíncrona (async events). Tuve que desechar el sistema clásico de text files o archivos ini, en vistas a un futuro port a consolas. Os explico. La nintendo switch, ps5, etc. no permite cargar datos de archivos de forma directa: Tiene que hacerse de forma asíncrona. Lanzas la petición de lectura de datos y el juego debe continuar. Ya cuando recibas la información (el callback) activas el evento de cargar partida, etc. De esta forma evitan que el juego se congele si no se cargan los datos correctamente.

Esto ha significado cambiar toda la estructura de datos de los archivos de salvado e implementar un sistema de "estructuras" que después se guardan en un archivo json.

Un ejemplo:

{
  "snd":{
    "music_volume":0.0,
    "sound":1.0,
    "fx_volume":0.10000000000000007,
    "steps_volume":1.0,
    "ui_volume":1.0,
    "voice_volume":1.0,
    "ambient_volume":1.0,
    "global_volume":1.0
  },
  "vid":{
    "screen_height":270.0,
    "displaymode":2.0,
    "screen_hport":1080.0,
    "screen_width":480.0,
    "screen_wport":1920.0,
    "vsync":1.0,
    "screen":0.0,
    "shadows":1.0
  },

Este sistema, en Game Maker lo bueno que tiene es que puedes anidar estructuras dentro de otras estructuras, por lo que para guardar datos de personajes, armas, etc. me viene de maravilla (hasta 128 de profundidad creo). También me permite acceder a cualquier dato dentro de la estructura de una forma super sencilla. Usando variables en plan: player.equiped.weapon.blaster

Por otro lado, implementé el sistema de diálogos y ventanas emergentes, que me va a servir tanto para diálogos con personajes como para interactuar con decisiones, coger objetos, etc.

Image from Gyazo

También he estado trabajando en la ambientación de las mazmorras, con un cambio en el tileset, iluminación y he vuelto a implementar la linterna del jugador, que ahora puede activarse o desactivarse. El siguiente paso es ya trabajar con sistemas de detección teniendo en cuenta la luz de la linterna, y no solo la cercanía del personaje. No quiero que sea un juego de infiltración, pero sí que tenga algunas mecánicas básicas basadas en ruido y línea de visión.

Image from Gyazo

Además estoy diseñando ya un sistema de evolución de armas, también visual. Es casualidad que justo ayer vi en reddit un juego similar con este sistema, pero en fin, le tendré que dar otra vuelta más, o hacerlo mejor. Mi primera idea es que empieces con un arma básica inicial y que vayas encontrando partes para acoplarlas y cambiar y mejorar su ataque, tipo de daño, velocidad, número de proyectiles, si rebotan, etc.

Ejemplos:
Piezas sueltas:
Image from Gyazo
Montaje con 5 piezas
Image from Gyazo
Montaje con 6 piezas, dando opción que hayan piezas que permitan ampliar el número de piezas a montar en el arma.
Image from Gyazo

¿En qué punto estoy? Pues en un punto crucial. Tengo ya el 90% de la programación resuelta, es decir, ya he experimentado y probado la mayoría de cosas que quería hacer, y todo funciona. Ahora tengo que volver al documento de diseño (gdd) y acotar bien qué quiero programar para la primera alpha.

A partir de ahí es diseñar gráficos, programar las mecánicas y a continuar.

Otra de las ideas que estoy barajando es no perder el tiempo en configurar enemigos o armas "fijas", sino crear opciones, muchas opciones. Así cada vez que se genere una mazmorra, encontrarás enemigos y armas o piezas creadas proceduralmente, sin que tengas ni idea sobre lo que te vas a encontrar.

Os iré contando ;-)

3

Usuarios habituales