patchwork-mapconverter
Version:
Executable wrapper for https://github.com/ChiefOfGxBxL/WC3MapTranslator
61 lines • 5.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.jsonToWar = jsonToWar;
exports.warToJson = warToJson;
const LoggerFactory_1 = require("../../logging/LoggerFactory");
const HexBuffer_1 = require("../HexBuffer");
const W3Buffer_1 = require("../W3Buffer");
const Asset_1 = require("../data/Asset");
const log = LoggerFactory_1.LoggerFactory.createLogger('AssetsTranslator');
function jsonToWar(imports, formatVersion) {
if (formatVersion > 1 || formatVersion < 0) {
throw new Error(`Unknown imports list file format version=${formatVersion}, expected 0 or 1`);
}
const output = new HexBuffer_1.HexBuffer();
output.addInt(formatVersion);
output.addInt(imports.length);
imports?.forEach((importedFile) => {
/**
* 0x10 -> unknown (always true since 1.30, probably)
* 0x08 -> listed in MPQ listfile? Likely not since in reforged the difference between standard and custom is 0x15 and 0x1D
* 0x04 -> isCustom (preferred bitflag)
* 0x02 -> unknown (always false)
* 0x01 -> isCustom
*
* The above is my interpretation of debug symbols, but in reality, these flags are a mess in the editor,
* due to the devs changing the saved flag values with certain patches without actually bothering to update the format version,
* therefore, patchwork will play it safe only set the first bit and forget the rest, since they mean nothing outside of the editor's
* inner machniations which are difficult to understand -.-
*
* Other settings in Asset Manager just add/remove prefixes to the existing filepath like _hd/ or _teen/ or _locale/,
* they have no impact on this bitmap (except for forcing custom asset type because of non-standard filepath)
*/
output.addByte(importedFile.type === Asset_1.AssetType.Custom ? 0x01 : 0x00);
// Temporary: always start the file path with war3mapImported\ until other file support is added
if (!importedFile.path.startsWith('war3mapImported\\') && importedFile.type === Asset_1.AssetType.Standard) {
importedFile.path = `war3mapImported\\${importedFile.path}`;
}
output.addString(importedFile.path);
});
return output.getBuffer();
}
function warToJson(buffer) {
const input = new W3Buffer_1.W3Buffer(buffer);
const formatVersion = input.readInt();
if (formatVersion > 1 || formatVersion < 0) {
log.warn(`Unknown asset file format version=${formatVersion}, expected 0 or 1, will attempt reading...`);
}
else {
log.info(`Asset format version is ${formatVersion}.`);
}
const importCount = input.readInt();
const result = [];
for (let i = 0; i < importCount; i++) {
result[i] = {
type: input.readByte() & 0x01 ? Asset_1.AssetType.Custom : Asset_1.AssetType.Standard,
path: input.readString() // e.g. "war3mapImported\mysound.wav"
};
}
return [result, formatVersion];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXNzZXRzVHJhbnNsYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93YzNtYXB0cmFuc2xhdG9yL3RyYW5zbGF0b3JzL0Fzc2V0c1RyYW5zbGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSw4QkFrQ0M7QUFFRCw4QkFtQkM7QUEvREQsK0RBQTJEO0FBRTNELDRDQUF3QztBQUN4QywwQ0FBc0M7QUFDdEMseUNBQXFEO0FBRXJELE1BQU0sR0FBRyxHQUFHLDZCQUFhLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUE7QUFFMUQsU0FBZ0IsU0FBUyxDQUFFLE9BQWdCLEVBQUUsYUFBcUI7SUFDaEUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxhQUFhLG1CQUFtQixDQUFDLENBQUE7SUFDL0YsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVMsRUFBRSxDQUFBO0lBQzlCLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0IsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1FBQ2hDOzs7Ozs7Ozs7Ozs7OztXQWNHO1FBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLGlCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRXBFLGdHQUFnRztRQUNoRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLGlCQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkcsWUFBWSxDQUFDLElBQUksR0FBRyxvQkFBb0IsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzdELENBQUM7UUFDRCxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyQyxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO0FBQzNCLENBQUM7QUFFRCxTQUFnQixTQUFTLENBQUUsTUFBYztJQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLG1CQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDbEMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ3JDLElBQUksYUFBYSxHQUFHLENBQUMsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0MsR0FBRyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsYUFBYSw0Q0FBNEMsQ0FBQyxDQUFBO0lBQzFHLENBQUM7U0FBTSxDQUFDO1FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ25DLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQTtJQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHO1lBQ1YsSUFBSSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBUyxDQUFDLFFBQVE7WUFDckUsSUFBSSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxxQ0FBcUM7U0FDL0QsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0FBQ2hDLENBQUMifQ==