DOOM auf Linux

Aus MySlug
Zur Navigation springen Zur Suche springen

logo

Doom is not a game, it's sports...

Prolog

Nachdem Doom im August 2011 nach vielen Jahren von dem deutschen Index der jugendgefährdenden Medien gestrichen wurde, und es damit auch einfacher geworden ist, über dieses Spiel öffentlich zu sprechen, ist es Zeit für mich, die alten CDs wieder auszupacken und zu sehen, was hier unter Linux alles machbar ist. Da ich ein eingefleischter openSUSE (http://www.opensuse.org) User bin, schaue ich mir das unter der derzeit aktuellen openSUSE 12.2 (64bit) an.

Die Sourcen der Doom Engine schon lange freigegeben und es haben sich einige Projekte gebildet, die auch sich darum bemüht haben, die Engine auf openGL lauffähig zu bekommen. Natürlich gibt es hierzu einige Mods, Texturverbesserungen bis dahin, dass die alten Sprites der Figuren und Gegenstände durch echte 3D Modelle ausgetauscht wurden.

Die Bemühungen finde ich alle klasse, nur bin ich eher der Typ, der sein "Retro-Feeling" benötigt. Also muss die Konvertierung für mich zwar auf moderner Hadware angepasst sein (Full HD, 3D beschleunigt), darf aber nichts vom Flair des Originals verlieren. Ich habe mir hierzu das prboom (http://prboom.sourceforge.net), jdoom / Doomsday (http://dengine.net) und gzdoom (die openGL Version des zdoom - http://www.osnanet.de/c.oelckers/gzdoom/) angesehen, und muss sagen, dass mir persönlich was das Retro Feeling betrifft hierbei das gzdoom am besten gefallen hat. Gzdoom liefert Optionen, die die Originaltexturen auch noch original aussehen lässt, ohne dabei aber zu sehr pixelkrank zu werden. Hierzu müssen dann entsprechende Änderungen an der Konfiguration gemacht werden, die aber zum Glück über das eigene Menü hauptsächlich funktionieren.

E1M1

E1M1 im Leveleditor "DOOM BUILDER"

Um den DOOM Port gzdoom unter openSUSE 12.2 (http://www.opensuse.org) zu kompilieren und zu spielen sind ein paar Vorarbeiten nötig. Hierbei geht es um folgende Schritte:

- Vorbereitung des Systems
- Installation von Fmod Ex (für die Sound / Midi Wiedergabe)
- Aktuellen Quellcode über SVN ziehen
- Compile der gzdoom Binaries
- Installation der gm.dls für die Midi Wiedergabe
- Konfiguration der doom.ini und Installation der doom.wad

An den Schritten ist zu erkennen, dass die Angelegenheit nicht trivial ist. Voraussetzung zum Spielen ist zudem ein Originalmedium von Doom. Auf den CD Versionen finden sich hierzu jeweils eine sogenannte wad - Datei, die die Leveldaten und Grafiken des Spiels nebst allen Soundfiles beinhaltet. Diese sind urheberrechtlich geschützt und müssen somit gekauft werden.

Ferner benötigen wir um Midi Sound über FMOD zu erhalten eine Soundfond Datei, die gm.dls. Diese findet Ihr bei einem installierten Windows im Verzeichnis /system32/drivers/. Kopiert diese Datei z.B. unter Linux nach /usr/share/sounds/. Solltet Ihr auf die gm.dls keinen Zugriff haben, so könnt Ihr später auch Midi auf Timidity umstellen. Timidity muss hierzu installiert sein.

Ich erkläre das am Beispiel eines installieren openSUSE 12.2 Linux, wobei ich die 64bit Variante verwende. Im Prinzip ist das auf andere Linux Varianten leicht übertragbar.

Voraussetzung

Folgende Pakete müssen installiert sein (via Yast oder zypper):

- make
- gcc-c++
- zlib-devel
- SDL-devel
- libjpeg-devel
- libbz2-devel
- fluidsynth-devel
- nasm
- gtk2-devel
- cmake

FMOD installieren

Holt Euch auf der Seite http://www.fmod.org die tar.gz des Fmod EX codes passend zu Eurer Linux Architektur (64 bit / 32 bit). Entpackt diese in einem Arbeitsverzeichnis. Wechselt in das Verzeichnis z.B.

cd fmodapi44203linux64

und installiert die API mittels

sudo make install

Die Bibliotheken werden hierbei in das Verzeichnis /usr/local/lib/ hinterlegt, die Header dazu sind dann im Verzeichnis /usr/local/include/fmodex/ zu finden.

gzdoom Quellcode herunterladen und übersetzen

Den Quellcode ziehen wir mittels svn in unserem Arbeitsverzeichnis:

svn co http://mancubus.net/svn/hosted/gzdoom/trunk/ gzdoom

Nach dem Checkout wechseln wir in das neue Verzeichnis gzdoom

cd gzdoom

und legen ein build-Verzeichnis an:

mkdir build



Patchvorgang für FMOD / Prologic



Bitte ändert jetzt zuerst im Quellcode folgende Datei ab:

...gzdoom/src/sound/fmodsound.ccp

Sucht nach der Zeile (normal auf Zeile 201):

{ "Prologic",				FMOD_SPEAKERMODE_PROLOGIC },

Ändert diesen wie folgt ab:

{ "Prologic",				FMOD_SPEAKERMODE_SRS5_1_MATRIX },

Speichert die Änderung. Wechselt dann in das build Verzeichnis

cd build

Wir bereiten nun den Compile vor. Der Compile muss gegen die Header unserer FMOD Version laufen. Deswegen passt den folgenden Parameter auf das include - Verzeichnis entsprechend an:

cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..

Wenn dies fehlerfrei durchgelaufen ist, starten wir den Compile:

make

Das war es soweit. Wenn alles gut gelaufen ist, kopiert die neuen Dateien aus dem build Verzeichnis in ein neues Verzeichnis, aus dem Ihr in Zukunft Doom starten wollt. Diese Dateien sind:

Discs

Rare item. The original discs

brightmaps.pk3
gzdoom
gzdoom.pk3
liboutput_sdl.so
lights.pk3

Dazu kopiert die doom.wad von Eurer Doom CD.

Starten und konfigurieren

Startet dann gzdoom. Ihr könnt nun die Einstellungen des Spiels vornehmen. Ihr werdet bemerken, dass noch kein Midi Sound wiedergegeben wird. Entweder Ihr stellt beispielsweise auf Timidity um oder beendet erst einmal gzdoom und geht in das versteckte Verzeichnis in Eurem Homeverzeichnis

~/.config/gzdoom

Dort öffnet die zdoom.ini und sucht die Zeile set_midipatchset und gebt dort den Pfad zu Eurer dls an:

set_midipatchset=/usr/share/sounds/gm.dls



Speichert die Änderung. Jetzt solltet Ihr beim nächsten Start auch entsprechend die Musik im Spiel haben.

Grafikoptionen

Natürlich kann man nun über das Menü einiges an der Bildqualität des Spiels drehen. Ich liste hier meine Settings auf, die folgendes Ergebnis auf meiner nvidia (http://www.nvidia.com) GeForce 460GTX Grafikkarte liefern:

FULL HD

Um die Full HD Variante anzusehen klickt einfach auf diesen Link: http://www.gargi.org/stuff/opensuse122/doom_fullhd.jpg

Die Settings hierfür als Screenshots:

Settings 1

Settings 2

Settings 3

Settings 4

Kantenglättung stelle ich dann bei meiner Nvidia Grafikkarte über ein Startscript ein, da ich das nicht unbedingt in der Konfiguration für alle 3D Programme aktivieren möchte. Dazu sieht mein Script wie folgt aus:

#!/bin/sh
cd /home/hans/bin/gzdoom
nvidia-settings --assign FSAA=11 --assign FSAAAppControlled=0 --assign FSAAAppEnhanced=0
gzdoom
nvidia-settings --assign FSAA=0 --assign FSAAAppControlled=1 --assign FSAAAppEnhanced=0

Bei Grafikkarten anderer Hersteller funktioniert dieses Script nicht, sonder die Kantenglättung muss hier ggf. anders aktiviert werden.

Alternativ kann man natürlich auch in seiner gzdoom ini in der Sektion [GlobalSettings] das Antialisasing mittels dem Multisampling erzeugen. Hierzu den Wert

gl_vid_multisample=0

auf

gl_vid_multisample=8

für 8x setzen.
Der Unterschied ist dann auch entsprechend gut zu erkennen:

Multisample

Stuttering Problem bei aktivierten Compositing Effekten

Bei aktivierten Desktopeffekten (die auf die 3D Schnittstelle der Grafikkarte aufsetzen) kann es unter Linux passieren, dass 3D Spiele im Vollbildmodus leicht ruckeln und weniger schnell laufen. Hierzu kann man die Desktop Effekte einfach mittels einer Tastenkombination SHIFT+STRG+F12 abstellen. Eleganter ist es, dies gleich an passender Stelle soweit einzustellen, dass eben im Vollbildmodus die Effekte ausgesetzt werden. Das passiert beispielsweise unter Windows 7 mit dem Aero oft im Hintergrund unbemerkt, um eben hier das Maximale an Performance heraus zu holen.

Korrekt einstellen könnt Ihr dies im KDE4 unter Linux über die Systemeinstellungen. Dort klickt auf Arbeitsflächen-Effekte:

Compositing 1

Im Registerblatt Erweitert klickt dann "Arbeitsflächeneffekte für Fenster im Vollbildmodus aussetzen" an:

Compositing 2

Mit Anwenden übernehmt Ihr dann die Änderung. Jetzt sollte das Ruckeln nicht mehr auftreten.

SPEC Files

Hier noch zwei (vereinfachte) Spec Files, solltet Ihr lieber RPM Pakete für openSUSE erstellen wollen, die Ihr dann via YAST beispielsweise installieren könnt. Passt die SPECS gegebenfalls auf Eure Architektur an (32bit oder 64bit).

Specfile für FMOD

# Specfile for FMOD
# norootforbuild
%define _minor	03
%define _ver2	4.42
Summary: 	FMOD is a cross platform audio library and toolset
Name: 		libfmodex
Version: 	44203
Release: 	1.0
License: 	see LICENSE.TXT
Group: 		Development/Libraries/C and C++
Source: 	fmodapi44203linux64.tar.gz
Url:		http://www.fmod.org/
BuildRoot:	%{_tmppath}/%{name}-%{version}-build
Distribution:   openSUSE 12.2
Packager:       YOUR NAME / URL>

%description
FMOD is a cross platform audio library and toolset to let you easily
implement the latest audio technologies into your title.

The FMOD Ex sound system is a revolutionary new audio engine for
game developers, multimedia developers, sound designers, musicians
and audio engineers, based on the years of experienced of Firelight
Technologies(tm) previous product FMOD.
It also aims high - to push the boundaries of audio implementation
for games and the like while at the same time using minimal resources
and being scalable. This new engine is written from the ground up
since FMOD 3 was released and involves years of experience and
feedback from FMOD users to create the most feature filled and easy
to use product possible, without the rawbacks of legacy
implementation that FMOD 3 may have suffered from its years of
continuous development.

Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2009


%prep
%setup
%build

%install
mkdir -p $RPM_BUILD_ROOT/usr/local/lib
mkdir -p $RPM_BUILD_ROOT/usr/local/include/fmodex

cp /api/lib/libfmodex64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so
cp /api/lib/libfmodexL64-%{_ver2}.%{_minor}.so $RPM_BUILD_ROOT/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so
cp /api/inc/fmod_codec.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_codec.h
cp /api/inc/fmod_dsp.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_dsp.h
cp /api/inc/fmod_errors.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_errors.h
cp /api/inc/fmodex/fmod.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.h
cp /api/inc/fmodex/fmod.hpp $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod.hpp
cp /api/inc/fmodlinux.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmodlinux.h
cp /api/inc/fmod_memoryinfo.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_memoryinfo.h
cp /api/inc/fmod_output.h $RPM_BUILD_ROOT/usr/local/lib/include/fmodex/fmod_output.h


%files
/usr/local/lib/libfmodex64-%{_ver2}.%{_minor}.so
/usr/local/lib/libfmodexL64-%{_ver2}.%{_minor}.so
/usr/local/lib/include/fmodex/fmod_codec.h
/usr/local/lib/include/fmodex/fmod_dsp.h
/usr/local/lib/include/fmodex/fmod_errors.h
/usr/local/lib/include/fmodex/fmod.h
/usr/local/lib/include/fmodex/fmod.hpp
/usr/local/lib/include/fmodex/fmodlinux.h
/usr/local/lib/include/fmodex/fmod_memoryinfo.h
/usr/local/lib/include/fmodex/fmod_output.h



Specfile für gzdoom

#Specfile fuer GZDOOM
Summary: Shooter aus den gzdoom Quellen
Name: gzdoom
Version: 1455
Release: gargibuild
License: see BUILDLIC.TXT 
Group: Games/Action
Source: gzdoom-1455.tar.gz
URL: http://www.osnanet.de/c.oelckers/gzdoom/index.html
Distribution: openSUSE 12.2
Packager: YOUR NAME /URL>

%description
Bekannter und legendärer 3D Shooter mit openGL portierter Grafik. Hierbei handelt es sich nur 
um den Linux Patch, der nur die Binaries zum Start des Spiels zur Verfügung stellt. Es werden weiterhin 
die Originaldateien der originalen Installations CD benötigt.

%prep
%setup
%build
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DFMOD_LIBRARY=/usr/local/lib/libfmodex64-4.42.03.so -DFMOD_INCLUDE_DIR=/usr/local/include/fmodex/ ..
make

%install
mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom
mkdir -p $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs

cp build/brightmaps.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/brightmaps.pk3
cp build/gzdoom $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom
cp build/gzdoom.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/gzdoom.pk3
cp build/liboutput_sdl.so $RPM_BUILD_ROOT/usr/local/games/gzdoom/liboutput_sdl.so
cp build/lights.pk3 $RPM_BUILD_ROOT/usr/local/games/gzdoom/lights.pk3
cp docs/* $RPM_BUILD_ROOT/usr/local/games/gzdoom/docs/

%files
/usr/local/games/gzdoom/brightmaps.pk3
/usr/local/games/gzdoom/gzdoom
/usr/local/games/gzdoom/gzdoom.pk3
/usr/local/games/gzdoom/liboutput_sdl.so
/usr/local/games/gzdoom/lights.pk3
/usr/local/games/gzdoom/docs/*

Über diese RPM wird dann gzdoom nach /user/local/games/gzdoom installiert.

Links

Projektseite gzdoom: http://www.osnanet.de/c.oelckers/gzdoom/index.html
id Software: http://www.idsoftware.com/
FMOD: http://www.fmod.org
Timidity: http://timidity.sourceforge.net/
openSUSE: http://www.opensuse.org
gzdoom auf Windows compilieren: http://zdoom.org/wiki/Compile_ZDoom_on_Windows
weiteres Tutorial für Windows: http://www.moddb.com/games/doom/tutorials/tutorial-15-compile-the-source-code-for-zdoom-and-gzdoom
Forenbeitrag zum Thema auf Gargi.org: http://www.gargi.org/showthread.php?4095-Compile-gzdoom-unter-openSUSE-Linux-12-2
Forenbeitrag zum Thema auf openSUSE: http://forums.opensuse.org/deutsch-german/hilfe-und-helfen/anwendungen/479055-doom-unter-opensuse.html

Mit Wirkung zum 31. August 2011 hat die Bundesprüfstelle für jugendgefährdende Medien die Indizierung der Spiele Doom und Doom 2 aufgehoben.



Have fun!

Pierre "Gargi" Kretschmer

Bei Fragen zu den Anleitungen wendet Euch bitte an mein Forum unter http://www.gargi.org. Die Anmeldung und Nutzung des Forums ist kostenlos.



<metakeywords>Doom,Linux,openSUSE,compile</metakeywords>