Hace tiempo, concretamente el pasado 12 de Enero de 2004, 3DRealms liberó el código fuente de uno de sus mejores juegos de todos los tiempos, Duke Nukem 3D. Desde aquel momento muchos programadores comenzaron a intentar adaptar el juego a los nuevos sistemas operativos. No tardaron en llegar las primeras versiones para GNU/Linux, que con mas o menos dificultades consiguieron que se pudiese jugar.

Sin duda lo mejor del juego era el modo multijugador. En el juego original se utilizaba el protocolo IPX. En estas nuevas versiones se ha añadido soporte TCP/IP. Así que tenemos Duke Nukem 3D, funcionando en GNU/Linux de forma nativa y con soporte al juego multijugador por TCP/IP, ¿No se os hace la boca agua? Uno de los mejores ports de Duke Nukem que podemos encontrar actualmente es obra de un australiano de 23 años llamado Jonathon Fowler (Jonof). Tiene ports de varios juegos creados con el mismo motor que Duke Nukem como es Shadow Warriors. Necesitaremos varios ingredientes para que todo funcione correctamente. Así que vamos a ello.

Ingredientes

  • Código fuente de JFBuild
  • Código fuente de JFDuke3D
  • Parche para JFBuild: Descarga
  • Parche para JFDuke: Descarga
  • Librería fmod
  • Librerías SDL
    • libsdl-dev
    • libsdl-mixer-dev
    • libsdl-ttf-dev
    • libsdl-image-dev
  • Fichero duke3d.grp: El de la versión Shareware te servirá.
  • Compilador GCC < 4.0: Yo he usado gcc-3.3 y gcc-3.4, ambas funcionan.
  • Ensamblador nasm

Preparación

Antes de nada hay que instalar las librerías necesarias para compilar el juego. La mas rara de instalar es fmod por lo que vamos a explicarla la primera de todas.

FMOD

Descomprimimos el fichero fmodapi3741linux.tar.gz que nos creará el directorio fmodapi3741linux. Dentro de ese directorio veremos varios mas. Solo nos interesa el directorio api. La manera mas limpia de instalar la librería es utilizando stow. Creamos el directorio /usr/local/stow/fmod y dentro de el toda la jerarquía de directorios necesaria. Esto hay que hacerlo a mano ya que fmod no trae un makefile. Estos son los pasos.
# cd fmodapi3741linux/api
# mkdir -p /usr/local/stow/fmod/include/fmod
# mkdir -p /usr/local/stow/fmod/lib
# cp libfmod-3.74.1.so /usr/local/stow/fmod/lib
# cp inc/* /usr/local/stow/fmod/include/fmod
# ln -s /usr/local/stow/fmod/lib/libfmod-3.74.1.so /usr/local/stow/fmod/lib/libfmod.so
# cd /usr/local/stow
# stow fmod

SDL

Ahora hay que instalar las librerías SDL. En mi caso, uso Ubuntu, sería así de sencillo (sería lo mismo si usas Debian, Molinux, Guadalinex o cualquier otro derivado de Debian).
# apt-get install libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsdl1.2-dev

DUKE3D.GRP

Para obtener el fichero duke3d.grp necesitaremos el compresor orange. Así que instalamos orange y para simplificar mas las cosas el descompresor universal unp.
# apt-get install unp orange unzip
$ unzip 3dduke13.zip
$ unp DN3DSW13.SHR
Con esto tenemos disponible el fichero DUKE3D.GRP. Es importante pasar el nombre a minúsculas ya que si no no funcionará. Una manera sencilla es con el comando rename de esta forma.
$ rename 'y/A-Z/a-z/' DUKE3D.GRP
Creo que con esto tenemos todos los ingredientes listos. Si faltase alguna librería decidlo en los comentarios, pero creo que ya está todo lo necesario.

Compilación del juego

Vamos a crearnos una carpeta para meter todo lo que vamos necesitando. Yo he creado un directorio llamado jonof, el nombre da igual. Dentro he puesto el código fuente y los parches de JFBuild y JFDuke. En primer lugar descomprimimos tanto jfbuild_src_20051009.zip como jfduke3d_src_20051009.zip y después aplicamos los parches. Estos son los pasos.
$ cd jonof
$ unzip jfbuild_src_20051009.zip jfduke3d_src_20051009.zip
$ patch -p0 < jfbuild_src_20051009.patch
$ patch -p0 < jfduke3d_src_20051009.patch
$ ln -s jfbuild_src_20051009 build
Los parches son para solucionar un problema con el sonido en Linux. El autor está trabajando en un sistema de sonido propio para la próxima version (JFAud), pero aun no está disponible y está descuidando la implementación actual. Menos mal que alguien en el foro se curró un parche transitorio para solucionarlo. Una vez hecho esto tendremos que retocar ligeramente el Makefile de jfduke, pero tranquilos que es tarea facil. Abrimos el fichero Makefile con el editor de texto que queramos (no con openoffice.org) y en la línea 39 veremos lo siguiente.
        -I$(INC:/=) -I$(EINC:/=) -I$(SRC)jmact -I$(SRC)jaudiolib #-I../jfaud/inc
Pues bien lo retocamos para que quede así.
        -I$(INC:/=) -I$(EINC:/=) -I$(SRC)jmact -I$(SRC)jaudiolib -I/usr/local/include/fmod  #-I../jfaud/inc
Como veis he añadido la ruta donde he puesto la librería fmod, es tan solo esa la modificación que hay que hacer. Después de todo esto, cruzamos los dedos y ejecutamos lo siguiente.
$ make CC=gcc-3.4
Si todo ha ido bien deberemos tener en el mismo directorio un ejecutable llamado duke3d y otro llamado build. Como habrás adivinado duke3d es el juego y build es el constructor de niveles. Llegados a este punto lo único que necesitas es el fichero duke3d.grp que obtuvimos antes, tan solo es necesario copiarlo al directorio en el que te encuentras y lanzar el juego con:
$ ./duke3d

Cómo jugar

Si has llegado hasta aquí, ¡enhorabuena! Imagino que ahora querrás jugar con mas gente porque es lo que mas gracia tiene de este juego. Si os fijáis en el directorio donde esta el código fuente hay un fichero llamado releasenotes.html que explica como se lanza el modo multijugador. Este juego no dispone de un servidor dedicado por lo que será necesario que uno de los jugadores sea el servidor y el resto clientes. Es necesario saber de antemano cuantos jugadores va a haber y que todos estos tengan la mismas versión del fichero duke3d.grp. Vamos a explicarlo con un ejemplo. Supongamos que queremos organizar una partida entre tres jugadores.
  • jugador1 : 66.249.93.104
  • jugador2 : 68.142.197.86
  • jugador3 : 212.85.32.12
Uno de los tres ha de ser el servidor, por ejemplo el jugador1. Para ello deberá lanzar el juego de esta forma
$ ./duke3d /net /n0:3
Los otros dos jugadores deberán lanzar el juego de esta otra forma
$ ./duke3d /net /n0 66.249.93.104
Hay que tener en cuenta que el jugador que haga de servidor necesita tener habilitada la salida por el puerto 23513 o bien cambiar el puerto por otro mediante el parámetro /pX donde X es el puerto escogido. Obviamente los demas jugadores también deberán poner el valor del nuevo puerto.

Mapas de usuario

Si queremos utilizar mapas extras, en primer lugar el fichero duke3d.grp shareware no nos servirá, necesitaremos alguno de la versión comercial del juego. Nos vale tanto el normal como el de la edición "Atomic". Para lanzar el juego en red con un mapa de usuario tendremos que hacerlo así.
./duke3d -map user.map
Aquí dejo un enlace donde podéis conseguir mapas extras. The Duke Mecca.

Epílogo

Espero que disfrutéis con este juegazo por el que apenas pasa el tiempo. ¿O será que me estoy haciendo mayor?


blog comments powered by Disqus