From 5d5ee042a1f78905cbcb10c31c133b3f26bd2d1e Mon Sep 17 00:00:00 2001 From: d07riv Date: Mon, 26 Aug 2019 02:45:00 +0300 Subject: [PATCH] mpq compress v2 --- package-lock.json | 2 +- package.json | 2 +- src/mpqcmp/MpqCmp.jscc | 9 +- src/mpqcmp/MpqCmp.wasm | Bin 244866 -> 156977 bytes src/mpqcmp/compress.js | 204 +++++++++++++++++++++++++++++++++++- src/mpqcmp/index.js | 4 +- src/mpqcmp/mpqcmp.worker.js | 78 +++----------- 7 files changed, 224 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f7e9f0..384309a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "diabloweb", - "version": "1.0.37", + "version": "1.0.39", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e9ae3f8..17257b0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "diabloweb", - "version": "1.0.37", + "version": "1.0.39", "private": true, "dependencies": { "@babel/core": "7.4.3", diff --git a/src/mpqcmp/MpqCmp.jscc b/src/mpqcmp/MpqCmp.jscc index b48a5e7..205b0f1 100644 --- a/src/mpqcmp/MpqCmp.jscc +++ b/src/mpqcmp/MpqCmp.jscc @@ -1160,7 +1160,7 @@ try { } var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; -var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 536870912; +var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 134217728; if (TOTAL_MEMORY < TOTAL_STACK) err('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); // Initialize the runtime's memory @@ -1697,7 +1697,7 @@ function _put_file_size(size){ self.DApi.put_file_size(size); } STATIC_BASE = GLOBAL_BASE; -STATICTOP = STATIC_BASE + 113200; +STATICTOP = STATIC_BASE + 28880; /* global initializers */ __ATINIT__.push(); @@ -1706,7 +1706,7 @@ STATICTOP = STATIC_BASE + 113200; -var STATIC_BUMP = 113200; +var STATIC_BUMP = 28880; Module["STATIC_BASE"] = STATIC_BASE; Module["STATIC_BUMP"] = STATIC_BUMP; @@ -2112,7 +2112,8 @@ var asm =Module["asm"]// EMSCRIPTEN_END_ASM (Module.asmGlobalArg, Module.asmLibraryArg, buffer); Module["asm"] = asm; -var _DApi_MpqCmp = Module["_DApi_MpqCmp"] = function() { return Module["asm"]["_DApi_MpqCmp"].apply(null, arguments) }; +var _DApi_Alloc = Module["_DApi_Alloc"] = function() { return Module["asm"]["_DApi_Alloc"].apply(null, arguments) }; +var _DApi_Compress = Module["_DApi_Compress"] = function() { return Module["asm"]["_DApi_Compress"].apply(null, arguments) }; var ___cxa_can_catch = Module["___cxa_can_catch"] = function() { return Module["asm"]["___cxa_can_catch"].apply(null, arguments) }; var ___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = function() { return Module["asm"]["___cxa_is_pointer_type"].apply(null, arguments) }; var ___em_js__do_error = Module["___em_js__do_error"] = function() { return Module["asm"]["___em_js__do_error"].apply(null, arguments) }; diff --git a/src/mpqcmp/MpqCmp.wasm b/src/mpqcmp/MpqCmp.wasm index a1b8386f0c35fc8f90aeb1cc805579a83dbe8f22..728bf37b5359dc67da0dbf41643d6e423ba2c246 100644 GIT binary patch delta 25859 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

*ted_fAb!=P6_< z%NP>he~y)qMfH`BzejuA-viv=`O$~}M2Bf;&)(RZQa(rLWS(H4KFX7!46|aSL3Fw} z`lvDvmphs9Jr~ySPoEdbGtgn2qkcY-KP<-IT;h?3?ZBORCOjw%B^&&o8^-~w*m@j? z=-uhl=l(>ibEkS=WqcG%TN-nt$!jo>S<#Sd!7Jw-hx^Urs%cR7la6y`^XRy^aeRE7 znaMqzcXjYvhrv z?9_9rd1-~6bMBVDp>F=}FTT)TDOu3q&T}1{L*r;0>x$yAEF+l#=-T&~4PagXWeuSI5fBC=s)KC4?Z^@;gA|-n6=D+#6f3y7y zALF^->HNx1{&z?IrJnoSKQVc5|IvS?!=JDh;`cc`!~f-+d<$K;@Zb(7o5;Wk^DT`16gjcU^LusMIn=cMt@7CmZ2W1k*A&WBQiR4Sg=#Qx)msdAz zo6kaaSKZOdBpdxvjzswMm-A{e+Ah9HW(r-K=L@4x=kfas`QS#OPd<7)pLD9FHST~$ zk-?xJ+(7d8V!Vw$qdPKZ^R-Acv8&YW5X>7~L%U#~+^1Exf4*Acl$5Z1GY+Dj)4G`4{l{>Re!V+PgL;S>d!to=XY|ygD=qUj2X;`+8LuAz^HoA-{IhM z3~&Ev`(W^^iOf4#REO3@Dj-BQ`fM)M6l{ee^6CsvKfvE?^ia>`GfNRCYYXl(YEL6F(ItZpH(EN|`wQYT@ zRgxTIsVOjK;sq-&_3kk-`in=e?3m841e|ICwN8ULgnpGHAaSpceiIMzyYj3!R6o(3 zd1CY%jMwiX=6px(kY{;|@US9(LTHyxHOD1S+v}ZcdnmrkZ6?`xdZ5_vbaOSqc2KC( zG(m~F>%@>MVzUR82&TcOTQmoa4+i_{{>LOV{U7~0y%!F$AawBenEgU65+~DFEq6h= z=;{8AozbSqT9&Ero9C-sqI>I(0Xq6@8j9iQ+|OTE?59gF5*aZLJ`kN{|02c2Vt3-m z^Wd?6p3^sd;}z{;206|*xcZS? zqjK6y768ZH!nl}IZ9|co^*11l)U+V}W1W0n0$UEvL;;5BJn3ePQZ?A;Bacn~>zHv8 z8b#v{1d8baFftavkukmsE!JauI_*3|)#0j?MbiaE(A2!ya4+b_KcH#Qjen^2B1$Rs z^Xh!Res0KK1UL!$CZePX(~G(S3$GwbXVYt!8VKg6A(#bB3Qx}wDAijd$w|9k_K4q_ zdS?}lrTPip*#=p}e@5fwBFhn804?J!#eFn2N`}+aC_&c;Vy!%&;=(XW9SXhTQvX1z0e74`wRPHOCJ^%G{2rK$$Xs5y!#FPe(7xaVTv?ewcxsQNg3Dnd)F1(vB}~ z;z6%#=U_7vN;3fF2e1sPDPBDo%w^SAKQ%Yl0k2AOjf3vm=-*Ogf@`DyC+DAE&IgNn zfa_0(Or@d04UPqleigoLxQu=maU*R&17-9w)j|=_ubgy;kZiOStg$+=Hn^|I`xnNb zm>Iwdk;csESQ3e4AK}!pJOFamA{^@`?7r|u(C{ptqGAl84(c5M3N}p zu^u;0x(p=d0D-ZXHDGD%(nx2%!W07ojm5gYz5tC2j(y(l3xNKjAjjuK^MWCD-_PHW zKfp zkR4;l9d--ggsipG%1vR{G`uBCbG1R6u>`Od0OkwfI!ma6Qf1I(TIMp&a3h_c!Tb

?Sx27e2|ppj9V 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 diff --git a/src/mpqcmp/compress.js b/src/mpqcmp/compress.js index 9f602a6..f1c6fa9 100644 --- a/src/mpqcmp/compress.js +++ b/src/mpqcmp/compress.js @@ -1,27 +1,221 @@ import Worker from './mpqcmp.worker.js'; +import MpqBinary from './MpqCmp.wasm'; +import ListFile from './ListFile.txt'; +import axios from 'axios'; -export default function compress(mpq, progress) { - progress("Loading..."); +import { decrypt, encrypt, hash, path_name } from '../api/savefile'; + +const MpqSize = 156977; +const ListSize = 75542; + +const readFile = (file, progress) => new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => { + if (progress) { + progress({loaded: file.size}); + } + resolve(reader.result); + }; + reader.onerror = () => reject(reader.error); + reader.onabort = () => reject(); + if (progress) { + reader.addEventListener("progress", progress); + } + reader.readAsArrayBuffer(file); +}); + +async function loadFile(url, progress, responseType='arraybuffer') { + const binary = await axios.request({ + url, + responseType, + onDownloadProgress: progress, + }); + return binary.data; +} + +function runWorker(data, transfer, progress) { return new Promise((resolve, reject) => { try { const worker = new Worker(); worker.addEventListener("message", ({data}) => { switch (data.action) { case "result": - resolve(data.result); + resolve({buffer: data.buffer, blocks: data.blocks}); break; case "error": reject({message: data.error, stack: data.stack}); break; case "progress": - progress(data.text, data.loaded, data.total); + progress(data.value); break; default: } }); - worker.postMessage({action: "run", mpq}); + worker.postMessage({action: "run", ...data}, transfer); } catch (e) { reject(e); } }); } + +export default async function compress(mpq, progress) { + progress("Loading..."); + const files = []; + function updateProgress() { + progress("Loading...", files.reduce((sum, {loaded, weight}) => sum + loaded * weight, 0), + files.reduce((sum, {total, weight}) => sum + total * weight, 0)); + } + const loader = file => e => { file.loaded = e.loaded; updateProgress(); }; + + const fHeader = {loaded: 0, weight: 1, total: mpq.size}; + fHeader.ready = readFile(mpq.slice(0, 32), loader(fHeader)); + files.push(fHeader); + + const fBinary = {loaded: 0, weight: 5, total: MpqSize}; + fBinary.ready = loadFile(MpqBinary, loader(fBinary)); + files.push(fBinary); + + const fList = {loaded: 0, weight: 5, total: ListSize}; + fList.ready = loadFile(ListFile, loader(fList), 'text'); + files.push(fList); + + const header = new Uint32Array(await fHeader.ready); + const header16 = new Uint16Array(header.buffer); + + if (header[0] !== 0x1A51504D) { + throw Error('invalid MPQ file'); + } + + const blockSize = 1 << (9 + header16[7]); + const hashTablePos = header[4]; + const blockTablePos = header[5]; + const hashTableSize = header[6]; + const blockTableSize = header[7]; + if (hashTablePos + hashTableSize * 16 > mpq.size || blockTablePos + blockTableSize * 16 > mpq.size) { + throw Error('invalid MPQ file'); + } + + const fHashTable = {loaded: 0, weight: 1, total: hashTableSize * 16}; + const fBlockTable = {loaded: 0, weight: 1, total: blockTableSize * 16}; + fHeader.total -= fHashTable.total + fBlockTable.total; + fHashTable.ready = readFile(mpq.slice(hashTablePos, hashTablePos + fHashTable.total), loader(fHashTable)); + fBlockTable.ready = readFile(mpq.slice(blockTablePos, blockTablePos + fBlockTable.total), loader(fBlockTable)); + files.push(fHashTable, fBlockTable); + + const hashTable = new Uint32Array(await fHashTable.ready); + const blockTable = new Uint32Array(await fBlockTable.ready); + decrypt(hashTable, hash("(hash table)", 3)); + decrypt(blockTable, hash("(block table)", 3)); + + const list = (await fList.ready).split("\n").map(name => name.trim()).filter(name => name.length); + const listMap = {}; + const hashStr = (h1, h2) => h1.toString(16).padStart(8, '0') + h2.toString(16).padStart(8, '0'); + for (let name of list) { + listMap[hashStr(hash(name, 1), hash(name, 2))] = name; + } + + const NUM_TASKS = 4; + const tasks = []; + for (let i = 0; i < NUM_TASKS; ++i) { + tasks.push({ + entries: [], + min: mpq.size, + max: 0, + progress: 0, + }); + } + + for (let i = 0; i < hashTable.length / 4; ++i) { + const index = hashTable[i * 4 + 3]; + if (index === 0xFFFFFFFF || index === 0xFFFFFFFE) { + continue; + } + const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])]; + if (!name) { + hashTable[i * 4 + 3] = 0xFFFFFFFE; + continue; + } + + const filePos = blockTable[index * 4]; + const cSize = blockTable[index * 4 + 1]; + + const task = tasks[Math.floor(filePos * NUM_TASKS / mpq.size)]; + task.entries.push(i); + task.min = Math.min(task.min, filePos); + task.max = Math.max(task.max, filePos + cSize); + } + + const numFiles = tasks.reduce((sum, task) => sum + task.entries.length, 0); + + fHeader.total = 32; + for (let task of tasks) { + if (task.min < task.max) { + const fLoad = {loaded: 0, weight: 1, total: task.max - task.min}; + task.ready = readFile(mpq.slice(task.min, task.max), loader(fLoad)).then(data => task.data = data); + files.push(fLoad); + } + } + + await Promise.all(tasks.map(t => t.ready).filter(Boolean)); + const binary = await fBinary.ready; + + progress("Processing..."); + + for (let task of tasks) { + if (task.data) { + const input = new Uint32Array(task.entries.length * 6); + task.entries.forEach((i, pos) => { + const index = hashTable[i * 4 + 3]; + const name = listMap[hashStr(hashTable[i * 4], hashTable[i * 4 + 1])]; + input[pos * 6] = blockTable[index * 4]; + input[pos * 6 + 1] = blockTable[index * 4 + 1]; + input[pos * 6 + 2] = blockTable[index * 4 + 2]; + input[pos * 6 + 3] = blockTable[index * 4 + 3]; + input[pos * 6 + 4] = hash(path_name(name), 3); + input[pos * 6 + 5] = name.match(/\.wav$/i) ? 1 : 0; + }); + task.run = runWorker({binary, mpq: task.data, input, offset: task.min, blockSize}, [task.data, input.buffer], value => { + task.progress = value; + const sum = tasks.reduce((sum, task) => sum + task.progress, 0); + progress("Processing...", sum, numFiles); + }).then(res => task.result = res); + } + } + + await Promise.all(tasks.map(t => t.run).filter(Boolean)); + + let outputPos = 32 + fHashTable.total + fBlockTable.total; + const outputSize = tasks.reduce((sum, {result}) => sum + (result ? result.buffer.byteLength : 0), outputPos); + const output = [header.buffer, hashTable.buffer, blockTable.buffer]; + + blockTable.fill(0); + let blockPos = 0; + for (let task of tasks) { + if (task.result) { + const {buffer, blocks} = task.result; + for (let pos = 0; pos < task.entries.length; ++pos) { + const i = task.entries[pos]; + hashTable[i * 4 + 3] = blockPos + pos; + blocks[pos * 4] += outputPos; + } + blockTable.set(blocks, blockPos * 4); + blockPos += task.entries.length; + output.push(buffer); + outputPos += buffer.byteLength; + } + } + + header[1] = 32; + header[2] = outputSize; + header16[6] = 1; + header16[7] = 7; + header[4] = 32; + header[5] = 32 + hashTable.length * 4; + header[6] = hashTable.length / 4; + header[7] = blockTable.length / 4; + + encrypt(hashTable, hash("(hash table)", 3)); + encrypt(blockTable, hash("(block table)", 3)); + + return new Blob(output, {type: 'binary/octet-stream'}); +} diff --git a/src/mpqcmp/index.js b/src/mpqcmp/index.js index bce78d8..a58fdf7 100644 --- a/src/mpqcmp/index.js +++ b/src/mpqcmp/index.js @@ -14,8 +14,8 @@ export default class CompressMpq extends React.Component { onProgress(progress) { this.setState({progress}); } - onDone = result => { - const blob = new Blob([result], {type: 'binary/octet-stream'}); + onDone = blob => { + //const blob = new Blob([result], {type: 'binary/octet-stream'}); const url = URL.createObjectURL(blob); this.setState({url}); diff --git a/src/mpqcmp/mpqcmp.worker.js b/src/mpqcmp/mpqcmp.worker.js index 6852f74..0d6b0b5 100644 --- a/src/mpqcmp/mpqcmp.worker.js +++ b/src/mpqcmp/mpqcmp.worker.js @@ -1,17 +1,14 @@ -import MpqBinary from './MpqCmp.wasm'; import MpqModule from './MpqCmp.jscc'; -import axios from 'axios'; - -const MpqSize = 356747; /* eslint-disable-next-line no-restricted-globals */ const worker = self; let input_file = null; +let input_offset = 0; let output_file = null; let last_progress = 0; -function progress(text, loaded, total) { - worker.postMessage({action: "progress", text, loaded, total}); +function progress(value) { + worker.postMessage({action: "progress", value}); } const DApi = { @@ -20,10 +17,9 @@ const DApi = { }, get_file_contents(array, offset) { - array.set(input_file.subarray(offset, offset + array.byteLength)); + array.set(input_file.subarray(offset - input_offset, offset - input_offset + array.byteLength)); }, put_file_size(size) { - debugger; output_file = new Uint8Array(size); }, put_file_contents(array, offset) { @@ -32,7 +28,7 @@ const DApi = { progress(done, total) { if (done === total || performance.now() > last_progress + 100) { - progress("Processing...", done, total); + progress(done); last_progress = performance.now(); } }, @@ -40,70 +36,28 @@ const DApi = { worker.DApi = DApi; -let wasm = null; - -const readFile = (file, progress) => new Promise((resolve, reject) => { - const reader = new FileReader(); - reader.onload = () => { - if (progress) { - progress({loaded: file.size}); - } - resolve(reader.result); - }; - reader.onerror = () => reject(reader.error); - reader.onabort = () => reject(); - if (progress) { - reader.addEventListener("progress", progress); - } - reader.readAsArrayBuffer(file); -}); - -async function initWasm(progress) { - const binary = await axios.request({ - url: MpqBinary, - responseType: 'arraybuffer', - onDownloadProgress: progress, - }); - const result = await MpqModule({ - wasmBinary: binary.data, - }).ready; - progress({loaded: MpqSize}); - return result; -} - -async function run(mpq) { - progress("Loading..."); - let mpqLoaded = 0, mpqTotal = (mpq ? mpq.size : 0), wasmLoaded = 0, wasmTotal = MpqSize; - const wasmWeight = 5; - function updateProgress() { - progress("Loading...", mpqLoaded + wasmLoaded * wasmWeight, mpqTotal + wasmTotal * wasmWeight); - } - const loadWasm = initWasm(e => { - wasmLoaded = Math.min(e.loaded, wasmTotal); - updateProgress(); - }); - let loadMpq = mpq ? readFile(mpq, e => { - mpqLoaded = e.loaded; - updateProgress(); - }) : Promise.resolve(null); - [wasm, mpq] = await Promise.all([loadWasm, loadMpq]); +async function run({binary, mpq, input, offset, blockSize}) { + const wasm = await MpqModule({wasmBinary: binary}).ready; input_file = new Uint8Array(mpq); + input_offset = offset; - progress("Processing..."); + const count = input.length / 6; + const ptr = wasm._DApi_Alloc(input.byteLength); + wasm.HEAPU32.set(input, ptr >> 2); - wasm._DApi_MpqCmp(input_file.length); + const dst = wasm._DApi_Compress(offset + input_file.length, blockSize, count, ptr) >> 2; - return output_file.buffer; + return [output_file.buffer, wasm.HEAPU32.slice(dst , dst + count * 4)]; } worker.addEventListener("message", ({data}) => { switch (data.action) { case "run": - run(data.mpq).then( - result => worker.postMessage({action: "result", result}, [result]), + run(data).then( + ([buffer, blocks]) => worker.postMessage({action: "result", buffer, blocks}, [buffer, blocks.buffer]), err => worker.postMessage({action: "error", error: err.toString(), stack: err.stack})); break; default: } -}); \ No newline at end of file +});