Age of Empires III DE

dixen18

Ветеран
@Crachlow,
Если бы все было так просто..
Сканеры то что-то находят но ничего не разжимается.. И шифрования нет..Вроде
 

Edison007

Ветеран
Модератор
ХЗ, где именно внутри текстуры, но на глаз в хекс-редакторе видно, что часть данных не сжата.
Пропустил через lolz (274 -> 167 MB):
Код:
o1 model                 : 94'283 kb <---
raw graphic model 8 bit  : 31 kb
raw graphic model 32 bit : 38'680 kb
dxt1 model               : 675 kb
dxt3 model               : 6'454 kb
dxt5 model               : 13'081 kb
o1 model pos mod 2       : 14'971 kb
o1 model pos mod 4       : 106'827 kb
o1 model pos mod 8       : 2'187 kb
o1 model pos mod 16      : 3'422 kb
total size               : 280'615 kb
Выделенное может и стоит поковырять, но это не точно, что сжатые данные, может какие lossy или что-то подобно :)
 

Edison007

Ветеран
Модератор
Хотя, строка "alz4" наталкивает на то, что какое-то сжатие всё-таки используется (скорее всего даже это LZ4), тем более после него идут 2 32битных числа похожих на сжатый и разжатый размеры
 

dixen18

Ветеран
@Edison007,
Возможно неудачный в плане разбора сэмпл залил)
ArtTerrainTextures5.bar https://drive.google.com/file/d/1ii8YnantbYvHoFZlOI8k5iF-VDlmuYi2/view?usp=sharing
внутри находятся файлы *.ddt которые при распаковке через Resource Manager конвертируются в PNG и TGA с общим размером аж до 11 гб.
И да в папке с Resource Manager лежит дллка K4os.Compression.LZ4.dll

Прогнал я вышеназванный файл через lolz и вот что он выдал

o1 model : 665'555 kb
dxt1 model : 9'506 kb
dxt5 model : 2'341 kb
o1 model pos mod 2 : 102'935 kb
o1 model pos mod 4 : 11'257 kb
o1 model pos mod 8 : 13'661 kb
o1 model pos mod 16 : 1'668 kb
total size : 806'928 kb

decode mem usage per thread = 248mb

100%
Errorlevel=0

Compressed 1 file, 960,557,080 => 704,790,158 bytes. Ratio 73.37%
Compression time: cpu 0.56 sec/real 366.16 sec = 0%. Speed 2.62 mB/s
All OK
 

Edison007

Ветеран
Модератор
То, что конвертится в ТГА в больший размер не проблема, если текстуры там DXT (это lossy формат).
На досуге гляну, че там с LZ. Сроков никаких не обещаю, сейчас очень загруженный график
 

Edison007

Ветеран
Модератор
Собственно, что это LZ4 - точно. Из контейнера Art.bar, взял блок со смещения 0xE8010 размером 921 байт, прогнал через функцию декомпрессии и получил файл на 4268 байт, всё, как в заголовке. Распакованный файл вполне годный :) Прикрепилю эти файлы. Но проблема подобрать функцию сжатия, ибо версий LZ4 с разными функциями сжатия дофига
 

Вложения

Edison007

Ветеран
Модератор
Breaking news!
Взял первую попавшуюся версию LZ4 и параметры и попал в bit-perfect перепаковку. По крайней мере на дампе из поста выше. Есть с чем работать :)
 

Edison007

Ветеран
Модератор
Завалился я на диван, думая, что надо писать парсер-дампер-декомпрессию... А это чет так лень, и вдруг вспомнил про quickbms. Освежив память, накатал скрипт, который дампит и разжимает потоки, также на коленке сделал сжималку (чисто для теста на bit-perfect пережатие). К слову, первая попавшаяся версия LZ4 не подошла, но найти нужную проблемой не оказалось :)
Что мы собственно имеем, файл ArtTerrainTextures5.bar
Код:
Сдампленные потоки           - 914 МБ (959 149 963 байт)
Разжатые потоки           - 1,71 ГБ (1 837 924 072 байт)
lzma:d128m                   - 686 МБ (719 423 011 байт)
декомпрессия+lzma:d128m      - 576 МБ (604 995 574 байт)
декомпрессия+razor:d128m     - 556 МБ (583 854 055 байт)
декомпрессия+lolz:d128m:ldl5 - 477 МБ (500 470 822 байт)
Код:
thread 0 : w/o manager mem_usage = 29940 kb,  manager mem_usage = 26121 kb
alloc mem = 32768 kb,  stat compr_size = 36236
matches num = 13253,  additional mem overhead = 2779 kb

o1 model                 : 164 kb
raw graphic model 32 bit : 15 kb
dxt1 model               : 730'201 kb
dxt3 model               : 13'705 kb
dxt5 model               : 1'004'531 kb
o1 model pos mod 2       : 10 kb
o1 model pos mod 4       : 140 kb
o1 model pos mod 8       : 34'211 kb
o1 model pos mod 16      : 11'876 kb
total size               : 1'794'858 kb

total decode mem usage = 156mb
 

dixen18

Ветеран
@Edison007, Тот скрипт что лежит на сайте BMS он наверное для старой версии игры((
А можно потестировать ваш скрипт? И заодно попробую создать файл-базу для разжатия XTool'ом
 

Edison007

Ветеран
Модератор
ХЗ че там за скрипт, не видел)
Там нечего тестить, он ничего не распаковывает, а только дампит. Че за файл-база для хтул?
 

dixen18

Ветеран
@Edison007, Есть такая тулза от Разора bms2xtl она при помощи скрипта QuickBMS создает специальный файл в котором записаны данные о файлах, алгоритмах сжатия и тд
Я с ее помощью сделал базу для MK11 и с ней игровые файлы разжимаются немного быстрее (порядка ~20 mb). Напомню что в игре используется самый дикий OODLE - LZNA.

FileForums - View Single Post - XTool 2020 (Database Maker)
 
Последнее редактирование:

Edison007

Ветеран
Модератор
Почитал, всё равно не до конца понял как оно работает, нужно смотреть на практике. Но можно написать плагин к хтул (в принципе уже сделал - в стадии тестирования) с xtool+LZMA жмётся в 581 МБ (609 732 252 байт), вроде сойдет, завтра lolz попробую.

Распаковывает вроде нормально. Время восстановления [1,71 ГБ (1 839 386 328 байт) -> 916 МБ (960 557 080 байт)] ArtTerrainTextures5.bar при t=6 ~ 70 sec, на i7-4700MQ , возможно можно улучшить если покрутить опции компилятора, тоже в ближайшие пару дней займусь.
 

Edison007

Ветеран
Модератор
Код:
xtool+lzma:d128m:lc8:lp4:pb4 - 548 МБ (575 087 010 байт)
xtool+lolz:d128m:ldl5        - 493 МБ (517 244 859 байт)
Немного хуже, чем с разжатыми блоками, однако это нормально :)
Код:
thread 0 : w/o manager mem_usage = 29983 kb,  manager mem_usage = 26131 kb
alloc mem = 32768 kb,  stat compr_size = 42203
matches num = 14041,  additional mem overhead = 2833 kb

o1 model                 : 10'762 kb
dxt1 model               : 738'633 kb
dxt3 model               : 13'557 kb
dxt5 model               : 987'813 kb
o1 model pos mod 2       : 5'031 kb
o1 model pos mod 4       : 3'202 kb
o1 model pos mod 8       : 18'513 kb
o1 model pos mod 16      : 18'760 kb
total size               : 1'796'275 kb

total decode mem usage = 159mb
 

Edison007

Ветеран
Модератор
Ну и собственно сам плагин для xtool (тестировался только на одном файле), оптимизаций по скорости не делал, выкладываю как есть т.к ХЗ, когда теперь время будет :)
 

Вложения

dixen18

Ветеран
Отличная работа) Находит и разжимает все найденные потоки

Compressed 1 file, 2,731,168,138 => 4,353,079,277 bytes. Ratio 159.39%
Compression time: cpu 2.31 sec/real 49.54 sec = 5%. Speed 55.13 mB/s
All OK
Tested 1 file, 4,353,079,277 => 2,731,168,138 bytes. Ratio 159.39%
Testing time: cpu 1.14 sec/real 45.56 sec = 3%. Speed 59.95 mB/s
All OK
 

Edison007

Ветеран
Модератор
Ну на самом деле не все, на том же ArtTerrainTextures5.bar xtool выдаёт:
Streams: 1172/1172
Time: 00:00:20 (00:03:30)
Memory: 519 MB (519 MB)

Хотя реально там 1189 потоков :)
 

Edison007

Ветеран
Модератор
Только сейчас заметил, что использовал не тот батник для компиляции. Заодно поднастроил всякие параметры, получил нехилый буст в скорости восстановления.
Код:
decode time

xtool decode -t1 "bar" "unp
plugin_v0  ~ 100 sec
plugin_v1  ~  36 sec

i7-10750H, SSD
 

Вложения

Mr-r00t

Новичок
Буст на современных компонентах упаковки/распаковки именно то, ради чего на них стоит переходить ;)
 
Сверху