UNPKG

sc-compression

Version:

Compress and decompress Supercell games assets

58 lines (48 loc) 2.34 kB
# 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 Buffer - `signature` <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. - 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 ```js 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