Godot, sonido y control en un shell de Guix contenido
Godot Engine es una herramienta para desarrollar juegos 2D y 3D y software multimedia en general. GNU Guix es una herramienta de administración de paquetes de software y de entornos reproducibles de software. Esta entrada muestra una forma de obtener sonido y control en un entorno de software aislado creado con Guix.
Para el ejemplo uso la distribución binaria del juego Radiata, un juego propio, no publicado, de pantalla única, sencillo pero completo, con animación, sonido y compatible con control de juegos. El juego está basado en Dodge the Creeps!, el juego del tutorial de Godot. La estructura de archivos del juego exportado se ve como sigue:
radiata/ ├── index.org ← Archivo de instrucciones. ├── manifest.scm ← Manifiesto de Guix. ├── radiata.sh ← Ejecutable generado por Godot (no interesa) └── radiata.x86_64 ← Archivo binario del juego
El manifiesto de Guix declara los paquetes de software (u otros artefactos) que deben estar disponibles en el entorno de ejecución del juego para que pueda funcionar normalmente. Contiene lo siguiente:
#| GNU Guix · Manifiesto Este archivo es un manifiesto de GNU Guix. Puede usarse para crear diferentes tipos de entornos de software que proveen el software y artefactos listados a continuación. |# (use-modules (gnu packages)) (define %requisitos-cdv #| CDV es una abreviatura de «Calidad de Vida». Estos paquetes proporcionan herramientas que facilitan el trabajo dentro de entornos aislados de software, que no heredan las herramientas básicas del entorno superior. |# (list "bash" "coreutils")) (define %requisitos-godot (list "alsa-lib" "dbus" "eudev" "fontconfig" "libx11" "libxcursor" "libxkbcommon" "libxext" "libxinerama" "libxrandr" "libxi" "mesa" "pulseaudio")) (specifications->manifest (append %requisitos-cdv %requisitos-godot))
Para lanzar el juego, se dan las siguientes órdenes en un terminal. Este procedimiento asume un entorno X11. El juego se inicia en un contenedor que emula el sistema de archivos FHS:
- Cree un directorio independiente para guardar los datos de la
sesión de juego:
$ mkdir /tmp/radiata
- Ubíquese dentro del directorio del juego:
$ cd ruta/a/la/carpeta/radiata
- Active un entorno aislado en el que iniciar el juego:
$ HOME=/tmp/radiata \ guix shell --container --emulate-fhs \ --manifest=manifest.scm \ --preserve="^DISPLAY$" \ --preserve="^XAUTHORITY$" \ --preserve="^XDG_RUNTIME_DIR$" \ --preserve="^HOME$" \ --expose="$XAUTHORITY" \ --expose=/tmp/.X11-unix/ \ --expose=/dev/dri \ --expose=/dev/input \ --expose=$XDG_RUNTIME_DIR/pulse
- Inicie el juego:
$ ./radiata.x86_64
En este punto, se abre la ventana del juego y se puede interactuar normalmente con él. Al terminar de jugar y cerrar la ventana, se puede desactivar el entorno pulsando las teclas Ctrl+D
o cerrando el terminal.
Temas relacionados: