This module is intended to compress and decompress Supercell assets.
It supports the following signatures:
signature | description | decompression | compression |
---|---|---|---|
none |
non-compressed file | ✔️ | ✔️ |
lzma |
starts with bytes 0x5d0000 | ✔️ | ✔️ |
sc |
starts with "SC" | ✔️ | ✔️ |
sclz |
starts with "SC" and contains "SCLZ" | ✔️ | ✔️ |
sig |
starts with "Sig:" | ✔️ | ✔️ 🚩 |
sc2 |
starts with "SC" and contains "START" | ✔️ | |
zstd |
contains 0x28b52ffd | ✔️ |
The module automatically infers the right signature when decompress
is called.
npm install sc-compression
decompress(buffer)
Decompress a file buffer.
buffer
<Buffer> A compressed file that was read into a Node.js Buffercompress(buffer, signature)
Compress a file buffer.
buffer
<Buffer> A file that was read into a Node.js Buffersignature
<string> 'lzma'
, 'sc'
, 'sclz'
or 'sig'
. It is impossible to recompress an sig
file with a valid hash, so attempting to load an sig
file in an unpatched game client will crash.readSignature(buffer)
Read a compressed file signature.
buffer
<Buffer> A compressed file that was read into a Node.js Bufferimport { readdir, readFile, writeFile } from 'node:fs/promises';
import { resolve } from 'node:path';
import { decompress } from 'sc-compression';
const files = await readdir('coc-13.0.4/logic');
for (const file of files) {
const filepath = resolve(directory, file);
const buffer = await readFile(filepath);
const decompressed = await decompress(buffer);
await writeFile(filepath, decompressed);
}
See tests for additional implementation examples.
npm install -g sc-compression
in a terminalnode decompress.mjs
in a terminal