DB-архивы — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
(→Формат .db архивов финальной версии игры) |
RedPython (обсуждение | вклад) м (restored) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 1: | Строка 1: | ||
− | + | ==Формат .db архивов финальной версии игры== | |
+ | |||
+ | '''Формат блока хидера следующий:''' | ||
+ | |||
+ | '''Длина имени''' - беззнаковое 2 байт | ||
+ | |||
+ | '''Размер файла''' - беззнаковое 4 байт | ||
+ | |||
+ | '''Размер сжатого''' - беззнаковое 4 байт | ||
+ | |||
+ | '''crc файла''' - беззнаковое 4 байт | ||
+ | |||
+ | Далее идёт имя файла размер = Длине имени(смотрим выше) | ||
+ | |||
+ | '''Смещение в файле''' - беззнаковое 4 байт | ||
+ | |||
+ | + все это повторяется для всех фаилов | ||
+ | |||
+ | ===Как найти нужный чанк(блоки данных в файле):=== | ||
+ | |||
+ | С начала файла читаем 4 байта - id блока, след. 4 байта - размер блока. | ||
+ | |||
+ | Ну, а дальше не проблема пропустить блоки с ненужным id | ||
+ | |||
+ | ====Автор: Neo==== | ||
+ | |||
+ | |||
+ | ''Дополнение:'' | ||
+ | |||
+ | Вообще файл состоит из индекса и данных. Индекс содержит названия файлов, смещения, и размеры. | ||
+ | В ТЧ индекс зашифрован разными ключами для разных версий игры. В ЧН он не зашифрован, | ||
+ | разница между англ и рус версиями архивов исключительно в коде которым зашифрован индекс. | ||
+ | В начале файла лежит таблица с путями. Она сжата и зашифрована, наподобии зипа, но только более быстрым алгоритмом. | ||
+ | |||
+ | ''Простой и быстрый шифр + быстрое сжатие по Хаффману'' - [http://smartmodmanager.codeplex.com/SourceControl/changeset/view/24173#122648] | ||
+ | |||
+ | Код Хаффмана - общий алгоритм сжатия. Он слабый, но простой и быстрый. Есть туча разных реализаций. Одна из них используется в Сталкере. Для того, чтобы получить таблицу с путями нужна именна та же реализация. | ||
+ | |||
+ | ====Автор: Don Reba==== | ||
+ | |||
+ | ''Для русской версии:'' | ||
+ | |||
+ | [[Изображение:dbarchivesn.jpg|700px]] | ||
+ | |||
+ | |||
+ | ЗЫЫ: | ||
+ | |||
+ | Для архивов 2002-2005 xrp/xp0 года юзался более упрощенный метод компрессии '''LZW''' - [http://www.compression.ru/arctest/descript/lzwcomp.htm] | ||
+ | |||
+ | ====Автор: Anonymous==== | ||
+ | [[Категория:Форматы файлов]] |
Текущая версия на 15:07, 21 мая 2011
Содержание
Формат .db архивов финальной версии игры
Формат блока хидера следующий:
Длина имени - беззнаковое 2 байт
Размер файла - беззнаковое 4 байт
Размер сжатого - беззнаковое 4 байт
crc файла - беззнаковое 4 байт
Далее идёт имя файла размер = Длине имени(смотрим выше)
Смещение в файле - беззнаковое 4 байт
+ все это повторяется для всех фаилов
Как найти нужный чанк(блоки данных в файле):
С начала файла читаем 4 байта - id блока, след. 4 байта - размер блока.
Ну, а дальше не проблема пропустить блоки с ненужным id
Автор: Neo
Дополнение:
Вообще файл состоит из индекса и данных. Индекс содержит названия файлов, смещения, и размеры. В ТЧ индекс зашифрован разными ключами для разных версий игры. В ЧН он не зашифрован, разница между англ и рус версиями архивов исключительно в коде которым зашифрован индекс. В начале файла лежит таблица с путями. Она сжата и зашифрована, наподобии зипа, но только более быстрым алгоритмом.
Простой и быстрый шифр + быстрое сжатие по Хаффману - [1]
Код Хаффмана - общий алгоритм сжатия. Он слабый, но простой и быстрый. Есть туча разных реализаций. Одна из них используется в Сталкере. Для того, чтобы получить таблицу с путями нужна именна та же реализация.
Автор: Don Reba
Для русской версии:
ЗЫЫ:
Для архивов 2002-2005 xrp/xp0 года юзался более упрощенный метод компрессии LZW - [2]