INTRODUCCIÓN

¡Hola! ¿Cómo va el veranito? Espero que no te hayas derretido y que hayas disfrutado o puedas disfrutar de tus vacaciones.

La edición de este mes vuelve a traer un proyecto nuevo, la fábrica de ChumasGames está que no para últimamente así que… ¡vamos a ello!

NOVEDADES

Seguro que si desarrollas videojuegos o te interesa este mundillo has oído hablar alguna vez de Mark Brown, más conocido por el nombre de su canal: Game Maker's Toolkit. Es probablemente el canal dedicado a game design más famoso internacionalmente y eso lo demuestra cada año cuando llega la GMTK Game Jam.

Año tras año desde 2019 esta se convierte en la jam más grande de todo el mundo, superando siempre su anterior récord y llegando a tener miles de participantes y juegos. Esta vez no ha sido diferente: Más de 37.400 personas inscritas y más de 10.500 juegos presentados. Y efectivamente, entre toda esa gente, ahí estoy yo.

Antes de empezar con todo el proceso creativo detrás del proyecto, te dejo por aquí el tráiler para que veas un poco de qué va el jueguito y te sea más fácil entender todas las explicaciones.

DÍA 1: LA IDEA

Ya te he hablado alguna vez de lo que es una game jam y de como funcionan, en este caso la duración era de 96h y el tema seleccionado era “COUNTDOWN”. Estas fueron las primeras ideas que me vinieron a la cabeza:

1. Lluvia de ideas inicial

Lo primero en lo que pensé eran cosas como un cohete, una bomba, un reloj… También se me ocurrieron conceptos como un RPG o un juego tipo Balatro en el que tu objetivo es que los números disminuyan. Otra idea más narrativa era usar el tema de la cuenta atrás como tu “tiempo de vida” restante. O la idea de tener un tiempo límite para ordenar un escenario antes de que se haga una foto.

Después de barajar todas esas ideas, la que más me atraía era la de usar el concepto de una bomba a punto de explotar así que intenté indagar un pelín más ahí: ¿Hago un juego de desactivar una bomba como el reciente Bombanana o el clásico Keep Talking and Nobody Explodes? ¿O quizás un juego en el que usas las bombas a tu favor como en Bomberman? ¿O me puedo inventar una especie de versión del Buscaminas?

Finalmente, la musa de la inspiración llegó y pude definir una idea que hizo click en mi cabeza desde el principio (aunque ya te adelanto que, como en todas las jams, la idea sufrió recortes debido al poco tiempo que tuve).

El concepto: Un juego de puzles con movimiento por casillas en el que debes desactivar una bomba antes de que su contador llegue a 0. Cada paso que das, hace que el contador disminuya en 1, por lo que cada movimiento que hagas es esencial.

Sí, yo también creo que al final voy a tener que hacerme experto en juegos de puzles por casillas. Y no lo digo solamente por PANIK, otro de mis juegos salidos de una game jam al que más cariño le tengo es The Sleepwalker. Si no lo conoces te animo a probarlo también, conseguí colarme en la entrega de premios de dicha jam y llevarme el 3er premio en la categoría de mejor juego jeje.

Volviendo a la GMTK, tenía clara la idea central pero no estaba del todo seguro en como implementar la mecánica de “desactivar” la bomba. Primero pensé en el típico concepto de cortar cables y que fuese un juego en el que vas descubriendo las reglas poco a poco. Por ejemplo, según el número de cables cortas un color u otro, ir añadiendo reglas, excepciones…

Otra idea que pensé era hacer que hubiese minas enterradas en algunas casillas y tuvieras que averiguar en cuales con algún sistema de pistas para poder trazar el camino seguro hasta la bomba.

Sin embargo, la idea que finalmente más me convenció y la que terminó de definir el juego fue la de añadir mechas (pero mechas en plan cuerdas, no los robots… ya me entiendes). La bomba tiene una mecha que define la cuenta atrás. Esta mecha ocupa un número de casillas y a cada “paso” del personaje se consume 1 casilla. Tu objetivo es apagarla antes de que llegue al final y todo explote.

2. Boceto de la idea inicial

Esta mecánica me encajó perfectamente tanto con el tema de la jam como con el concepto del juego que ya tenía a medias: Cada paso del personaje era también un paso de la mecha y, a su vez, un “paso” de la cuenta atrás. Además, era una idea muy simple pero con mucho potencial para hacer diferentes puzles.

DÍA 2: A DISEÑAR

Con todo esto definido, me tocó abrir GameMaker y ponerme a ello. Mi prioridad en este caso fue definir todos los sistemas que iba a tener el juego para poder centrarme en hacer un buen generador de niveles y cerrar el loop jugable lo antes posible, dejando para el final la tarea de añadir más niveles. A la hora de diseñarlo todo, también iban surgiendo muchas preguntas que podían cambiar bastante la dirección del desarrollo:

¿El nivel tiene siempre una sola bomba?
¿Una bomba tiene siempre una única mecha o puede tener varias?
Si hay más de una mecha, ¿se pueden cruzar o solapar entre ellas?
¿El nivel puede tener más de un personaje?
¿Si el personaje se intenta mover a una casilla vacía cuenta como “paso”?
¿El personaje puede pisar la mecha o debe hacer un acción específica para apagarla?

Creo que es muy importante que para definir una idea se hagan prototipos lo antes posible para poder testear las bases del juego y reiterar en lo que haga falta (aunque siendo una jam tampoco me quedaba otra opción). Y como digo, esas preguntas no siempre tienen una respuesta mejor o peor, simplemente toca decidir una u otra, cada una con sus pros y sus contras.

En este caso decidí dando prioridad a la generación de niveles. Quizás meter más de una bomba, más de una mecha y más de un personaje por nivel era viable, pero hacer que las mechas se cruzasen o se solaparan me rompía los esquemas mentales. ¿Por qué? Bueno, más adelante hago un resumen de como genero los niveles, si te gusta adentrarte en la parte más técnica del desarrollo seguro que te interesa.

Durante este segundo día también definí la estética del juego. Siempre apuesto por estilos minimalistas, paletas de colores reconocibles y las ya mencionadas en otra edición de ChumasNews animaciones por código para que todo se sienta vivo. Esta vez, lo que me ayudó mucho a encontrar un estilo fue ponerme a buscar paletas de colores en la web de Lospec (página imprescindible si quieres hacer pixel art).

Ahí me topé con esta paleta: Clément 8. Sus colores me inspiraron a hacer algo con formas simples y jugar únicamente con la silueta de los elementos del juego, añadiendo una sombra para crear más contraste entre ellos.

Esta decisión también me hizo cambiar la resolución base del juego, normalmente me gusta trabajar con una resolución base de 640×360px (como es el caso de PANIK), pero al usar sprites un poco más grandes amplié esa resolución a 960×540px.

Al final del segundo día, este era el estado del juego:

3. Screenshot del día 2

Aún no había nada de gameplay pero ya tenía montado mi sistema para generar los niveles, la estética general y algo muy importante: el nombre del juego. Como ya te habrás dado cuenta, me gusta que mis juegos tengan un tono desenfadado y suelo meter alguna pincelada de comedia siempre que puedo. Esta vez fue con la elección del título: OH NO! There is a bomb in my garden.

¿Cómo llamarías sino a un juego en el que debes desactivar una bomba que ha aparecido misteriosamente en tu jardín?

DÍA 3: A PROGRAMAR

El tercer día fue probablemente el más productivo de todos. El proyecto ya tenía la estructura definida pero aún no era un juego como tal. El personaje no se movía, la bomba no explotaba y, por supuesto, aún no podías completar ningún nivel.

Durante este día tuve que implementar, entre otras cosas, todos estos sistemas:

  • El movimiento del personaje

  • El comportamiento de la mecha

  • La mecánica de desactivar la mecha

  • El sistema de la cuenta atrás

  • El sistema de victoria/derrota

  • El sistema de reinicio de nivel

  • El flujo general del juego

4. Screenshot del día 3

Por suerte todo funcionó bastante rápido. Obviamente mi experiencia con PANIK hizo que algunos de estos sistemas se me hicieran muchísimo más fáciles de implementar.

¿Cómo es un nivel de mi juego por dentro? Cada nivel consta de casillas, personajes, bombas y mechas. Y todo se gestiona con un array de dos dimensiones para almacenar las casillas y sus respectivas variables.

5. Representación de un nivel

Todos los niveles usan una “cuadrícula” de casillas. La casilla de más arriba a la izquierda es la (0,0) siendo el primer dígito su índice de fila (posición en vertical) y el segundo dígito su índice de columna (posición en horizontal). Por ejemplo: la casilla (1,3) es la que está en la segunda fila, cuarta columna.

Cada casilla tiene una variable que define si esa casilla es sólida o es un agujero. Por ejemplo, la casilla (0,0) es un agujero pero la (1,1) es completamente sólida. Por lo tanto, los personajes solo pueden desplazarse a una casilla adyacente que sea sólida. Pero no solo eso, también hay que determinar si la casilla tiene ya un objeto o no.

Para ello cada casilla tiene otras dos variables que hacen referencia a si dicha casilla tiene un personaje (P) o una bomba (B) encima, respectivamente. En caso de que la casilla tenga alguno de estos dos elementos encima, pasa a estar ocupada. Por lo tanto, otra condición para que un personaje pueda moverse es que la casilla esté libre, sino los personajes acabarían atravesando la bomba o fusionándose en un mismo sitio y no queremos eso (al menos no en este juego).

El caso de las mechas (M) es diferente: Estas no impiden que un personaje pueda pasar. De hecho, el objetivo del juego es pisar la mecha y apagarla, por lo que es imprescindible que un personaje pueda estar en la misma casilla que una mecha a la vez. Además, las mechas también pueden pasar y “flotar” por las casillas que son un agujero, como es el caso en las casillas (0,3) y (3,0) en la imagen de ejemplo anterior.

Ahora bien, las mechas tienen un “camino” concreto (he dicho tantas veces la palabra "mecha” que ya me suena rara). Tienen una secuencia, solamente sabiendo en qué casillas hay una mecha no se puede definir qué trayectoria siguen. El siguiente ejemplo muestra 3 trayectorias diferentes usando las mismas casillas.

6. Mismas casillas, diferente trayectoria

Es por eso que las mechas son un poco más complejas: Cada una está formada por diferentes “secciones” y cada sección ocupa una casilla. A la vez, cada sección también tiene una variable que define su trayectoria. Las mechas no se cruzan y no se solapan ya que una casilla solo puede tener una sección adjudicada.

Para generar la mecha con su trayectoria primero se escoge una de las 4 casillas que ocupa la bomba como el origen de la mecha. Y a partir de ahí, se sigue una secuencia. En esta secuencia 0 es derecha, 1 es arriba, 2 es izquierda y 3 es abajo.

Como puedes ver en el siguiente ejemplo, la mecha se origina en la casilla (0,0) relativa a la bomba y sigue la secuencia “101123”.

7. Generación de la trayectoria de una mecha

La bomba puede tener hasta 4 mechas asociadas (una por cada casilla que ocupa la bomba) y el número que muestra la cuenta atrás es el equivalente a la mecha más corta. Si la mecha más corta tiene 3 secciones, la bomba muestra un 3. De esta manera, si la bomba llega a 0 es porque al menos una de las mechas ha llegado al final y la bomba se dispone a hacer lo suyo (¡boom!).

Por último, el comportamiento de las mechas funciona tal que así: Si el personaje se mueve, se consume la última sección de todas las mechas encendidas. Pero si un personaje ocupa la misma casilla que la mecha prendida, este puede apagarla.

8. Cuenta atrás de la bomba

DÍA 4: NIVELES

Con todos los sistemas funcionando correctamente, el cuarto día lo dediqué, principalmente, a hacer niveles y terminar de añadir algunas cosas aquí y allá.

No tuve muchísimo tiempo pero gracias al sistema para generar niveles que me monté, se me hizo ultra fácil probar cosas. Desde el primer momento, tal y como he comentado más arriba, preparé el juego para que pudiera haber más de un personaje, más de una bomba y más de una mecha.

Si quieres ir más allá y ver como es la estructura de un nivel directamente con el código, aquí tienes:

9. Código para generar un nivel

El código del nivel corresponde al de la imagen 5 y se puede ver como la estructura contiene las variables del título del nivel (esto al final no lo usé en el juego final y ningún nivel tiene título), tamaño de nivel (que define la cantidad de casillas a lo ancho y a lo alto) y una cadena de texto que define si esas casillas son sólidas o agujeros (0 = agujero, 1 = casilla sólida).

Después creo una nueva estructura para almacenar todos los elementos del nivel. Aquí se encuentra un array de personajes donde almaceno la posición de cada uno mediante dos variables que definen la fila y la columna. En este caso, un personaje se crea en la casilla (0,1) y otro en la casilla (1,0).

También hay un array para las bombas donde, de nuevo, defino su casilla de origen. Por último, dentro de cada bomba existen las diferentes mechas asociadas con su posición de origen y su secuencia, tal y como he explicado más arriba.

(Quizás soy el único friki al que le mola tanto esto pero con que una persona haya aprendido algo o le haya generado curiosidad yo estaré feliz y satisfecho jeje)

Ah, y creo que no te he contado otro de mis mayores secretos sobre diseño de niveles por aquí. Cuando se trata de juegos o niveles formados por casillas, ¿sabes cuál es, para mí, la herramienta por excelencia para crear y diseñar niveles? Exacto, Minecraft. Quizás suena raro o gracioso, pero te aseguro que funciona de lujo.

10. Diseñando niveles en Minecraft

Creas un mundo ultra plano, eliges una paleta de bloques y a diseñar. La gran variedad de ítems y elementos que tiene Minecraft hace que siempre encuentres una manera de simular lo que quieres. En mi caso usé los maniquíes como personajes y los raíles como mechas. Podría haber usado bloques de TNT para las bombas pero los pensamientos intrusivos me hubiesen llevado a la ruina así que prefería usar bloques no explosivos jeje

Este día también implementé la música. Como no podía ser de otra forma, el gran Arturo Melero volvió a colaborar con un tremendo temardo que le queda perfecto al juego. Es el mejor y punto.

DÍA 5: PULIR Y PUBLICAR

Para acabar, el último día me puse a pulir el juego y añadí una de las cosas más importantes: El efecto de explosión de la bomba. Cuando pierdes un nivel, la bomba explota y los personajes salen disparados por tu pantalla. Parece que no, pero este efecto sumó mucho. (Y también me llevó más tiempo implementarlo del que me hubiese gustado).

En cuanto a los sonidos, también intenté añadir varios pero no me convenció el resultado final así que los descarté todos excepto el sonido de explosión y el sonido de victoria.

Querría haber diseñado más niveles pero la cuenta atrás estaba llegando a su fin así que solamente me dio tiempo de implementar uno más.

También era momento de hacer la página de itchio y dejarlo todo bien bonito y presentable. Hice el logo, las capturas, redacté la descripción del juego, lo subí y lo probé entero.

Estaba muy contento con el resultado final. Es verdad que tuve la sensación de haberme quedado corto en cuanto a la cantidad o la dificultad de los niveles pero a futuro, la gente que lo ha ido probando, me ha dicho que está guay y que incluso algún nivel les ha llevado a tener que pararse un ratito a pensar.

Y tengo buenas noticias: Tú también puedes probarlo. ¡Se puede jugar gratis y sin descargar nada desde el navegador del PC!

Defuse the bomb before it's too late.
Don't let the bomb explode.
Every step counts.

RESULTADOS Y PRÓXIMAMENTE

Cuando terminó la jam, empezó el período de votaciones. La gente que ha participado podía jugar y valorar otros juegos, dar feedback y demás.

Los resultados salieron hace poco y estoy muy satisfecho. El juego ha quedado en la posición 260 de “Enjoyment”, (¡de un total de 10.594 juegos!). En el resto de categorías también está bastante bien todo.

La narrativa más allá del título no existe, la música de Arturo está increíble aunque yo me quedé corto con los SFX y no le hice justicia, el arte me gusta mucho y la idea en general me convenció hasta el punto en el que me planteo ampliar el juego con más mecánicas y niveles a futuro. Quizás este es mi próximo error juego…

¡Pero aún queda algo muy importante! Cada año, Mark (el organizador de la GMTK Game Jam), sube un vídeo recopilando sus juegos favoritos de la edición. Sería increíble poder aparecer en uno de sus vídeos y soñar es gratis.

TU TURNO

Esta edición ha sido un poquito más breve porque me he centrado en un único proyecto. Pero quiero saber tu opinión, ¿te gusta que explique tan a fondo el proceso de creación de un juego? Y de ese proceso, ¿qué te interesa más? Puede ser el momento de escoger la idea, decidir el arte, el diseño de sistemas, los niveles, el código…

¿Hay algo que cambiarías? En caso de no estar en el mundo del desarrollo, ¿se te hace fácil entender las cosas que explico? ¡Comparte lo que quieras conmigo!

¿Qué opinas de este formato?

¡Anímate a participar!

Muchas gracias por leerme, de corazón. Hasta el próximo mes,

Xavi :)

Reply

Avatar

or to participate

Keep Reading