diff --git a/package-lock.json b/package-lock.json index b926a86..1b8881c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tfvpktool", - "version": "0.1.2", + "version": "0.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "tfvpktool", - "version": "0.1.2", + "version": "0.2.0", "hasInstallScript": true, "license": "ISC", "devDependencies": { diff --git a/package.json b/package.json index ba25c32..157e750 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "tfvpktool", - "version": "0.1.2", + "version": "0.2.0", "description": "", "main": "dist/index.js", "scripts": { "postinstall": "cd src && node-gyp configure build", "cli": "ts-node cli_test.ts", - "compile": "tsc && xcopy /Y src\\build\\Release\\lzham.node dist\\build\\Release\\ && xcopy /Y LICENSE.md dist\\", + "compile": "tsc && xcopy /Y .\\src\\build\\Release\\lzham.node dist\\build\\Release\\ && xcopy /Y .\\LICENSE.md dist\\", "watch": "tsc -w", "start": "ts-node ." }, diff --git a/src/reader.ts b/src/reader.ts index 22bd80b..0a87ba1 100644 --- a/src/reader.ts +++ b/src/reader.ts @@ -13,14 +13,15 @@ class CopyWorker extends EventEmitter { vpkPath: string; - constructor(vpkPath: string) { + constructor(vpkPath: string, patchWav: boolean = true) { super(); this.vpkPath = vpkPath; this.self = new Worker(__dirname+'/worker.js', { workerData: { - vpkPath + vpkPath, + patchWav } }); this.self.on("message", (msg: any) => { this.emit("message", msg) }) @@ -49,19 +50,21 @@ export class VPKCopy extends EventEmitter { files: string[] = []; fileCount: number = 0; threads: number; + patchWav: boolean; mode: VPKCopyMode = VPKCopyMode.NONE; taskResolve: Function | null = null; - constructor(vpkPath: string, threads: number = 8) { + constructor(vpkPath: string, threads: number = 8, patchWav: boolean = true) { super(); this.vpkPath = vpkPath; this.threads = threads; + this.patchWav = patchWav; this.workers = []; for(let i = 0; i < threads; i++) { - let worker = new CopyWorker(vpkPath); + let worker = new CopyWorker(vpkPath, patchWav); worker.on("message", (msg: any) => { this.handleWorkerMsg(i, msg) }) this.workers.push(worker); } diff --git a/src/vpk.ts b/src/vpk.ts index 2f10fe4..f792b72 100644 --- a/src/vpk.ts +++ b/src/vpk.ts @@ -267,7 +267,7 @@ export class VPK { .then(() => { this.readHandles = {} }) } - async readFile(path: string): Promise { + async readFile(path: string, patchWav: boolean = true): Promise { if(!this.isValid()) throw new Error('VPK isn\'t valid') @@ -336,7 +336,7 @@ export class VPK { } // Add wav headers - if(path.endsWith('.wav') && camEntry) { + if(patchWav && path.endsWith('.wav') && camEntry) { let checksum = file.subarray(4, 12); let firstByteIdx = 12; @@ -379,7 +379,7 @@ export class VPK { file = Buffer.concat([wavHeader, file]); - } else if (crc32(file) !== entry.crc) { + } else if (!path.endsWith('.wav') && crc32(file) !== entry.crc) { throw new Error('CRC does not match'); } diff --git a/src/worker.ts b/src/worker.ts index 2820b29..db506b5 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -12,7 +12,7 @@ parentPort.on("message", async (msg: any) => { } else { if(msg.task == "copyFile") { const { file, destination } = msg; - const data = await vpk.readFile(file) + const data = await vpk.readFile(file, workerData.patchWav) await fs.mkdir(destination.substring(0,destination.lastIndexOf("/")+1), { recursive: true }); await fs.writeFile(destination, data); parentPort.postMessage({ type: 1 });