[Tipps & Tricks] UT-Classic auf einem aktuellen Linuxsystem

Bio-logisch

Moderator
Teammitglied
Ergänzend zu Gorkons hervorragender Anleitung https://www.supernature-forum.de/ti...-and-tricks-ut-classic-moderner-hardware.html der Versuch, das ganze auf Linux zu übertragen.

Vorwort
Auch die Linuxversion des alten Unreal Tournament (UT) kämpft mit den Tücken der neuen Technik.
Die Probleme sind zwar ähnlicher Natur, aber die Lösungsansätze unterscheiden sich doch im Detail.

Die allgemeine Installation wird auf der Linuxseite für Spiele schlecht hin, HOLARSE :: Unreal Tournament erklärt.
Der bekannte UTGLR-Treiber ist für Linux leider nicht erhältlich. Alternativ kann man den Patches 451 von UTPG :: Working To Keep Unreal Tournament Alive! ausprobieren. Das Archiv wird mit dem Befehl tar -xjvf entpackt. Die enthaltenen Dateien werden direkt in das UT-Verzeichnis (/usr/local/games/ut) kopiert. Dieser Patch enthält einen wesentlich besseren OpenGL-Treiber, als der im letzten offiziellen Patch 436.

Die Auswahl des 3D Treibers erfolgt unter Linux ganz komfortabel mit dem Texteditor der Wahl ;)

Nach dem ersten Start von UT wird im Home-Verzeichnis ein versteckter Ordner ~./loki/ut angelegt.
Dateien, die in diesem Ordner liegen, haben eine höhere Priorität als die im eigentlichen Installationsverzeichnis. Wenn also in der lokalen Datei ~./loki/ut/System/UnrealTournament.ini etwas verändert wird, gilt diese Änderung, auch wenn in /usr/local/games/ut/System/UnrealTournament.ini was anderes steht.

Ich empfehle, alle Änderungen erst lokal auszuprobieren.
Ziemlich am Anfang der UnrealTournament.ini ist der Eintrag [Enging.Engine]. Folgende Einstellungen aktivieren den OpenGL-Render:

Code:
[Engine.Engine]
GameRenderDevice=OpenGLDrv.OpenGLRenderDevice
WindowedRenderDevice=OpenGLDrv.OpenGLRenderDevice
RenderDevice=OpenGLDrv.OpenGLRenderDevice

Nach der Installation können diese Probleme auftreten:

Speedattacken
Das Spiel wird - gerade in ruhigen Situationen - sprunghaft schneller.
Ursache: UT setzt mehr zu Verfügung stehende Leistung in mehr Frames pro Sekunde (FPS) um. Wenn diese aber über 200 gehen, wird das Spiel selber beschleunigt.

Lösung:
Die FPS müssen begrenzt werden. Die von Gorkon beschriebenen Parameter für die ini scheinen unter Linux keinen Effekt zu haben.

Alternative:
Die Funktion "Sync to VBlank" begrenzt die Framerate von OpenGL Anwendungen auf die Frequenz des X-Servers. Da diese üblicherweise zwischen 60 und 75 Hz liegt, tritt das Problem dann nicht mehr auf.
Wer eine Nvidia-Karte hat, dann diese Option mit dem Programm "nvidia-settings" (Anhang 1) aktivieren.

Damit diese Einstellung automatisch gemacht wird, kann man folgendes Script als "startut.sh" speichern und mit chmod +x ausführbar machen:

Code:
#!/bin/sh
nvidia-settings --assign="SyncToVBlank=1"
/usr/local/games/ut/ut
nvidia-settings --assign="SyncToVBlank=0"

Manchmal Zeitlupe, manchmal Speedattacke
Symptom und Ursache sind die gleichen wie bei Windows: UT synchronisiert sich ein mal beim Start mit dem Prozessortakt - wenn dieser nachträglich verändert wird, ändert sich auch die Geschwindigkeit des Spiels.

Lösung:
Die Prozessorgeschwindigkeit muss vorher fixiert werden. Wie dies am besten geht, hängt von der Distribution ab.
Wird der Takt mit dem "powersaved" gesteuert, geht dies mit K-Powersave:
Rechtsklick auf den "Stecker" in der Taskleiste, "Setze CPU-Frequenzverhalten" auf "Leistung". Zur Kontrolle die Maus über das Icon halten, ob die Frequenz wirklich maximal ist.

Alternative:
Dieses Script als "startut.sh" speichern und mit chmod +x ausführbar machen:

Code:
#!/bin/sh 
powersave -f
/usr/local/games/ut/ut
powersave -l


Wenn nicht der powersaved eingesetzt wird, kann alternativ dieses Script verwendet werden:

Code:
#!/bin/sh
su -c "echo 1400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"
cd /usr/local/games/ut/
./ut
su -c "echo 600000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq"

Der minimalen Prozessortakt wird auf 1400000 kHz eingestellt (der maximale Wert des Prozessors meines Laptops), danach wechselt das Script ins ut-Verzeichnis und startet das Programm.
Wird das Programm beendet, werden die Einstellungen zurückgestellt.

Die Werte für die eigene cpu bekommt man mit
Code:
matthias@linux:~> cat /proc/cpufreq
minimum CPU frequency - maximum CPU frequency - policy
CPU 0 600000 kHz ( 42 %) - 1400000 kHz (100 %) - userspace

Alternativ kann man den Rechner auch mit dem Bootparameter
Code:
acpi=off
neu starten.

Probleme mit dem Dualcore / HT Prozessor
Mangels eines geeigneten PCs nur theoretisch:
Das Programm taskset kann einem Prozess einen festen Prozessor zuweisen.
Der Befehl zum starten von UT müsste etwa so aussehen:
Code:
taskset 0x00000001 /usr/local/games/ut/ut
Weiteres in der Manpage man taskset.

Das Programm procbind könnte auch helfen.

Alternativ kann man auch den Rechner mit dem Bootparameter
Code:
nosmp
starten.

Das Spiel ist viel zu dunkel!
Teilweise ist das Spiel fast schwarz, wenn es gestartet wird - Gegner sind nicht zu erkennen.

Lösung:
Die erste Maßnahme ist zu Überprüfen, ob der OpenGL Render eingerichtet ist.
Wenn dies nicht geht, reicht es manchmal kurz den Schieber für "Options", "Preferences", "Brightness" (Helligkeit) antippen.
Zudem sollte man den Patch 451 testen.

Falls dies alles nichts hilft, kann man mit diesem Script die Helligkeit des Monitors hochstellen:

Code:
#!/bin/sh 
xgamma -gamma 1.7
powersave -f
/usr/local/games/ut/ut
powersave -l
xgamma -gamma 1.0

Das xgamma -gamma 1.7 sorgt dafür, dass das Bild heller wird, xgamma -gamma 1.0 stellt den Standard wieder her.

Keine Soundausgabe
Das Spiel selber startet fehlerfrei, aber es gibt keinen Ton.

Lösung:
Unreal Tournament verwendet die schon etwas angestaubte Schnittstelle oss für die Soundausgabe, aktuelle Linuxdistributionen verwenden aber Alsa.
Daher muss die Alsa/Oss Soundemulation aktiviert sein.
Die Kernelmodule snd-pcm-oss, snd-mixer-oss und snd-seq-oss müssen dafür geladen werden.

Alternativ kann man das Script aoss ausprobieren:

Code:
#!/bin/sh
aoss /usr/local/games/ut/ut

Weiteres im Alsawiki.:
OSS emulation - ALSA wiki

Wenn trotz geladener Soundmodule keine Ausgabe erfolgt, kontrollieren, ob eventuell ein anderes Programm auf die Schnittstellen zugreift. Heißer Kandidat hierfür ist der Soundserver arts, wenn man KDE verwendet.
Er lässt sich im KDE - Kontrollzentrum (Anhang 2) abschalten.
Alternativ kann man UT über den Soundserver arts laufen lassen, um so z. B. einen mp3player mit laufen zu lassen: Dafür die Datei /usr/local/games/ut/ut mit einem Texteditor öffnen und den Befehl
Code:
exec "./ut-bin" $* -log
aus der 4. Zeile von unten in
Code:
artsdsp "./ut-bin" $* -log
abändern (nicht mit aoss kombinieren!).

Noch ein Tipp am Rand:
Folgendes Script ersetzt unter Linux Programme wie "cachecleaner":

Code:
#!/bin/bash  
function moveit() {
        echo $(mv $cachename$ext $utdir$1$realname 2>/dev/null ) 1>/dev/null 2>&1
        if [ ! -f $utdir$1$realname ]; then echo $realname" move failed!"; echo "";fi
}

function close() {
        rm cache.ini *.uxx 2>/dev/null
#        if [ -f $utdir"System/De.u" ]; then rm $utdir"System/De.u" ;fi # optional
#        if [ -f $utdir"System/de.u" ]; then rm $utdir"System/de.u" ;fi # optional
        exit 0
}

# Need to change these 2 lines:
cachedir=$HOME/.loki/ut/Cache # change to your cache dir
utdir=$HOME/.loki/ut/ # change to your UT dir, or where you want to move files to

# Create directories
for folder in Maps Music Sounds System Textures ; do
if [ -d $utdir$folder ] ; then continue ; else mkdir -v $utdir$folder ; fi
done

ext=".uxx"
cd $cachedir
if [ ! -f cache.ini ]; then close; fi

for line in `cat cache.ini | sed '/^\[Cache\].$/d'`
do
realname=${line:33:${#line}-34}
cachename=${line:0:32}
if echo "$realname" | grep -i \.unr$; then moveit "Maps/"
elif echo "$realname" | grep -i \.utx$; then moveit "Textures/"
elif echo "$realname" | grep -i \.uax$; then moveit "Sounds/"
elif echo "$realname" | grep -i \.umx$; then moveit "Music/"
elif echo "$realname" | grep -i \.dll$; then moveit "System/" #for wine users
elif echo "$realname" | grep -i \.u$; then moveit "System/"
else continue
fi
done
close

Einfach eine neue Textdatei mit dem Namen utcachecleaner.sh anlegen und das Script hinein kopieren.
Verändert nach:
New linux cache cleaner - The Unreal Admins Page - Forums

Endmontage
Die beiden Scripte startut.sh und utcachecleaner.sh habe ich in ~/bin abgespeichert.
Mit einem Desktopicon lasse ich diese nun nacheinander automatisch laufen:

Rechsklick auf den (KDE) Desktop, neu erstellen, Verknüpfung zu Programm.

Reiter Allgemein:
Der Name ist Unreal Tournament, das Icon findet sich in /usr/local/games/ut/icon.xpm

Reiter Programm:
Befehl: startut.sh && utcachecleaner.sh
Erweiterte Optionen: "In Terminal starten" und "Nach Programmende geöffnet lassen" aktivieren, damit man sieht, ob alles klappt.
Fertig zum Fraggen ;)
 

Anhänge

  • nvidia-settings.jpg
    nvidia-settings.jpg
    42,9 KB · Aufrufe: 202
  • Arts.jpg
    Arts.jpg
    81,9 KB · Aufrufe: 199
Zuletzt bearbeitet:

Bio-logisch

Moderator
Teammitglied
Ich hab noch mal probiert, wie UT mit wine läuft:

Unter SuSE 10.3 als root
yast -i wine
aus der Rootkonsole Abmelden

Aktives Schema in den Energieoptionen auf "Leistung"
In der Konsole:
wine /windows/c/UnrealTournament/System/UnrealTournament.exe

Läuft wirklich klasse, selbst wenn DirectX als Render eingesetzt wird (der normale DirectX7 Render)

Nur muss man nach dem Ende des Spiels mit
xgamma -gamma 1.0
Das Gamma wieder richtig einstellen, dass kriegt wine selber nicht hin.

Der Sound war (gerade der der Shockcombo) war sogar besser als bei dem nativen UT. Außer dem haben alle Einstellungen aus der Windows user.ini sofort funktioniert.
Für ein schnelles Spiel zwischendurch sicher eine Alternative.
 
Zuletzt bearbeitet:

Bio-logisch

Moderator
Teammitglied
Das Cachecleaner - Script habe ich noch mal überarbeitet:
Ein Tippfehler verhinderte das Musikdateien gesichert wurde. Zudem war ein Bug enthalten, der Dateien unter Umständen im falschen Verzeichnis erscheinen lies.

Wer diese Script verwendet, bitte aktualisieren!
 
Oben