Пак — формат пакетирования файлов¶
Пак — формат упаковки файлов, разработанный в 1980-х годах для операционной системы MS-DOS и получивший распространение в среде IBM PC-совместимых компьютеров. Файл в формате .pak содержит набор обычных файлов, сжатых и объединённых в единый архив без служебной информации о файловой системе диска. В отличие от более поздних форматов ZIP или RAR, пак-файлы не содержат каталога в привычном виде: о содержимом архива можно судить по отдельным спискам-индексам, которые могут храниться внутри самого архива или поставляться отдельно.
¶История
Формат .pak появился в конце 1980-х годов и был популярен в среде MS-DOS. Он применялся в играх и программах, где требовалось быстро загружать ресурсы — графику, звук, уровни — с дисководов, работавших медленно. Сжатие данных в едином файле ускоряло чтение по сравнению с обращением к множеству мелких файлов на дискете.
Наиболее известным инструментом для работы с пак-файлами стал утилитный пакет PAK (не путать с одноимённым форматом), а также программы-аналоги, например PAKBLASTER и утилиты, входившие в состав разработческих сред. В русскоязычной среде формат стал известен благодаря играм, распространявшимся на дискетах и в составе сборников, например, серии игр от Apogee Software и других студий, выпускавших продукцию для DOS.
С распространением Windows и форматов ZIP, RAR и 7z использование пак-файлов постепенно сошло на нет. Тем не менее формат сохранился в нише ретро-игр и модификаций: многие эмуляторы и движки старых игр по-прежнему умеют читать ресурсы из .pak-архивов.
¶Устройство формата
Пак-файл представляет собой последовательность сжатых данных, за которой следует таблица индексов (или наоборот — в зависимости от версии формата). Каждая запись индекса содержит имя файла, смещение к данным и размер сжатого блока. Имена файлов в индексе хранятся в формате 8.3 (имя до восьми символов и расширение до трёх), что отражает ограничения файловой системы FAT, использовавшейся в MS-DOS.
Сжатие в классическом пак-формате выполнялось алгоритмом LZSS (вариант словарного сжатия) или, в некоторых реализациях, методом RLE. Алгоритм LZSS заменяет повторяющиеся последовательности байтов ссылками на предыдущие вхождения, что эффективно для графических и звуковых данных с большим количеством повторов.
Примерная структура пак-файла:
| Элемент | Описание |
|---|---|
| Заголовок | Сигнатура формата и служебные параметры |
| Данные | Сжатые содержимые файлов подряд |
| Индекс | Записи: имя файла, смещение, размер |
В некоторых вариантах формата индекс расположен в начале файла, что позволяет читать список содержимого без сканирования всего архива.
¶Применение
Основная область применения пак-формата — компьютерные игры под MS-DOS. Внутри .pak-архивов хранились:
- графические ресурсы (тайлы, спрайты, фоны);
- звуковые эффекты и музыка;
- данные уровней и карт;
- тексты и диалоги.
Игровые движки читали ресурсы напрямую из архива, обращаясь к ним по именам из индекса. Это упрощало дистрибуцию: вся игра помещалась на несколько дискет, а установка заключалась в копировании пак-файлов на жёсткий диск.
В современной разработке термин «пак» используется в другом смысле — как обозначение набора файлов ресурсов в форматах, не связанных с классическим .pak. Например, движок Unreal Engine использует файлы .pak для хранения игровых ресурсов, а Unity применяет формат AssetBundle, иногда называемый паком. Эти форматы не имеют отношения к DOS-архивам, но название закрепилось за ними как обобщённое.
¶Работа с пак-файлами
Для чтения и создания пак-архивов использовались утилиты DOS, из которых наиболее известны:
- PAK — базовая утилита для упаковки и распаковки;
- PAKBLASTER — инструмент для анализа и извлечения ресурсов;
- UNPAK — утилита обратной операции.
В эпоху Windows появились программы с графическим интерфейсом, поддерживающие формат .pak наряду с ZIP и RAR. Среди них — Total Commander с плагинами, 7-Zip (в ограниченной мере) и специализированные утилиты для ретро-игр.
Для эмуляции старых игр используются DOSBox и аналогичные эмуляторы, которые прозрачно работают с пак-файлами через драйверы виртуального диска.
¶См. также
¶Источники
- Форматы архивов: история и спецификации (материалы по ретро-компьютерингу)
- Документация к утилитам PAK и PAKBLASTER для MS-DOS
- Статьи о ресурсных форматах игровых движков (Unreal Engine, Unity)
