Zandronum es uno de los tantos source ports que existen para Doom y Doom 2. Este nació en 2012 como un derivado de Skulltag cuando su desarrollador anunció el fin del proyecto además de liberar el código fuente de este, esto fue aprovechado por el grupo de desarrolladores que mantenían Skulltag para seguir con el desarrollo ya bajo otro nombre.
A diferencia de otros clientes como ZDaemon y Odamex, Zandronum se basa en ZDoom y GZDoom permitiendo compatibilidad con mods creados para aquellos source ports (por ejemplo el popular mod Brutal Doom) además de dotar otras características como un máximo de 64 jugadores, soporte para Heretic, Hexen y Strife, muchos modos de juego vía scripting, y mucho mas junto con mantener las características que hacían único a Skulltag.
Como estamos hablando de un juego del cual puedes jugarlo literalmente en un cajero automático es imposible no pensar que Zandronum no pueda correr en una Raspberry Pi. Y si, es posible, aunque los binarios para correr Zandronum en una Raspberry no están disponibles pero en esta guía te indicamos como compilar un servidor y hacer las configuraciones necesarias para dejarlo andando.
Ojo que esta guía está pensada para S.O. basados en Debian como Raspbian o DietPI, también esta guía apunta a quienes ya tienen experiencia en el manejo de Debian o en la Raspberry Pi pero está escrita para el que no tiene mucha idea de campo se aventure.
Descargar dependencias y crear usuario
Accedemos al sistema como usuario root o como un usuario con privilegios de sudo, primero actualizamos el sistema
apt-get update
Y a continuación descargamos las que necesitamos para compilar nuestro servidor
sudo apt-get install build-essential zlib1g-dev libsdl1.2-dev libjpeg-dev \
nasm tar libbz2-dev libgtk2.0-dev cmake mercurial libfluidsynth-dev libgl1-mesa-dev \
libssl-dev
Compilar y correr el servidor como usuario root no es una buena practica en sistemas UNIX así que vamos a crear un usuario dedicado a compilar y correr Zandronum. Aun como root ejecutamos el siguiente comando
sudo adduser zandronum
Le ingresamos una contraseña e ignoramos los demás campos presionando ENTER. Tras eso logueamos a la cuenta ya creada
su zandronum
y ahora nos movemos a nuestra carpeta personal en HOME que se creó junto al usuario, desde ahí empezaremos a montar nuestro servidor. Tecleamos la siguiente linea para ir aquello
cd /home/zandronum
Descargar y modificar el código fuente
Dentro de nuestra carpeta personal en HOME clonamos del repositorio oficial el código fuente de Zandronum en su ultima versión estable que es la 3.0, aquello nos creará una carpeta llamada Zandronum y copiará todo lo que hay en el repositorio
hg clone -r ZA_3.0 https://bitbucket.org/Torr_Samaho/zandronum
Nota: Si deseas compilar la ultima versión de pruebas de Zandronum, usa esta linea
https://bitbucket.org/Torr_Samaho/zandronum
Con un editor de texto (ocuparemos Nano para tal efecto) editaremos el archivo p_spec.cpp, para aquello lo abrimos con la siguiente linea
nano zandronum/src/p_spec.cpp
Buscamos la linea 1578, y en donde dice
static const char hexenScrollies[24][2]
la cambiamos por
signed static const char hexenScrollies[24][2]
Guardamos con Ctrl+O y salimos con Ctrl+X
Generar los MakeFiles y compilar el código fuente
Entramos a la carpeta con el código fuente de Zandronum
cd zandronum
Ejecutamos CMake para ejecutar los Makefiles
make clean; \
cmake -DCMAKE_BUILD_TYPE=Release -DSERVERONLY=ON -DNO_ASM=1
Y finalmente ejecutamos make para compilar el servidor.
make
Tomará un tiempo en completarse, puede que aparezcan varias advertencias pero nada de que preocuparse
Mover los binarios y limpieza
Creamos una carpeta dentro de nuestro usuario de HOME, pongamos zandronum-server por mientras
mkdir $HOME/zandronum-server
y movemos los archivos que necesitaremos para correr el servidor.
mv skulltag_actors.pk3 brightmaps.pk3 zandronum.pk3 zandronum-server zandronum-server.debug $HOME/zandronum-server
Borramos la carpeta zandronum (la que se creó para copiar el repositorio) junto a todo su contenido (código fuente, makefiles)
rm -r $HOME/zandronum
y si deseas renombramos la carpeta zandronum-server, ahora la llamamos servidor-coop
mv $HOME/zandronum-server $HOME/servidor-coop
Copiar DOOM.WAD y configurar el servidor
Ya estamos casi listos pero falta un archivo muy importante, el .wad que contiene todos los assets para jugar. Porque claro, el motor grafico está liberado bajo la GNU General Public License, no así todo lo que engloba el universo de Doom junto con los gráficos, la música, los sonidos que están empaquetados dentro de ese archivo. A pesar de ser un juego antiguo se puede comprar en Steam o GOG a muy bajo precio total solo nos interesa copiar el dichoso archivo doom.wad (para el primer Doom) o doom2.wad (para Doom 2 Hell on Earth), si te interesa está freedoom.wad, una versión libre de Doom que reemplaza todo por contenido sin copyright pero para efectos de esta guía usaremos doom2.wad, solo que lo copiaremos desde otro S.O. con Doom 2 ya instalado
Asumiendo que estás manejando la Raspberry Pi vía SSH podemos usar SFTP para mover archivos de forma remota. En Raspbian ya viene configurado por defecto junto a un servidor FTP mientras que en DietPi debes cambiar el servicio SSH de DropBear por OpenSSH. Ahí copiamos doom2.wad junto con otros wads para adornar nuestro servidor a la carpeta donde está nuestro servidor
Y ahora a lo ultimo, configurar nuestro servidor. Creamos con nano un ejecutable llamado servidor.sh
nano servidor.sh
y dentro de este copiamos lo siguiente
./zandronum-server \
-port 10666 \
-exec servidor-cachilupi.cfg \
./zandronum-server ejecuta el servidor mientras que \ hace un salto de linea en el documento, el resto son parámetros que configuran el servidor, -port especifica el puerto por el cual funcionará el servidor y -exec ejecutará un archivo de configuración extra para nuestro servidor. Guardamos con Ctrl+O, salimos con Ctrl+X y creamos el archivo de configuración
nano servidor-cachilupi.cfg
Dentro de este copiamos lo siguiente
set sv_hostname "Zandronum en Raspberry Pi"
set sv_motd "Powered by Zandronum"
set sv_defaultdmflags true
set sv_maxplayers 12
set sv_maxclients 16
set co-op 1
set skill 3
En este archivo configuramos las variables de servidor a modo de personalizar como funcionará nuestro server. sv_[algo] es una variable de servidor del cual seteamos, algunos se explican solos como sv_hostname que indica el nombre del servidor, sv_motd que muestra un mensaje al unirse al server, sv_defaultdmflags que configura el gameplay con ciertos parámetros por defecto, sv_maxclients que indica la cantidad máxima de personas conectadas mientras que sv_maxplayers la cantidad máxima de jugadores que pueden jugar (de 16 jugadores conectados, 12 pueden jugar y los 4 restantes estarán de espectador). Hay dos parámetros extra, una es co-op del cual indicamos que el modo de juego es cooperativo y skill del cual indica el nivel de dificultad, este va del 1 al 5, siendo 1 fácil y 5 difícil. Ya con eso guardamos con Ctrl+O y salimos con Ctrl+X.
Finalmente ejecutamos con bash
bash servidor-coop.sh
Si no ves tu servidor en linea recuerda abrir el puerto UDP 10666 o el especificado en los parámetros de servidor, también asegurate de que el servidor sea visible por los servidores DNS
Información adicional
Te dejamos a mano varios enlaces con información para configurar tu servidor
Variables de servidor
Parámetros de comando de linea
Tutorial del cual se basó esta guía (post con la guía para compilar a ARM)