MPQ
MPQ (Mo’PaQ, сокращение Mike O'Brien Pack, названный так по имени автора) — архивный формат файла, используемый в играх компании Blizzard Entertainment. MPQ в основном содержат игровые данные, включая графику, звук и уровни.
Формат включает в себя сжатие, шифрование, файловую сегментацию, метаданные, криптографическую подпись и возможность хранения нескольких версий одного и того же файла, что позволяет использовать MPQ вне зависимости от платформы, обеспечивая переносимость формата. Сжатие возможно множеством различных алгоритмов.
Оглавление архива[править]
Для того, чтобы обеспечить высокоскоростной поиск, необходимый для компьютерных игр, поиск файлов производится по хеш-таблице с быстрой и обеспечивающей редкость коллизий хэш-функцией. Положение конкретного файла в таблице определяется хэшем его имени в нижнем регистре, делённом по модулю на размер таблицы. Это позволяет быстро проверить наличие в архиве того или иного файла. Если несколько файлов имеют одинаковый хэш, они следуют друг за другом по порядку, образуя кластер. Для определения точного положения искомого файла в кластере каждый элемент таблицы хранит два дополнительных хэша имени в нижнем регистре, построенные тем же алгоритмом, но с другими параметрами, а также код локализации и платформы. Конец кластера определяется или по наличию пустого элемента таблицы, или проходом по всей таблице до возврата к исходному индексу.
Шифрование[править]
И таблица блоков (содержащая информацию о положении файла в архиве) и хэш-таблица хранятся зашифрованными. По умолчанию используется известный алгоритм.
Версии[править]
В заголовке файла зарезервировано место для указания версии формата. Warcraft III игнорирует информацию о версии, так как умеет работать только с версией 1.
- Версия 1 использовалась до World of Warcraft.
- Версия 2 содержит дополнительный заголовок, содержащий данные для расширенной таблицы блоков, обеспечивающей поддержку архивов больших размеров.
Архивные метаданные[править]
Архивы MPQ не содержат специальных структур для хранения метаданных, кроме тех, которые необходимы для доступа к файлам. Вместо этого действуют соглашения по особому наименованию файлов и структуры каталогов.
Известные файлы, хранящие метаинформацию:
- (listfile): Список файлов в архиве, одно имя на каждой строчке. Может быть неполным.
- (signature): Содержит слабую криптографическую подпись архива. Этот тип подписи считается устаревшим.
- (attributes): Содержит расширенные метаданные. Известно о наличии полей, содержащих дату создания файла, контрольные суммы CRC32 и MD5.
Сжатие[править]
В современных MPQ-архивах каждый сегмент файла может быть сжат комбинацией различных алгоритмов. В заголовке для каждого сжатого сегмента хранится байт, указывающий на использованные алгоритмы. Порядок применения алгоритмов жёстко прописан в коде распаковщика.
На данный момент используются следующие алгоритмы::
- PKZIP (лицензирован у PKWARE). Первый реализованный алгоритм.[1]
- Кодирование Хаффмана в сочетании с ADPCM 4:1 (оба введены в StarCraft). Сжатие с потерями, поэтому применяется только для аудиоданных.
- zlib (появился в Warcraft III).
- bzip2 (появился в World of Warcraft).
- LZMA (появился в StarCraft II).
Поскольку при первом использовании MPQ в Diablo использовался только один формат, в тех архивах использовался другой флаг для указания использования сжатия, а байт, определяющий алгоритм, не использовался.
Видеовставки Warcraft III[править]
Видеовставки в Warcraft III, хоть и использовали расширение MPQ, не являлись архивами. Это просто обычные AVI, сжатые MPEG-4 кодеком BLZ0 (который на самом деле DivX). Эти файлы воспроизводятся обычными видеоплеерами, если в системе установлен нужный декодер. Вероятно, Blizzard переименовала их в MPQ, чтобы скрыть от игроков во избежание спойлеров, так как, просмотрев ролики в обход игры, можно было узнать дальнейший сюжет и концовку. Тем не менее, World of Warcraft для видео использует расширение AVI.
Использование в играх[править]
Blizzard использует MPQ для хранения игровых данных во многих своих играх:
- Diablo
- Diablo: Hellfire
- Lords of Magic разработан Sierra Entertainment
- Diablo II
- Diablo II: Lord of Destruction
- StarCraft
- StarCraft: Brood War
- WarCraft II: Battle.net Edition
- Warcraft III: Reign of Chaos
- Warcraft III: The Frozen Throne
- World of Warcraft
- World of Warcraft: The Burning Crusade
- World of Warcraft: Wrath of the Lich King
- World of Warcraft: Cataclysm
- StarCraft II: Wings of Liberty
- Heroes of the Storm
Источники[править]
- ↑ Phillip Katz, Computer Software Pioneer, 37, The New York Times (май 2000 года). Проверено 14 июля 2011.
Ссылки[править]
Спецификации[править]
- The MoPaQ Archive Format.
- Inside MoPaQ — Описание формата. (Не поддерживается, только для Win32, без исходных кодов.).
Библиотеки[править]
- StormLib — высокоуровневая кроссплатформенная C++ библиотека с открытым кодом. Поддерживает проверку цифровых подписей.
- libmpq — кроссплатформенная библиотека на C с открытым кодом (также дополнительные инструменты) для извлечения файлов из MPQ.
- jlibmpq враппер на Java для libmpq.
- MPQKit — фреймворк на Objective-C под Mac OS X для работы с MPQ. Также поддерживает работу с подписями.
- MpqLib — объектно-ориентированная .NET 3.5 библиотека для работы с MPQ.
Программы[править]
- MPQDraft, программа с открытыми кодами с Sourceforge, позволяющая работать с MPQ.
- MPQ Extractor — распаковщик для Mac OS X.
- Ladik’s MPQ Editor, Редактор MPQ для Windows, Storm.dll, StormLib, библиотеки для чтения и записи MPQ.
- WoW Model Viewer, программа для открывания World of Warcraft-овских MPQ и просмотра содержащихся там файлов.
↑ [+] | |||||||
---|---|---|---|---|---|---|---|
Игры |
| ||||||
Книги |
| ||||||
Вселенная | |||||||
Другое |
Warcraft III World Editor · DotA · Wowhead · Лирой Дженкинс · фильм |
Вселенная StarCraft ↑ [+] | |
---|---|
Компьютерные игры |
StarCraft (Insurrection · Retribution · Brood War) · Ghost · StarCraft II (Wings of Liberty · Heart of the Swarm · Legacy of the Void) |
Настольные игры |
StarCraft Adventures · StarCraft: The Board Game (Brood War) |
Расы | |
Персонажи |
Арктур Менгск · Джим Рейнор · Зератул · Самир Дюран · Сара Керриган · Эдмунд Дюк |
Прочее |
Вторая Великая Война · Планеты и локации · Профессиональные соревнования по StarCraft · Редактор StarEdit · Battle.net · Список медиапродукции |