Hora del código #12
Una introducción algo larga a este tema, salta a Ahora si lo que hice.
Un juego de computadora viejo que me gusta bastante es Doom. Para jugar en la época actual se puede hacer de 2 formas principales; correr el ejecutable original en D.O.S. o usar un source port. Los source port son unos programas compatible con el código fuente original y permite jugar a Doom y otros mapas/niveles que los fans han creado a lo largo de los más de 25 años de este genial juego.
Tengo mi vieja Acer R1600 y la he usado para correr emuladores de consolas viejas o como máquina de escribir. Como consume menos energía decidí usarla para jugar Doom, pero aprovechando que el procesador es de 64 bits pensé en mejor usar una distro (BionicPup64) del confiable Puppy Linux ya que el Windows XP (aún original) que trae es de 32 bits.
Luego de tener Puppy instalado en USB probé a correr GZDoom pero no se pudo porque el hardware no es compatible ni suficiente. Así que me conformé con LZDoom y funciona muy bien luego de configurarlo. Pero luego pensé, ¿qué otros source ports podré correr? Terminé instalando Chocolate Doom, Crispy Doom, el ZDoom normal y PrBoom+.
Luego de probar rápidamente los source ports pensé, necesito un lanzador para esto, en Windows uso ZDL y es genial. Busqué en Linux y encontré un par pero muy pesados y requerían Qt, pero diablos, esa librería es pesada.
Ahora si lo que hice
Así que decidí usar Python 3 y desempolvar los pocos conocimientos de la fea pero útil librería Tkinter para hacer un lanzador personalizado de un sólo script. Usé una clase extra que alguien más hizo, está indicado en el código, todo lo demás lo escribí a como me dieron las ganas. No está orientado a objetos, no pienso hacer algo grande o reusar el código o alguna de los otros beneficios que se pueden aprovechar con ese tipo de programación.
El código está dividido en 3 partes principales; (1) la clase de la que hablaba que permite manipular elementos en un listbox (cambiar el orden) y le agregué la opción para eliminar elementos, (2) las funciones que interactuan con la interfaz gráfica y el código que crea la interfaz gráfica en si.
Algo que me gusta bastante es que le puse la opción para que busque los source ports instalados actualmente en el sistema, utiliza el comando which de Linux y busca los programas especificados, de momento ésta lista está quemada en el código. También hay un botón para buscar otro source port que no está instalado o no detectado.
Cuando se pulsa el botón de Jugar se guarda un archivo temporal de configuración llamado doomppy.tmp (sino existe lo genera) que en formato json contiene los datos de iwad, pwad (y otros), source port seleccionados además de últimos directorios usados. También se pueden guardar o cargas configuracions personalizadas.
Pienso que el principal problema que daría en otros Linux es lo de los directorios principales por defecto que yo uso /root/doom
Un buen experimento, esto lo escribí en 3 sesiones durante 2 días. Con el paso del tiempo tendré que hacer modificaciones para agregar por ejemplo una caja de texto para seleccionar un nivel de un iwad en específico, una caja de texto para parámetros personalizados que se le quieran pasar al source port, etc.
De momento dejo el código acá en un zip, luego lo subiré a un repositorio. Ahora está en un repositorio donde publicaré el código más actualizado.
Actualización 2020-05-12: ahora con código orientado a objetos y posibilidad de cambiar de idioma..