Proyecto de fin de semana: Mudder, interfaz gráfica para Lyntin

A veces, cuando tengo mucho tiempo programando cosas para un solo proyecto, me empiezo a fastidiar un poco de leer código sobre lo mismo. Normalmente cuando algo así ocurre, suelo ver un episodio de alguna de mis series favoritas, programar algo más, o a veces simplemente hago algo que no tenga nada qué ver con mis actividades recurrentes. Sí, es algo raro. Esta vez, he descubierto un cliente para jugar muds (multi user domain), que está escrito completamente en Python. Su nombre es Lyntin, y está liberado bajo una licencia de código abierto (GPL, para ser más exacto). He explorado, en líneas generales, el programa por un fin de semana, y creo que tiene muchísimo potencial.

No es un proyecto actualmente activo (su última versión publicada data del 2007 o algo así), pero lleva soporte para casi todo lo que he visto en otros clientes (triggers, variables, alias, substituciones, eventos generados por el usuario, programación de comandos y más), es bastante extensible (básicamente todo se encapsula en módulos, y los mismos usuarios podrían extender el cliente al escribir más módulos, interfaces de usuario, soporte para otros protocolos, etc.); además que todo el código fuente está perfectamente documentado. Todo incluye comentarios y documentación de funciones para indicar por qué se ha hecho el código de esa manera. Quizá es el proyecto mejor documentado que he visto en mi vida.

Lyntin tiene un par de interfaces gráficas. La primera está basada en curses (una interfaz de consola, fue la primera que se escribió para el cliente), y otra que funciona con TKinter. La interfaz de TKinter, por supuesto, no es accesible.

Así que hace unas cuantas semanas, he creado un proyecto para extender Lyntin para mis propias necesidades. No suelo jugar muchos muds, pero me he querido iniciar desde hace algo de tiempo ya, y esta es una muy buena excusa.

Ya que Lyntin cuenta con muchos módulos incluidos por defecto, y una API bastante bien diseñada y documentada, he podido escribir algunos módulos nuevos para extender el programa. He puesto el código fuente en GitHub, para que otros interesados en el proyecto puedan descargar el código, mejorarlo y generar versiones distribuibles por su cuenta.

Planes

No hay ninguna publicación disponible de este proyecto como ficheros distribuibles (Ficheros exe para Windows). Sin embargo, me gustaría crear una interfaz gráfica de usuario con muchas características que permitan a los usuarios conocer cómo funciona Lyntin y disfrutar de todo su potencial. Al momento de su creación, Lyntin tenía como objetivo ser usado por gente con experiencia en Python, programadores y usuarios avanzados de un ordenador. Yo creo que Lyntin puede ser usado por usuarios regulares también, especialmente si se puede hacer una interfaz gráfica que funcione bien, y pueda mostrar a la gente cómo usar Lyntin y qué es lo que puede hacer.

El nuevo proyecto se llama Mudder, y he tomado otro nombre, principalmente, para evitar la confusión. Lyntin es la librería y el marco de trabajo que se utiliza para jugar y conectar con servidores Mud, mientras que Mudder es una aplicación completa, incluyendo Lyntin, módulos adicionales, una nueva interfaz gráfica de usuario, módulo para actualizaciones, y espero que mucho más en el futuro.

Por el momento, el proyecto está alojado en Github y contiene algunos módulos adicionales, además de los que ya incluye Lyntin por defecto:

  • sound: soporta la reproducción de sonidos gracias a sound_lib. Incluye nuevos comandos como sound.play, sound.volume, sound.play_ambiance y sound.stop_ambiance. Todos los módulos incluyen su propio espacio de nombres en Lyntin (esto puede ser cambiado por el desarrollador del módulo), lo que permite saber qué funciones aporta cada módulo.
  • screenreader: este módulo no soporta comandos. Lo único que hará es leer con un lector de pantalla los datos enviados por el usuario y los enviados por el mud. Los datos enviados por el usuario es lo que el jugador envía al mud, y los datos enviados por el mud es el texto que puede leerse en el histórico del programa.
  • WxUI: Es una interfaz gráfica de usuario simple, escrita con WXPython project Phoenix. Por ahora, solo contiene dos cajas de texto. Una para enviar datos al mud, y otra que representa el histórico de mensajes, donde se coloca todo lo que el Mud envía. Pronto, este módulo recibirá nuevas funciones, como importar ficheros de configuración (más sobre esto en otro post), crear acciones / variables / alias / substituciones a través de diálogos en lugar de hacerlo mediante comandos, y más.

Por cierto, el proyecto puede construirse si tienes Py2exe instalado, y me encuentro trabajando en otras características que considero útiles (internacionalización, traducciones, documentación, packs de sonidos de ejemplo o ficheros de configuración de ejemplo, etc.). Si me conoces y juegas muds regularmente, podrías aportar las características que crees que el client podría tener en un futuro, añadiendo un comentario en esta publicación.

¡Hasta luego!