-
Автор темы
- #1
Пытаюсь открыть текстуры и скрипты игры Gardenscapes (Playrix)
Сжатие ZSTD, убрал его и получил странную .dds, перерыл весь интернет так и не нашел чем открыть
код:
Приложил оригинальную dds и без сжатия, так-же там lua скрипты, но у них сжатие убрать не удалось
Ссылки с форумов по этой же игре, но скрипты там не рабочие уже:
Сжатие ZSTD, убрал его и получил странную .dds, перерыл весь интернет так и не нашел чем открыть
код:
C:
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <zstd.h>
typedef struct {
char BLKSign[4];
uint32_t Unknown0x4;
uint32_t Unknown0x8;
uint32_t UncompressedSize;
char DDSSign[4];
uint32_t DDSHeaderSize;
uint16_t DDSFlags;
uint16_t DDSHeight;
uint16_t DDSWidth;
uint16_t Unknown1;
uint32_t DataStartOffset;
uint32_t FileSize;
} HEADER;
int main() {
// gcc convert.c -o test.exe -Izstd\include -Lzstd\dll -lzstd
FILE *file = fopen("C:\\backup\\Gardenscapes\\Match3Background.dds", "rb");
if (!file) {
perror("Не удалось открыть файл");
return 1;
}
HEADER hdr;
fread(&hdr, sizeof(HEADER), 1, file);
if (strncmp(hdr.BLKSign, "BLK", 3) != 0 || strncmp(hdr.DDSSign, "DDS ", 4) != 0) {
printf("Файл не соответствует формату BLK/DDS.\n");
fclose(file);
return 1;
}
fseek(file, hdr.DataStartOffset, SEEK_SET);
char *ZstdCompressedBlock = (char *)malloc(hdr.FileSize - hdr.DataStartOffset);
fread(ZstdCompressedBlock, hdr.FileSize - hdr.DataStartOffset, 1, file);
fclose(file);
// Распаковываем данные с использованием Zstandard
size_t uncompressedSize = ZSTD_getDecompressedSize(ZstdCompressedBlock, hdr.FileSize - hdr.DataStartOffset);
char *uncompressedData = (char *)malloc(uncompressedSize);
size_t result = ZSTD_decompress(uncompressedData, uncompressedSize, ZstdCompressedBlock, hdr.FileSize - hdr.DataStartOffset);
if (ZSTD_isError(result)) {
printf("Ошибка при распаковке данных: %s\n", ZSTD_getErrorName(result));
free(ZstdCompressedBlock);
free(uncompressedData);
return 1;
}
// Сохраняем распакованные данные в новый файл
FILE *outputFile = fopen("RESULT.dds", "wb");
if (!outputFile) {
perror("Не удалось создать файл для записи");
free(ZstdCompressedBlock);
free(uncompressedData);
return 1;
}
fwrite(uncompressedData, uncompressedSize, 1, outputFile);
fclose(outputFile);
printf("Done\n");
free(ZstdCompressedBlock);
free(uncompressedData);
return 0;
}
Ссылки с форумов по этой же игре, но скрипты там не рабочие уже:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.