MPQ

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

MPQ (Mo'PaQ, скорочення від Mike O'Brien Pack (англ. тюк)) — формат файлу архіву, що використовується у відеоіграх студії Blizzard Entertainment, названий на честь винахідника.

Файли MPQ в іграх Blizzard переважно складаються з файлів ігрових даних — графіки, звуків та інформації про ігрові рівні. До можливостей формату відносяться стиснення, шифрування, сегментація файлів, гнучкість метаданих файлів, криптографічний підпис та можливість зберігання кількох версій одного і того ж файлу для інтернаціоналізації або через особливості певних платформ. В MPQ-архівах можуть використовуватися та поєднуватися різні алгоритми стиснення.

Індексація файлів[ред. | ред. код]

Для того, щоб відповідати вимогам швидкодії, які висувають сучасні відеоігри, файли індексовуються у хеш-таблиці швидким, низько-зіткненневим хешувальним алгоритмом. Індексом певного файлу в хеш-таблиці є хеш назви файлу малими літерами (lower case) по модулю розміру хеш-таблиці — це дозволяє швидко перевірити наявність файлу в архіві. Якщо ж декілька файлів архіву мають однаковий хеш (колізія хеш-функції), то вони будуть розташовані один за одним у порядку зростання індексу (формуючи в такий спосіб "колізійний" хеш-кластер). Щоб точно ідентифікувати запис файлу в хеш-кластері, кожен окремий запис хеш-таблиці збегігає 2 додаткових хеши назви файлу малими літерами, в яких використовуються однакові алгоритми хешування, але з різними значеннями seed та кодами локалізації та кодами платформ. Кінець хеш-кластеру знаходять або шляхом виявленням порожнього запису у хеш-таблиці, або зміщенням усієї хеш-таблиці (включаючи loopback остачі від ділення) до початкового індексу.

Шифрування[ред. | ред. код]

Як таблиця блоків (що містить інформацію стосовно розташування файлу в архіві), так і хеш-таблиця, що використовуються для індексації файлів, шифруються під час збереження. Криптографічний процес за умовчанням використовує відомий алгоритм.

Ревізія[ред. | ред. код]

Заголовок файлу резервує місце для даних про версію формату. Warcraft III ігнорує версію формату погоджувальних файлів .mpq, які завантажує гра, та вважає будь-який 1 версією.

  • Версія 1 використовувалася до World of Warcraft.
  • Версія 2 отримала розширений заголовок, який містить дані для розширеної таблиці блоків, аби уможливити більші розміри архіву.

Метадані архіву[ред. | ред. код]

MPQ-архіви не мають особливих структур для метаданих, окрім зовсім необхідних для доступу до заархівованих файлів. Натомість було вирішено користуватися звичайними файлами, назва яких береться у круглі дужки.

Нижче наведено відомі файли метаданих.

  • (listfile): Містить список файлів архіву, по одній назві файлу в рядку. Може бути неповним.
  • (signature): Містить слабкий криптографічний підпис архіву. Цей тип підпису є застарілим.
  • (attributes): Містить розширені метадані файлу. Наразі відомими атрибутами файлу є дата створення та контрольні суми CRC32 і MD5.

Стискання[ред. | ред. код]

У сучасних MPQ-архівах, кожний сегмент (або сектор) файлу може бути стиснутий комбінацією кількох алгоритмів стиснення. Байт заголовку додається до кожного стисненого сектора, аби вказати які стиснення було використано. Порядок, в якому застосовуються алгоритми стиснення є "вшитим" в код.

Перелік алгоритмів, які на даний час використовуються в іграх компанії Blizzard:

  • PKZIP (за ліцензією PKWARE). Перший доступний алгоритм стиснення.
  • Хаффман — деревовидне стиснення в поєднанні з ADPCM-стисненням 4:1 (обидва вперше представлені у StarCraft). Пізніші алгоритми використовували стиснення з втратами і відповідно підходять лише для сирих вихідних даних PCM.
  • Zlib (вперше представлений у Warcraft III).
  • Bzip2 (вперше представлений у World Of Warcraft).
  • LZMA (вперше представлений у StarCraft II).

Оскільки коли MPQ-архіви були вперше використані у Diablo, був доступним лише один алгоритм стиснення, використовувався інший флаг метаданих архівних файлів для вказівки на стиснення, та не використовувався байт стиснення у заголовку.

Відеоролики Warcraft III[ред. | ред. код]

Сюжетні ролики з розширенням MPQ, включені до Warcraft III, незважаючи на розширення файлів, не є файлами MPQ. Насправді це AVI-файли, стиснуті за допомогою перейменованого Blizzard кодеку MPEG-4, BLZ0 (який насправді є DivX). Ці файли можна відтворити в звичайних медіа-програвачах, якщо встановлено належні кодеки. Імовірно, Blizzard додали розширення MPQ для цих файлів, щоб приховати сюжетні ролики від гравця, аби не зіпсувати враження від гри, не давши подивитися їх до того, як він пройде відповідний рівень гри. Тим не менш, ролики World of Warcraft мають розширення AVI.

DBC (WDBC) файли колекції записів даних, що використовуються в World of Warcraft є клієнтськими базами даних. Вони знаходяться всередині MPQ файлів гри. DBC файли організовували клієнтську інформацію, необхідну для запуску гри правильно.

Використання в іграх[ред. | ред. код]

Blizzard використовувала файл формату MPQ для архівування ігрових файлів у багатьох їх іграх, включаючи:

Заміна: CASC[ред. | ред. код]

3 квітня 2014 року, з початком альфа-тестування World of Warcraft: Warlords of Draenor, Blizzard заявили, що тестують новий пропрієтарний формат файлу — CASC (Content Addressable Storage Container) на заміну MPQ в World of Warcraft. Серед обіцяних покращень — зменшення пошкоджень файлів за рахунок створення системи самообслуговування, покращена швидкодія та швидше змінення файлу. Спочатку формат CASC тестувався у внутрішній альфа-версії Heroes of the Storm, а потім — в альфа- та бета-версіях Warlords of Draenor перед безпосередьою реалізацюєю у грі перед виходом аддону[1].

Посилання[ред. | ред. код]

  1. Warlords of Draenor Alpha Testing Begins - World of Warcraft. Архів оригіналу за 30 січня 2015. Процитовано 28 лютого 2015.

Зовнішні посилання[ред. | ред. код]

Специфікації[ред. | ред. код]

  • The MoPaQ Archive Format найточніша та найповніша специфікація незалежного розробника формату MPQ .
  • Inside MoPaQ [Архівовано 16 березня 2010 у Wayback Machine.] — посібник до формату. (Не оновлюється, лише Win32, немає вихідного коду.).

Бібліотеки[ред. | ред. код]

  • StormLib [Архівовано 24 липня 2011 у Wayback Machine.] крос-платформенна C++ бібліотека високого рівня з відкритим кодом для маніпуляції архівів MPQ . Також підтримує перевірку підписів.
  • libmpq [Архівовано 27 липня 2011 у Wayback Machine.] крос-платформенна C бібліотека (та пов'язані з нею інструменти) для видобування файліз з архівів MPQ.
  • jlibmpq java обгортка для libmpq.
  • MPQKit Mac OS X Objective-C каркас для маніпуляції архівів MPQ .Також підтримує перевірку підписів.
  • MpqLib .NET 3.5 об'єктно орієнтована бібліотека для роботи з файлами та архівами mpq.

Програми[ред. | ред. код]