Compilar servidor de Zandronum en la Raspberry Pi

Zandronum es uno de los tantos source ports que existen para Doom y Doom 2. Este nació en 2012 como un derivado de Skulltag pero debido a otros intereses su desarrollador anunció el fin del proyecto junto con 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, hacemos un apt-get update para actualizar las dependencias de nuestro sistema 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 hg clone 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 movamos 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)