Simple Dialog Tool
Simple Dialog Tool(SDT) es una herramienta construida con la versión 3 del motor Godot que construí como complemento al videojuego narrativo que realicé para el proyecto final del grado superior de desarrollo. Dado que una de las principales carácteristicas de la demo de juego que presenté era la de tener diálogos y conversaciones, pronto me di cuenta de que era interesante también desarrollar una pequeña herramienta que facilitara la tarea dado que los archivos fuente de los diálogos estaban escritos en JSON y era muy fácil cometer errores a la par de que era tremendamente tedioso redactarlos en ese formato. Así se sumó el SDT al proyecto final y tuvo casi la misma importancia que el proof of concept que presenté.
La principal inspiración del SDT fue la herramienta Twine, el mismo principio de representar los diferentes nodos como una estructura tipo grafo se utilizó en el SDT. También me inspiré en Yarn Spinner, herramienta que se utilizó para dar soporte a los diálogos de Night in the woods, aunque este último utiliza una solución más basada en generar un bytecode a partir de un lenguaje DSL que sirve para estructurar los diálogos. El objetivo principal era construir una herramienta que abstrayera como se representaría a nivel de estructura de datos y que lógica se aplicaría a los diálogos de su representación gráfica en el juego, pudiendo reaprovechar la misma herramienta para diferentes juegos. SDT se diseñó usando el soporte para grafos que tiene Godot con los nodos GraphEdit y GraphNode. Estos nodos permiten, de manera ágil, construir grafos conectando diferentes nodos de manera gráfica. Originalmente según tengo entendido, se utilizaron en el motor para dar soporte a visual script, una forma de programar uniendo nodos con flechas similar a como se ha visto en otros sistemas como Scratch. Esto me permitió desarrollar de manera rápida un prototipo de como sería el árbol de diálogo y la UX de utilizar el editor que estaba escribiendo.
SDT permite construir diálogos simples y lineales uniendo nodos y añadiendo en cada uno la línea y que personaje la dice. Hay nodos más complejos que permiten decisiones, es decir que esperan input del jugador (que de nuevo está abstraido) y así posibilitar branching en el diálogo. Por último se añadió también que algunos nodos pudieran disparar callbacks para ejecutar lógica custom (por ejemplo activar algún efecto o cambiar el estado de juego) y reproducir música o efectos de sonido. Después de construir el diálogo, se podía exportar a formato JSON o a formato de HashMap apto para el lenguaje GDScript, listo para cargar en el juego. Por último, el editor también permitía guardar el grafo en el estado actual sin exportar para seguir trabajando después.
En conclusión fué un ejercicio interesante. A pesar de que no contaba con el tiempo y la experiencia necesarias para hacer un trabajo más depurado (tenía muchos bugs, no contemplaba localización y una UI bastante pobre) la idea que quise plasmar estaba ahí en su esencia y me descubrió las puertas del tooling un universo parejo al gamedev (y a la programación) que muchas veces resulta incluso más satisfactorio que el fin que persigue la herramienta en si. Es por eso que opino que aunque el gamedev cuenta con motores y herramientas potentísimas, vale la pena a veces pararse a construir algunas propios, tanto por el placer de hacerlo como por lo que que se puede aprender en el proceso.
Actualmente el SDT se encuentra archivado. No obstante tengo múltiples planes de volver a él, con una nueva iteración que quizás utilicé la aproximación de Yarn Spinner con un DSL, y que me gustaría utilizar para los juegos que haga que contengan diálogo.