Открыть DDS файл игры

Новичок
Статус
Оффлайн
Регистрация
23 Ноя 2023
Сообщения
1
Реакции[?]
0
Поинты[?]
0
Пытаюсь открыть текстуры и скрипты игры Gardenscapes (Playrix)

Сжатие 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;
}
Приложил оригинальную dds и без сжатия, так-же там lua скрипты, но у них сжатие убрать не удалось

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

Пожалуйста, авторизуйтесь для просмотра ссылки.


Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Сверху Снизу