Skip to content

Latest commit

 

History

History
57 lines (48 loc) · 2.23 KB

README.md

File metadata and controls

57 lines (48 loc) · 2.23 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

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