sc-compression
v2.1.0
Published
Compress and decompress Supercell games assets
Downloads
24
Maintainers
Readme
Sc Compression
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.
Install
npm install sc-compression
API Reference
decompress(buffer)
Decompress a file buffer.
buffer
<Buffer> A compressed file that was read into a Node.js Buffer- Returns: <Promise<Buffer>> A decompressed file buffer that can be written to disk
compress(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 ansig
file with a valid hash, so attempting to load ansig
file in an unpatched game client will crash.- Returns: <Promise<Buffer>> A compressed file buffer that can be written to disk
readSignature(buffer)
Read a compressed file signature.
buffer
<Buffer> A compressed file that was read into a Node.js Buffer- Returns: <string> The file signature
Example
import { 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.
Step by step guide for non-developers
- Make sure you have Node.js installed (https://nodejs.org/en/)
- Run
npm install -g sc-compression
in a terminal - Download examples/decompress.mjs from this repository
- Run
node decompress.mjs
in a terminal