Juegos en Linux:
Shadow Warrior

Cómo ejecutar Shadow Warrior en GNU/Linux

¿Recordáis Shadow Warrior? Fue el siguiente juego publicado por 3D Realms, tras Duke Nukem 3D; en él manejábamos a una especie de ninja vacilón llamado Lo Wang, que luchaba contra la malvada corporación Zilla y sus esbirros. Pues bueno, allá por 2005 se liberó su código fuente... Y ni cortos ni perezosos, tanto la gente de Icculus.org como Jonathon Fowler —autor del puerto JFDuke3D— sacaron rápidamente sendas versiones para GNU/Linux.

Bien, aquí comentaré el modo de jugar a Shadow Warrior con el puerto JFSW, desarrollado por Jonathon Fowler, que es en realidad la única opción asequible. El puerto de Icculus.org se trata de algo experimental y no está lo suficientemente maduro para jugar con él... Si alguien quiere probarlo, allá él; yo ni siquiera he conseguido compilarlo.

Requisitos

Bueno, pues en principio necesitaremos las siguientes librerías. En cualquier distribución moderna de GNU/Linux de uso general —dejando aparte minidistros como Damn Small Linux y similares— vendrán ya instaladas todas o casi todas:

  • libSDL (de la rama 1.2).
  • libSDL_mixer 1.2 o superior.
  • GTK2 y demás librerías asociadas (Pango, Cairo, ATK, Glib, etc).

Respecto a GTK2: en el caso improbable de que no esté ya incluida en vuestro sistema, descargadla de vuestro gestor de paquetes. Si éste es medio decente, os la instalará con todas sus dependencias, de modo que no tengáis vosotros que bajarlas una por una.

Además, os hará falta una máquina con, al menos, 32 MB de RAM y un procesador a 133 MHz... Bueno, ya me imagino que esto no será un problema; basta con un ordenador que no se esté cayendo a pedazos de puro viejo. Y si disponéis de aceleración gráfica, mejor que mejor, aunque no es imprescindible.

Configuración e instalación

Bueno, tenemos dos opciones. Descargarnos el código fuente del JFSW y compilarlo por nuestra cuenta, u obtener directamente unos binarios listos para usar. Ésta última es la opción más sencilla y cómoda para la gente que no quiera calentarse demasiado la cabeza, así que la comentaré en primer lugar.

Bien, podéis conseguir los binarios aquí mismo, en Arcades 3D. Los compilé yo mismo, aplicando de paso los parches necesarios para activar el sonido —en Linux, JFSW no llegó a tener una implementación "oficial" del sonido; una tercera persona hizo un remiendo provisional mientras Fowler trabajaba en ello, pero poco después el desarrollo de JFSW cesó—.

Quizá la forma más práctica de descargarlos sea abriendo una consola de comandos y usando Wget, aunque cada uno tiene sus costumbres... En el siguiente ejemplo, creamos una carpeta para almacenar el Shadow Warrior y nos bajamos el archivo comprimido con los binarios:

$ mkdir juegos
$ cd juegos
$ mkdir swarrior
$ cd swarrior
$ wget http://www.arcades3d.net/linux/archivos/jfsw-20051009-bin.tar.bz2

Ahora hay que descomprimir el fichero que acabamos de descargar:

$ tar -jxvf jfsw-20051009-bin.tar.bz2
$ ls

.
.
← Cuatro o cinco ficheros, entre ellos sw y build.
.
$

Ahora tendremos unos pocos archivos en nuestro recién creado directorio, entre ellos dos ejecutables; sw nos servirá para comenzar una partida a Shadow Warrior, y build para cargar el editor de mapas.

Pero para esto necesitaremos una copia del Shadow Warrior original. El juego puede encontrarse en algunas páginas dedicadas al abandonware; sin ir más lejos podéis mirar aquí en Arcades 3D, o en 3D Shooter Legends, entre otros sitios... En realidad no hace falta todo el contenido del juego; basta con los siguientes archivos —ojo a las minúsculas—:

  • tables.dat
  • sw.grp

Sólo con estos dos ya deberíamos jugar y editar mapas sin problemas —al fin y al cabo el juego propiamente dicho, los niveles, armas, enemigos y demás, está guardado en el archivo sw.grp—. No obstante, quizás alguien necesite también algún otro, como sw.rts o sw.cfg; aunque ya digo que en principio no hacen falta.

En fin, simplemente copiamos los archivos necesarios a la carpeta en la que descomprimimos los binarios. Y ya en ella, para comenzar una partida basta con ejecutar:

$ ./sw

O para cargar el editor de mapas Build:

$ ./build

Y bueno, nada más. Que disfrutéis del juego... Sólo me quedaría por comentar que las partidas guardadas y las capturas de pantalla que hagáis se guardan en una carpeta oculta, situada en ~/.jfsw.

Antes de que se me olvide: el sonido tiene cierto bug, bastante incómodo, que puede hacer que el Shadow Warrior se quede colgado, acaparando memoria RAM y recursos del procesador hasta ser interrumpido por el propio sistema. Esto sólo sucede cuando la opción Ambience —dentro del menú Sound— está activada; así que lo primero que deberíais hacer al arrancar el juego es aseguraros de desactivarla.


Por supuesto, no pueden faltar un par de capturas de pantalla.
Por ejemplo, aquí tenéis el juego recién cargado y con el menú de presentación, corriendo en Vector Linux y mi escritorio Fluxbox:

El juego acaba de empezar...

Y aquí, jugando un mapa descargado de Internet, cuyo nombre he olvidado, pero con una dificultad cercana al sadismo. Los enemigos me han hecho morder el polvo y me consuelo toqueteando algunas opciones:

La frustración tiene nombre, pero no lo recuerdo.

Compilando el puerto JFSW

Bien, hemos visto cómo jugar a Shadow Warrior usando los binarios ya compilados que hay disponibles en Arcades 3D. Pero el mundo está lleno de geeks y demás gente maniática en general, así que explicaré también cómo compilar nuestros propios binarios a partir del código fuente. En realidad el método es el mismo que el que ya se comentó en su momento para el puerto JFDuke3D.

Requisitos

Antes de ponernos a hacer nada, necesitaremos unas cuantas cosas que paso a enumerar:

  • Código fuente del motor gráfico (JFBuild).
  • Código fuente del puerto JFSW.
  • Librerías SDL instaladas (SDL, SDL_mixer, SDL_ttf y SDL_image). Descargad también los paquetes "dev" o "devel" en las distros que lo requieran.
  • Librería Fmod y ensamblador NASM.
  • Y, obviamente, el compilador GCC.

Muchas distribuciones de GNU/Linux incluirán ya en su instalación por defecto las librerías citadas; y las que no, probablemente las tengan disponibles en sus respectivos repositorios de paquetes. En todo caso, no debería resultar problemático obtenerlas, bien mediante herramientas como Apt, Emerge y similares, bien descargándolas directamente de sus sitios web:

De estas tres cosas, la única que suele presentar dificultades a la hora de instalarla es Fmod. Si no está en el repositorio de vuestra distribución para descargarla y configurarla automáticamente, habrá que hacerlo a mano, cosa que explico al final de este manual. De momento asumiré que ya la tenéis correctamente instalada y configurada.

Compilación

Solucionado el asunto de las librerías ya podemos ponernos manos a la obra. Como somos muy ordenados, crearemos un directorio para guardar los archivos comprimidos del código fuente y sus respectivos parches. Por ejemplo, aquí le he llamado fuentes, y éstos serían los ficheros que contiene:

$ cd fuentes
$ ls

jfbuild_src_20051009/
jfbuild_src_20051009.patch
jfsw_src_20051009/
jfsw_src_20051009.patch

Como veis, hay dos nuevas carpetas (jfbuild_src_20051009 y jfsw_src_20051009), y dos ficheros con extensión .patch. Éstos son dos parches para aplicar al código de JFSW. Básicamente, contienen la implementación del sonido en Linux. Como expliqué antes, nacieron como un apaño provisional, concebido por una tercera persona mientras Jonathon Fowler preparaba en algo mejor. Sin embargo, poco después cesó el desarrollo de este puerto, y han quedado por tanto como única solución disponible. Si queréis oír a los monstruos deciros cosas bonitas, hay que usarlos.

Así que ejecutamos lo siguiente:

$ patch -p0 < jfbuild_src_20051009.patch
$ patch -p0 < jfsw_src_20051009.patch

También necesitamos crear un enlace simbólico, llamado build, que apunte a la carpeta jfbuild_src_20051009. Este paso es importante, porque sin él la compilación se interrumpirá:

$ pwd
/home/usuario/fuentes
$ ln -s jfbuild_src_20051009 build

Hecho esto, accedemos al directorio que contiene las fuentes del JFSW. Antes de comenzar a compilar hay que hacer un pequeño cambio en el Makefile. Nada serio, por otra parte... Así que abrimos este fichero con nuestro editor de texto favorito:

$ cd jfsw_src_20051009
$ vi Makefile

Tendremos que buscar la siguiente línea, situada no muy lejos del principio del archivo:

-I$(INC:/=) -I$(EINC:/=) -I$(SRC)jmact -I$(SRC)jaudiolib #-I../jfaud/inc

Y sustituirla por ésta otra:

-I$(INC:/=) -I$(EINC:/=) -I$(SRC)jmact -I$(SRC)jaudiolib -I/usr/local/include/fmod #-I../jfaud/inc

Como podéis ver, lo único que cambia entre ellas es el texto resaltado en negrita (-I/usr/local/include/fmod). Esto es lo que hay que añadir. Es necesario hacerlo porque el parche de sonido tiene enlaces a la librería Fmod —que, como ya he dicho, deberíamos tener correctamente instalada—; de lo contrario, la compilación se interrumpirá con un error.

Y nada más. Grabamos los cambios, y por fin llega el momento de cruzar los dedos... Para compilar el código fuente tecleamos:

$ make

Y si todo ha ido bien —o sea, si habéis seguido correctamente los pasos de este tutorial... :risa:—, después de muchas letras y números y algún que otro warning sin importancia, encontraremos dos archivos ejecutables: sw —para jugar a Shadow Warrior— y build —el editor de niveles—.

Con ellos y los contenidos originales del juego —véase la primera parte de este manual— ya podremos jugar sin complicaciones.


Anexo: Instalando la librería Fmod

Lo prometido es deuda, y aquí explicaré cómo instalar manualmente la librería de sonido Fmod. Ojo, me refiero aquí a la versión 3.75, que es la que necesitaréis para compilar JFSW con sonido en Linux. Sí, se trata de una versión antigua y sin soporte, pero no hay otro remedio que recurrir a ella.

Pues nada, en primer lugar nos descargamos el archivo correspondiente, llamado fmodapi375linux.tar.bz2, y lo descomprimimos. Como en la página oficial de Fmod parece que ya no lo guardan, hemos subido una copia a Arcades 3D:

$ wget http://www.arcades3d.net/linux/archivos/fmodapi375linux.tar.bz2
$ tar -jxvf fmodapi375linux.tar.bz2

A continuación tendremos que crear varias carpetas dentro de /usr/local/ —para hacerlo es probable que necesitéis acceder a la cuenta del administrador—. Así, por ejemplo:

$ su
Password: ← Introducimos la contraseña del administrador...
# mkdir -p /usr/local/fmod/include/fmod
# mkdir -p /usr/local/fmod/lib

Y accedemos a los contenidos que acabamos de descomprimir para comenzar a copiar los archivos necesarios. Lo único que nos interesa aquí es la carpeta llamada api:

# cd fmodapi375linux
# cd api
# cp -v libfmod-3.75.so /usr/local/fmod/lib
# cp -v inc/* /usr/local/fmod/include/fmod

Ahora necesitamos crear algunos enlaces simbólicos, para que los diversos programas puedan encontrar fácilmente la librería Fmod cuando lo requieran:

# ln -s /usr/local/fmod/lib/libfmod-3.75.so /usr/local/fmod/lib/libfmod.so
# ln -s /usr/local/fmod/lib/libfmod-3.75.so /usr/local/lib/libfmod.so
# ln -s /usr/local/fmod/include/fmod /usr/local/include/fmod

Y ya lo tenemos... Al final no era tan difícil, ¿verdad?

- Manual escrito por Eye del Cul en mayo de 2006.
- Revisado en febrero de 2014.


Cumple con el estándar HTMLCumple con el estándar CSSApta para cualquier navegador

Podéis copiar libremente cualquier contenido de esta página. Si se trata del texto o las imágenes, mencionad la fuente (www.arcades3d.net)...