ut2003 und XOrg (auch interessant für andere Spiele dieser A

Hier könnt ihr Probleme, Anmerkungen, Infos, Beschreibungen,... zu nativen Linux-Games posten.

Moderator: Moderator

ut2003 und XOrg (auch interessant für andere Spiele dieser A

Beitragvon beko » 24.02.2008, 21:04

Seit einigen Updates konnte ich kein Unreal Tournament 2003 mehr starten. Mit dem neuen X-Server verschwanden auch einige Zusatzprogramme aus dem Paketbaum meiner Distribution. Nachdem sich heute eine weitere Fehlermeldung dazu gesellte habe bin ich der Sache einmal auf den Grund gegangen. Hier die Fehlermeldung, die mich beim Starten von ut2003 nun schon seit Monaten heim suchte:

Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 135 (XFree86-VidModeExtension)
Minor opcode of failed request: 10 (XF86VidModeSwitchToMode)
Value in failed request: 0xb6
Serial number of failed request: 203
Current serial number in output stream: 205

Mich verwunderte dies sehr, da ich doch das Paket "libXxf86vm", welches die Funktion VidModeExtension zur Verfügung stellt, installiert hatte. Im Internet stieß ich dann auf folgende Erkenntnis: Viele Spiele nutzen das veraltete Programm "xvidmode" um die Auflösung im Vollbild zu setzen. Dafür wird heutzutage aber nur noch "xrandr" genutzt. Demnach müsste der Befehl "ut2003 --windowed" funktionieren. Klasse, es läuft also im Fenster, aber nicht im Vollbild. Nun habe ich drei Lösungen dafür konzipiert:

1. QuicknDirty

Code: Alles auswählen
ln -s /usr/bin/xrandr /usr/bin/xvidmode

Als root ausführen. Dabei wird eine symbolische Verknüpfung von xrandr auf xvidmode erstellt. Die Befehlssyntax ist zwar leicht unterschiedlich aber für ut2003 scheint es zu reichen :)

2. Richtig

xvidmode zum Beispiel von ToCows herunter laden, kompilieren und unter /usr/bin installieren

3. Hack

Dabei editiert man das UT2003 startup script im Spielverzeichnis und fügt folgende Zeilen vor "# Lets boogie!" ein:
Code: Alles auswählen
#set proper screenresolution
utINI="$HOME/.ut2003/System/UT2003.ini"
if [ -r "$utINI" ]; then
        xwidth=`grep -m 2 FullscreenViewportX $utINI | cut -f2 -d= | tail -1`
        xheight=`grep -m 2 FullscreenViewportY $utINI | cut -f2 -d= | tail -1`
        echo "Read $xwidth x $xheight from UT2003.ini"
        xrandr `echo "-s "$xwidth"x"$xheight""`
fi

Hier ziehe ich mir die gewünschte Auflösung aus der UT2003.ini im Heimatverzeichnis und setze die Auflösung vor dem Spielstart manuell. Existiert noch keine UT2003.ini kann man das Spiel in dem Fall einmal mit "--windowed" starten. Dabei wird die INI dann erstellt und die Auflösung nach dem Einstellen im Menü unter Settings geschrieben. Ein optionales "xrandr -s 0" (oder andere gewünschte Auflösung) am Ende des Skripts setzt die Auflösung nach dem Spielen wieder zurück.

..aus diesem xvidmode/xrandr Grund setzt übrigens auch Quake3 und Enemy Territory die Auflösung nach dem Start nicht mehr richtig!

Es gibt noch ein weiteres Problem, welches mit einem neueren X-Server aufzutreten scheint. Dabei kommt folgende oder ähnliche Fehlermeldung zusätzlich zum Spielstart:
ut2003-bin: xcb_lock.c:70: _XGetXCBBuffer: Assertion `((int) ((xcb_req) - (dpy->request)) >= 0) failed.

Das kann man beheben indem man die systemeigene Bibliothek von libSDL nutzt. Dazu muss man erst die libSDL im Systemordner von ut2003 verschwinden lassen:
Code: Alles auswählen
cd /usr/local/games/ut2003/System
mv libSDL-1.2.so.0 libSDL-1.2.so.0.contrib
ln -s /usr/lib/libSDL-1.2.so.0


Happy fragging :)
"Sir, we are surrounded!" - "Great - we can attack in any direction."

Current project: Mechanized Assault and eXploration Reloaded (maxr)
Benutzeravatar
beko
 
Beiträge: 595
Registriert: 25.01.2008, 21:07
Lizenz: GPL

Zurück zu Native Linux Spiele

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste

cron