• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

VDFS tool + сжатые VDF тома

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
IconSource.png

VDFS tool
Программа, позволяющая просматривать и изменять виртуальные тома.



Доступно к скачиванию через Менеджер ресурсов в разделе 'VDFS tool'
- Скачать Менеджер Ресурсов - 1559419291725.png

- Скачать автономный установщик -
Особенности
- Сжатие томов
- Оптимизация томов
- Интерфейс файлового проводника
- Drag&Drop
- Обновление тома в 1 клик
- Открытие файлов прямо из тома

Сжатый поток и описание формата Gratt-5r2/ZippedStream

Подробно
Сжатие томов:
Сжатие томов производится при помощи классического zip алгоритма. За основу была взята библиотека zlib для сжатия и распаковки буфера. Чтобы игра без потерь производительности декомпрессировала том в реальном времени, был реализован специальный интерфейс (Gratt-5r2/ZippedStream) и встроен в vdfs32g. Суть интерфейса заключается в том, что он позволяет запаковывать и читать файлы блоками заданного размера и удерживать в памяти распакованные данные в конкретном диапазоне.

Оптимизация томов:
Под оптимизацией понимается процедура выявления файлов с одинаковым содержимым и объединения их под общий источник данных.

Интерфейс файлового проводника:
Интерфейс программы имеет набор стандартных операций файлового проводника - копирование, вставка, переименование, поиск и тд.

Drag&Drop:
Функция позволяет перетаскивать файлы в программу, а также вытаскивать из нее. Чтобы эта функция работала корректно, права пользователя (администратора) должны совпадать для программы и проводника.

Обновление тома в 1 клик:
Программа анализирует общие файлы тома и в каталогах игры (Ctrl + U). При наличии физический копий, при сохранении тома в него будут записаны обновленные файлы.

Открытие файлов прямо из тома:
Чтобы не тратить время на распаковку тома, дважды щелкните по интересующему файлу, после чего он будет открыт.

Картиначки
1617546200201.png
1617546255984.png
1617546305690.png
1617546352346.png
1617546416668.png
1617547785664.png
 

Вложения

  • VDFS tool 22.05.2021.7z
    404,5 KB · Просмотры: 267
  • VDFS tool 03.06.2021.7z
    404,7 KB · Просмотры: 923
Последнее редактирование модератором:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Пример сжатия Неофициального обновления v24
254MB -> 106MB (41% от исходного размера)

ФайлИсходный весСжатый весПроцент от исходного
g2a_nr_scriptpatch_v24.mod
184 576 КБ​
69 898 КБ​
37,9%​
g2a_nr_scriptpatch_v24_speech_add.mod
2 700 КБ​
2 315 КБ​
85,7%​
g2a_nr_scriptpatch_v24_speech_fix.mod
20 264 КБ​
17 014 КБ​
84,0%​
g2a_nr_scriptpatch_v24_wasteland.mod
46 880 КБ​
16 200 КБ​
34,6%​
g2a_nr_scriptpatch_v24_widescreen.mod
6 146 КБ​
3 936 КБ​
64,0%​

1617563612401.png
 

Fabiosek

Участник форума
Регистрация
17 Июн 2017
Сообщения
147
Благодарности
47
Баллы
190
Before: 635MB
After: 634MB

unknown.png


I just opened my "my.mod" file and pressed "Optimize" - what does that do? Because the real optimization is when I save it again as "Zipped", right?

//
EDIT: After using "Zipped mod":

FileOriginalZipped%
My.mod651 293 КB360 271 KB44,6%

Good job!
 
Последнее редактирование:

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Спасибо за тулзу, очень удобно. Пока багов не заметил. Из предложений разве что навигацию сделать немного удобнее, в корень и в нужную папку. Возможно слева сделать окошко с деревом навигации.
 

Xeдин


Модостроитель
Регистрация
3 Дек 2008
Сообщения
1.448
Благодарности
1.976
Баллы
365
Gratt, ага, еще после сохранения тома, может отпускать файловые дескрипторы, что бы можно было билдить и удалять файлы которые переносил в том. А то тулза их держит открытыми похоже.
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
и вид добавить в виде таблицы. А то значки - как-то не привычно ))
 

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.860
Благодарности
6.740
Баллы
1.625
Затупил.... Вчера все перетыкал, а до этого видимо не добрался *facepalm*
 

D36


Модостроитель
Регистрация
3 Дек 2014
Сообщения
2.190
Благодарности
3.373
Баллы
485
Можно ли выводить список файлов, которые были оптимизированы? Сообщение "-х MB" не очень информативно.
Какие критерии для признания файлов идентичными?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625

Fabiosek

Участник форума
Регистрация
17 Июн 2017
Сообщения
147
Благодарности
47
Баллы
190
You could add a "check mark" on a specific view:
vdfstoolf_hpppnhrw.png


Btw, Works for Gothic 1 as well, just like the original GothicVDFS, right?
 
Последнее редактирование:

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Gratt, функции vdf_* и VirtualFile должны правильно работать сейчас с zip vdf?
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Slavemaster, вообще никаких отличий. Вся декомпрессия происходит внутри файловой системы.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Slavemaster, вообще никаких отличий. Вся декомпрессия происходит внутри файловой системы.
У меня не работает. Во всех файлах находит отличия в первом же байте. Последний файл вообще не читается. vdfs32g.dll обновил.
C++:
bool CompareFiles(const std::string& left, const std::string& right)
{

    cmd << endl;
    cmd << "Compare" << endl;
    cmd << left.c_str() << endl;
    cmd << right.c_str() << endl;

    VirtualFile x{ left.c_str(), VDF_VIRTUAL };
    VirtualFile y{ right.c_str(), VDF_VIRTUAL };

    if (x.Size() != y.Size())
    {
        cmd << endl;
        cmd << left.c_str() << endl;
        cmd << right.c_str() << endl;
        LOG(x.Size());
        LOG(y.Size());
        return false;
    }

    auto leftBuffer = std::make_unique<char[]>(x.Size());
    auto rightBuffer = std::make_unique<char[]>(y.Size());

    ASSERT(x.ReadToEnd(leftBuffer.get()) == x.Size());
        
    long len = y.ReadToEnd(rightBuffer.get());
    if (len != y.Size())
    {
        LOG(len);
        LOG(x.Size());
        LOG(y.Size());
    }

    for (long i = 0; i < x.Size(); i++)
        if (leftBuffer[i] != rightBuffer[i])
        {
            cmd << endl;
            cmd << left.c_str() << endl;
            cmd << right.c_str() << endl;
            LOG(i);
            return false;
        }

    return true;
}
Код:
.........

Compare
__RAW\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_MIL.WAV
__ZIPPED\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_MIL.WAV

__RAW\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_MIL.WAV
__ZIPPED\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_MIL.WAV
i: 0

Compare
__RAW\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_SLD.WAV
__ZIPPED\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_SLD.WAV
len: 0
x.Size(): 98444
y.Size(): 98444

__RAW\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_SLD.WAV
__ZIPPED\DATA\SOUND\SPEECH\SVM_9_ADDON_WRONGARMOR_SLD.WAV
i: 0
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Slavemaster, карту отличий сгенерируй.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.081
Благодарности
1.901
Баллы
320
Slavemaster, карту отличий сгенерируй.
Какую карту ещё? Все файлы отличаются.
Открыл тулзой Speech_Addon.vdf, переименовал _WORK в __RAW, сохранил как обычный vdf: Speech_Addon_raw.vdf
Переименовал __RAW в __ZIPPED, сохранил как зипованный vdf: Speech_Addon_zip.vdf
Начал сравнивать файлы с помощью VirtualFile - размеры совпадают, содержимое - нет. Плюс, последний зипованный файл вообще не читается (VirtualFile::ReadToEnd возвращает 0).
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Slavemaster, значит ворбис жрёт твои вавки. Его поддержку в зипнутом пространстве может к вечеру сделаю.
 
Сверху Снизу