lunes, diciembre 01, 2014

Sistema de diálogos, otra vez

Una de las mecánicas RPG que siempre me ha intrigado es el sistema de diálogos; mi primera experiencia fue con Fallout 2, un clásico del género. Era sorprendente cómo las opciones variaban en dependencia de los objetos, atributos o habilidades que tenías. Desde entonces he perseguido la implementación de mi propio sistema de diálogos, igual de flexible, es una de esas tareas en la programación de videojuegos que aún tengo pendiente.
A pesar de haber logrado hacer uno bastante flexible, no era en lo absoluto fácil. Si recuerdan lo que publiqué aquí hace años, solo era un larguísimo script en Lua, con una longaniza de condiciones if/then/else que por supuesto, no se prestaba a automatizar su edición con una herramienta específica. A pesar de que he preguntado en múltiples foros y ocasiones, nunca he conseguido una respuesta lo suficientemente detallada como para facilitarme la tarea.
El viernes inicié por enésima vez el trabajo de diseño; lo complicado (para mí) es lograr una representación de ese un árbol enorme, donde las ramas son visible o no en dependencia de atributos/habilidades/objetos, que permita su fácil edición a través de una herramienta específica, escondiendo al escritor la complejidad del XML subyacente. Aunque logré avanzar un poco, no he ido mucho más lejos que antes. En esencia, lo que he conseguido es una estructura donde las líneas del NPC y las respuestas del jugador están en elementos separados. Las líneas apuntan a sus posibles respuestas, que a su vez apuntan a la siguiente línea del diálogo. Cada línea o respuesta puede estar condicionada a un "check", lo ideal es que pudiesen ser varios, pero no me pidan más de momento.
Suena fácil, pero durante el trabajo de diseño voy tropezando con nuevos detalles de los que no me había percatado. La herramienta en sí tampoco es trivial, tendré que meterme de lleno en Qt para implementarla y supongo que tomará lo suyo. Pero bueno, nadie dijo que programar juegos fuera fácil.

No hay comentarios:

Publicar un comentario en la entrada