Return To Castle Wolfenstein sur Linux

Publié le par wardiz


Avoir du son sous rtcw ...

Y'a pas trés longtemps j'ai voulu rejouer à Return To Castle Wolfenstein (rtcw en abrégé) sur Linux suite à un petit coup de nostalgie ...
J'installe le jeu sur mon nouveau pc et je télécharge la dernier mise à jour, la version 1.41b (disponible ici : wolf-linux-1.41b.x86.run ) je lance le jeu avec ./wolf je sélectionne "single player" et ..... crash immédiat qui se termine par un "receiving signal 11" sans appel
Sachant que j'y jouais sans problème avant sur une distribution plus ancienne (une Debian woody ou Sarge), je me dis que ca vient peut être des drivers ou d'une version d'une bibliothèque - je n'y crois pas trop mais il faut bien commencer par quelque chose.

Quelques précisions  utiles : il y a plusieurs exécutables dans le répertoire. Le script du mode "single player" s'appelle wolfsp et celui du "multi player" s'appelle wolfmp, quand aux vrais binaires, il s'agit de wolfsp.x86 et wolfmp.x86, cela aura de l'importance plus bas.

Aprés quelques recherches sur internet, voici 2 remèdes :
- supprimer le répertoire ~/.wolf : il peut contenir des paramètres erronés qui font planter le jeu à son lancement
- vérifier les checksum des fichers pk3, notamment de pak0.pk3 et des sp_pak*.pk3. Les checksum sont disponibles dans le fichier INSTALL. Dans mon cas, le pak0.pk3 était corrompu ("md5sum pak0.pk3" pour calculer le checksum du fichier).

Je peux enfin jouer ..... jusqu'au chargement du niveau 3 et la rebelotte "receiving signal 11" et crash. Je n'ai aucune piste et le recherches sur google ne donnent rien.
Finalement je change les réglages graphiques du jeu et notament la résolution "856x480 wide screen" et je repasse en 800x600. Et la miracle, ca marche, plus de crash. Donc si le jeu plante pensez à vérifier la résolution et à la changer.


Du son !

Si vous avez des problèmes de son avec rtcw ou bien avec quake 3 ou encore avec enemy territory  ou l'un de ses mods, ce qui suit devrait vous aider.
Je pars du principe que votre carte son fonctionne avec alsa sans problème mais que vous n'avez aucun son avec l'un des 3 jeux ci dessus, et que vous avez les notions de base pour écrir un script.
Pour information, il faut savoir qu'avant que la partie son soit gérée par alsa, elle était gérée par OSS. L'inconvénient majeur d'OSS c'est qu'il avait un accés exclusif à la carte son : une seule application à la fois pouvait accéder à la carte son.
Quake 3, rtcw,  ou encore enemy territory utilisent OSS pour la gestion du son. Si vous n'avez pas de son c'est en général que vous utilisez alsa et pas OSS. Comme le jeu cherche OSS, pas de son ...

Je vous présente 2 solutions. Il en existe d'autres mais parmis celles que j'ai essayé ce sont les 2 meilleurs à mon sens.

Emulation OSS

Alsa dispose d'une couche permettant d'émuler OSS qui va permettre d'avoir du son sous Quake 3. Votre distribution Linux contient trés certainement alsa et ses modules d'émulation OSS.
Pour le vérifier tapez dans un terminal la commande "/sbin/modprobe -l | grep oss". Chez moi ca donne :
/lib/modules/2.6.26-1-686/kernel/drivers/scsi/osst.ko
/lib/modules/2.6.26-1-686/kernel/sound/core/oss/snd-pcm-oss.ko
/lib/modules/2.6.26-1-686/kernel/sound/core/oss/snd-mixer-oss.ko
/lib/modules/2.6.26-1-686/kernel/sound/core/seq/oss/snd-seq-oss.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/sb_lib.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/trix.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/sound.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/pss.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/kahlua.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/opl3.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/v_midi.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/aedsp16.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/mpu401.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/pas2.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/uart401.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/ad1848.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/sscape.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/sb.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/ac97_codec.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/uart6850.ko
/lib/modules/2.6.26-1-686/kernel/sound/oss/trident.ko

Vous devez vous assurer que vous avez les 3 lignes en mauve, elles correspondent aux modules noyau de l'émulation OSS.
Peut être sont-ils déjà chargés; pour vérifier on utilise la commande "/sbin/lsmod | grep snd-pcm-oss". Si la commande ne donne pas de résultat c'est que le module n'est pas chargé. Pour le charger c'est simple, en tant que root on exécute la commande "modprobe snd-pcm-oss" et le module est chargé.

Toujours en root on exécute suivant qu'on joue à quake3, rtcw ou enemy territory on exéute les commandes suivantes :
echo "quake3.x86 0 0 direct">/proc/asound/card0/pcm0p/oss
echo "wolfsp.x86 0 0 direct">/proc/asound/card0/pcm0p/oss
echo "et.x86 0 0 direct">/proc/asound/card0/pcm0p/oss
On peut exécuter les 3 commandes même si on ne joue pas aux 3 jeux : ces commandes liste les programmes ayant un accés direct à OSS, on pourrait même en ajouter d'autres.
Explications :
lignes "echo ...." indiquent à alsa que le programme quake3.x86 gérera lui même l'accés au device OSS. Il est important que le programme soit le véritable binaire et non pas le script qui lance le binaire. En général on met les 3 lignes ci-dessus dans un script qui est exécuté au démarrage du pc (/etc/rc.local sur la Debian par exemple).
Pour tout remettre à zéro (si on s'est trompé par exemple) on utilise la commande suivante :
"echo "erase" > /proc/asound/card0/pcm0p/oss"
Cela supprime les applications existantes, il faut être root pour exécuter la commande.

Cependant comme c'est une émulation OSS "stricte", une seule application à la fois pourra utiliser la carte son.
Mais il y a mieux : et-sdl-sound !

Hack et-sdl-sound

Bien que l'émulation OSS fonctionne trés bien, l'inconvénient majeur c'est qu'il est impossible de jouer autre chose ou plus embettant d'utiliser un outil de communication comme teamspeak ou mumble pour communiquer avec ses cooéquipiers quand on joue sur le net; et faire le choix de jouer sans le son empute l'interêt du jeu ...
Heureusement un certain "Pyry Haulos" a développé une solution, un hack, afin que quake 3, rtcw ou et utilisent nativement alsa plutot qu'OSS. De ce fait la carte son n'est plus bloquée ou réservée par le jeu et on peut s'en servir en parallèle avec xmms, mumble, ...
Tout d'abord l'adresse du site : http://nullkey.ath.cx/et-sdl-sound
Comment ca marche ?
C'est astucieux : sans rentrer dans les détails techniques, au moment du lancement du jeu et-sdl-sound va s'intercaller et prendre la place d'OSS sans que le jeu s'en rende compte. De cette façon l'exécutable n'est pas modifier et on peut donc jouer sur le net sans problème d'identification.
et-sdl-sound reconnait les versions suivantes : 
ET 2.60b (et.x86)
ET 2.60 (et.x86)
ET 2.56 (et.x86)
ET 2.55 (et.x86)
Wolf 1.41 (wolfsp.x86)
Wolf 1.41-MP (wolf.x86)
Q3 1.31 (quake3.x86)
Q3 1.32 (quake3.x86)
Q3 1.32b (quake3.x86)
Q3 1.32c (quake3.x86)
Il est fournit avec des scripts de lancement pour chacun des 3 jeux. Tout ce que vous avez à faire c'est de le télécharger sur le site http://nullkey.ath.cx/et-sdl-sound ou bien sur la copie que j'ai au cas ou le site d'origine ne serait plus disponible. On décompresse l'archive avec "tar zxf et-sdl-sound.tar.gz" et il n'y a plus qu'a lancer et-sdl-sound, quake3-sdl-sound ou wolfsp-sdl-sound; vous aurez besoin de libSDL-1.2 pour que cela marche.
Si jamais vous voulez continuer d'utiliser votre propre script de lancement, c'est simple, il suffit d'y ajouter les lignes suivantes :
#!/bin/bash
export ETSDL_SDL_LIB="libSDL.so"
export SDL_AUDIODRIVER="alsa"
cd `dirname $0`
LD_PRELOAD="${LD_PRELOAD}:/<path to>/et-sdl-sound.so" ./quake3.x86 $*
Il est sans doute plus pratique de copier la lib et-sdl-sound.so dans le même répertoire que le binaire du jeu.
Posez vos commentaire et/ou questions à la suite, j'essayerai d'y répondre.

Bon frag
s !

Publié dans Linux

Commenter cet article