sábado, 30 de mayo de 2026

Sobre el script para Doom 3

Estoy tendiendo problemas con el script multiusos para instalar y lanzar Doom 3: lo infravaloré, lo estructuré como un launcher básico, ha ido creciendo y ahora es absolutamente inmanejable. Pensaba haberlo terminado en un par de semanas, han pasado varios meses y cada vez avanza más y más despacio.

Esta entrada es más una anécdota recurrente, un toque de experiencia real, que una explicación técnica de nada.

 

El launcher empezó siendo un script que movía los archivos del pack de texturas HD a las carpetas correspondientes de Dhewm3, luego lanzaba éste y, al terminar, las volvía a cambiar de sitio. Así, al lanzar directamente Dhewm3 tenía Doom3 "estándar", y al ejecutar el launcher tenía el pack de texturas activo. Así de sencillo, apenas 3 líneas y fin.

Luego llegaron las comprobaciones: ¿Qué pasa si el script no encuentra el pack de texturas en la carpeta correcta? ¿Existe el ejecutable de Dhewm3? ¿Están los archivos base?

Más tarde, empezó la parte "interactiva": Establecer la carpeta "base" (lo típico: valor por defecto en una variable interna, establecerlo por parámetros, preguntar al usuario...),  buscar la ruta a otros archivos, seleccionar la campaña a jugar y el mod a utilizar y cosas así. Todo esto multiplicó la cantidad de comprobaciones necesarias.

 

Luego, almacenar de alguna manera las elecciones hechas para no volver a preguntar todo cada vez que uno quiera jugar un rato. Utiliza un pequeño archivo .conf que crea en ~/.config/dewm3 y contiene algunas variables: la ruta de instalación de Dhewm3, la última campaña jugada y cosas así. Otro modo de entrada de variables, más comprobaciones, flujo más complejo...

Esto además fue necesario para implementar una de mis funciones favoritas: el script recuerda qué campaña y mod se usó la última vez, así que no le cuesta nada encontrar la última partida guardada y cargarla con un solo click, saltándose la intro, el menú y los tiempos de carga intermedios. Esto se llevó unas cuantas comprobaciones más y un código aún más enrevesado.

Luego, la instalación: Detectar qué hay, copiar o descargar desde distintas fuentes todos los archivos necesarios, parchearlos, atender a excepciones, descomprimir, etc... Con su propia carga también de comprobaciones.

 

A todo esto, lo que empezó siendo un script secuencial (primero haz esto, luego aquello, luego esto otro y fin), tuvo que ser convertido en una colección de funciones que se invocan unas a otras. Este tipo de conversiones en plena marcha no suelen dar buen resultado.

 

Ahora mismo, "funciona" todo menos algunas partes del instalador. Todo funciona en modo gráfico, con Zenity: avisos, diálogos, navegación de archivos y carpetas, barritas de progreso...

Sin embargo, hay muchos comportamientos extraños: no detectar unos archivos que se acaban de instalar, menús que se comportan de forma extraña, funciones que son invocadas antes de haber sido cargadas (P.E.: Error en la línea 300 de que no existe una función, que está escrita en la línea 500) y la imposibilidad casi absoluta de entender qué hace una variable sin recorrer todo el script arriba y abajo varias veces.

He conseguido código espagueti sin un solo "goto". XD

  

Total, que tengo que plantearme empezar de cero. Llevo demasiado tiempo intentando entender mi propio monstruo esperando dejar, al menos, algo funcional, pero cada vez es más difícil. Un buen esquema, ideas claras y ordenadas, qué tiene que hacerse cuándo y en qué orden... y a partir de ahí sí podré reciclar muchas de las funciones que tengo escritas.

No hay comentarios: