Comparing version 1.2.0 to 1.2.1
@@ -29,18 +29,18 @@ "use strict"; | ||
function uncompress(buf) { | ||
var d = new Uint8Array(buf); | ||
var res = new Uint8Array(0x4000); | ||
var inp = new Uint8Array(buf); | ||
var out = new Uint8Array(0x4000); | ||
var rp = 0; | ||
var wp = 0; | ||
var magic = String.fromCharCode(d[0], d[1], d[2]); | ||
var magic = String.fromCharCode(inp[0], inp[1], inp[2]); | ||
if (magic != "MGS") { | ||
throw new Error("Not a MGS object."); | ||
} | ||
while (rp < d.byteLength) { | ||
if (d[rp++] === 0) | ||
while (rp < inp.byteLength) { | ||
if (inp[rp++] === 0) | ||
break; | ||
} | ||
if (rp === d.byteLength) { | ||
if (rp === inp.byteLength) { | ||
throw new Error("Not a MGS object."); | ||
} | ||
var settings = d[rp++]; | ||
var settings = inp[rp++]; | ||
if ((settings & 0x80) === 0) { | ||
@@ -50,3 +50,3 @@ throw new Error("Not a compressed object."); | ||
wp = rp; | ||
var dataSize = (d[rp + 1] << 8) | d[rp]; | ||
var dataSize = (inp[rp + 1] << 8) | inp[rp]; | ||
// this function don't see data size. msgdrv use data size to stack | ||
@@ -56,6 +56,7 @@ // MGS data from the bottom of the memory page. | ||
for (var i = 0; i < rp; i++) { | ||
res[i] = d[i]; | ||
out[i] = inp[i]; | ||
} | ||
res[3] = "3".charCodeAt(0); // fix MGSAxx -> MGS3xx | ||
res[rp - 3] &= 0x7f; // drop compressions flag. | ||
out[3] = "3".charCodeAt(0); // fix MGSAxx -> MGS3xx | ||
out[rp - 3] &= 0x7f; // drop compressions flag. | ||
/* the compression format seems to be similar to LZEXE's method, also as known as [lze](http://gorry.haun.org/pw/?lze). */ | ||
var _B = 1; | ||
@@ -69,3 +70,3 @@ var _C = 0; | ||
_B = 8; | ||
_C = d[rp++]; | ||
_C = inp[rp++]; | ||
} | ||
@@ -78,3 +79,3 @@ return ret; | ||
// 1 | ||
res[wp++] = d[rp++]; | ||
out[wp++] = inp[rp++]; | ||
} | ||
@@ -85,9 +86,7 @@ else { | ||
// 01 | ||
var ll = d[rp++]; | ||
var hh = d[rp++]; | ||
if (0x20 <= hh) { | ||
size = hh >> 5; | ||
} | ||
else { | ||
size = d[rp++]; | ||
var ll = inp[rp++]; | ||
var hh = inp[rp++]; | ||
size = hh >> 5; | ||
if (size == 0) { | ||
size = inp[rp++]; | ||
if (size === 0) | ||
@@ -101,3 +100,3 @@ break; | ||
size = (readInfoBit() << 1) | readInfoBit(); | ||
var ll = d[rp++]; | ||
var ll = inp[rp++]; | ||
var hh = 0xff; | ||
@@ -107,3 +106,3 @@ offset = _Uint16ToInt16((hh << 8) | ll); | ||
for (var i = 0; i < size + 2; i++) { | ||
res[wp] = res[wp + offset]; | ||
out[wp] = out[wp + offset]; | ||
wp++; | ||
@@ -113,4 +112,4 @@ } | ||
} | ||
return res.buffer.slice(res.byteOffset, res.byteOffset + wp); | ||
return out.buffer.slice(out.byteOffset, out.byteOffset + wp); | ||
} | ||
exports.uncompress = uncompress; |
{ | ||
"name": "mgsrc-js", | ||
"version": "1.2.0", | ||
"version": "1.2.1", | ||
"description": "Decompiler for MGSDRV object.", | ||
@@ -5,0 +5,0 @@ "main": "dist/index.js", |
38682
1169