![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
-=CHE@TER=- |
![]()
Сообщение
#1
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Итак, начнём.
Я тут увидел, что многие программы, которые я выкладываю на сайте - уже есть в XENTAX WIKI Grafs. Так что, я думаю, что имеет смысл делать распаковщики и выкладывать описания форматов, которых нет там. А то, как-то тупо получается - тут я выкладываю формат, который раскопал сам, в то время как он уже готовенький лежит там. Ну, вот этого формата я там точно не видел: QUOTE Формат: .WD Игра: Earth 2140 4 байта - количество файлов в архиве (обозначим их как TF) далее следует блок описания такого формата: 4 байта - абсолютное смещение файла относительно начала архива 4 байта - размер файла 8 байт - зарезервированно - всегда 0-ли (в том архиве, который мне давал когда-то Siberian GRemlin для написания распаковщика - "FONT.WD") 4 байта - какая-то контрольная сумма - у всех файлов разная 4 байта - смещение имени файла в списке имён (NOfs) - см. дальше Блок описания нужно повторить TF раз. 4 байта - размер списка имён Затем идёт сам список имён файлов: NAME1\0NAME2\0 и т.д. т.е. просто TF штук ASCIIZ-строк друг за другом. Если прочитать список имён в отдельную переменную-указатель, то через NOfs в качестве побайтового индекса, мы получим указатель на начало ASCIIZ-строки, с именем нужного нам файла. Имя файла может содержать относительный путь, с использованием символа слэш "/" в качестве разделителя. |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,371 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 318 раз(а) ![]() |
Если кто пользуется программой pngout, то знает, что если запустить её без параметров, то она покажет справку по использованию, где помимо всего прочего будет и такая строка:
QUOTE /mincodes# Workaround for buggy decoders. 1:Zlib 1.2.1 bug, 2:buggy mobiles Я как-то никогда не обращал на неё внимание. А тут, пару лет назад, начали в комментариях к перепаковщику архивов для Санитаров Подземелий жаловаться, что с новыми (перепакованными) файлами игра не работает и валится с ошибкой, даже если ничего не менять, а только распаковать и сразу же запаковать назад. Я сначала было убрал упаковку вообще, благо игра позволяла это сделать флагами в TOC/FAT архива, но потом, всё же, попробовал её вернуть. Проблема была в том, что я всегда использовал последнюю версию zlib. Здраво решив, что здесь что-то не так, я поглядел исполняемый файл игры и, увидев там строчку "zlib 1.2.1", взял эту же версию библиотеки после чего файлы стали получаться один в один как в игре. Поставив проверку в исходных кодах чтобы не использовали другие версии zlib я благополучно об этом и забыл.Но, на всякий случай, если кто-то будет изменять другие игры и игра невоспринимает ничего кроме сжатых данных, а при перепаковке возникает ошибка - посмотрите не использует ли игра zlib версии 1.2.1. Если коротко, то из-за ошибки в 1.2.1 сжатые файлы можно распаковать другими версиями, но вот сама 1.2.1 может распаковать только то, что сжато ей же или, как в pngout, программами которые могут эту ошибку эмулировать. Ещё, как вариант, можно попробовать заменить код zlib, если он в отдельном .DLL файле. Цитата из zlib/ChangeLog (1.2.1.1 - это версия следующая сразу за 1.2.1): CODE Changes in 1.2.1.1 (9 January 2004) Интересно, что версия 1.2.1 вышла 2003.11.17, а исправленная 2004.01.09 - казалось бы, интервал всего в два месяца, но насколько эта версия успела широко разойтись.... - Fix a big fat bug in inftrees.c that prevented decoding valid dynamic blocks with only literals and no distance codes -- Thanks to "Hot Emu" for the bug report and sample file ... |
![]() ![]() |
Упрощённая версия | Сейчас: 30th April 2025 - 21:18 |