Benutzer:Tütensuppe/MPQ Dateiformat

aus Wikipedia, der freien Enzyklopädie

MPQ (Mo'PaQ, kurz für Mike O'Brien Pack, benannt nach seinem Schöpfer) ist ein archivierendes Dateiformat, welches in vielen Computerspielen von Blizzard Entertainment verwendet wird.

MPQ-Dateien, die in Spielen von Blizzard verwendet werden, beinhalten allgemein Dateien bestehend aus Grafiken, Sounds und Leveldaten. Das Format besitzt die Fähigkeit zur Komprimierung, Verschlüsselung und Datei-Segmentierung. Zudem gibt es die Möglichkeit von erweiterbarer Datei-Metadaten, einer kryptografischen Signatur und die Fähigkeit zur Speicherung von mehreren Versionen der gleichen Datei für Internationalisierung und plattformabhängige Unterschiede. MPQ Archive können eine Vielfalt von Kompressionsalgorithmen verwenden, welche miteinander kombiniert werden dürfen.

Datei Indizierung

Um den Geschwindigkeitsanforderungen, die allgemein von Computerspielen gefordert werden, gerecht zu werden, werden die Dateien mittels eines Hash-Algorithmus, der eine schwache Kollisionsresistenz aufweist, in einer Hash-Tabelle indiziert. Der Index einer bestimmten Datei innerhalb der Tabelle ist der in Großbuchstaben beschriebene Dateiname Modulo der Größe der Hash-Tabelle. Damit ermöglicht man eine schnelle Überprüfung der Datei-Existenz im Archiv. Haben mehrere Dateien im Archiv denselben Hash-Wert, folgen kollidierende Einträge mit aufsteigendem Index aufeinander (und formen damit eine Ansammlung von kollidirenden Hash-Werten ("Cluster")). Um den exakten Eintrag einer angeforderten Datei innerhalb des Clusters auszumachen, speichert jeder Eintrag der Hash-Tabelle zwei weitere Hash-Werte des in Großbuchstaben geschriebenen Dateinamens, wobei jedes mal derselbe Hash-Algorithmus mit unterschiedlichen Saat-Werten sowie einem Sprach- und Plattformcode verwendet wird. Das Ende des Clusters wird entweder durch das Treffen auf einen leeren Tabelleneintrag oder durch Durchqueren der gesamten Hash Tabelle (einschließlich Modulo Negation) zurück zum ursprünglichen Hash-Tabellen-Index angegeben.

Archiv Metadaten

MPQ-Archive haben keinen bestimmten Aufbau, um Metadaten, die über das absolut Notwendige zum Verwenden der Archiv-Dateien hinausgehen, zu speichern. Stattdessen werden normale Dateien verwendet, deren Dateiname in runden Klammern eingeschlossen ist.

Bekannte Metadaten-Dateien sind:

  • (listfile): Beinhaltet eine Liste der Archiv-Dateien; ein Dateiname pro Zeile. Muss nicht zwingend vollständig sein.
  • (signature): Beinhaltet die schwache kryptographische Signatur des Archivs. Dieser Typ von Signatur ist veraltet.
  • (attributes): Beinhaltet erweiterte Datei-Metadaten. Momentan sind bekannte Attribute das Dateierstellungsdatum, CRC32 und MD5 Prüfsumme.

Kompression

In modernen MPQ-Archiven kann jedes Segment (oder Sektor) einer Datei durch Kombination von verschiedenen Kompressionsalgorithmen komprimiert werden. Ein Header-Byte wird jedem komprimiertem Sektor vorangestellt, um anzugeben, welche Kompressionen verwendet wurden. Die Reihenfolge, in welcher die Kompressionen angewendet werden, ist hart-codiert.

Die folgenden Algorithmen werden zur Zeit von Blizzards Spielen verwendet:

  • PKZIP (lizensiert von PKWARE). Der erste verfügbare Kompressionsalgorithmus.
  • Huffman Tree Kompression (mit StarCraft eingeführt). Immer in Kombination mit der ADPCM Kompression.
  • ADPCM 4:1 Kompression (mit StarCraft eingeführt). Immer in Kombination mit der Huffman Tree Kompression. Dieser Algorithmus ist verlustbehaftet und daher nur für grobe PCM Eingabe-Daten sinnvoll.
  • zlib (mit Warcraft III eingeführt).
  • bzip2 (mit Warcraft III: The Frozen Throne eingeführt).

Da nur ein Kompressionsalgorithmus zur Verfügung stand, als MPQ-Archive zur Zeit von Diablo 1 ausgearbeitet wurden, benutzten diese Archive eine unterschiedliches Art, um die Kompression anzugeben und verwendeten daher auch kein Header-Byte vor komprimierten Sektoren.

Warcraft III Videosequenzen

Zwischensequenzen mit MPQ-Erweiterung werden mit Warcraft III ausgeliefert und sind, trotz Dateiendung, keine richtigen MPQ-Dateien. Vielmehr sind es AVI-Dateien, die mit Blizzards umbenannten MPEG-4 Codec, BLZ0 (welcher DivX ist) komprimiert wurden. Diese Dateien können daher in jedem Videoplayer abgespielt werden, vorausgesetzt, die richtigen Codecs sind installiert. Es ist nicht bekannt, weshalb Blizzard MPQ als Dateierweiterung für die Sequenzdateien verwendet hat. World of Warcraft Zwischensequenzen benutzen AVI als Dateierweiterung.

Verwendung in Spielen

Das MPQ-Dateiformat wird in einer Vielzahl Blizzards eigener und anderen Spiele verwendet:

Icons

Die nachfolgenden zwei Icons zeigen MPQ-Dateien in Mac OS X, abhängig davon, ob Warcraft III oder World of Warcraft installiert ist. Die Windows Versionen dieser Spiele assoziieren keine Icons mit MPQ-Dateien.