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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стремитесь принять участие в ежегодном литературном конкурсе от "Ордена Хранителей"! В этот раз темой конкурса являются тайные организации. На днях организатор продлил сроки сдачи работ, вы ещё можете успеть! Ждем именно вас.

    Ссылка на конкурсную тему - тык

VDFS tool

Gratt


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


 VDFS tool 

RU EN


  • Ссылки​

    - Вложение
    - github

    Возможности​

    • Чтение, создание и изменение VDF-томов
    • Сжатие томов
    • Оптимизация томов
    • Расширенная метка времени
    • Навигация (как в проводнике)
    • Перетаскивание Drag & Drop
    • Открытие файлов без ручной распаковки
    • Обновление контента в один клик

    Сжатие томов​

    Содержимое томов сжимается по принципу zip-архива.
    В ряде сценариев размер тома может уменьшиться в два и более раза.
    Для работы этой функции необходим установленный поверх игры пакет Union.

    Оптимизация томов​

    Программа находит файлы с одинаковым содержимым и привязывает их к одному источнику.

    Это уменьшает итоговый размер тома,
    а также снижает количество дескрипторов, которые игре необходимо открывать.

    Расширенная метка времени​

    Позволяет указывать:
    • до 32 дней в месяце
    • до 16 месяцев в году
    • до 2107 года
    • 31 час в дне
    • 61 минуту в часе
    • 62 секунды в минуте
    Такое расширение удобно для специальных томов-патчей, которым выгодно находиться в «невозможном» временном промежутке.

    UI​

    Интерфейс устроен как обычный файловый проводник.
    В окно программы можно перетаскивать файлы — и это работает в обе стороны.

    Файлы можно открывать и просматривать прямо из тома, без ручной распаковки.

    Обновление контента в один клик​

    Выделите нужные файлы и нажмите Edit → Update (или Ctrl + U) — они будут помечены на обновление с диска.

    Либо используйте Edit → Update All (Ctrl + Shift + U) — тогда будут отмечены все файлы в томе.

    При сохранении содержимое тома автоматически обновится.

  • Links​

    - Attachment
    - github

    Features​

    • Read, create, and modify VDF volumes
    • Volume compression
    • Volume optimization
    • Extended timestamp support
    • Explorer-style navigation
    • Drag & Drop
    • Open files without manual extraction
    • One-click content updates

    Volume Compression​

    Volume contents are compressed similarly to a zip archive.
    In many cases, the final size can be reduced by two times or more.
    This feature requires the Union package installed on top of the game.

    Volume Optimization​

    The program detects files with identical content and links them to a single source.

    This can reduce the final volume size
    and also decreases the number of file descriptors the game needs to open.

    Extended Timestamp​

    Allows specifying:
    • up to 32 days per month
    • up to 16 months per year
    • years up to 2107
    • 31 hours per day
    • 61 minutes per hour
    • 62 seconds per minute
    This can be useful for creating special patch-volumes that benefit from existing in an otherwise “impossible” time range.

    UI​

    The interface works like a standard file explorer.
    You can drag files into the window — and also drag them out of it.

    Files can be opened and viewed directly from the volume, without extracting them first.

    One-Click Content Update​

    Select the files you want to refresh and choose Edit → Update (or Ctrl + U) — they will be marked for updating from disk.

    Alternatively, use Edit → Update All (Ctrl + Shift + U) to mark every file in the volume.

    When you save, the volume contents will be updated automatically.


1617546200201.png
1617546255984.png
1617546305690.png
1617546352346.png
1617546416668.png
1617547785664.png
 

Вложения

  • VDFSTool 1.1.2.7z
    451,2 KB · Просмотры: 45

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
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.889
Благодарности
2.452
Баллы
380
Спасибо за тулзу, очень удобно. Пока багов не заметил. Из предложений разве что навигацию сделать немного удобнее, в корень и в нужную папку. Возможно слева сделать окошко с деревом навигации.
 

Xeдин


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

MEG@VOLT

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

MEG@VOLT

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

D36


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

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.438
Благодарности
4.787
Баллы
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.438
Благодарности
4.787
Баллы
625

Slavemaster


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

Gratt


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

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.147
Благодарности
2.021
Баллы
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.438
Благодарности
4.787
Баллы
625
Slavemaster, карту отличий сгенерируй.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.147
Благодарности
2.021
Баллы
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.438
Благодарности
4.787
Баллы
625
Slavemaster, значит ворбис жрёт твои вавки. Его поддержку в зипнутом пространстве может к вечеру сделаю.
 
Сверху Снизу