Gentoo Wiki ArchivesGentoo Wiki

TIP_ALSA_with_Quake3/Enemy-Territory


This article is part of the HOWTO series.
Installation Kernel & Hardware Networks Portage Software System X Server Gaming Non-x86 Emulators Misc

Quake III Arena and Enemy Territory are FPS (First Person Shooters) designed around multi-player gameplay using ID's FPS engine.

Quake III Arena and Enemy Territory Logos copyright ID and Splash Development

Contents

Install

emerge quake3

Quake 3 requires Pk0.pk3 files from the CD to be copied to your /opt/quake3/baseq3 directory.

emerge enemy-territory

Sound

When attempting to play Quake III or Wolfenstein: Enemy Territory error will return /dev/dsp: Input/output error Could not mmap /dev/dsp. These games only support /dev/dsp -- which is now deprecated.

Install Alsa

First make sure that ALSA and ALSA-OSS are configured correctly.

Enable Sound

There are different methods may work that activate audio for these games:

Set Parameters for OSS

As root specify the OSS device is playback only, the second line is optional ( disable capture ) but may be needed by some games.

echo "quake3.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "quake3.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

echo "wolfsp.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "wolfsp.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

echo "wolf.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "wolf.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss
echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "et.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

Quick explanation of this trick:

Most audio cards have two devices that can be used. One of these devices (the default) does playback and capture. The first (default) device is /dev/dsp. This device is used with a mic and basic output. There is typically a second device that supports playback only. This second device is /dev/adsp.

et-sdl-sound (Run ET With ALSA)

There is an alpha hack which is around that makes Return To Castle Wolfenstein Enemy Territory play with ALSA by replacing standard sound system functions in runtime as aoss won't work for ET. I found this necessary when wanting to run TeamSpeak 2.XX at the same time.

It's located at http://nullkey.ath.cx/~stuff/et-sdl-sound/

Simply download the latest tarball http://nullkey.ath.cx/~stuff/et-sdl-sound/et-sdl-sound.tar.gz

1. Extract

2. Copy et-sdl-sound.so file to /opt/enemy-territory/

3. Open your favourite text editor and add the following lines and save as et_sdl_sound.sh:

#!/bin/bash
export ETSDL_SDL_LIB="libSDL.so"
export SDL_AUDIODRIVER="alsa"
cd /opt/enemy-territory/
LD_PRELOAD="/opt/enemy-territory/et-sdl-sound.so" ./et.x86 $*

4. chmod +x et_sdl_sound.sh

5. ./et_sdl_sound.sh

Note if you want to hook this up to XQF you need to tell XQF that the "Command Line" is "/opt/enemy-territory/et_sdl_sound.sh" and the "Working Directory" is "/opt/enemy-territory/"

Note: If it fails to compile with GCC 4.3x with the following error, add #include<limits.h> to the hooks.cpp.

hooks.cpp: In function ‘unsigned int calculateProcCRC32()’:
hooks.cpp:377: error: ‘PATH_MAX’ was not declared in this scope
hooks.cpp:380: error: ‘filename’ was not declared in this scope
hooks.cpp:384: error: ‘filename’ was not declared in this scope

In-game fix

Some may only need to instruct the game of the new parameters. Start Quake3/Enemy-Territory, then press "~" to bring up the console. Write:

set +snddevice /dev/dsp

Then restart the game.

Esound

If you have esound running, this may not work. To stop esound type :

# /etc/init.d/esound stop

and later (after you're done playing)

# /etc/init.d/esound start

to start esound again. A simpler way to pause esound as a non-root user is to run:

esdctl off

to suspend esd, run your application, and then

esdctl on

after exiting.)

In Addition: If that trick above doesn't work (on some exotic soundcards like ESI Juli@) try running et/q3 above arts layer if you have installed arts.

artsdsp -m et

You don't need root for running that command. Run it as a normal user.

In some cases, you may have to use esound or artsdsp if your audio chipset does not support the audio format used by et in mmap mode. ICE1712 is one that does not. To use esound:

esddsp --mmap et

Troubleshooting

If you have errors in the process there may be a couple things you can to do to help.

No /proc/asound/card0/pcm0p folder

if you cant run

echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss

because you get this error

bash: /proc/asound/card0/pcm0p/oss: No such file or directory

You will need to rebuild you kernel to include optional proc filesystem support:

CONFIG_SND_VERBOSE_PROCFS:                                      
                                                                
Say Y here to include code for verbose procfs contents (provides
usefull information to developers when a problem occurs). On the
other side, it makes the ALSA subsystem larger.                 
                                                                
Symbol: SND_VERBOSE_PROCFS [=y]                                 
Prompt: Verbose procfs contents                                 
  Defined at sound/core/Kconfig:143                             
  Depends on: !M68K && SOUND && SND && PROC_FS                  
  Location:                                                     
    -> Device Drivers                                           
      -> Sound                                                  
        -> Advanced Linux Sound Architecture                    
          -> Advanced Linux Sound Architecture (SND [=y])              

Optionally you can use the alsa-driver as it will provide this function as well.

If you have Verbose procfs set, and you still get bash: /proc/asound/card0/pcm0p/oss: No such file or directory, make sure you have the oss modules loaded. You need snd-pcm-oss, snd-mixer-oss, and snd-seq-oss.

64-bit platforms (amd64)

If you are on the amd64 platform and you have a chipset with OSS problems, install the app-emulation/emul-linux-x86-soundlibs package. You'll then need to start et like this:

esddsp32 --mmap et

or, if you prefer arts:

artsdsp32 -m et

See https://bugs.gentoo.org/show_bug.cgi?id=77031#c10 for more background.

Parameters for OSS on Reboot Lost

/proc is a temporary file system and therefore it's settings are flushed on reboot. To retain the settings you can add them to your local.start file.

nano /etc/conf.d/local.start
echo "quake3.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "quake3.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

or

echo "et.x86 0 0 direct" > /proc/asound/card0/pcm0p/oss
echo "et.x86 0 0 disable" > /proc/asound/card0/pcm0c/oss

Game freeze at map start

Some people reported game freeze at map start. Set a negative value to the music volume fix it.

quake3.x86 +set s_musicvolume -1

Enemy Territory Settings

This is kinda a no win situation. The developers have done a few odd things with the settings which can make saving them and keeping them consistent difficult. A lot of times setting will appear lost or change seemingly randomly. This is because each profile and mod can have it's own settings. To help keep a consistent environment:

  • Only use one profile. Even if you set a default profile, it never seems to stick and you'll find yourself playing a player you didn't intend with lower XP and different settings.
  • Change your options in the main menu and not during the game. I've had settings lost if I played a game and then exited from the game. After you have the settings as you like quit and restart.
  • When saving settings use the back button and not the escape button to leave a menu.
  • "Compress Textures = No" seemed to help smooth things up.
  • "Smooth Mouse" actually can actually make it more difficult to aim.

? Mods use their own settings to so you will have to enter all your setting once again per mod.

Persistent Settings

There is a rather easy way to make your settings persistent (even when using different mods). How? By making use of the file autoexec.cfg which may initially be located in your ~/.etwolf/etmain directory (if it isn't, create it). autoexec.cfg will be executed at every start of the game.

What is supposed to be in autoexec.cfg? It makes sense to keep in it all settings you want to make persistent. Initially you can use those found in the file ~/.etwolf/etmain/etconfig.cfg (which is created once you started (and ended) the game). If you are unfamiliar with the stuff you find in that file, check out ET 4 newbies and this (scripting for newbies).

Now that you have a basic idea what should be in your autoexec.cfg, it is time to edit it. Keep in all your important settings and get rid of the rest. You can come back any time to make adjustments or additions.
As soon as you start the game, your autoexec.cfg will be loaded/executed. (if the game is already running there is no need to restart the game; simply invoke the console and enter the following: /exec autoexec.cfg)

In case you have other mods (like etpro, jaymod, etpub) installed, you can create symbolic links. This has a distinct advantage: only one autoexec.cfg will be used, which makes it easy to keep your settings up to date for all installed mods. Assuming you have etpro installed, what you need to do is the following:

cd ~/.etwolf/etpro
ln -s ../etmain/autoexec.cfg

Use the same method to create symbolic links for all your other mods and you will be set.

Punkbuster

Punkbuster is an optional client but required by numerous servers to prevent online cheating. If you want to be able to play on these servers you'll need to have an updated punkbuster:

  1. Download the updater. pbweb
  2. put in ~/.q3a/pb or ~/.etwolf/pb
  3. make it executable chmod +x ~/.q3a/pb/pbweb.x86
  4. ./pbweb.x86 - takes a few minutes

. .


Last modified: Thu, 04 Sep 2008 11:31:00 +1000 Hits: 22,795

Created by NickStallman.net, Luxury Homes Australia
Real estate agents should list their apartments, townhouses and units in Australia.