Es posible encontrar archivos con extensión .SAN en juegos privativos comerciales de Lucas Arts (1982-2013). El motivo de este post es ver como funcionan estos archivos y como desde GNU/Linux es posible interpretarlos y convertirlos.
Veremos como extraer música del juego «The DIG», comprimirla, extraer los archivos de vídeo, visualizarlos, …
La historia de hoy es sobre como las empresas de desarrollo de videojuegos punteras siempre han experimentado para sacar sus juegos con formatos de animación, de audio, de vídeo, … privativos y customizados.
Y mientras las empresas invertían en soluciones privativas que luego vendían a otras empresas de desarrollo (o no). Mientras tanto el mundo del software libre estaba aprendiendo a liberar el conocimiento de esas tecnologías privativas.
Proyectos como SCUMMVM por ejemplo son crema. Hacen posible que hoy desde GNU/Linux y un montón de sistemas operativos sea posible disfrutar de juegos de hace décadas.
Lo grande de este formato, a 15 frames por segundo, es que su limitación estaba impuesta por un dispositivo: El reproductor del disco.
Pongamos de ejemplo el juego The Dig de Lucas Arts.
Viajamos en el tiempo. Del siglo XXI al siglo XX. Concretamente a 1995.
Una idea de juego (The Dig) basada en una idea de Steven Spielberg, el undécimo juego en utilizar el motor SCUMM.
El tema es que ese juego tiene una serie de archivos de los que vamos a hablar y vamos a ver un poco como es posible interpretarlos, extraer contenido, etc…
Lo primero es obtener el juego «The Dig». Se puede por ejemplo comprar en GoG.
Independientemente de si se adquiere en GoG o se usa el juego en CD se han de copiar los archivos a un directorio y veremos que tenemos al menos estos:
Siendo los archivos con extensión .BUN los que contienen la música y el audio. Y siendo los que están dentro del directorio VIDEO los archivos .SAN de los que vamos a comenzar hablando.
Lo que viene en formato SAN es vídeo. LucasArts Smush Animation Format (SAN) video.
Para comprobar que tipo de archivo es podemos comenzar usando el software «file». Es muy posible que lo tengas instalado en tu distro y muy probable que esté en los repositorios de la distro que usas.
Por ejemplo para ver el formato del archivo ALCOVE.SAN podemos hacerlo así:
$ file ALCOVE.SAN ALCOVE.SAN: LucasArts Smush Animation Format (SAN) video
Eso nos suelta. Nos dice el formato. Se basa «file» en los 4 primeros bytes. para comprobarlo se puede usar el software «dd» (que igualmente si no lo tienes instalado estará en los repos de la distro que usas).
$ dd skip=0 count=4 bs=1 status=none iflag=skip_bytes,count_bytes if=ALCOVE.SAN | hd 00000000 41 4e 49 4d |ANIM| 00000004
41 4e 49 4d == ANIM
Convirtiendo de hex a Dec nos da ANIM. En esos primeros 4 bytes se basa «file» para determinar que es un archivo «ANIM».
Podemos seguir con los siguientes 4 bytes (saltando los 4 primeros en los que hemos visto «ANIM») para ver el tamaño de todos los frames de vídeo.
$ dd skip=4 count=4 bs=1 status=none iflag=skip_bytes,count_bytes if=ALCOVE.SAN | hd 00000000 00 11 dd 02 |....| 00000004
00 11 dd 02 es igual a 1170690 en decimal.
Si miramos el tamaño del archivo utilizando el software «du» veremos que es de es 1170698 bytes.
$ du -b ALCOVE.SAN 1170698 ALCOVE.SAN
Efectivamente 8 bytes más que el valor que hemos obtenido antes. Los 8 bytes de la cabecera y del tamaño de todos los frames.
Gracias a esa información es posible conocer cuando comienza la mandanga.
Esas animaciones, esos vídeos son secuencias de frames que están almacenados en estos contenedores. El coder y decoder se encargan de darles vida. Los archivos como tal solamente contienen pues los frames.
Lo importante es que la forma de reproducir estos vídeos siempre tenía cierto delay cuando estaban en el cdrom. El tiempo por ejemplo de comenzar la animación era importante pero una vez comienza a reproducir va solicitando los frames y mostrando la animación/vídeo.
Tenemos que tener en cuenta la velocidad de los reproductores de cdrom que podía ser variable. Esto necesita por cada segundo 15 frames y esos frames no son gigantes en cuanto a alto y ancho.
Es posible reproducirlos actualmente con mpv, mplayer, etc…
Veamos ahora un poco sobre los archivos que contienen la música y las voces del juego. Esos archivos son: DIGMUSIC.BUN y DIGVOICE.BUN.
Gracias a las scummvm-tools es posible recomprimir el audio (tanto de la música como de las voces) y obtener archivos mucho menores. Aunque para jugar al juego se tendrá que usar SCUMMVM (que sinceramente es lo adecuado al día de hoy en muchos de esos juegos y concretamente de el juego «The Dig»).
El tamaño original es:
DIGMUSIC.BUN – 261,6 Mb
DIGVOICE.BUN – 130,1 Mb
Comprimido en Ogg nos quedará en:
DIGMUSIC.BUN – 46,6 Mb
DIGVOICE.BUN – 70,2 Mb
La forma de hacerlo es usando las scummvm-tools (por ejemplo instalando las de repositorio o compilando). Para compilar se puede usar esta receta en Debian:
# apt install libwxgtk3.0-dev $ wget https://www.scummvm.org/frs/scummvm-tools/2.0.0/scummvm-tools-2.0.0.zip $ unzip scummvm-tools-2.0.0.zip $ cd scummvm-tools-2.0.0/ $ ./configure $ make # make install
Y en este caso para comprimir ambos archivos y generar unos nuevos archivos .BUN comprimidos (con todos los audios comprimidos en ogg) se puede hacer por ejemplo así:
$ scummvm-tools-cli --tool compress_scumm_bun --vorbis -o . /rutadeloriginal/DIGMUSIC.BUN $ scummvm-tools-cli --tool compress_scumm_bun --vorbis -o . /rutadeloriginal/DIGVOICE.BUN
De esta forma obtenemos archivos BUN menores en tamaño pero que podrán ser utilizados si se usa SCUMMVM para ejecutar el juego e interpretarlo.
Pero lo mismo nos mola extraer el contenido a archivos wav por ejemplo para luego ya comprimirlos si queremos o reutilizar ese audio para algo.
Existe un software llamado digmusic que es complejo de conseguir. Teóricamente está aquí: spectrum.sitesled.com/music/digmusic_new.zip
Pero si visitamos esa url no existe al día de hoy. Nos da el nombre del archivo y si lo buscamos podemos encontrarlo en: www.geocities.ws/c3p1models/dig/index.html
Para que quede en algún sitio más como mirror lo dejo aquí: digmusic_new.zip
Contiene el código y es software libre. El tema para ejecutarlo sin fallo es copiar los archivos BUN al directorio en el que está el exe y usar wine para ejecutarlo.
$ wine digmusic.exe DIGMUSIC.BUN
Tardará un ratillo y ya tendríamos que tener todas las pistas del juego en WAV:
Y mucho más se puede hablar sobre esto. Tampoco es la finalidad de hacer esto en un solo post.
Saludos cordiales.