Duke Nukem 3D en GNU/Linux, Come get some!!

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?

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

enlaces rotos

Quería recordar viejos tiempos con el Duke Nukem 3D, y que suerte cuando descubrín que lo podía tenerlo en mi Ubuntu, pero la desilusión vino despues al ver que los parches y la librería fmod tienen los enlaces rotos. Podríais restaurarlos??? me haríais un gran favor. Gracias.

PD veo q hace tiempo q no se postea en este hilo. Feliz año!.

Gracias

Gran receta Eye-wink

Que tiempos aquellos... :_)

--
"Computer science is no more about computers than astronomy is about telescopes."

Edsger Dijkstra

Imagen de int-0

Por qué JFDuke??

Ehm... el propio código de 3D Realms me compila y me funciona con sonido y todo... sin necesitar nada especial. Qué mejoras aporta el JFDuke y tal?

Por cierto... también se liberó y portó el DESCENT y el DESCENT2... queréis una receta?
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de fsancho

Por la red

El juego TCP/IP está mucho mejor logrado en este port. Además, este port dispone de versiones windows y linux con lo que puedes jugar con los usuarios que usen windows.

Imagen de arturo

Paquete debian

Cuando esté solucionado el problema del sonido (sin el parche actual),
¿ Alguien se anima a hacer un paquete debian del duke 3d ?.

Un saludo, Arturo.

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
**********************************************************************************

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
*****************************

Imagen de int-0

Por qué no te animas tú?

Jejeje.... no seas vago y empaquétalo tú!
------------------------------------
init=/bin/bash to conquer the world!

------------------------------------------------------------
$ python -c "print 'VG9udG8gZWwgcXVlIGxvIGxlYSA6KQ==\n'.decode('base64')"
------------------------------------------------------------

Imagen de arturo

Yo ya estoy animado

Sino estuviera animado no lo diría aquí.
No soy vago, solo pregunto si alguien me quiere ayudar.

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
**********************************************************************************

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
*****************************

Imagen de david.villa

Yo también le tengo ganas

Yo también le tengo ganas a eso de hacer paquetes Debian bien hechos. Si quieres podemos empezar por hacer, y después definar, una receta sobre el tema.

No soy portavoz de ningún colectivo, grupo o facción. Mi opinión es personal e intransferible.

Imagen de magmax

Y yo también me apunto

Pero como no tengo Inet, temo que me acoplaré más tarde.

Como receta podemos empezar por la que hay en ARCO.

Así aprovechamos y la pasamos a Crysol, que es donde debería estar, ¿no?

Miguel Ángel García
http://magmax.org

Imagen de arturo

Perfecto

Antes de nada decir que ya he empaquetado un par de cosillas y esa es la
forma facil. La última vez que hablé con Fernando me dijo que había otra
forma mejor de hacer paquetes, como los que ha echo Paco con el jdk.

De momento, como dice David mejor definimos que es lo que se incluye o
no en el paquete y luego nos ponemos manos a la obra.

Un saludo, Arturo.

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
**********************************************************************************

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
*****************************

Imagen de arturo

Problema al ejecutar

Hola Fernando:

Antes de nada decirte que estaba deseando poner en marcha este juego bajo GNU/Linux y que por unas cosas u otras todavia no he podido. Laughing out loud

Vamos al grano. Al compilar me he encontrado con que no tenia instalado el ensamblador "nasm", pero lo he instalado y el juego se ha
compilado bien. El problema lo tengo al ejecutar el juego. La primera vez que lo hice me faltaban los ficheros .CON, pero los
copié en el directorio de los fuentes y no volví a tener problemas.

Lo que pasa es que ahora me falta el fichero TABLES.DAT, ya que obtengo el siguiente mensaje de error:

ERROR: Failed to load TABLES.DAT!

Y de ahi viene mi pregunta, ¿donde puedo encontrar este fichero ?

Un saludo, Arturo.

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
************************************************************************

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
*****************************

problemas con jfduke3d

Buscando en google encontre que hay q poner el DUKE3D.GRP en minusculas... asi: duke3d.grp pero no se donde se guardan.... ahi esta mi problema.... espero que te sirva de algo....
si puedes dime como lo hago para que me parta el juego.... me sale

Refusing to initialize GTK+

y esto desde q puse los archivos .grp y .rts donde se suponia que estubieran:
/usr/share/games/buildengine...
y eso.... ojala alguien me ayude...
y q esto te sirva de algo....
XAO....

Imagen de fsancho

Pues me dejas fuera de juego

Pues me dejas fuera de juego porque yo tampoco tengo ese fichero y no me lo pide.

Pon mas en contexto porque no me aclaro.

Imagen de arturo

Problema solucionado

Al parecer al ejecutable no le gusta el nombre del fichero en mayúsculas.

Es decir, hay que renombrar el fichero DUKE3D.GRP por duke3d.grp.
Parece una tonteria pero ya no me pide los ficheros anteriores. Eye-wink

Un saludo, Arturo.

PD: Estoy deseando probarlo en red. ¿Alguien se apunta ?

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
**********************************************************************************

**********************************************************************************
Hay tontos que tontos parecen, hay tontos que tontos son, pero
hay una clase peor de tontos que hacen parecer tontos a los que
listos son.
*****************************

sonido bien

Vale, no pude concretar qe lo hizo. He instalado todos los cl-sdl, con sus dev (los *.dev no son imprescindibles, pero los terminaran necesitando para compilar cualquier otra cosa, y todos los reproductores midi que encontre). El timidity seria en el que mas incapie haria, ya que es el que, me ha funcionado mejor hasta ahora

No va el sonido e juego (si

No va el sonido e juego (si el menu). La musica no va en ninguno, y el juego se bloquea sin sonido ni nada al empezar. Deduzco que falta algun sdl, asi fue en debian, y logre que fuera.

Si lo arreglo, digo que falta. El caso es que yo tengo xubuntu, y realmente, se toman en serio lo de paquetes "BASICOS".

De pronto, solo que se acuerden de instalar:

-stow
-gcc-3.4 (ovio)
-nasm

-y el unzip no funciona. Vale, se puede hacer de mil maneras, pero me desconcierta el "caution filename not matched"