CKM, или Creation Kit Mod
CKM, или (возможная расшифровка) Creation Kit Mod - "архив" от Беседки, созданный для "бандлинга" модов из Creation Kit в Воркшоп. Применялся ранее до введения системы платных модов, после файлы начали скачиваться "как есть", без каких либо архивов.
Очень примитивный формат. Открыв в HEX-редакторе, и немного включив мозг, можно понять, что к чему.
Первыми четырьмя байтами в архиве всегда записан размер BSA-архива в Little Endian формате (байты идут наоборот). Возможно, есть моды и без BSA в CKM. У меня таких нет, пока что. В таких случаях, скорее всего будет восемь нолей в HEX-представлении.
Вводим число в калькулятор в режиме программиста, предварительно выбрав DEC, после тыкаем на HEX-режим. Добавляем ноль в начале, если кол-во знаков не кратно двум, получаем размер в HEX: 05 FD 9B EF.
Теперь переворачиваем: EF 9B FD 05. Видим полное совпадение. Значит первыми четырьмя байтами у нас действительно идёт размер BSA-архива. Странно, кстати, что заголовка у файла нет, ну да ладно...
Сразу после размера записан сам BSA, "как есть". Вообще без изменений. Без сжатия и вот этого всего. Видимо, решили не экономить на трафике. Печально, конечно.
Скипнем весь BSA, ведь нам известен размер (записан первыми четырьмя байтами). Идёт четыре нулевых байта (кстати, они идут, даже если BSA архива в файле нет (таки нашёл CKM без BSA)), и сразу начинается сам ESP/ESM. Видно по заголовку (TES4):
На коленке набросал на Шарпе класс, который принимает на вход:[list]
[*]Путь к файлу или поток с CKM.
[*]Путь к папке, куда надо распаковать.
[*]Имя мода (используется при формировании имён BSP и ESP-файла).
[/list]Можно посмотреть здесь. Возможно, как-нибудь сделаю и упаковщик, и оформлю в виде библиотеки в NuGet. Пока работает - и хрен с ним...
Для себя написал небольшую консольную утилитку, которая умеет распаковывать файлы, если:[list]
[*]Дропнуть файл на неё исполняемый (Drag'n'Drop);
[*]Передать аргументом запуска (можно не в кавычках, если пробелы; я не предусматривал наличие каких-либо иных аргументов);
[*]Просто запустить, ввести вручную или вставить в окно консоли путь к файлу.
[/list]Можно указать путь относительно бинарника. Сожрёт всё равно.
По предложению одного из форумчан в комментарии, публикую архив с ней. Писалось для себя, потому если возникнет какая-нибудь ошибка - отрапортует в консоли полностью все технические детали.
[sharedmedia="downloads:files:10360"]
Очень примитивный формат. Открыв в HEX-редакторе, и немного включив мозг, можно понять, что к чему.
Первыми четырьмя байтами в архиве всегда записан размер BSA-архива в Little Endian формате (байты идут наоборот). Возможно, есть моды и без BSA в CKM. У меня таких нет, пока что. В таких случаях, скорее всего будет восемь нолей в HEX-представлении.

Открытый в HEX-редакторе CKM, свойства записанного внутри BSA-архива и переведённый размер в HEX
Вводим число в калькулятор в режиме программиста, предварительно выбрав DEC, после тыкаем на HEX-режим. Добавляем ноль в начале, если кол-во знаков не кратно двум, получаем размер в HEX: 05 FD 9B EF.
Теперь переворачиваем: EF 9B FD 05. Видим полное совпадение. Значит первыми четырьмя байтами у нас действительно идёт размер BSA-архива. Странно, кстати, что заголовка у файла нет, ну да ладно...
Сразу после размера записан сам BSA, "как есть". Вообще без изменений. Без сжатия и вот этого всего. Видимо, решили не экономить на трафике. Печально, конечно.
Скипнем весь BSA, ведь нам известен размер (записан первыми четырьмя байтами). Идёт четыре нулевых байта (кстати, они идут, даже если BSA архива в файле нет (таки нашёл CKM без BSA)), и сразу начинается сам ESP/ESM. Видно по заголовку (TES4):

Всё, что идёт до красной черты - BSA + 4 нулевых байта (смещающие?). После - ESP.
На коленке набросал на Шарпе класс, который принимает на вход:[list]
[*]Путь к файлу или поток с CKM.
[*]Путь к папке, куда надо распаковать.
[*]Имя мода (используется при формировании имён BSP и ESP-файла).
[/list]Можно посмотреть здесь. Возможно, как-нибудь сделаю и упаковщик, и оформлю в виде библиотеки в NuGet. Пока работает - и хрен с ним...
Для себя написал небольшую консольную утилитку, которая умеет распаковывать файлы, если:[list]
[*]Дропнуть файл на неё исполняемый (Drag'n'Drop);
[*]Передать аргументом запуска (можно не в кавычках, если пробелы; я не предусматривал наличие каких-либо иных аргументов);
[*]Просто запустить, ввести вручную или вставить в окно консоли путь к файлу.
[/list]Можно указать путь относительно бинарника. Сожрёт всё равно.
По предложению одного из форумчан в комментарии, публикую архив с ней. Писалось для себя, потому если возникнет какая-нибудь ошибка - отрапортует в консоли полностью все технические детали.
[sharedmedia="downloads:files:10360"]

Небольшая демонстрация
-
2
6 Комментариев
Рекомендуемые комментарии
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти