Durante el fin de semana del 21 al 24 de Abril se ha celebrado la Ludum Dare 38. Para quien no sepa que es la Ludum Dare, es la gamejam no presencial más importante del mundo y que se realiza tres veces al año, en Abril, Agosto y Diciembre. La Ludum Dare tiene dos posibilidades de participación: la jam y la compo.

La jam tiene un reglamento bastante clásico: Un equipo de personas, utilizando cualquier asset para los que tenga permiso de utilización, realiza un juego durante 72 horas. La compo es mucho más estricta: Es una competición individual, sólo se dispone de 48 horas y todos los assets tienen que haber sido realizados por esa persona y dentro de ese plazo.

Podéis ver mi participación en la compo de Diciembre de 2016 siguiendo este enlace.

Durante esta edición el tema seleccionado era «A Small World» (un pequeño mundo) e intenté participar para la compo. Lamentablemente, no logré terminar dentro del plazo, pero aprendí mucho durante la experiencia. Este pequeño post-mortem narra el proceso que seguí durante el fin de semana.

Sábado 7:00 AM – Brainstorming

Dado que el tema se anunciaba a las 3 de la mañana de España, preferí levantarme temprano en lugar de apurar la noche. Una vez visto el tema y preparado abundante café, pasé a iniciar el brainstorming.

Mi proceso siempre es el mismo: utilizo una libreta A4 y procuro empezar siempre en una página que ya esté sucia. Es un truco que utilizo para evitar el bloqueo de la hoja en blanco. Un papel ya ensuciado con otras palabras, dibujos, etc… es menos intimidatorio y facilita el jugar e improvisar con términos y esquemas.

Comienzo por vomitar sobre ese papel todos los conceptos que me inspira el tema sin censurar ninguno, por absurdo que parezca a priori. Si en algún momento tengo un parón, trato de encontrar nuevas inspiraciones búscando el término (o términos relacionados) en Google o Pinterest, sobre todo imágenes o vídeos. Para mi lo más importante es llenar al menos la mitad de la hoja sólo con términos sueltos o frases muy cortas. Entonces comienzo un proceso de combinación entre ellos para crear frases más largas o conceptos compuestos que me inspiren mecánicas o dinámicas de juego.

En este caso las primeras ideas iban relacionadas con pequeños planetas o con mundos microscópicos (microorganismos) y estaba completamente convencido de que una gran mayoría de participantes irían por ese camino, así que comencé el descarte por eliminar todos los conceptos relacionados con eso. Esto dejó el cuaderno bastante pobre de ideas así que pasé a otro truco: Salir a despejarme.

Pensar mientras se pasea ayuda a ver las ideas con otra perspectiva y estimular el pensamiento lateral y generar nuevas asociaciones. Pasar por zonas con gente, escuchar conversaciones a medias, estimular los sentidos con sonidos y colores distintos… son grandes generadores de conceptos. Cuando volví a casa había empezado a tirar de un hilo que acabó cristalizando en un concepto.

Sábado 11:00 AM – El concepto

Sí, cuatro horas me llevó alcanzar una idea que me pareciese novedosa y realizable.

No sólo era importante que fuese una idea novedosa, también era muy importante que estuviese acorde a mis habilidades. La compo es muy exigente, absolutamente todo tenía que hacerlo yo sin poder recurrir a assets gratuitos, por lo tanto tenía que estar seguro de que podría realizarlo todo por mí mismo antes de volcarme en una idea.

En esta caso me inspiré en el final de La Historia Interminable, cuando la Emperatriz Infantil le dice a Bastian que aunque su reino ha sido destruído por La Nada y sólo un grano de arena había sobrevivido, él podría hacerlo crecer de nuevo con sus deseos.

El juego iba a ser un campo de experimentación, en el que el jugador podría introducir palabras y esas palabras darían origen a regiones enteras, praderas, rios, montañas, bosques e incluso pueblos que habitasen esas regiones. El jugador podría observar como el mundo crece con sus deseos y visitar a vista de pájaro el territorio creado.

Diseñé un generador de nombres relativamente sencillo pero ampliable, que cogiese los términos que el jugador introducía y los descompusiese en caracteres, que luego combinaría con una serie de reglas y a los que se les añadiría prefijos y sufijos para generar nombres complejos. Para la generación de territorios vi posibilidades utilizando matrices de hexágonos (como en los wargames), que dependiendo del tipo de región creado por el jugador instanciaría un número determinado de ellos del tipo adecuado (verdes para bosques, azules para rios, etc…). No habría personaje y la cámara sólo necesitaría funciones sencillas como mostrar el nombre de la región sobre la que estuviese el ratón y moverse al último hexágono clickado. No habría un «final» ni una «condición de victoria», sólo una campo de experimentos, un sandbox para que el jugador fuese viendo como el mundo crece y como los nombres se iban volviendo más complejos conforme el sistema aprendiese más y más términos del jugador.

Ciertamente, cuando dejé la mente volar pensé en lo bonito que sería que la mecánica se activase por voz usando el micrófono y extraer los datos de la onda para generar los territorios, pero mis capacidades no llegaban a tanto.

El Generador de Nombres

Una vez leída la documentación sobre como trabaja Unity con las cadenas de texto empecé a trabajar en el generador de nombres, dado que de él derivaría el generador de terrenos (Si se creaba «El Bosque de … «, el terreno usaría los prefabs de bosque, por ejemplo).

  1. El jugador introduce un término en un Input Field.
  2. El término se almacena en una lista de términos.
  3. El generador recorre la lista de términos y extrae algunos caracteres, creando una nueva palabra que almacena en otra lista.
  4. El generador comprueba cuántos términos se han introducido y si hay pocos aún saca los términos de un diccionario prefijado. En caso de que haya bastantes, se salta el diccionario prefijado.
  5. Se genera una serie de números aleatorios: Uno para el tipo de terreno de una lista precreada, otro para una lista de prefijos, otro para una lista de sufijos y otro para la lista de términos intermedios extraídos de la lista creada con los términos introducidos por el jugador.
  6. Con esos números se extraen los términos que compondrán la frase final.

Ésta era más o menos la teoría inicial y la que casi se quedó terminada. El principal problema encontrado era crear unas reglas que generaran términos atractivos. Siempre he sido un gran aficionado a los lenguajes construídos e incluso he creado algunos en otro tiempo, así que recordaba lo suficiente para crear unas reglas sencillas.

Más o menos quedó un generador que creaba terminos complejos y un sistema intermedio que hacía que de vez en cuando se creasen nombres más épicos como «Bosque de la Soledad» o «Llanuras de la Calma» como una manera de crear puntos emblemáticos dentro de un mapa más aleatorio generado por el jugador.

El generador de terrenos

Aquí llegó el obstaculo principal y el que me hizo abandonar finalmente el proyecto. La idea básica era la siguiente:

  1. Un vez el generador de nombres decide en un tipo de territorio para ser creado, y llama a una función del generador de terrenos pasándole el tipo.
  2. Cada función crea dos números aleatorios, ancho y alto de la matriz de hexágonos que se generarían para ese terreno. Cada terreno tenía unos límites mínimos y máximos para que no hubiese cadenas montañosas gigantéscas y mares de un sólo hexágono.
  3. El generador instancia los hexágonos prefab correspondientes en el mundo a continuación de los últimos creados.
  4. Los hexágonos generados son nombrados según la región a la que pertenecen para poder pasar ese nombre posteriormente al sistema de cámara.

Más fácil de decir que de hacer. Los únicos algoritmos que encontraba para instanciar los prefab hacían que todos los hexágonos se generasen desde el origen de coordenadas (0, 0, 0), lo que significaba que todas las regiones se instanciaban en el mismo sitio. Y al intentar modificar el código para arreglarlo cada vez se rompía más.

El problema estuvo en el diseño. Siempre digo que las gamejam no son el momento de aprender cosas nuevas sino aprender maneras nuevas de combinar cosas que ya sabes para hacer cosas novedosas. Puedes aprender a hacer algo nuevo para ampliar en lo que estás trabajando siempre que sea simple y conozcas más o menos lo básico. Intentar aprender un sistema completamente nuevo va a ser prácticamente imposible y encima retrasará el trabajo de todo lo demás.

La cámara

Esto era muy sencillo y no llevó demasiado tiempo.

  1. Si el ratón pasaba por encima de un hexágono, almacenaba el nombre del mismo.
  2. El nombre se mostraba en un apartado de la interfaz.
  3. Si el jugador clickaba sobre un hexágono, la cámara se movía hasta la posición central del mismo pero a cierta altura para mantener fija la perspectiva.

Si hubiera habido tiempo una de las opciones para ampliar un poco la experiencia del jugador era crear los hexágonos con relieves distintos dependiendo del tipo de terreno. De esta manera las montañas serían altas y picudas, los bosques tendrían pequeños árboles adosados en la cara superior, la arena tendría dunas… El mundo tendría un relieve y modificando la cámara para poder ver el mapa en ángulo y moverse con los cursores el mundo podría ser visitado realmente a vista de pájaro.

Opiniones finales

Durante una gamejam en la que el tiempo es tan limitado, es muy importante adaptar el diseño a las habilidades de los participantes si se quiere terminar dentro del plazo. En este caso, creí que sabría hacer todo lo que estaba dentro del diseño, pero nunca había trabajado la creación de mapas complejos. Si me hubiera informado un poco (como luego hice preguntándole a amigos programadores) el tema de la generación de terrenos es bastante más complejo de lo que yo suponía en un principio, saberlo me hubiera hecho descartar la idea y centrarme en algo más realizable con mis habilidades

Para esta gamejam volví a usar las herramientas con las que estoy más habituado y eso me ha funcionado bien. Hacknplan sigue siendo para mí la mejor manera de organizarme en mis proyectos y ya casi no se trabajar sin él. Mi manejo de Unity sigue mejorando y poco a poco me siento más cómodo haciendo escenas complejas.

Mi Talón de Aquiles sigue estando en la programación y es algo a lo que quiero dedicarme más durante las siguientes semanas.

No descarto trabajar un poco más sobre este concepto en el futuro, pero teniendo tantos frentes abiertos ahora mismo no puedo asegurarlo. Si pudiese trabajar la parte de usar el micrófono si me gustaría orientarlo a un juego educativo para niños, que creo que podría dar un buen resultado.

Lo más importante de un proyecto fracasado es analizar adecuadamente por qué ha fracasado para aprender de ello, y es lo que he intentado con este post.

Ahora a centrarme en los proyectos abiertos y aprender más para que la próxima gamejam tenga un mejor final que ésta.