En muchísimos juegos, salvo en aquellos con un enfoque centrado exclusivamente en las mecánicas, la narrativa es un componente fundamental. Para transmitirla al jugador existen múltiples posibilidades, algunas de ellas exclusivas del medio y otras compartidas con otros como la literatura o el cine. El diálogo es una de ellas.

Una de las implementaciones más frecuentes que se puede encontrar es la basada en árboles (o grafos) de conversación. A partir de un nodo inicial se van presentando diversas opciones al jugador, que elegiría una. Su elección a su vez desencadenaría una respuesta por parte de un NPC (o, en juegos como el Divinity: Original Sin con otro jugador), que puede limitarse a continuar o terminar la conversación, o bien generar algún tipo de cambio en el estado del mundo (obtener información, por supuesto; cambios en la afinidad de un NPC hacia el jugador, obtener/perder items, completar/desbloquear misiones, etc).

En otros ejemplos más complejos el jugador tiene mayor flexibilidad a la hora de interactuar, pudiendo formar preguntas a base de combinar bloques para formar oraciones simples (Por ejemplo, “¿Quién es…[PERSONAJE]?”) y otros juegos llegan a utilizar intérpretes de lenguaje natural para interactuar directamente con NPCs. Un ejemplo reciente de esto último lo podemos ver en Event[0] (Por si tenéis curiosidad, su desarrollador dio una charla sobre cómo incorporar chatbots a un juego).

Para el segundo reto de código las programadoras de la comunidad de FemDevs escogieron como tema investigar la arquitectura que hay detrás de un sistema de diálogos. Como meta había que implementar la lógica de uno de ellos en una demo que permitiera mostrar una conversación y dar al jugador la posibilidad de interactuar.

Por simplicidad, diálogo hablado, localización y formatos elaborados de control o interfaz de usuario (por ejemplo, las ruedas de diálogo del Mass Effect) quedaban fuera del ámbito del reto.

Orientation Dude

@onineit (Linkedin de OniNeit)

https://github.com/OniOrge/OrientationDude

Resumen: Por mi trabajo me fue imposible participar en el reto de FemDevs anterior, así que, para este intenté buscar un poquito de tiempo para hacer algo sencillo, como lo que muestro en esta pequeña aplicación web.
Usé lo que creo que es mi fuerte: HTML5 y CSS3. Para la programación me apoyé en JavaScript, pensé en hacer algo sencillo, ya que nunca había creado un script de cero, no quería arriesgarme a hacer algo muy complicado.
Además de toda la programación, todas las frases que aparecen son verídicas, algunas modificadas para que pudieran ser coherentes, gracias a toda la gente que participó (muchísimas gracias por ayudarme con el proyecto a tod@s) pude crear un array bastante extenso (y eso que no incluí unas cuantas).
Me hubiese gustado programarlo con algo más de arte, usando a dos personajes en el que uno pregunta y el otro responde a través de los botones, puede que algún día, cuando aprenda a dibujar… Además, me gustaría incluir otro menú para escoger el sexo de la persona que pregunta, para poder realizar el script de forma más concreta para cada caso. Espero que la disfrutéis probándola como yo lo he hecho programándola.

Tecnología: HTML5/CSS3/JS

FemDevs – Sistema Diálogo

@monica_teamTM (Perfil en Bitbucket)

http://apps.tecnomakers.net/femdevs-monica-team/public_html/

Resumen: En sí las 2 semanas que había de tiempo, no logre aprovechar todo el tiempo deseado, entre el trabajo y peticiones de los clientes de donde trabajo, no pude aprovechar al máximo mi tiempo libre, por lo que me dedique a hacer una funcionalidad básica de abrir/modificar diálogos, y los botones que conectasen con diálogos o que se cerrasen.
La base visual está hecha con bootstrap para el tema css y usando jquery. Cuando se accede al diálogo si este tiene botones, se cargan y se muestra el texto para el usuario, dependiendo de la respuesta (boton), se realiza una acción u otra, como puede ser ir a otro diálogo para continuar con el texto o salir del mismo.
Y en el editor, se puede poner el texto del propio diálogo, y decidir si conectar o no a otro para que sea la continuación, si hubiese tenido algo más de tiempo libre me hubiese gustado poner una imagen en sí, de la persona que está hablando cómo se realiza en algunos juegos y aplicar un diseño que no solo sea en la parte inferior del diálogo, como que esté centrado o los botones en vertical donde el texto.
Todas las llamadas al núcleo de la app siempre devuelve un JSON que se utiliza para agilizar el código html cuando se actualiza, y se utiliza un patrón MVC, para poder permitir que un futuro si se hacen más cosas, sea muy fácil realizar las modificaciones pertinentes.

Tecnología: HTML/CSS/JS + PHP + MySQL

DialogSystem

@laureus (Github)

https://github.com/LauraLaureus/DialogSystem

Resumen: Tras entrar a trabajar en Rising Pixel no he parado de aprender funcionalidades tanto de unity como de WinForms, este sistema de diálogos me ha servido como ejercicio donde aplicar los nuevos conocimientos en Scriptable Objects para el almacenamiento  de los datos de diálogo, extensiones de Unity Editor para permitir la edición de los datos dentro de Unity sin necesidad de herramientas externas todo visualizado en Unity con un único componente lo más parecido a los user controls de WinForms o WPF.
De esta forma el sistema de diálogo queda desarrollado de una manera estructurada, sostenible en el tiempo y con la menor cantidad de código posible lo que permite su extensibilidad y reutilización en futuros proyectos de forma fácil y sencilla.

Tecnología: Unity/C#

Sistema de diálogos con Ink

@NarilGVB (Linkedin)

https://github.com/NarilGVB/InkDialogeSystem

Resumen: Hace poco conocí Ink de Inkle, un lenguaje de programación dirigido a la creación de sistemas de diálogos con múltiples elecciones. Lo tenía apuntado en mi lista de tareas de cosas que aprender y al salir este tema como FemCode dije esta es la mía. No he tenido mucho tiempo porque tengo mi propio equipo de desarrollo y a veces una no le da la vida para todo.

La programación en Ink ha sido muy entretenida, siguiendo poco a poco la guía que tienen en Github no ha sido difícil tener un conocimiento decente del lenguaje ya que está pensado para guionistas y no para programadores. Este lenguaje se encarga de llevar las ramas y bifurcaciones de la historia, poner variables y alterar el texto según estas, checkear si ya has pasado por ciertos nodos de la historia, etc. Incluso se pueden llegar a crear funciones con parámetros.

Lo más complicado ha sido la integración a Unity. Las librerías se pueden descargar en la misma Asset Store y te vienen con una escena de ejemplo. Sin embargo lo que se mostraba distaba mucho de lo que yo buscaba como sistema de diálogos. Quería algo más parecido a una aventura gráfica y debido a la escasa documentación y tutoriales de como integrar la historia con Unity, tuve que hacerlo reutilizando el código de muestra y echándole creatividad.

Al final estoy bastante contenta con el resultado: un botón de continuar para leer parrafo a parrafo el texto y cuatro botones fijos que se habilitan cuando hay opciones. Me quedado fascinada con la potencia de Ink y estoy deseosa de ampliar el programita y que pueda detectar qué personaje está hablando en cada momento para poner una pestañita con su nombre.

Tecnología: Unity/C# – Ink

Post-mortem del reto

En primer lugar, y en el lado positivo, es muy de agradecer la entrada de nuevas participantes. Además de estas cuatro entradas algunas más empezaron el reto.

Con todo, si bien a priori el tema despertó bastante interés en un primer momento, habiendo ganado claramente la votación de tema, durante las dos semanas del reto ese interés no llegó a cuajar en la práctica.  Una posible razón radicaría en las dos semanas de margen entre la elección del tema y el comienzo del reto. En ese tiempo el power-up de motivación inicial fue yendo a menos.

Otra posible causa que han apuntado algunas compañeras se debería a que se echa en falta una participación más frecuente en la comunidad de programación, lo cual repercute a la hora de poner conocimientos en común en general, y en el reto en particular. Debido a esto no se fomentó la implicación demasiado, y en esto último la que suscribe estas líneas debe entonar en parte el mea culpa. Compromisos de trabajo y personales me fueron comiendo tiempo tanto para desarrollar mi demo (había empezado a montar un esqueleto con SDL2 y un modelo de datos para implementar un sistema basado en árboles y más adelante otros, pero se me quedó a medias) como especialmente para motivar y “dar la chapa”.

En cualquier caso, seguiremos buscando ideas y otros formatos para seguir dándole al coco.


0 commentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *